I have been *cranking* on fixing bugs, adding features, and tweaking what’s already there. I’m slowly working towards creating a first game with the framework. It’s been at the point where I can add this or that gameplay feature and try it out.

I think the biggest remaining annoyance for me is that the framework isn’t robust enough to handle diverse ground types beyond planes. I’d love to see that graduate so I can use the framework for any ground or terrain type. That means minor surgery to target acquisition, object avoidance for AI.

Well here are some teaser pics grabbed from my iPhone tonight

Many monsters

Good iPhone frame rate

I haven’t been paying attention and didn’t realize the newer iOS devices support normal maps and such via Shiva. So I was quite excited when I ran my latest framework changes on the iPad Mini and saw that it was performing really well. I like to see 30fps ideally in an iOS 3D game, and even 15 now and then will be passable. So lots of 40-60 with blips in the 20s when many AI were running around. This is on the master client also where all the logic is running. The connected clients run a bit more consistently. So I’m starting to become very hopeful about this project’s viability in the mobile marketplace!

Now the framework is getting to a point of great stability with all existing features, it’s time to begin adding gameplay elements next. Now for a few pics from the Mini!

I finally bit the bullet and moved myself out of the home office and into a nearby office space. On October 1st we had a new addition to the family, little Jack Young was born :) This is the event I had been waiting for most of the year, and once he was settled both my wife and I knew it would be beneficial for me to log in some hours outside the home.. it’s sometimes too easy to not get things done at home.

As you may know from reading posts, I have a long history of stops and starts on projects, and it’s a recurring frustration. I always learn something new and that’s great, but it doesn’t help support one’s family very well. So with the need to focus comes the need to make some quick decisions on project viability and get something cooking.

The first couple of days here in the studio were spent setting everything up, getting Internet going and getting our new server online. This summer we bought a massively powerful server we plan on using for web development to ease the cost of the cloud, and I thought it’s a great place to install MySQL and the Shiva Server as well. Today I happily discovered that you don’t need to configure each instance of Shiva Server with a project ID, previously I was installing separate instances for each multiplayer game. This makes life easier in development, though in production I very well would want to have specific instances with their own logging.

Shiva is still something I plan on using. Although I’m pressing myself to learn more Unity, I am much more fluent in Shiva and I would like to publish something within the next few months. It’s a wonderful game development engine, and it may not have all the bells and whistles Unity 3D has but it gets done what I need to. More importantly, I know how to do everything I currently would like to do with it.

My first steps in getting the gears going again are to create an online persistence AIModel which I can use to create user accounts and character persistence in any game. I’m also making it in mind to put it on the upcoming Shiva Store, if one is not there already when the store goes live.

Until next time!

It’s been well over a year since I posted anything. I’ve been busy in business startup mode and with life in general. This summer I’ve been inching closer to game dev again, to the point I was actually pro/conning Shiva and Unity to pick tech for my next project. I believe I’ve settled on Shiva, and will list the reasons some other time. For now, tonight I’ve just stumbled on a simple theory to solve a problem… I need a server app to control logic for many connected clients, in different game areas. Normally I’d use a Master Client setup, but I need the server to be authoritative for ecommerce reasons. I realized tonight how to do it… Instead of running one server per game area (session), I will have all clients live in the same game session. This way my server(s) can control arbitrary areas of logic. Instead of sending network messages to all users, I’ll filter by logical game area. Extra advantage… global chat/logic! This is something you just don’t normally get with a session-based design, as sessions are also built-in filters for which users you send/receive from.

 

I hope to have some time soon to implement this and see how it works.

4 Week Interlude!

Last week I was doing my usual perusing of the Twitter feed when I came across this update:

http://twitter.com/#!/S0phieH/status/60644300224077824

ok, so starting today I am working on my#1MonthGame, it will be finished on the 18th of may, and released shortly after, wish me luck :) 

This grabbed my attention, as I needed to jumpstart my game *creation* again. After spending a couple of months on my multiplayer framework, I had a few game ideas for it but found myself procrastinating on actual development.  So I decided to do ‘join’ her in assigning a 4 week deadline to a new game, from scratch. We both used a #1MonthGame hashtag, so next thing you know, 2 others decided to do it too. She made a website for people to post their blogs (1 post a day) called 1MonthGame.com, and more projects joined up. You can join at any time, and give yourself a 4 week deadline from the day you post your project idea. The projects should be from scratch if you can swing it, though it’s not a *rule*. Actually, it’s not a competition, just a peer accountability deadline structure.

It’s neat because it forces you to focus on the small, playable, fun parts of a game. My idea, Monster Meadow, is based off some very simple game mechanics involving attracting critters and monsters, and I am making it for my 3 year old daughter to play on the iPad.  The name of the ‘bad guy’ monsters is Gullygog. This is a word my 1 year old boy says, we don’t really know what it means ;)  I am doing the artwork myself when possible, and I am horrible at art so the shapes will be simple. It’s a simple kind of simulation and interaction game, and of a kind I’ve never tried before.

So I ‘ll be posting over on the 1MonthGame blog for the next 4 weeks :) This will help me get back into the game creation portion of development and stop focusing on tech so much, and allow me to move forward with my main projects.

http://www.1monthgame.com/blog/?tag=monstermeadow

This will save you some major pain.

About a year ago to the day I wrestled with the Facebook API and Shiva. I got something partially working, but it was broken beyond belief in IE. This is because I was relying too heavily on Javascript to do things, and couldn’t safely call Javascript functions from within Shiva when IE was involved.

So every few months I went back to http://developers.facebook.com, grabbed the latest php SDK from github, and tried things out. A pattern emerged. I could usually get a little of the way there (enough to make me feel like continuing) but never enough to work on all the browsers I wanted without breaking.

This time I tried something different! After trying and failing again many times in rapid succession today, I was ready to throw in the towel. But I tried something a little subtler, and then expanded on it. When I got into trouble, I scoured the web for similar solutions I could build on. In particular, I found a nice class structure here: http://johnklingelhoets.com/facebook-api-graph-oauth-class/

I used a good part of this for the wall post and user info stuff.

So.. without further ado, I present to you the Facebook/Shiva Sample Integration. Click to Download the Files

It’s very basic. It will get you authenticated, grab the user’s Facebook info for use inside Shiva (even their profile pic), and give you a way to post to their wall from the app. It uses all php and no Javascript for the Facebook portions. Basically, index.php authenticates the user and asks for certain permissions using the new OAuth format. When permission is granted, the flow returns to this page, and the signed result is stored in a cookie. Control is then passed to the Shiva application page. From within, Shiva makes a call to get the Facebook User Information to fbfunctions.php. It looks at the cookie and uses the token in it to make a call to the Facebook Graph API to grab all the user information we’re interested in. An XML blob is built and sent back to Shiva.

If you hit the wall post button, a simple text message is urlencoded and sent to the fbfunctions.php. You can add a lot more to this, and also use an XML block with lots more data for variety. Please look at http://developers.facebook.com and the Graph API links within to see what else you can do, I can’t help you in that area.

One of the trickiest parts is setting up the new application.

If you go to http://www.facebook.com/developers/ you will probably see a blog post, and on the right hand side is a button which says ‘Set Up New App’. Click it. If you can’t find it, try this link instead: http://www.facebook.com/developers/createapp.php

There are many settings. I pick the defaults for the most part.

At a minimum, you will need two settings in here:

  • Facebook Integration->Canvas Page (this is where your app can be found on Facebook)
  • Facebook Integration->Canvas URL (this is the full path to your application on your own web server, ie http://mywebsite.com/mygame/fb/)

People get hung up on the canvas url. There are lots of different ways to do things. Facebook requires this url to end with a /

I usually put all my Facebook files in an /fb subfolder with no other subfolders, so I have the main folders to do website stuff with.

So, in my web structure I have:

http://mywebsite.com/mygame/fb

and in that folder are ALL of the files included in the zip file. Facebook is going to be looking for index.php (the default file for the path). I’m not sure if the cert file is needed, I included it anyway.

This should contain:

  • index.php (the initial file. Modify this and add your App ID and canvas URL from the Facebook Application Setup)
  • gamepage.php (this is really just a basic .html file, but I made it a php file to help it not be cached. It is the normal Shiva web player page)
  • fbfunctions.php (this is called from within Shiva, and passed an op parameter to decide what to do. Results are in xml)
  • fbclass.php (this is included in fbfunctions.php and has functions for wall posting and other cool things. Not written by me)

You will need to include the FacebookAPI.ste in your Shiva project and change the base site URL in onInit (you’ll get a message about it)

After that, feel free to check out the code. You’ll notice I am not using any of the official Facebook API or SDK stuff from GitHub, feel free to add to this implementation. I am going to be staying away from anything involving lightboxes myself, but be warned that if you want those little boxes to pop up over your Shiva game for things like inviting friends, you’re in for a whole separate ballgame.

I won’t be able to help you too much with problems, everyone’s setup is different and I am NOT a web coder :)

OK, ladies and gents. Here is the code drop. There are a great many things to document in here, but tonight you are getting just the code, because it’s 1:45AM and it’s been a busy weekend!

I promised myself I would begin game design tonight, so I don’t have the chance to create docs yet. Go over the xml files thoroughly. I’ve given you the power to make something incredible here, and there aren’t many bugs in it.

Keep in mind that everything model/data related is driven via the xml files, beginning with DataFiles.xml.

The initial data file location is specified in: RPGData.GetXMLFileList_onEnter

You will also need to set your own server IP/Port in: Network_Connection.onInit

RPGDemo-FullCodeDrop-v1 (315KB)

Usage: You have permission to use this as-is in projects, but not to sell the code. It took me months to get it to this point, don’t steal my work and pass it off as your own in this way. I’d appreciate a shout-out for any error fixes/improvements or just to let me know if you use it to make a game :)

The entire size of the Engine right now is around 350KB. It loads its data at runtime as needed, based on the XML settings.

Feel free to drop by the IRC Chat with questions. I will send up some documentation as I can.

Quick feature list:

  • Full XML Data System
  • External asset streaming
  • Loading HUD system
  • Game Lobby
  • Password Protected Game Hosting
  • XML Based Entity Definition
  • Basic AI Player
  • Targetting
  • Target Information System
  • Multiplayer
  • Lag Smoothing
  • Chat System
  • Chat Commands
  • Server Menu
  • XML Based Menu System
  • Server Object Creation
  • Raycast-Based Combat
  • Server-Based Rules Lawyering
  • Networked Object Template
  • Jumping/Charged Jumping
  • Orbiting/Zooming Player Camera
  • Slow/Fast/Speed Adjustment
  • Flying
  • Click-Based Spawning
  • Auto-Server Swapping
  • Shadows/Fake Shadows
  • Platform Detection
  • Configurable Object Network Affinity
  • Configurable Spawners
  • Scene Changing/Portalling
  • Networked Dynamic Field Manipulation
  • Equipping
  • Weapon Mounting

Have fun! You have permission to use this as-is, but not to sell the code to anyone. I’d appreciate a shout-out for any error fixes/improvements or just to let me know if you use it to make a game :)

Tonight’s major goal was to go to bed early. That… and to do weapon equipping! I could cheat a little bit because I have done this before and had a perfectly working shape mounting and mount node function from CastleGuard2. But setting up some data for the items, deciding how to pass it around efficiently, and assigning a weapon to myself by default was much trickier.

Here’s a little video of how it all worked out tonight.

Item Equipping Complete! (Basic version)

I am starting on weapons tonight, and I really wanted to test out the data loading system I kicked this whole project off with. So I devised a quick test for the data caching.

I added a <sources> block to my entities file, added a few named remote data sources that contain models/textures, and let er rip. This makes my framework itself around 360kb as a web plugin, and the art of course caches when it downloads.

Here’s what happened!

Check out the latest dev videos from the dev cave! I’ve been doing lots of late nights over the last week, borne out of passion and pure drive. Got to strike while the iron is hot!

I’ve given myself a deadline of this Sunday night to have the framework stable enough to be able to begin working on a game project with it. There’s still a ton to do. Before I begin the game project, I will do a quick wrap-up of the codebase as it is then and give it a once-over for new functionality. I may have some time to draw up some short documentation, but it’s not bloody likely right now. I can definitely ‘freeze’ the codebase so that I can go back to it and do more documentation and pattern cleansing after I’ve sent out a game.

So, without further ado, here are my recent vids since the last update.  Oldest first.

3/1 Gremlins. A first test of swapping out the player model and creating an AI entity with it

3/2 iPad Test. A test of the framework on the iPad (I try to do this once a week or so), recorded on the iPhone. Bad quality, but the point is clear

3/4 Server Commands. An XML menu framework for performing commands on the server out of a GUI

3/5 Gremlin Overdose. Using spawners to make a whole ton of critters

3/5 Monster Attack Range Test. The beginnings of intelligence

3/6 Portal/Zoning Test. I love this stuff!

3/7 Chat Tweaks. Also, I pull a monster and he decides to go burrowing ;)

3/7 AI Zerg Test. I wonder how many AI I can run in the web player? I find out.. plenty!

© 2011 Life of a Game Designer Suffusion theme by Sayontan Sinha