21/07/2008

The Making of my First Game - A mini Post-Mortem

Overview of the project
Developping the first version of HyperSpace Shooter was a 4 months process in all. Not too bad considering I did it all by myself. The point of doing this particular project was, first and foremost, to get into a game project I could actually finish all by myself in a reasonable amount of time, which is something I wanted to do for several years now. The second goal was to learn ActionScript 3.0, the new coding language of Adobe Flash. I'm very happy that I released this first version but I know that it is only a first step. Here is how it went.



Starting the project
The first month was mostly spent doing the design while I was still teaching in University. I started off with a design involving a complex, living system underlying the action mechanics of the game but after doing some prototyping, I soon killed it off as it was starting to seem like a bigger project than I had first intended. I'm not giving up on the idea but for my first game I decided I was better off doing something as simple as possible. So I put my focus on doing a game in a known genre and do it well.

Defining the style
Right from the start I knew I wanted something pretty that would not scare, say, my girlfriend away. Space shooters are either totally dark and metallic or full of cute faces and flowers, so I decided to go with a casual, simple yet personal style with nice, plain colors. Again, the important word here is “simple”. I could not afford the time required to build a very elaborate graphical style so I kept with mostly flat colors and simple animation effects for the ships. The player's ship looks nice when it moves around and that's the most important part. A good side effect of the style is that it kept the weight of the game low. The whole game weights 2,4 megabytes, and in this, there is 2,3 megs of sound and music, so that's pretty low in graphics.

Freedom
Working alone, I had all the freedom to play around with my ideas and nobody above my shoulder telling me what I should be doing. Having worked in a corporate game environment where I had my hands tied all the time for almost three years, this freedom was really appreciated. The final product really is my own vision and I can pride myself with actually having done a whole game all by myself. Working alone has it's downside though; I could not share much of my ideas and I could not receive much feedbacks on my work either.

Organizing my time
I am on a free summer schedule from the end of april until the end of august, which gives me about 4 months of free time so I seemed to have plenty of time to invest in my game. I did waste a lot of time, mostly in the beginning of the project, fooling around and doing anything but working, but then I eventually rolled up my sleeves and worked full weeks. I didn't had any precise time plan but I knew I wanted to finish the work before the end of July. I made simple to do lists once in a while to keep me focused but I mostly did the work on a per need basis. The most time consuming aspect of production was the coding, which required heavy time investment from beginning to end. Graphics and animations were done very quickly, sketching some ship shapes on the corner of the table and reproducing them in vectors pretty quickly. I kept the shapes simple and easy to manipulate and most of the ships don't even have any aimations. I spent about a week doing the music and the sound effects, which was probably the part of the project I most enjoyed.

Keeping the motivation
It was not always easy to keep going all by myself. There is always a part in an art production where you actually feel like you'll never do anything good and it's always dangerous to drop out at this point. I myself have a long history of beginning several projects and never finishing them but this time I was really determined to finish something. The further I got in the project, the more time I was ready to concede to it because I felt I had crossed a point of no return. As the end of the project approached, the motivation gradually went up and in the end I was striving on an angry determination to finish and release it.

Learning ActionScript 3.0
I was getting fairly good with AS2 before Adobe got out the new AS3 language but making the switch between the two is not actually easy. I had to learn it though since I am going to teach it this fall so the project was a very good way to get myself into it. This alone was a fairly good motivation to keep going. I did learn a lot and while I probably didn't use all “good practices”, I kept learning new tricks until the very end of the project. I worked with XML, external .swf (a system I changed in the end for internal graphics instead), inheritance and composition classes, sounds and all kind of events. Doing a game is great way to explore all the aspect of a coding language and I feel very confident with it now. Coding another game will probably take half the time it took me now.

Doing the music
Like I said, the music was the part I most enjoyed. It came as a surprise to me since, while I did some music for fun in the past, I'm not a very good musician and never really explored the possibility of becoming one professionally or anything. The first song I did came out nicely though it might be a little bit too light and joyful (as was already commented by various players) but that's what I actually wanted. The second one (playing in the 4th, 8th, 9th and 10th levels) is the one I'm really proud of. Before and while doing it I listened to a lot of midi samples from Final Fantasy II and III as well as various Megaman games to get into the video game feeling I wanted. I mostly inspired myself from the Final Fantasy's battle music, which thaught me to make intense punches and reminders of the first song (in FFIII, the main melody of Kefka's song is integrated into the final battle's song against him). It took me about one full day for each of the two original songs (1 minute 30 each) and I feel that I could do yet better songs in the future.

Balancing the game
Balancing a game is hard but I expected it and prepared my code for easy balancing. I could not play test my game with a lot of players. In fact, I mostly tested myself for bugs and I made my girlfriend play 2 or 3 times to see how it was going. She kept telling me that the game was too hard and I knew that it is something that often happens when the developper is the only tester of his own game, so I got the difficulty lower for the first levels. As soon as the game was posted on Kongregate, the most common comment was how easy it is. I quickly rescripted the first levels to make them more interesting but I'm still unsure if the balance is good or not for all the levels.

What really helped though was the way I built the script engine. There is a delay between the appearance of every ship or wave of ships that can be easily modified through the tweaking of a single variable so I could play with this and see how the levels were going depending on the setting. This is actually the base of the five difficulty levels in the game. While other parameters are changing, like the maximum health of the player's ship and of the enemy ships, the most drastic change is this particular delay. So from one difficulty setting to an other, the levels are the same, they are just playing at different speed. I play tested it myself to see if I had something interesting and I could beat the “very hard” setting with a lot of difficulties so I figured it was nice. If someone ever complete the “insane” level, make sure to contact me. I want to know about that. :)

Player's comments
I only posted the game three days ago as of now and already got a lot of comments, mostly from Kongregate's players. Even though they are not particularly positive, I was really surprised by how constructive they were. When releasing the game I was feeling a bit anguished by the possible feedbacks and was afraid of being bashed on. Coming out with an art piece, exposing ourself to a public and critic view, is always difficult in that regard and brings forth a lot of stress, but in the end it was not that bad. While I was not very pleased with the average 2.5 out of 5 stars rating (I invested a lot of time and efforts in it), when looking back at it, I know that's probably what it deserves. Most comments were about the same major flaws (mostly that it is too easy and repetitive), others were more precise about the expectation of the players and allowed me to make easy changes right the day after I had posted the game (for example the stacking shields, which I had the code for but ended up turning off for some reason during the project).

Conclusion
In the end, I'm just very happy that I got a project out and it is, in itself, a good motivation to keep going in that path. I'm not sure I will get any money from it, but I don't really care since really few resources were invested in the first place. I had a lot of fun doing it and got out with more confidence and experience. Doing a game is something I wanted to do for a long time so I reached my objectives in that matter. I know my next game (or next version of the game) will be much better!

1 comment:

Anonymous said...

Nice write up. Just wanted to drop you a line that the best book for teaching AS3 is Learning ActionScript 3.0 by Rich Shupe and Zevan Rosser. The only audience this isn't applicable for is very advanced AS2 users who might be better served by a reference book. But for beginner and intermediate users, it's awesome.