So Seasonal Gift Giving Day has come and gone, and left in its wake utter and total destruction. Homes are ruined for miles in each direction and feral children walk the streets moaning "Wii. Wii. Wii. Wii." in quest for their electronics devices. As long as I can survive against their ravenous attacks, I will post about my struggles with independent game development.
Novarunner
Some pretty big improvements; I now have stuff bubbling up through the main loop and onto my screen (starfield) and will be putting the skybox and other models back in soon. After that, it's hooking the controls up to a player, and then locking the camera to that player to get back in the game. I'm confident that I'll have something really nice by the end of the week.
I've also added a bunch of flavour text to the game in preparation for using them on the loading screens, one of the things I really loved about Bioware games.
Here is a screenshot showing off the star field and temporary hud (sort of):
After I get models rendering properly again, I should probably start working on my AI state modification/utility functions (rotateTowards, flyTowards, etc) and perhaps do some more YouTube videos and a Windows prototype.
Propane Injector
I've started laying out the "new" class diagram, and starting to rewrite the shader classes so that they make a lot more sense. One of the things I'm most excited about, again, is the material system -- no longer will I have issues where I accidentally leave the texture unit off and then go on to create inaccurate renderings full of pain and misery. Taking intelligence out of the development process is awesome.
I'm also working on getting the new PI up and running with Mono; I'll probably write a guide for using Mono on Linux and OS X, although redistributing OS X Mono applications kind of sucks right now because of the dependency on X11 and many third-party dynamic libraries, which are hard to make bundle-portable.
So I missed yesterday for talking about Novarunner, so I suspect you're all waiting for some new content. No screenshots, though, because I'm still fiddling with the message passing mechanisms and making sure everything is getting called in turn before implementing a lot of my stubs.
However, I do expect to get it up and running again, although probably all you'll see are the same screenshots as before, maybe with a sphere map or two added onto the other ships. I'm busy at the moment trying to convert the model rendering from dumb immediate-mode triangle rendering into an optimized form (using vertex lists or display lists).
I've also been working on my renderer; it wraps OpenGL quite well and provides some nice utilities for managing vertex buffer objects (falls back to display lists if they can't be provided) as well as the active matrix.
I'm probably going to start working on a simple example game for Propane Injector so I can show off to people how it works; the howto documentation that's there isn't exactly enlightening, and the Doxygen is a few months out of date at least. No idea what that game will be yet, but I'm sure I can work up some fan service.
Also, check out the Great Games Experiment. Glow is getting some not-bad exposure, and it's really fun poking around looking at other people's profiles, joining random groups and downloading games. I'll probably add Freezer 2 and CSRPG 2, but the rest of my game catalogue really isn't that great -- I should really get busting ass and write something smaller and quicker.
Finally, some Propane Injector news: I'm going to version 1.0, as I'm sure I've said before. It's going to add a ton of code and examples and improve the documentation. I hope someone will take it upon themselves to write a small game to use for propaganda purposes. Hint hint.
I'll probably post more about the progress of Novarunner in the morning. I've been busy hacking up the flow of data from place to place, and must remember to actually hook the game up at some point and get it running with graphics again.
Important capsule improvements since last entry:
Materials system. I added it to Propane Injector and then backported it to the game, so materials are in there and running (currently, basic texture, dot3 bump map, sphere map are usable).
Actors improvement. Meshes no longer contain any knowledge about their positioning, scaling, or rotation, and this data is all handled by the actor's view, which communicates with the renderer for the API-specifics. Should make it easier to batch geometry and deal with any problems that arise, though I have taken an indirection hit.
Messages. Input messages as well as global messages are properly communicated through the various queues to the top-level and player actors.
I must remember to check the global messages to ensure they are getting treated properly, but the 'quit' message seems to bubble up well.
Game modes are getting triggered properly, and are called directly. The Story Mode game mode is stubbed out.
I travelled many miles to inform you of this story. Look out!
Nobody said I had class.
So I have one final exam to go and then I'm free for the non-denominational winter holiday break.
I got second place in the graphics class for my ray-tracer, and would probably have gotten higher if I had bothered making my demo scene nicer.
Novarunner
I'm planning on actually getting Novarunner properly built so I can compile it again, and then spending a lot of time making a decent demo. Expect one very early in the new year.
Right now, it's broken because a lot of functions are missing (initialization, game main loop, etc). But once I get a chance to stub those out and connect them back together again, the game should start running properly and I'll be on my way to producing a proper game as opposed to the 1000+ line, single-file monster I was using to prototype things.
One of the things I'm really glad about is the immediate-mode GUI; it's based almost entirely on variable watchers so you don't have to explicitly write any HUD code in your game, just tell the HUD to "watch" a variable and it will figure out the best display method for it. This is probably better than Glow, in which I was setting flags all over to control the HUD code from the game code.
Propane Injector
I want to do a "proper" Propane Injector 1.0 release in the new year, so I've planned to release v1.0 near the end of January. Check out my roadmap here -- it'll become a much more fully featured game API as opposed to a bunch of semi-useful code thrown together because it looks like it's useful.
It'll have a bunch of examples (subdivision, mega demo, materials and shaders, and possibly an example game or two) and much better documentation on using the code under Windows and OS X. Right now I'm working on the materials demo, because I don't think the dot3 bump mapping code in Propane::Material::DOT3BumpMapTexture is working 100%.
Mono.Xna
I joined up with the Mono.Xna project under Rob Loach, and have already submitted a few patches here and there to help out with the stubbing process. Please follow our Todo page to see how far our class stubbing has proceeded, and how close we are to properly implementing the "Simple Example" from the XNA framework.
I'm learning a lot of C# during this project, and also quite a bit of knowledge about how XNA works to develop games with, which is almost definitely going into PI later on. Plus, I get more games for the Mac. Can't lose.
Stick Soldiers 3
Yes, it's still going on. We're making good advancements: Andrew has committed a new version of the level editor, and Cow is almost done with XML classes.
I'm going to be working on getting players running around, jumping, and shooting each other. The fun shit.
Thanks for reading this (unbelievably long, screenshot devoid) entry. I promise the next one will carry much more interesting news for YOU.
Here's Ravuya, to save you from the drudgery of your daily existence. All hail the Ravuya.
Novarunner
I write code. Not lots of code, since I have exams, but enough to get by. I've been working on the controller classes and my SWIG bindings for Lua. I really need to learn SWIG-script much better, because it seems to be unbelievably powerful although it generates this terrible, STL-internals-looking code and I don't like 'buying' code from outside, particularly when it's particularly procedural, which this certainly is.
Right now I'm debating how to implement item types; obviously I have several types of items (weapon slot, armour slot, power slot, shield slot, engine slot, resource/commodity, generic cargo). In Glow I just implemented methods like isWeapon() and then used that to figure out what happened when you right clicked the item (normally the Item would use its use() method, but Weapons override the use() method to shoot a bullet, so right clicking them really equips them). That was pretty messy, so I'm sort of wondering if there's a better way to explain "slot types" and the like without having to make a big mess.
In any event, progress is still going forward and I expect to get lots done after my exam; expect a demo or something so you can jump between systems, or at least a Youtube video post.
Other Gamedev Work
I'm working on a Quake3 level loader & renderer for Propane Injector, because the format seems very easy to work with. I don't think the latest version of GtkRadiant works properly on Intel OS X, but nonetheless I may just use Quake3 for my map format instead of my TWERP XML format.
School work
I finished my raytracer, and lots of people in the lecture liked it. Once I get my grade, I'll slap up some hot source so you guys can take a poke at it; there's a lot of little bugs I made.
Anyway, here's a screenshot from it (showing off my crappy MD2 loader and buggy surface normals): Clicky (640x480). Here's something that looks WAY better: unfiltered sphere textures.
I wish I didn't have so many assignments, otherwise the raytracer absolutely would have had proper shadows, vertex normals for triangles, texture filtration and anti-aliasing.
I've got two big assignments due today, so more later tonight after they're done.
Hooking up Lua to the engine internals; it's harder than it sounds. I think I'm doing it wrong.
Preparing a bunch of controller-level classes to take care of my domain level objects. It's also a lot of work, but once I get it ready workflow should be easier.
Starting on celestial body rendering. I should have some pretty pictures later but right now it's glutSolidSphere all the way.
System saving and ship population.
Tearing out my example code and starting with the proper design.
UI and HUD features; the menu will be pretty nice even compared to Glow's, I hope. And it'll support multiple resolutions including 16:10 and 16:9. I'm strongly tempted to run out to the store and pick up a nice Christmas HDTV to test this theory.
Classwork
My raytracing assignment is mostly "done". Once I hand in the assignment with the promo shots, I'll be sure to post the promo shots here so you can all point out the math errors I've made.
There's a lot more assignments to go, so I don't think I'll be sentient until after my finals. Feels good to make updates, though, so I'm sure I'll post about my tiny enhancements during breaks from my final studying periods.