Friday, February 1, 2013

One Game A Month - Asteroid Alan

Hey Readers,

So I mentioned at the end of my last post that I was going to give this One Game a Month thing a go as a sort of New Years resolution to complete more projects.

So here I sit at the end of the month with my first finished project, Asteroid Alan. I present you with a bit of a post mortem on the first project in this series.
 
Premise
 
It's a mash-up of Dig Dug and Asteroids. The idea is to maneouver your ship in behind the asteroids and latch on to mine gems and minerals from the mines. Once you latch on you tap the space bar and the asteroid blows up, leaving a bunch of gems floating to collect and splitting the asteroid into smaller pieces. You can also fire the latch at the asteroids from in front but it splits the asteroid immediately, doesn't leave any gems, and you don't get as many points so it's in your benefit to manouever behind the asteroid but still leaves you with options if there's an asteroid barreling down on you.
 
Plan of Attack
 
I knew immediately that this idea wasn't going to succeed without some kind of planning. I broke up my schedule into 4 weeks of 5 days since I only work on my projects while I'm on transit. I allocated 2 weeks for coding features, 1 week for art and sound, and 1 week for polish and bug fixing.
 
What Went Right
 
A whole lot went right. Having a schedule for all the pieces that needed to go into the game I knew exactly whether or not I was on track to finish. This helped me on a day by day basis by letting me know if I had the time to spend fleshing out a feature that extra little bit. I'm also really happy with how much this furthered my engine. I've now got the start of a great particle system as well as a basic approach to laying out post process effects. It's also a great feeling to actually finish a project from start to finish.  

What Went Wrong
 
Not a ton of things went wrong, I'm quite happy with the end result. However there were a few things I wish I had of gotten to. The first and most obvious being the lack of sound in the game. I managed to integrate sound playback into the engine but I didn't leave enough time to scour the internet for sound effects to put into the game. I think on the next go I'll do more research into sound, maybe try out some of those sound generation programs they have for generating 8-bit sounding effects.
Another thing that could have gone better is actually sticking closer to the schedule. While the schedule was great for helping me to keep track of where I was, after the second week I kind of started jumping around the schedule I had layed out. As a result my front end kind of fell to the wayside because rather than working on frontend when it was scheduled I just blocked in the flow and moved on to other tasks. This wasn't necessarily a bad thing though, I can't say for certain that I would have gotten everything going as well as it is if I had of dedicated more time to fleshing out the frontend.
One last thing that didn't necessarily go wrong but I hadn't accounted for were bugs in my engine. It's funny how many times you hear, "Make games, not engines." it's actually quite true. I had built this complex engine with a bunch of tech demos but when it came time to turn the chunks of code into a real game I ran into quite a few use cases that I just hadn't accounted for.

What Needs To Change
 
One thing that I really need to change is how I have my engine layed out. It's currently all in a single visual studio project along with all the source code for all my projects. I have a launcher menu that lets me select what game/tool I want to launch into. As I've been developing this has been great because it allows me to quickly jump between different projects, making sure I don't break anything along the way. This was annoying though when I was trying to get this game ready to release because I had to comment out a ton of the launcher stuff and a few other items that were slowing down the launch. It's also a real pain when I make a low level change because all of the source is in this one project and on my little netbook I can waste a whole commute just compiling.
Moving forward I think I'd like to separate out the engine into it's own library and move all my projects into their own project files. This should help with compile times since I'll only be building the code that I'm working on at that time. 

The Game
 
So I present to you, Asteroid Alan. I think the only requirements are DirectX 9 and a graphics card capable of shader model 3.0.
W for thrusters
A,D to maneouver left and right
Spacebar to fire latch