Icarus

I even went out and bought a book on Greek Mythology to help me better understand the nature of my game. I also imported the Japanese version of Ikaruga for my Dreamcast. This was essentially my design document. I tried to stay true to as many elements of it as possible—minus the whole 3D background thing going on, though it was considered in the initial phase.

The Tools

Coding

My choice of IDE was Apple’s Xcode. Once again, a wonderful environment to work in. And combined with my powerhouse of a Dual 2GHz G5, I was able to compile my source over and over again in mere seconds. This is great for fixing things up and recompiling.

Game Assets

I used Painter 8 to paint the background images, a most wonderful program. I also borrowed my dad’s graphics tablet. The first level is done entirely in charcoal except the water, which is oil painting. It is such a natural tool, almost as easy and a lot more powerful than traditional media. For those interested in what is to come next, I will touch up the ending of level one, and start doing level two entirely in thick oils.

Contrary to popular belief, all the entities in Icarus are in fact models. Most of them are 3D models and all of them are done in LightWave 7. While it is not the easiest tool in the world, once you get over the learning curve, it is amazing what you can do. Also, while using it for this project I learned a lot of new things you can do in it.

What Went Right

Leveraging Source Code

The project weighed in at 7,000 lines of base code. When thinking about my idea and what I wanted to do fresh off of Microbian: Fighter, I knew I wanted to do an Ikaruga clone, and since I couldn’t get a hand on Unity at that time, I knew I had HUGE stockpile of already done code. Basing off the Microbian: Fighter engine gave me the following things:

  • Robust collision detection
  • Completed physics
  • Advanced particle system
  • Color-based system (this actually stems all the way back to the BOB2 days)
  • Resource handling

Right from the start I didn’t have to worry about adding all those standard features needed in almost every game. I could focus on what needed to get done. Of course I was going from a universe type game to a vertical scroller. This allowed me to make many optimizations to speed things up. I also needed to get some solid texturing code in there, and that is where Holmes Futrell was a life saver. I borrowed his GLTexture class and this made it a cinch to load textures and apply them as needed. Overall, I got to work mostly on my content and less on just making it work.

Working with a Professional Musician

Miyaka Cochrane is a wonderful musician. His most notable music comes from Raptor — Air Superiority Fighter and Argonaut 2149. He also created over 20 minutes of music for Microbian: Fighter. I appreciate him very much for donating his musical talent to Icarus. He is also planning on doing two more songs specifically for Icarus after the contest is over.

High-quality 3D Models

I don’t know how Lee did all the models for Microbian: Fighter. Somehow he managed to color all those models using his little text-based applications. That blows my mind. I personally couldn’t do it—I’m a much more visual person. I like my GUIs and mouse so I added a vertex painting ability to my standard model viewing application, and with the click of a button, I was able to color my model in bright vivid colors with little to no effort. While the painter isn’t perfect, it was possibly the only way I could get any models done. Let this be a note: custom built tools are unmatched in productivity.

What Went Wrong

Distractions of the Ancients

I chose a lousy time to get addicted to a game. Roughly three days after I decided to enter uDevGames, my friend James introduced me to a new map/gameplay style in Warcraft 3 called Defense of the Ancient. This game ended up consuming 1-2 hours a night throughout the entire contest. In fact I was playing it right before I started writing this postmortem! Beware other developers: they will try to suck up your time with great games.

Poor Time Management

Not only was this newfound addiction taking up my time, I was also still in school. I was in a compiler class, which also required a good deal of programming. Writing multiple thousand line programs for different causes can really tear your brain in so many ways. There was much more stress than what is really healthy. Not only this, but I often fell into procrastination. I would postpone working on my compilers project until the last three days it was due, and this caused me to lose three solid days of work instead of only losing two hours a day over two weeks. Time management is something every developer needs to learn. All of this leads to the biggest thing that went wrong.

It was way too short!

The thing can be beaten in about 65 seconds if you are good. My original plan was for about three minutes of solid gameplay. The main reason this fell through was because I hand painted the levels. Offloading that work to an artist could have significantly reduced the workload. But as it was, I was painting the level, especially the town area, and just did not have the time to do good work and have a lengthy level done in three months. Not only did it take a long time to do my background in the style that I chose, I also found out that many gamers found this new style strange and not common in traditional games, so the graphics were not well accepted. I feel if I had more time, I could have provided more details and thus make it more liked.

Issues with Audio

The final explosion was nearly impossible to tune. In my design document, Ikaruga, the final boss exploding was supposed to bring the framerate to about 10fps. I found this near impossible to precisely gauge. Being on a G5 is a blessing and a curse for game developers.

The Future

In my ReadMe I made a promise to my fans that I would complete this game if I won a spot in uDevGames. Things that I will be adding include the nuclear homing special weapon, as per my design document, and another level or two, each between 4-5 minutes in length. Also, I plan on adding at least two more bad guys, one more boss, and of course, more patterns and evil chaining schemes. I will not be making this game shareware, because I feel by winning in uDevGames, I have received enough payment to continue releasing this game as freeware.

  • Developer: Brian Ramagli
  • Title Artist: Jill Hogno
  • Genre: Vertical Shoot’em-up
  • Site: www.hkasoftware.com
  • Team Size: 1
  • Release Date: November, 06, 2004
  • Project Length: 2 Months and 3 weeks
  • Development Hardware: Dual 2GHz G5 (1.5GB RAM, Radeon 9600)
  • Critical Applications: Xcode, Lightwave, Painter

Feathered Soccer

Project Aims

To avoid comparison with the big Pro Evolution Soccer or FIFA series, I wanted my game to be strongly arcade. I also wanted to develop a game that both a child and an adult could find fun to play.

Design

At the beginning the design was very poor. Of course, I produced a lot of ideas for the game, but I knew that developing even a simple soccer game in three months would be very hard for me. Consequently, I decided to first develop a simple game and then add additional features as time permitted. So I simply designed an objects tree, thinking of the C++ classes I would have used and keeping the game concept in my mind.

What Went Right

Math

Coding a 3D game usually requires a lot of math, trigonometry and physics formulas, and Feathered Soccer made no exception. Moving the ball realistically, moving characters, and checking collisions are some examples of where math is essential in this project. However, I love this subject, and when I started coding I had just completed a first year Computer Science course at college that included one physics and two math exams, so producing the needed formulas wasn’t a big problem.

Happy Coding

Even if I had to fight against some bad technical bugs during this project, they didn’t take much time to discover and fix. Their presence was due mainly to the little time I had to complete the project. Because of this, and of course because of being a big (and bad) programmer sloth, my code isn’t very good in regards to maintenance. However I had the code clear in my mind at every stage of the project, so I could fix the bugs with little pain.

Using Strong Tools and APIs

It could seem an obvious thing, but it’s not: choosing strong and proven tools like Xcode and strong and proven APIs like OpenGL and SDL really helped my development. You can of course use and be fascinated by a new tool, however it’s not a good thing if, having only three months to develop a game, you also have to beta-test the tools you use.

What Went Wrong

Artificial Intelligence

Well, I’m coding a soccer game and everything’s going fine, so where is the tricky part? That part is Artificial Intelligence (AI). It took me a long time to produce a not-so-stupid AI and I found the teammates’ AI expecially difficult. When the player controls a character, all the other characters of his team should move in a meaningful way. The first experiment I made resulted in very unintelligent AI. It was clear to me that I had underestimated the problem. So I spent a lot of time on this, thinking of a better solution, playing other soccer games and, at coding time, using a try-and-fix approach. In the end it seems that because of a fear of making AI that was too easy, I made AI that, according to user feedback, is too difficult. So the moral of the story is “In medio stat virtus,” as the Romans used to say, which means, “Virtue stands in the middle.”

Sound

I added sound at the end of the project, which means I had very little time to find and implement it. I was in trouble trying to find some good royalty-free sound effects and background music so I decided to buy a copy of iLife ’04 and produce my own music with GarageBand. Then I found some nice effects and bought them. There were also some problems from a technical point of view. I tried to use SDL_mixer to add sound, but for some reason, probably due mainly to me, I wasn’t successful in doing this in even a simple way. Because time was running out, I decided to go platform-specific for this contest and I encapsulated some Cocoa code into my C++. I found the Apple documentation on this topic very clear. Then I noticed that the game slowed down while playing a sound effect, so I modified my Cocoa code to be multithreaded. Finally everything worked and I am very proud of my encapsulated Cocoa code. I will, of course, have to change it if I decide to port the game to other platforms.

Fighting Against Time: Mid-Project Changes

One of the worst enemies in this project was time, so there are a lot of features I would like to add which are not present in the current (1.0) version of the game. Choosing what to implement and what leave for later versions was very hard. I tried to think of what is really necessary in an arcade 3D soccer game and what is not. I only wanted my game to be polished and fun to play, even if this would have meant the lack of some features. I list here some of the features I didn’t implement.

  • No bonuses — If you played the game, you may have noticed that tackles aren’t punished and that, even if the game has a strong arcade/cartoon inspiration, it hasn’t any kind of hyper-speed or other bonuses, which would have also changed the gameplay experience positively.
  • No two-player game
  • No configurable options
  • No replay
  • More teams and competitions

Of course this is only a small selection of the things I didn’t add because of time.

Risk Management

Choosing the API and the Game to Develop

Even though I had experience with 2D games, considering that I had never developed a 3D game before, choosing OpenGL as the main API was a brave decision and a big risk. However I really wanted to do something I would find fun and a 3D soccer game fit the bill. In real life, with a boss who wants a good game developed in three months, I would probably take another route.

Conclusion

One thing I learned from the development of this game is that I should pick a project that is possible for me to complete in the given time with less pain. However, it’s also important for a person to pick a project which he/she likes and enjoys developing. As a matter of fact, I also had a confirmation of human will power: I really wanted to have something playable for November 6th and I had it. If I could suggest something to a person who wants to conduct a big project I would say this: choose something you really like and trust yourself.

  • Critical applications: Xcode, GraphicConverter X, GarageBand, Cinema 4D CE, Art of Illusion, The Logo Creator 3
  • Development hardware: PowerBook G4 867MHz (384MB RAM)
  • Url: www.bluepixysw.com/
  • APIs: SDL 1.2.7, OpenGL, Cocoa (only for sound)
  • Project length: 3 months

Snowball

Snowball had a dual purpose. First, it was meant to be a successful entry in uDevGames 2004 in order to win recognition in a wider arena than just my peers. Second, it was meant as a proof of concept for an isometric engine for future game development. The intended customer for Snowball was the average voter attracted to uDevGames.

Details

Schedule

The scheduled development timeline included having a basic foundational engine in place by September 10th. This was to take advantage of a two-week break from my teaching job. After that I planned to begin beta testing and add features and stages weekly until November 6th. In reality, the basic engine wasn’t in place until October 19th, more than a month late.

Source Code

The source code consisted of 2,220 lines of code used from my previous projects and 10,138 new lines of code. In addition, the following libraries were utilized: SDL, SDL_mixer, OpenGL, libPNG, and zlib.

Compatibility

The finished application bundle is roughly 3.3MB in size and should be compatible with Apple computers running Mac OS X 10.0. It requires a video card with at least 8MB VRAM (like an ATI Rage 128) and a G3 500 MHz processor or better. The only known compatibility issues are with the Windows version of the game and have to do with resolution switching.

Tools

The primary development tool used was Apple’s Xcode 1.5. For the PC version, DevC++ 4.9.8 was used. Corel’s Painter 8.1 and Adobe’s Photoshop CS were used for creating content along with an Intuos 2 Wacom Tablet. Apple’s GarageBand was used for composing the music.

Credits

The writer of this postmortem, Aaron Sullivan, designed and programmed the game. Amy Sullivan, his wife, constructed the in-game stages and recorded sound effects. Sean Sullivan, his brother, composed the music.

Of note were contributions from outside this team including Eric Wing and Josh Abernathy, who helped test and fix an important bug in SDL involving mouse coordinates.

Carlos Camacho and the staff at iDevGames provided the contest under much duress and Snowball would not have been created without the motivation of this particular contest. Feedback from several members of iDevGames’ forum was also of great benefit as was feedback from family and friends and voters that took the time to reply by email.

What Went Right

Origin

Before uDevGames 2004, I contemplated creating a computer role-playing game (CRPG) and I decided on an isometric view in order to capitalize on having rich illustrated artwork rather than stale jaggy 3D models. As the beginning of the contest approached, I realized that a CRPG was a far too ambitious project to complete in three months, but I could develop a part of the larger CRPG game with a smaller entry. The isometric graphics engine now became the focus.

I had used OpenGL to develop two 2D games: an unfinished uDevGames 2004 entry, Bugganauts, and Space Barrage, my first finished game in decades. I had never used OpenGL for its more common purpose, a 3D game. I had a quick tech demonstration that I worked on as a proof of concept, but now I needed an idea for a small game using the isometric view.

The choice was between a 3D version of Bugganauts, involving lots of alien shooting and hostage rescuing, or a cutesy puzzle game like an old favorite of mine, Adventures of Lolo. Well, I was really leaning towards Bugganauts, until I thought that I could maybe make the small game into a part of the larger CRPG. The setting for the CRPG was to be a snow covered world. I thought about snowballs and a puzzle game and how you could use the ball rolling up snow and enlarging. I had never seen this in a game before and that spark of originality sold me on it.

Graphics

The basic premise for the game was simple, and I expected that most of the work would be in creating the graphics engine. This was okay, because that was one of the two primary goals. I despise aliasing (jagged edges rendered on the edges of objects, especially prevalent in 3D games) and after great success with using glAArg1 to polish Space Barrage, I became somewhat obsessed with removing as much aliasing as possible from this game. While this took time from other aspects of the game, I learned the most from this part of the development.

Spending so much time on the graphics delayed my beta testing by more than a month, however! I include this under “what went right” because I waited till very near the deadline (a day or two?) to reveal Space Barrage. Even a month late is a big improvement over my last attempt.

Workflow

I had a reasonably efficient workflow that included posting updates for whoever would read my blogs at uDevGames and visit my personal web site about progress on Snowball. I made an effort to keep these updates from becoming a distraction.

I kept the web page very simple with an easy process for adding screen shots. I had a couple of long winded blogs, but I used them as a way to process what was going right and wrong and to think through what the next goal needed to be. It kept me accountable to a public audience (even if it was just an illusionary one) that would know if I was sticking to the goals rather than going off on a time consuming tangent.

STL

I finally embraced the STL (C++‘s Standard Template Library.) I made it a point in Space Barrage to simply avoid dynamic memory all together in order to sidestep time consuming memory leaks, because I knew I could easily derail in such a short time span. In this project, I dug into the STL. One investment I made was buying the book ‘Accelerated C++’ by Koenig and Moo. I highly recommend it to beginning programmers and anyone who isn’t acquainted with using the STL and likes to use sample code and tutorials.

At first I found using some of the STL conventions cumbersome, feeling a bit like wading through Java-type convolutions to perform simple actions. After working with it a bit, I learned to really enjoy the peace of mind that comes from avoiding the responsibility of plugging memory leaks. I didn’t get in too deep, really, just some vectors, strings, and maps, but I’ll never look back.

Code Reuse

Reusing some code from Space Barrage and the unfinished Bugganauts gave me a boost at the start. I relied on SDL for window and graphics setup and a custom PNG texture loader that I think is mostly code by Keith Bauer (a.k.a. One Sad Cookie). I used code I had set up for music and sounds (though the sound effects never made it in) that relied on SDL_mixer.

Cross-platform

Using these cross-platform libraries made the port to Windows very easy. I’ve found that developing on two platforms really helps refine your code. One platform catches some errors that the other might not.

What Went Wrong

Time

The obvious and probably most common problem in software development is difficulty predicting the length of time parts of a project require. This is especially true for inexperienced programmers. When one has never programmed a 3D game, how is one to estimate the length of time it will take to complete a 3D game engine? One guesses.

Design Document

My work schedule was very full at the start of the contest, but I anticipated a two week break and worked on a design document and engine ideas in the spare moments in between teaching classes. I carried a growing stack of papers covered in cartoon sketches, schematics, and formulas. I never took the time to formally compile it into a design document and although you’d think that was a bad thing, it wasn’t that bad.

From working on Space Barrage for the 21 Day Later Contest I knew that a tight schedule meant I’d be keeping it mulling around in my brain at all times anyway. I did eventually keep a list of tasks to complete as I approached the end. So, for a longer term project, especially one with more than one programmer, I would say that not having a detailed design document was something that went very wrong. For this short term project, however, my stack of papers was enough for this single programmer to stay reasonably on track.

Schedule

That said, my schedule went way off track. I was determined to get a playable out to the public as soon as possible to avoid the problems I had with Space Barrage, but I released it a month late.

I had time to clearly identify the areas that needed to be improved in order for the game to do well in the contest, but I ran out of time to implement the changes. Some of the problems identified were:

  • The WASD keyboard controls were just right for some, but unnatural for others. Custom keyboard options were needed.
  • One unexpected discovery is that some players found the learning curve too easy and gave up before it became challenging.
  • Mouse control was something I didn’t plan until I realized there was a simple and effective way to implement it. The mouse control made it much easier for inexperienced gamers to play compared to the keyboard control, but led to some confusion as well.
  • People were much more inclined to play through if they knew the total number of stages but the game never gives them a hint.
  • Everyone wanted a way to continue if they stopped playing and came back to the game later.
  • Snowball’s music soothed some and got on the nerves of others as it constantly repeated for hours with no interruption, if you played that long.

Bugs

There was a serious bug discovered when running on Mac OS X 10.2 that inverted the mouse coordinates read by the game. It happened in the middle of the voting, so anyone with that OS version would not be able to play. As a quick remedy I forced the game to start in full screen mode where the bug did not appear. This bothers many in the Mac community, but my hope is that it enabled more people to play. Several days of correspondence led to fixing the bug in SDL that was causing the problem.

Windows PC

Because Sean, my music composer, had issues with getting his PC hardware/software working correctly I had to deal with the possibility that he’d be unable to provide a soundtrack. I spent time with Amy composing some music in GarageBand. It was temporary and would need much more refining before release. Fortunately, Sean agreed to work at our office and used GarageBand to create some excellent original compositions in a matter of three days near the deadline.

Time Again

Overall, I spent too much time making sure I fulfilled the one goal of creating a new graphics engine and too little time making sure I fulfilled the goal of doing well in the contest. If I had compromised on some graphics issues, I very well might have had time to add more game features, get more early feedback and fix many of the interface and user experience issues.

Mid-project Changes

In the last three weeks or so it became apparent that many of the planned obstacles and game mechanics couldn’t be added in time. This was disappointing, but focusing on the various techniques involving the ice blocks turned out to give enough game play variety to satisfy the expected length for a small contest game.

In fact, I was very pleased that just one element could be stretched so far and it helped me to accept that this project was worth continuing beyond the contest.

Conclusions

Fun

Overall, I’m satisfied with the state of the game that was completed during the voting period. Because I delegated stage design to my wife, there was plenty of content for players to explore even if the amount of variety was low. The team members had fun working on it and I know that many people had fun playing it.

Some things that I learned

  1. A game’s difficulty curve is one of the most important ways to keep a player playing. If the target audience has a wide range of skill levels, there had better be options that allow them to play how they want right away. I had comments that there was no challenge to the game or that there were far too many “easy” stages. In smoothing out the difficulty curve and forcing people to play through the “learning” stages I had turned off the less casual gamers.
  2. Players want to know how far away the conclusion (or the next goal) is. Players who did not know the number of stages either gave up, or lost interest early on. As soon as I told players the number of stages, they would play to the end.
  3. I can’t stand aliasing. Many casual gamers have not learned to ignore aliasing and I’ve even heard one person say, “Did you see all the rats?” referring to the crawling pixels on an aliased line. The amount of work and time I had to invest to help remove “the rats,” however, seemed to be worth it. I still get a big reaction from many players when they rotate the stage for the first time. Many simply expect it to stay flat because of the style of the imagery.
  4. Sound effects make a big difference with people’s response to the music and the game overall. There are sound effects recorded for Snowball but getting them in the game was one of those tasks that kept sliding off the priority list. The impact of the player’s actions and the level of immersion felt by the player is greatly reduced in this soundless game compared to, say, Space Barrage. Also, there are comments from players about loving the music, but many could not stand the unbroken repetition of the single track during game play, no matter how good the music might be.

Conclusion

Snowball was meant to be a contest winner and an engine test for another game. In part it has succeeded but I’ve really grown to believe that Rollo the Snowball has a much bigger exciting life ahead of him.

My plan is to bring this game to a commercial level of development. In the coming months, I’ll be using all the brilliant feedback from the participants in this contest and taking the time to add all the fun features that were so painful to cut from this abbreviated version. This time, the goal will be to finish a game worthy of a player’s hard earned cash.

1 Developed by arekkusu

Dead Days

The Gravediggers Toolshed
h4. Coding Tools
We use Runtime Revolution to build the user interface for our iGame3D game-making software. The engine with the scripting language, OpenGL drawing, etc., is linked to RR via the plugin “iGame3D Pro external” that we are developing. We spent most of the time in this app arranging levels, making models and writing the scripts. Here is a screenshot of the Revolution/iGame3D working environment in action:

However, we did not use CodeWarrior to build the game itself. We are using it to develop both the Mac OS X and Windows versions of the iGame3D plugin and the Windows version of the iGame3D Player.

The source code for the Mac OS X version of the iGame3D Player was done in XCode. The Dead Days application is a special version of our iGame3D Player. This needs some explanation: games in the iGame3D engine are actually written in our custom scripting language inside the Runtime Revolution environment with the plugin. The iGame3D Player application can run these games. Just copy the game files into the player application package and the game is done. It would have been enough to just release the game code (written in our cryptic scripting language) since that’s what actually makes up the game, but it wouldn’t be very useful to anyone. So we decided to release the source code of the player application itself! The source code for Dead Days is nearly the same as the original iGame3D Player source code. It has some little changes for licensing reasons. Check out the ReadMe that comes with the source code for more information about this.

The simple text editor that comes with Mac OS X was used to create the ReadMe files for the game and the source code. Smultron was used for text operations like “Find and replace” on the game scripts.
h4. Game Assets
We used Sound Studio to record and edit the zombie growls and screams. By the way, those have been pitched down, these are not our natural voices. The background music for the training level was played on a keyboard and recorded with Sound Studio. The sounds came in through an eMac’s built-in microphone. We edited some royalty-free sound effects from the web in Sound Studio as well, like the gun shot and the punch.

We made the background music tracks, except for the one in the training level, in Apple’s GarageBand using some of the built-in loops and our own melodies. QuickTime Pro was used to convert the sounds into an AIFF format that Ogg Drop X could handle correctly. iTunes was used to convert the music to MP3. To compress the huge AIFF audio files into the OGG Vorbis format we used Ogg Drop X.

GraphicConverter was used to convert images into the PNG format. We also created the alpha channels for some images in it. We used Photoshop to do lots of the textures, and images. We used Cinema 4D to reduce the number of polys on the zombie model. The original zombie model was created a year ago in Lightwave by the multi-talented Charles Goran.
h3. Tripping up in the Valley of Shadow
Obviously entering the contest only a few days before the deadline made the process a real rush. We did not have time to test the game on many machines so there was some bug-fixing during the public voting period. There were also issues with the camera that we did not notice until players brought the problem to our attention.

We mistakenly assumed that Mac OS X 10.3 “Panther” was already the standard Mac operating system, especially with the OpenGL updates and bug fixes that shipped with it last summer. Almost immediately after releasing the game we received requests from people who wanted to play “Dead Days” on Mac OS X 10.2.x. After some re-coding and testing about two days into the voting period the game was built to be compatible with Mac OS X 10.2.x.

The newer version of “Dead Days” also had trouble for nearly the whole voting period due to an issue of using the .sit archive format. Certain versions of the StuffIt Expander corrupted the application package on some gamers’ machines, causing it not to run at all. With six days of the public voting left we released the game again using Panther’s .zip format which seemed to fix the startup issues.

Getting adequate feedback was almost as tough as making the game itself. We had about a thousand downloads before the first complaint came in and about three thousand downloads before we received feedback that actually pointed us in a possible direction to fixing the problem.

In the tunnel vision rush to make a playable game some of the essential non-game elements get overlooked. We did not expect the public to go looking for an “Options” screen to change the keyboard settings, screen resolution and mouse sensitivity. We also didn’t think they would skip the training level and proceed to mash every key on the keyboard trying to figure out the game. These instances revealed a missing link in our engine that we surely need to work on. Our custom scripting language allows us to check the state of specified keys, but changing these keys would require a change in the script files which are neatly hidden inside the application bundle. An easier way to configure the keyboard controls and changing the screen resolution in the game is now high on the to-do list.

The current iGame3D editor, which is still in production, has not been tested to see if it could efficiently make a game from the ground up. Several bugs or cumbersome user interface actions in the editor also cost us some time in the rush to complete the game.
h3. Return of The Living Dev
The eight to nine days and nights that “Dead Days” was in development, Tobi finally had absolutely no other obligations to tend to. Life was reduced to game development, food and a little bit of sleep. Bill managed to tear himself away from iGame3D development, survive each day of child care and pull through the graveyard shift until dawn to edit the levels and add textures.

The goal of iGame3D finally proved itself for us, we didn’t have to start coding from scratch. For “Dead Days” the only C coding neccessary was the fixing of bugs that the development of this game revealed in the iGame3D engine. With very few quick fixes to the source we were then allowed to concentrate on the creation of the actual content and gameplay.

We benefit from the fact that we have already been working together on iGame3D and related projects for nearly three years. We are well aware of each other’s abilities and use this knowledge to efficiently delegate responsibilities, to prevent production pipeline bottlenecks.

Because of different time zones, it is common that we meet up on the internet and discuss plans, changes, and production just before one of us passes out. Although some problems arise from this, for “Dead Days” it acted to our advantange in that when either of us woke up there were always cool new textures, levels, models, and music to check out. The iGame3D Team worked like a twenty-four hour assembly line.

The process of creating a game was an intense test for the iGame3D engine and its user interface. The process revealed some bugs and showed us which parts are functioning well already and which parts still need work.
h3. Reflections in the Wisdom Pool
It was an honor to have taken part in this unique contest. Once again uDevGames openly challenged us to create and release a game to the Macintosh gaming community. It’s great to have uDevGames as an annual event and we hope that it continues successfully for many years. In our opinion, everyone who was able to create a game in this 3 months is a winner. After this contest the team will continue their work on the iGame3D engine and application. The success of this year’s entry is a confirmation for us that iGame3D is going to succeed and sets our expectations that much higher for what comes next.
h3. Le culte des Ghoules
h4. Tobias Opfermann
This 20 year old German programmer started towards a career in game development when he began to create his first applications with the card-based programming environment Hypercard in 1996. With that he produced a tool for the Mac Game “Damage Incorporated” (Marathon engine) that helped in making levels, which in turn was used to produce a custom add-on scenario called “Year of the Tiger” in 1999, together with other fans of Damage Incorporated.

After this, the C language in CodeWarrior 5 was where he experimented with very simple database programming and later a freeware OpenTransport chat application called “P.I.N.C.”

Using REALbasic he introduced the world to the “Oni Savegame Editor” in 2000. This program was widely used among Oni game fans, gained a feature story on the German TV station NBC Giga, and continues to receive positive feeback from Oni players four years later.
h4. “GL Thrill”
After the migration to Mac OS X in early 2001 he entered his first game into that year’s uDevGames contest. The contest provided a challenging call to step up his experience of game development and he found much to learn at the iDevGames forum. Stepping ahead of his background in HyperCard, MetaCard and RealBasic, Tobi’s 3D first person shooter, “GL Thrill,” placed eighth in that year’s contest using C and OpenGL.

In 2004 Tobi graduated high school and has since split his time giving back to his community, both at his employment in a care home and with his personal dedication to the iGame3D project.
h4. William Griffin
What smells like New Jersey and makes games? You have to a sense of humor if you are going to make games with Bill Griffin. This 34-year-old New Jersey father of one quotes himself as saying, “Writing about myself in the third person is freaky.” That’s the kind of guy he is.

After a combination of 13 years toiling in the graphic arts, entertainment, video and tech support industries, Bill came to the conclusion that he had taken his two years of community college as far as it seemed likely to go. Those years of clocking infinite over-time gave him the opportunity to attend the annual design technologies exhibition SIGGRAPH on three occassions and to take two excursions to E3, the annual Electronic Entertainment Expo, looking for a door into the world of game design.

Bill recalls one of these high tech events with an embarassed grin, “I spilled beer all over my pants at the Apple/Newtek boat party, damn!” The 2001 E3 event, however, is especially remembered for a very encouraging conversation with an important games marketing manager from a big name company that left Bill Griffin convinced that it was time to put away the old things and to take up his lifelong goal of being a game developer.
h3. Team iGame3D
In early 2002 Tobi posted a demo of the game engine he was producing with the skills he had cultivated while making “GL Thrill.” Bill responded to this by offering his willingness to take on whatever non-programming job was necessary to make a game happen in this engine, and a game design team was born.

That spring and summer they used the engine to create a level builder and player called “T3DEdit.” Thirty-five custom scripting commands that were needed to produce a first person strategic target shooter with exploding ants were added to the engine during the uDevGames 2002 three month development cycle.

With most of their time focused on creating a tool that would continue to be relevant in the future, attention afforded to the absolute needs of making an amazing game capable of winning the contest was sacrificed and their entry “Antack” placed sixteenth in a very competitive uDevgames that year. Much to their surprise “Antack” would attract over eighty thousand people to download the game within the next twelve months.

By the time that winter came to a close, Bill had used the “T3DEdit” application that was created for making Antack to explore several dozen directions of the engine’s abilities. First Antack evolved into a space combat simulation, then there was a castle building routine, which was followed by testing a 3D clone of the Tank level in the 1984 game TRON, there was a vampire rampage, a famous space tunnel run screen saver, the iGame3D dancing groupie screen saver, a test for tic tac toe, another for pong, a coin platformer example, survival horror concept, a ‘shoot down the 3D flying saucers’ design tutorial and an early concept for a racing game. These were among dozens of test levels that came out of the early editor.

The code and knowledge gained from making “Antack” was taken to the next logical step feature after feature to build the foundation for the 3D OpenGL game design environment that is now “iGame3D.”

Spring of 2003 brought that name change, removal of some parts of the scripting language, and a switch to Metacard, a powerful card-based development environment which finally gave Bill the ability to turn his ideas for iGame3D into living tools. Summer brought the last sad Macworld to Manhattan, where by pure luck Bill met Kevin Miller, President/Owner of Runtime Revolution, the company that had just acquired Metacard a week or two earlier. With iBook in hand and the very limited alpha version of iGame3D, Bill gave his first software engineering demonstration to a corporate executive.

Bill confesses, “It was ugly as sin, it had bugs, and I was having the time of my life making it.” Purchasing a Revolution license meant being free of the 10 line restrictions limiting the first Metacard Demo-based version of iGame3D. Bill set himself to the task of learning the transcript language by jumping head first into creating a full featured interface for a complex application based on external engine programming by Tobias Opfermann, that listed support for particles, several standard 3D formats for import and export, polygon drawing tools and commands, an expansion from an original 35 to 125 script commands, and a screen saver stand-alone, among its many abilities.

For the length of uDevgames 2003 Bill was lounging around the iDevGames internet chat room, between moments of developer inspiration and burn out, and found that sharing the creative process on an up-to-the-minute basis with nearly two dozen game developers was much less stressful and much more educational than focusing all his attentions on one game in the competition against them. At the end of that year’s contest Bill was the proud interface programmer of a fully operational iGame3D beta version with nine demo levels to present to the world.

Then Tobi sent him a barely functional example of a new version of the application with the plan: “Let’s make a new interface, one that is so easy people don’t need to read any documentation.”

A year later finds the team working on their sixth user interface revision for iGame3D, which has taken bold steps away from its dependance on using models from Meshwork and is now hosting its very own 3D format with self-contained animations, material shader properties, and bones, as well as other tricks up its file structure. Their 3D third person action adventure game “Dead Days” showcases the abilities of the new models along with improved OpenGL lighting, the addition of particle effects, and the effectiveness of the 3D modeler built into the engine. The team hopes that a version of iGame3D suitable for general public use will be ready at the end of Winter.

* Runtime Revolution with iGame3D Pro external
* Metrowerks CodeWarrior 8
* Apple Xcode 1.2
* Sound Studio 2.1.1
* Apple GarageBand
* Apple QuickTime 6
* Apple iTunes
* Ogg Drop X
* Apple TextEdit
* GraphicConverter
* PhotoShop
* Cinema 4D
* Smultron

Rescue

My interest in space games dates back many years, when I played Elite for countless hours on a Sinclair Spectrum. In later years, I found myself enthralled by Frontier, the ‘sequel’ to Elite, and the vastly underrated plot-led combat sim Warhead. Both of those games more or less typify how I expect a space game to work: convincing physics, true 3D and immersive environments.

The thing that brought these old gaming memories back was a recent remake of Elite written by Giles Williams, the punningly-named Oolite. As much as I liked Giles’ game, I really wanted to see a space sim with more graphical realism and a sort of crude, industrial look. Also, where many space games revel in high-tech heads-up displays, I wanted to place the player directly in the cockpit, looking around at the clunky hardware as well as out at the stars.

I’m always reluctant to exactly copy existing games, so I began to think of ways to make my game stand out as I laid down the design for the gameplay. I decided that it would be most interesting to shy away from the usual ‘dogfights in space’ gameplay and go for something a little more unusual: a more passive kind of gameplay where you have to rescue asteroid miners from certain doom. No guns, no shields, just a chunky industrial space tug, a set of mining tools, and your flying skills to keep you alive. Having settled upon this cursory design, I began coding.

What Went Right

Starting from Scratch

One of the first decisions I made was to drop almost all the code I had ever written before. I had wanted to take this step for quite a while because I had become weary of working with the same rotten old code, which I first started writing several years ago. I used this code to make Super Phoenix and Yoink, and it works adequately as far as it goes, but it has deep seated design problems that I’ll probably never manage to eliminate. By starting afresh, I hoped that I would be able to create a clean, focused basis upon which to work, and that would help me to make a better game.

I also wanted to try several technologies which were new to me. My earlier games are still compatible with Mac OS 9, using the CFM runtime and the Carbon API. For Rescue, I thought I’d go a step further and build a Mac OS X only Mach-O game for the first time.

Using Standard Libraries

Having disposed of my own source code resources, I decided to replace it by utilising as much freely available, widely used source code as possible. I mainly wanted to avoid reinventing the wheel, but I also hoped to learn some new skills and techniques by delving into other people’s code.

I chose SDL as the foundation of my application. It has a good track record, it’s popular and as a bonus it’s abundantly cross platform. SDL also has an extensive selection of standard (and not-so-standard) additional libraries, and I picked two of the best respected – SDL_image and SDL_mixer – to handle image file loading and sound, respectively.

For my math and physics code, I decided to try WildMagic, a huge and rather complex C++ library. WildMagic had a large number of features which I didn’t really want to use, such as a built-in scene graph and an application framework similar to GLUT, but I was able to use the functionality I wanted (vectors, quaternions, matrices, intersections and so on) without picking up too much unwanted overhead.

I needed a way of loading 3D models, something which I haven’t even thought about since the last time I used QuickDraw3D. Because I had no experience in writing my own model loader, I decided to use the OBJ format loader written by Karl Berg, another member of the iDevGames’ forum. I found his loader particularly interesting because the example program supplied with it showed a spaceship model with attractive specular highlights and an illumination map.

For other data files, I decided to use TinyXML, a simple but effective XML library written in C++. I used it in the creation of my uDevGames 2003 entry, Yoink, so I was already satisfied that it was the right tool for the job.

Optimization

I wanted to make an infinitely large, densely populated asteroid field with a large visibility range. This was going to cause obvious problems in terms of the frame rate, so I had to use some tricks to keep things moving quickly.

I used simple cubic space partitioning to control the culling of invisible objects. Partitions which are outside the camera frustum are not drawn. I had considered using octrees instead of plain partitions, but I decided that it would be too complicated and not necessarily much faster. However, I did go on to use an octree routine to lay out asteroids in space partitions in a way which prevented two rocks from overlapping.

In addition to this, I needed to cull objects by distance. I was only able to render about a hundred asteroids before things started to get too slow, but this meant that either my visual range was very short or the asteroid field had to be very sparse. I dealt with this by reducing distant rocks to a silhouetted polygon on a billboard, and using fog and careful scaling to make the level-of-detail pop less noticeable. It wasn’t clever, but it allowed me to display several hundred asteroids instead of just a few.

Elsewhere, I used very few optimizations. Apart from having to make some minor changes to WildMagic to get a big speed increase, I didn’t do anything much to make things efficient, so the game wasn’t very fast or smooth on slower computers. Machines with old graphics cards such as the ATI Rage 128 were almost bearable, but most people weren’t able to tolerate the game at such a low frame rate, so I necessarily cut a lot of users with lesser machines out of my potential audience.

Teamwork

When I embarked upon the development of Rescue, two weeks after the start of the contest, I was really only using the contest as a chance to experiment in a formal setting. I didn’t even sign up for a several weeks. However, out of the blue I was contacted by a freelance musician, Mikko Tarmia. He said that he had seen Rescue and wanted to write music for the game. I was flattered that he liked what I had done and I really liked the sample pieces of music he showed me, so I was very keen to ask him to contribute.

It then struck me that my little game experiment was now much more serious. It wasn’t just my effort and reputation on the line, but Mikko’s too, so I felt that there was no way I could afford to let him down by slacking on my part of the deal. From that point, no matter what happened, I was determined that I would do my best to reach the end of the contest without quitting.

Later in the contest, I realized that, while I had nice spaceship and asteroid models, as well as pretty star and nebula textures, I was going to have a hard time adding textures to the 3D models. My modelling software, form-Z, is rather good at low-poly modelling, but is lacking in features for manual UV mapping. I could also see that I was going to be pushed for time if I concentrated too much on making textures. Having already formed a small team, I was much less reluctant to ask for extra help than I had been on previous projects. With this in mind, I asked my old friend Brian Smith, a skilled graphic designer and 3D model maker, to join the team and work on the textures.

I had never developed a game as part of a team before so all of this was a whole new experience for me. I’m pleased to say that I found the whole collaborative working process very smooth and easy to deal with. My teammates were both very professional and delivered high quality work right on time, and they were thankfully tolerant of my requests for changes and criticism! Mikko and Brian wrote their own accounts of their parts in the project, which you can read below.

What Went Wrong

Too ambitious

As was the case with Yoink in uDevGames 2003, I found that the game I had designed was much more complex and time consuming than I had imagined. I still find it difficult to perceive how long things will take at early stages of the project.

My failure to devise a schedule and stick to it meant that many features had to be omitted from the game, so much so that the resulting gameplay was nothing like what I originally envisaged. I had planned to make Rescue a much more innovative game, in which stealth and lateral thinking were your only weapons against a much more powerful enemy. Among some of the features I had to omit:

  • Giant enemy battleships which would patrol the asteroids looking for mining installations to destroy. This would have been quite a significant part of the programming work, as it’s very difficult to make an effective AI which is fun to interact with. I expect that developing the AI would have required a lot of tweaking to get things just right.
  • Tools such as limpet mines which could be deployed from the player’s ship to distract or delay the enemy. Also, I wanted the player’s ship to be able to pick up objects with its robot arm and carry them around. I mainly omitted these features not because they were difficult, but because they would have served no purpose without an enemy to defend against.
  • A mothership which would drop the player off at the beginning of each stage and pick them up at the end. It would loiter in the background and act as a drop-off point for evacuated miners. I was very disappointed to have to leave the mothership out of the game, but Brian and myself agreed that there wasn’t enough time to build and texture another detailed spaceship model. In the end, I resorted to having the player accelerate into hyperspace instead, and this was at least an unusual approach to this particular sci-fi cliche.
  • The most ambitious thing I had to omit was the planned character interaction and plot. I wanted to have a co-pilot character sitting in the other seat of the cockpit, and this animated character would act as in-game help, telling the player what to do next and explaining how to perform certain tasks. Beyond that, I had imagined that I could have a storyline played out in animated 3D cutscenes, using the same characters. Unfortunately, all of this had to go because it was the lowest priority of all. However, I wish I had been able to add some kind of in-game help in the absence of the co-pilot, since many players clearly had difficulty understanding how to dock the ship and how to get into hyperspace.

Scheduling

Another problem in common with last year’s project was the proper scheduling of the development process. I don’t particularly like to work to a fixed timeline, so I spent my first two months producing code and game assets with no regard to the deadline.

Much of the work was comparatively easy and quick to produce, since I had already written similar code for my other games. For example the time-based animation system and simple scene graph were quite elementary and didn’t take long at all. On the other hand, several essential elements ballooned out of control and ate up significant chunks of the development time and my patience. The collision detection system was an especially major source of wasted time.

I also spent a whole week doing nothing but trying to redesign the cockpit model. I had an existing cockpit model which appeared in early versions of the game, but I wanted to replace it with one that was much more immersive and full of equipment. This became a huge source of stress and annoyance because I simply could not get the result I had in my mind. In the end I had to compromise and revert to the version of the model which was closest to my original intent.

Collision Detection was Problematic

I chose to write my own collision detection system from the ground up instead of using a library such as ODE. This seems odd with hindsight, as I was trying to utilize third party code as much as possible, but I suppose I was afraid of its complexity. I have since discovered more about ODE through the experience of other developers, and it seems that it is indeed fraught with tricky problems. Maybe I made the right decision for that moment in time.

I designed a rather complex but crude mechanism which utilised WildMagic’s intersection routines to handle interactions between primitive spheres and capsules, groups of primitives, and rays. It took about two or three weeks to write because I kept deciding that I had made design mistakes and refactoring it. Even after all that hard work it still didn’t work properly, and many of the features were never used in the finished game because they weren’t reliable.

As it stands, my collision detection system is still too crude for my liking, and this shows in various places. For example, the requirement that all objects must be capsules forced all of the asteroids and buildings to be roughly capsule shaped. Unfortunately, you can sometimes still see weaknesses in the system when you get close to irregular objects while looking at the external view. This code will all need replacing in some future version.

A Lack of Refinement

While I managed to make good headway into the technical issues of making the asteroid field limitless and the spaceship fly the way I wanted, I didn’t pay enough attention to the little niceties that gamers expect. The title, end of level and game over screens are extremely lightweight in their presentation. There’s no in-game menu; everything is just ‘press a key to continue’ (and it doesn’t even tell you to do that!). Also, there are no in-game preferences and there’s no way of redefining the controls. I did manage to have an editable XML preferences file, but that’s probably too technical for ordinary gamers.

As I expected, I’ve had quite a lot of feedback asking for redefinable controls, so I have put this on my to-do list. Of course, I don’t intend that the game will continue to have a horrible in-game GUI — I shall also deal with this in time.

I did have a little success with the manual I wrote. The final version of the manual was illustrated and had detailed instructions to help novice pilots figure out how to land and escape into hyperspace. I know that many people won’t read the manual, but I’ve had positive feedback from those that did, so I’m happy that it wasn’t a waste of time.

Working with the Limitation of Other People’s Code

There were several occasions when I was forced to deal with problems that were not of my own making, but which came instead from the way the various libraries and other incorporated code worked.

The first thing which hampered my progress was a strange bug in CodeWarrior 8.3 which prevented SDL_image and SDL_mixer from being linked to my application. A little research revealed that the problem was caused by the underscore in the libraries’ names. I dealt with this quite easily by making my own versions which were renamed to remove the underscore.

The only thing which concerned me about this modification was compliance with the license. Since the SDL libraries were released under the LGPL, I didn’t want to fall afoul of the license’s rather complex wording. My modifications were extremely minor, so I simply asked Sam Lantinga, the author of both libraries, for permission to make the changes without getting embroiled in the licensing concerns. Much to my relief he gave his permission!

WildMagic also needed modifications, although it was less worrying to me because its license permits almost any modifications. The problem was that the programmer had inexplicably decided to use the memcpy() function as a means of implementing copy constructors and assignment operators for almost every class. For frequently used types like vectors and quaternions, the overhead of calling memcpy() all the time was substantial and showed up as a large blip in Shark profiles. At the time, I felt that Rescue wasn’t running fast enough on slower computers, so I tackled this by simply commenting out several of the most commonly used constructors and assignment operators and rebuilding the library. This increased the speed of the game by no less than 30 percent, so in the long run this was a great benefit!

Karl Berg’s OBJ loader was the other component that I changed, and again it was helpful that his license amounted to the freedom to make any changes. In its original state it was only able to support BMP textures and didn’t look for texture and material files in sensible places. I addressed these issues by adding support for SDL_image and adding a function to return the application bundle’s resources folder.

At some point I would like to make some more radical changes to Karl’s code. His coding style, essentially C with classes, doesn’t really marry well with my own, and there are some outstanding bugs I’d like to fix. I plan to strip down his code to the bare parsing routine and build it back up in a way which is more suitable for my purposes. I’d especially like to add features which allow code to examine the model geometry, as this would be useful for collision detection.

Last Minute Damage Control!

I saw this coming but I somehow didn’t manage to avoid it: I reached the uDevGames submission deadline and I still didn’t have any gameplay to speak of. You could fly the ship around, pick up miners and hyperspace to the next level, but there was no threat and nothing to force you to take any risks, so if you were a careful driver you’d be able to play the game forever.

About three hours before the deadline I took the drastic step of adding a simple time limit. This was something I really didn’t want to do because it made Rescue seem very similar to Asteroid Rally, Matt Diamond’s game from uDevGames 2003! At this late stage I saw it as the only way to turn my basic spaceship flight simulator into something like a proper game. Thankfully, it only took me a few minutes to implement the time limit itself and the ‘out of time’ game over screen. Once in place, the time limit did indeed have the desired effect, and it was now necessary for the player to rush from one mining installation to another to complete later levels in time, putting their ship at risk in the process. After a little tweaking of the difficulty level, I finally reached a stage where my game was fun and exciting for me to play, not just mildly interesting! Satisfied that the game was now just about acceptable, I packaged it up and submitted it just one hour before the deadline.

Tools

I used the Metrowerks CodeWarrior 8.3 IDE to write and build the game. However, in an attempt to make the source code more accessible to the community I’ve since made an Xcode project as well. This was a useful learning experience in itself!

The spaceship exterior and interior models, as well as the buildings and some of the asteroids, were built using form-Z, a highly accurate and complex modelling package I use for my commercial visualisation work.

Brian used Cinema 4D for UV mapping and texturing the models, as well as making some additional asteroids.

Carrara 3 was used to make the stars and sun. I had hoped to make better use of Carrara since it was one of the prizes I won in last year’s contest, but as it turned out I wasn’t able to learn its polygon modelling feature set in time to do something useful with it. I used Photoshop CS to make the font and various other graphics, while Brian used Photoshop 7 to work on the textures.

For audio, I used Reason, another prize won in uDevGames 2003, just once to make the first sound effect! Had Mikko not come on board to make the music and the rest of the sound effects I would have had an opportunity to put it to better use. Never mind, Yoink still needs music!

Summary

Now that that the contest is over, I can clearly see that I made many of the same mistakes as last year. I devised a game idea which appeared at first glance to be concise and manageable, but which with hindsight couldn’t possibly have fitted into the three month development period. Maybe if I had unlimited amounts of free time it might be possible, but when I have to fit all this hard work around a full time job and other obligations and interests, it’s can’t be done.

Still, even though the resultant game didn’t match my original vision, I’ve benefited in several ways. I’ve learnt a lot about several very interesting APIs. I’m now very interested in using the SDL libraries and WildMagic in future projects.

I’ve worked as part of a development team. I’m used to teamwork in my day job, but it’s a bit of a breakthrough for me to be able to share my personal creative work with other people. It has been enlightening to work with other people’s opinions and contributions in mind.

My objective of making a reasonably complete space game engine has finally been achieved. I (and others) can now build upon this project to make more sophisticated games. I now have another partly finished project to hang up on my web page!

Where shall I take Rescue now? I plan to add all of the features I was forced to omit before I go any further. Replacing my home-cooked physics with ODE, renovating the OBJ loader to suit my needs, building the enemy ship models, putting them into the game and giving them AI — all of those things are achievable now that the deadline has passed and I’m free to work at my own pace. It seems that Mikko and Brian are both interested in seeing the project completed, so it looks like I’ll be working hard on Rescue for the next few months.

Neil Carter

www.nether.org.uk

Making the Music and Sound

Mikko the Musician

I almost cancelled my intention to participate in this contest because I had a great deal of work with other projects going on. But then a big project was cancelled and I had some time again. I found Rescue, which is sort of a slow action game (I was actually looking for an action game), and contacted Neil.

After trying the early version of Rescue, I quickly had a vision of what the music would be like. Neil didn’t want it to be too modern in terms of its harmony, so I followed this rule. I’ve usually created this kind of stuff by using orchestral instruments only, but this time I wanted to add some electronic sounds to it. The ambient in-game track sounds electronic, but actually most of the sounds in it are “real” (low strings, choir). The main theme reappears in the action track too, to make the game audio more coherent.

I also promised to help Neil with sound effects, so I made them after the music was ready. I didn’t notice the rapid passage of time and was actually a bit rushed to finish them before the deadline!

I didn’t have any problems with this project. Communication was great and things worked out nicely. The only thing I got a little worried about was when Neil decided to change the purpose of certain music tracks to deal with changes in the gameplay. Fortunately the game developed in a way that meant we didn’t have to throw anything out. Just some of the sound effects I made have not been used in the game (yet).

Texturing the Models

Brian Creates the Eye Candy

I was happy to accept when Neil asked if I would like to produce textures for Rescue. Like Neil, I tend to start lots of projects but only finish a few and so the competition sounded like a good incentive.

The first step was to make sure we could transfer Neil’s models from form-Z to the 3D package I use, Cinema 4D, UV map them and then export the models as Wavefront .obj files which the object loader library could use. We soon discovered Cinema’s .obj file exporter reversed the surface normals. This was easily fixed by inverting the models’ normals before exporting. There also appeared to be a problem with the UV mapping in Rescue. By examining the UV data in Cinema 4D’s Structure Manager I discovered that the first UV coordinate was being zeroed when the models were opened by the object loader library. Neil and myself decided that this glitch should be worked around by editing the .obj model files (copying the first set of vt coordinates to the end of the UV list and then updating all references to it in the f polygon list) to save time hunting it down. Cinema 4D also didn’t export material files with the .obj model files and so manual file editing was required to construct them and link them to the model files.

The most time consuming part of my work was UV mapping the models. This was done in Cinema 4D with the freeware plug-in, UV Toolkit. The asteroids proved tricky to flatten as they had continuous surfaces. I decided to minimise variation in texture scale and shearing at the expense of creating seams. I also chose to stick to a single 512×512 texture for all the asteroids to save time and conserve VRAM. To change the texture scaling to fit the different sizes of asteroid I first mapped the larger asteroids to the full texture space and scaled down the smaller ones proportionately. However, this resulted in a very blurred texture on the large asteroids. I later realized that the object loader would tile the texture if the UV coordinates were outside the 0.0 to 1.0 range and so the smallest asteroids were assigned the full texture space with the larger ones scaled up, to a maximum of 4x for the biggest ones.

For the buildings and tug UV maps I found the best method was to break down the model’s surfaces based on the most suitable type of projection. For example, first I assigned UV coordinates to all the surfaces that could be mapped with flat projection, then all those that need cylindrical projection and so on. With all the elements mapped the largest surfaces were placed and scaled within the UV map. Finally the smaller elements were slotted into the remaining spaces. Much fine tuning of elements’ scales was required to optimize texture space usage. For most models the texture space assigned over its surface needed to remain constant. However the tug cockpit model was to be viewed from a fixed position so I skewed the scaling so that the surfaces nearer the viewer were allocated more texture space.

The textures themselves were based on reference images supplied by Neil (a photo of an asteroid, a shot of the Space Shuttle cockpit and so on) and discussions that occurred as the textures where developed. I took screen shots of the UV maps in Cinema 4D and opened them in Photoshop. All the textures were painted at twice their final target resolution. They were rendered using a mixture of filled and stroked selections and hand painting. Public domain photos from the web were overlaid on the painted texture to add detail to the metal, concrete and stone surfaces. I also placed blurred highlight lines along the model edges where I wanted emphasis.

Overall, given the limited time I had available to UV map and texture the models, I am pleased by the results. I would like to get involved in more game texturing in the future and am sure that what I have learned from this project will come in handy.

Brian Smith

www.steampunk.demon.co.uk

www.mikkotarmia.com

Water Tower 3D

I knew at the beginning of the contest that this was a huge project to take on for a three month time frame. I did as much planning as I could ahead of time, and studied all of the technologies I thought I’d need. I wrote up a thorough design document, and showed it around to a bunch of other developers for feedback. When the contest start date finally came around, I felt pretty well prepared for what was ahead.

Development Tools

IDE

I used Project Builder as my IDE. Up until the contest, I’d been using-don’t laugh-MPW. I nearly ended up using MPW for the contest, but recent events convinced me that it was finally time to drop Mac OS 9 support, and move on to Mach-O. I’ve looked at Xcode, and I feel that it is rather bloated and unintuitive. While a bit older and no longer officially supported, Project Builder seemed a better choice to me, and it worked without a hitch.

Text editor

BBEdit was the most essential tool for me. I’ve been using it for code editing for years, and it’s the best text editor I’ve ever used, hands down. Syntax coloring, regular expression find and replace, and many other features make it a fantastic programming tool. In September, I upgraded to the newly released BBEdit 8.0. It had a feature that made my workflow much more efficient: single-window, multi-document editing. I had previously been minimizing each source file’s window to the dock—not a good solution when you have more than a dozen source files!

Graphics

I tried out several different image editing programs early on, and was having trouble finding one that suited my needs. I don’t own a copy of Photoshop, and didn’t have the money to spend on one. Eventually, Daniel Lurie recommended the GIMP (GNU Image Manipulation Program). I was initially turned off by it, as it ran in X11, but after using it for a while, I found that it really worked quite well. It served me well over the course of the contest, and I feel it gives even Photoshop a run for its money.

Audio

I used two programs for audio: Amadeus II and Reason. Amadeus II is a great little shareware audio editing program, and one of the few shareware programs I’ve actually registered. I had a bad experience with Audacity, and there didn’t seem to be anything else usable out there. Some sound effects were recorded, some were artificially created, some were copied from the original Water Tower (a fact of which I’m not proud—I wish I’d had time to redo them), and some were created in Reason. I wanted to write background music for the game, but unfortunately, due to lack of time and lack of musical talent, that didn’t happen.

Models

I looked at a few modeling programs, but they all seemed to have a rather steep learning curve, and I couldn’t be bothered to spend the time choosing one and learning to use it. None of them quite managed to fit my needs anyway. I ended up creating my own model format, and typing in most of the models by hand. For some of the more complex models, such as the deadly block, I wrote a small console application to generate them programatically. While far from an ideal solution, this at least allowed me to get the job done and move on.

What Went Right

Game Concept

Since I was building on a game concept I’d created the previous year, I didn’t have a whole lot of work to do here. Essentially, I just had to figure out how to make the transition from a 2D world to a 3D one. I had some crazy new ideas for game features, but a lot of them didn’t make it. By the end of the contest I had a game that was very similar to the original. While I would have liked to explore new concepts a little bit further, I feel the original gameplay survived the transition to 3D very well.

Code Structure

I had learned a lot about writing better code since the uDevGames Contest from the previous year. Working with another programmer helped me see new and better ways to write things, and after adopting what I feel are better coding practices, my coding has become more efficient. Toward the end of uDevGames 2003, the Water Tower source code had gotten to be such a mess that I could scarcely add a single new feature without causing three new bugs. Water Tower 3D was a completely different experience. The code remained clean and readable throughout the entire project, and was very flexible. Adding new features was almost always painless and easy. Keith Bauer, another programmer, looked over my code toward the end of the contest, and told me it was nicer and more readable than most other code he’d seen.

Animation

When I was planning the game before the start of the contest, I knew that character animation was going to be one of the bigger challenges. I did some research, asked some people who had done this sort of thing before, and came up with a system I thought would suit my needs. I wanted to get as much research as possible done before the contest started, and since animation seemed like such a large unknown, I spent most of the month of July working out how to do it. When the contest started in August, I was pretty satisfied with my animation system. When the time came to implement it in the game, it was up and running in a matter of about two days. The results were quite pleasing. During the course of the contest, I got many compliments on how well-animated my character was.

Asset Management

Managing assets for the game was a pretty smooth process. I had a directory full of human-readable ASCII files that were used for models, animations, and textures, as well as a separate directory for the texture images themselves. I could set up material properties for each texture, and change which texture is used on a model by changing a string in my model file. My model and texture loading code loaded all of the files in the directory at startup, so no additional loading code was needed when I added new models or textures.

What Went Wrong

Water

The biggest trouble I ran into during development came when I tried to implement water. I wanted a system where the water would flow more realistically, as opposed to a flat plane rising at a constant speed, as it was done in Water Tower. I started on the water system in September, thinking I could get it up and running in about a week.

A week passed, and it still wasn’t working, so I figured I’d give it another week, as it was a very important gameplay element. Another week went by, and another… Before I knew it, I had spent more than a month of development time doing almost nothing other than work on the water system. That’s a gigantic loss of time for a three month contest! Eventually, I realized that if I continued on the water system that way I had been, I wouldn’t have anything even close to releasable by the end of the contest. I cut my losses and implemented Water Tower-style water, and was done with it in an evening. To this day, it’s the thing I’m the most disappointed that I wasn’t able to do in the game.

Too Big a Project, Too Little Time

I knew from the start that this project was really asking a lot of myself in such a short time frame. With everything I wanted to do with the game, there was no way I could get completely finished in three months. I tried to prioritize the most important game features so that I could at least have a working, playable game by the end of the contest. I don’t feel that I did a very good job on this. Some fairly essential game features were still missing by the time voting started, and there were some other things I really could have done without that took a lot of time. I do feel that I’ve pushed my limits and done more than I could have imagined in the time given, but the project was still much too large to be appropriate for uDevGames.

The Character Model

Another big unknown was the character model. I had very little experience with any modeling program, and hadn’t ever modeled anything as complex as a human before. For the first half of the contest, I was using a white stick figure for the character. I would have liked to create a more realistic human model, but I didn’t even know where to begin. When I was showing the game around to coworkers one day, someone had a suggestion for at least a start: stick with the model I had, but give it colors to make it look like a character from the Atari 2600 era. The effect wasn’t too bad; a definite improvement. I spend some time proportioning the character to look less like a stick figure, and eventually decided the result was good enough for the contest. While not really satisfied, I was at least able call it “done enough” to move on to other things in the game.

Camera

There were some usability issues that I unfortunately never addressed. One problem, which seems to be inherent in any 3D game, was the camera. I put all of the responsibility of moving the camera on the player. While it’s nice to be able to control the camera, it’s not something most people want to have to worry about in the middle of the action. I had some ideas for how to make this nicer: I was going to have an invisible object that could be placed in the level editor that I called a “camera hint.” When the player walked over a camera hint, the camera would pan to a predetermined angle. Well-placed camera hints in a level could make it unnecessary for the player to adjust the camera at all. Add that to the long list of features that didn’t make it.

Levels

I wanted to have at least four different level sets finished by the end of the contest: Tutorial, Easy, Intermediate, and Advanced. Sadly, the levels you see in the contest version are none of those; they’re still placeholders. The difficulty is about at Intermediate level, which is also a problem…the game has a rather steep learning curve for beginners. I have to wonder how many people stuck with the game long enough to get the hang of it.

Conclusion

While I’m proud of what I’ve done with the game, I have to admit that it was simply too large of an undertaking for a contest of this scope. However, if it hadn’t been for the contest pushing me to finish, I probably would never have gotten anywhere near this far with the game. It would have been just another project on my this-would-be-cool-but-I’ll-never-get-around-to-it list. I’m planning to come up with a somewhat smaller project for the next uDevGames Contest. It would be nice to be finished by the deadline for once!

I was told by many developers that I was crazy for trying to do this alone. Many times when I felt overwhelmed, I considered looking for other team members to take some of the load off, but I stuck it out by myself to the end. The main reason I enter uDevGames is to learn new things; how can I learn if someone else does the work for me? This experience is invaluable. I feel that I’ve furthered my abilities as a programmer, an artist, a designer, and a musician. This is my goal. This is why I do what I do, and why I enjoy working alone.

A big thanks to iDevGames and all of its staff members for organizing this contest. It’s one of the best things in which I’ve ever participated. Thanks to the sponsors, for donating some great prizes to motivate developers to do better. And thanks to Apple, for creating this wonderful computing platform.

  • Developer: Alex Diener
  • Language: C
  • APIs : Carbon, OpenGL, OpenAL, FreeType, Vorbis
  • Source files: 71
  • Lines of code: 17,110

BlitzMax for Mac OS X Released

BlitzMax is the new, next generation game programming language from Blitz Research. BlitzMax retains the BASIC roots of Blitz3D and BlitzPlus, but adds a ton of cool new features and abilities. BlitzMax is BASIC—with a few twists, including:

  • Function pointers
  • Fully dynamic arrays
  • Inheritance and polymorphism
  • ‘By reference’ function parameters
  • Byte, Short, Int, Long, Float and Double numeric data types
  • Array and string slicing
  • Flexible ‘collection’ system for dealing with linked lists etc
  • Low level pointer handling
  • UTF-16 strings
  • The ability to ‘Incbin’ binary data and access it as easily as if it were a regular file
  • External language support for interfacing with C/C++/Objective-C or assembly code.

BlitzMax programs can be compiled for Mac OS X, Windows and Linux PC’s. The BlitzMax license is ‘all in one’—buy BlitzMax once and run your programs on all three platforms.

Related Link: BlitzMax

blitzmax,macosx,released

uDevGames 2004 Awards Show

On tonight’s broadcast of The Gamesome Mac, the Mac gaming radio program, hosts Sean Smith and David Finley, together with iDevGames’ Editor-in-Chief Carlos Camacho, host the uDevGames 2004 Awards Show. Now in its fourth year, uDevGames is the annual independent Mac game development contest. Sponsored by iDevGames, the Macintosh game developer community, this year’s contest has attracted 31 entries and over $33,000 in prizes.

“This year’s games are the best ever. The quality is way up,” said Carlos Camacho. “Contestants had three months to develop a Mac game from start to finish. So that other developers can learn from their experiences, all games and source code are made freely available, and tonight’s winners will publish post-mortem reports on the development of their games.”

Not only will Sean, David, and Carlos announce the winners and runners-up from uDevGames 2004, they’ll also talk with some of this year’s contest developers, take questions live from listeners in The Gamesome Mac’s chat room, and give away over $1,400 worth of listener prizes.

The uDevGames 2004 Awards Show can be heard live on MacRadio from 6 to 8pm Pacific Time, 9 to 11 pm Eastern (Tuesday from 0200 to 0400 UTC), and on demand thereafter. Listeners can tune in at The Gamesome Mac’s Web site, where they’ll also find archives of past programs. QuickTime 6 and a 56K or faster Internet connection are required.

Frogspawned

The Toolkit

As an off-shoot to my game development, I also maintain a codebase called SDLGameBase, which is a simple setup, event loop and teardown routine for 2D games. So of course the choice to use that was a bit of a no-brainer as far as I was concerned (more on this later). It uses C++ as the main language, and I did most of my developing in Xcode, apart from some external libraries which I built at the command line using the standard UNIX configure & make approach. For graphics I tend to use Photoshop for drawing and compositing images, and most of the sprites were hand drawn by me.

First Steps

Originally, I wrote a small demo application called BuzzTest, which simply had a bunch of flies flapping their way around the screen. For added interest, I had a fly-swatter which followed the cursor, and could be used to squish the flies, leaving a nice bloody trail behind it. But this was just a distraction and not really a start on the game proper. However, it did throw up a few problems…

SDL — Just Too Slow

I was using the standard SDL blitting routines, which were causing problems when I had lots of flies on the screen at one time. Once I was drawing a background image as well as all the sprites, the frame rate slowed right down to a crawl, even with the addition of a dirty rectangle system so that I wasn’t redrawing the entire screen each frame. At this point I still had bags of time left, as it was only a few weeks into the contest, so I decided to bite the bullet and go to OpenGL, purely for the speed boost. This was actually pretty straightforward to do, since I was able to keep most of my SDL setup code. I rewrote most of my drawing code to abstract away the OpenGL calls, which was fine since I only wanted to do 2D graphics anyway. The main sticking point here was getting the images to load correctly and bind to textures so that I could use them to texture quads which I then would draw to the framebuffer. I also had to find a decent font rendering library, and I eventually settled on FreeType and FTGL, which were an absolute nightmare to build and bundle with the game. Eventually I managed to build and link static libraries which were distributed within the game bundle.

Real Life Kicks In

Towards the end of the summer and at the beginning of the university term, I found I had very little time to work on Frogspawned due to work and study commitments. Eventually it got to the stage where I had a frog who could jump around the screen and eat flies, but not much else, and there were only two weeks left until the deadline for entries. Undeterred by this, I abused the goodwill of my other half and several gallons of coffee, and put in a string of late nights to get the game done.

Cutting Back

Obviously, in this time period I was never going to get as much done as I’d originally hoped, so I decided to abandon having several types of level, and stick to only one scenario—the pond. I had originally intended the game to progress through several scenes: the pond, the meadow, the railway, the road, and finally the school, but this was not to be. However, in the last few weeks I did manage to draw all the graphics to replace the placeholders I had used during development, adding 10 levels to the game, a time limit on each level, as well as a main menu, instructions, customized controls, and all the little features that go towards finishing a game. I even managed to find a decent free music loop to go into the game, but as comments showed, perhaps it wasn’t the best choice of style (hard-rocking guitar) to go with the game. Never mind…

The Final Project

I did manage to get the game in on time, in a pretty much complete state. I didn’t get as much done as I’d have liked, but then I wasn’t taking the whole project particularly seriously in the first place. Overall I’d say I was happy to have turned out a half-decent game in a very short space of actual development time, and I’m now going to take a bit of a break until the new year, when I will start work on a new project entirely!

What Went Wrong

Debugging

I spent a long time debugging near the beginning of the project to get the flies to be released from memory properly in various situations where they could be eaten, as in some cases I had several pointers to the same data kicking around—probably due to bad design on my part.

Project Management

The timing of the whole project was quite awry. This was mainly because I had no plan that I was trying to follow, and I’m still not too bothered about this. Most of the work was done in the first two weeks and last two weeks of the contest!

What Went Right

OpenGL

Switching to OpenGL was a big win in terms of the speed boost it provided. It will also be a big help if I ever want to build a truly 3D game world. With most of the boilerplate code written and tested, I am quite happy that I can take it and run.

Graphics

The game graphics were great fun to draw, as all the frog poses were done by hand in Photoshop. I’m not much of an artist, so I was pretty chuffed with how they turned out.

What Next?

The main thing that I will be taking from this project is the OpenGL graphics code. I am planning to add it into the next release of SDLGameBase, which should hopefully make it a much more useful code base for both myself and others to use. Apart from that, I intend to leave this game alone. If anyone enjoys playing it, then that’s great—if not, then at least I enjoyed making it!

SDL,C++,Xcode,OpenGL,FreeType,

Kill Dr. Cote

Project Overview

Kill Dr. Cote was originally a game that a few friends and I made with Hypercard in 1995. It was a simple, black-and-white top-down shooter, but was quite popular on AOL and got a lot of e-mails.

In the remake, you’re thrown once again into the oddly octagonal laboratory of the diabolical Dr. Cote. The object is simple: “Shoot Everything.” Use the keyboard to run around like a maniac while using the mouse for your firepower. Aim, click to fire, and right-click to chuck a grenade. Wave after wave of zombie test subjects will hound you, with the occasional visit by the Doc in person. It is simple, intuitive, and very, very addicting.

Team and tools

The dev team this time around was just myself. As a result, I knew right from the start I’d have to eventually wear every hat, and get everything done much faster than usual. There were some big lifesavers along the way (Garageband and Photoshop) but next time around I definitely want to team up with a talented artist.

Xcode was the IDE of choice for this project, as it’s free and easy (enough). For graphics, Photoshop rules. Period. You pay for what you get, but it’s so worth it. For sound editing, Audacity ended up being the tool of choice, and turned out to be a lifesaver for its ability to export to Ogg Vorbis. For music, I used Apple Garageband along with a Juno-106 MIDI synthesizer.

For additional libraries, I used OpenGL, SDL, SDL_mixer, and SDL_image. SDL was a great decision—it made a lot of mundane things very easy, and it meant that the bulk of the project was cross platform. There’s a Windows port of Kill Dr. Cote being worked on as I write this.

What Went Right

Sticking to the original vision and designing everything first.

During these three months, I’ve kept a notebook for the design of Kill Dr. Cote. It’s a 100-page notebook filled to the brim, and everything is written down in there somewhere. Whenever I envisioned something, it went in the notebook to make sure I lost none of the details. The game follows this notebook 99.9 percent of the time. The list of guns I came up with in the first week of the contest became the exact selection of guns in the final game, except for the mines, and they all behave exactly the way they were designed.

I wouldn’t say it’s as much of a design document as it is a design journal.

Having awesome gameplay and controls from day one.

As soon as I had my first prototype finished, I knew that winner or not, this game was going to kick some serious rear. I can modestly say that the gameplay rules—even better than many commercial games. This gameplay really motivated me and gave me tons of momentum.

I’ve always firmly believed that controls make or break a game. I believe it even more now. Kill Dr. Cote’s controls are simple and intuitive. One hand moves, the other shoots. They’ve been that way since the original prototype, and they haven’t changed, aside from adding more key quads for movement (keypad, and IJKL). Having them customizable would make them perfect. The result is that the game, despite its difficulty, is incredibly easy to pick up and play.

Amazing support from friends, family and peers.

Seriously, I couldn’t have done it without you guys. My friends and family were very understanding and supportive of me during these three months. Things were bumpy at some points, but eventually everyone realized how much this meant to me in terms of both my future career and personal fulfillment. I have friends who let me bring my laptop with me when I would come to hang out, tell nearly everyone they met that they knew a game designer, and even sneak me into their yoga classes to keep me in halfway decent shape.

The enthusiasm from my peers has been overwhelming as well. The first feedback on Kill Dr. Cote I ever received was “Holy CRAP this game is fun! I could hardly tear myself away from it to write a reply…” (Thanks Alex!) The response to the game has been overwhelmingly good. Upon releasing the game to the public (uDevGames, MacUpdate and MacGameFiles… holding off on Apple and VersionTracker for now for bandwidth reasons) I got a lot of emails from new Cote addicts—enough to start a mailing list. It’s really awesome to get another email or two a day saying how much butt the game kicks. It’s been constant fuel for me throughout the contest.

Burnout recovery.

About halfway through the contest I burned out—hard. It was a result of running into a huge roadblock with the graphics (see “What Went Wrong”), overworking myself with everything else, and realizing that I had neglected my classes so much that I had to drop some of them. I was working myself to the point where I’d literally fall asleep out of my chair and sleep all night on the floor. All I could do was open up Xcode, stare at the code for a bit, then I’d need to take a nap.

So I started taking days off. I felt I did a good job of taking weekends and sometimes entire weeks off from coding. I set aside “asset weekends” where I would only work on drawing or music. (From my blog: “If I catch myself with Xcode open at all this weekend I’m going to kick my own a**.”) I took several trips out to California: a week-long trip to Venice Beach, and a weekend to my sister’s apartment in Fullerton which I barely remember except for the excessive drinking.

Because of these extended breaks I was able to come back to the project completely rejuvenated and ready to kick butt. Hope you’re taking notes, EA.

What Went Wrong

Focusing too long on gameplay.

Way too long. I didn’t even have graphics or music until the third month. The player and Dr. Cote didn’t have graphics until the final few days. The graphics that I did put in ended up being rushed and sloppy. The main in-game music track, “Brain Eating *****,” was meant to have another verse complete with synth solo. Never got it. I copied the first verse, changed the few chords at the end, and looped it. The slashing sounds you hear are corners being cut.

So what was I doing the whole time? Gameplay—more guns, more explosions, more enemies, more carnage, and it all had to be awesome. While I personally don’t consider it a mistake, I can see how it could have hurt my contest scores in graphics and sound. My personal priority was to have a game that was fun as heck, and addictive in that good, one-more-game way, and not have a game that skimped on the fun just to maximize my votes in as many categories as possible. Think I’m just saying that? Check out the story.

It was a personal decision. I suppose whether it was wise or not depends on your attitude toward games and toward the uDevGames Contest.

Not having graphics style pinned down.

This drove me absolutely nuts, and was a major reason behind my burnout halfway through the contest. The original design had everything in 3D. Player, zombies, Dr. Cote and the robots were all supposed to have 3D models. The player would have skeletal animation with keyframing, as would the zombies. You could also blow off arms and legs and they would separate from the skeleton and move independently.

The problem? I had absolutely no freaking idea how to do any of this. I’d never done 3D before, never mind skeletal animation, and my 3D modeling skills were… well, I have no 3D modeling skills.

The alternative was to make everything 2D sprites, and just put them on billboarded quads. But it looked weird, and didn’t seem as cool. I went back and forth on this literally a dozen times during the second month. It caused me all kinds of stress. I kept trying to learn skeletal animation, but I had no idea how to create the required assets. None.

What eventually tipped the decision in favor of 2D sprites was Excessive mode. I loved tweaking the guns to make them ridiculously powerful, and I finally decided to put them all together in a difficulty level with about 500-1000 zombies at once. There is no way in the world I’m putting 1000 3D models on the screen. I loved Excessive mode so much that the only way to make it remotely playable would be to make all the zombies 1 quad.

Very rushed and fatally buggy November 6 release.

The weekend before November 6 was extremely rushed and stressful. The player graphic still wasn’t in, Dr. Cote didn’t even exist yet, and many key pieces of the game were missing. The only sleep I got that weekend was by accident, when I’d roll out of my chair and just not want to move for a few hours. To top things off, this was the weekend after I had miserably failed a midterm, and had made the decision to drop two classes.

As a result, a lot of bugs snuck through when I put that build up—really big freaking bugs with sharp teeth and acid spit. The next morning I had emails saying basically that the game was awesome but it keeps crashing, or has stopped running altogether. I wanted to scream. I watched the download count shoot up in horror. It was my first finished game and it fatally crashed on launch.

So what did I do? I took the day off, (see “What Went Right”), actually went to my one remaining class, had lunch with a friend, ate sushi, had fun. It was rejuvenating, and that night I fixed every last bug, and answered every last email. In my replies I offered to continually keep people updated whenever I made more bug fixes and updates. Everyone was very receptive, and that first round of bug reports became my mailing list.

What I learned from uDevGames 2004

A better understanding of the development cycle.

While I was developing, I was able to schedule very effectively. I had monthly, weekly and daily goals, and achieved the vast majority of them. That is, up until I released the first close-to-finished build on Halloween night (build 4). It added a ton of new stuff, and it got lots of feedback and suggestions. As a Mac app there were still a lot of holes, and there were a lot of bugs. These all needed to be addressed. The problem is, addressing all of them pushed everything back about a week and a half. With about a month left in the contest, that was about a 33 percent increase in the time I would have required.

Everyone’s always told me that debugging something takes just as much time as coding it in the first place. I believed it and braced myself but still wasn’t ready for the vast increase in time.

Finally, it’s hard not to suffer from feature creep when you get tons of emails all with the same few suggestions, many of them really cool and feasible. Upgradeable weapons and Internet high scores? Too awesome not to have in the game, but everything adds to the time budget.

Being a lone wolf sucks!!

The advantage of being a lone wolf is that the resulting game is purely my vision, and that makes my ego happy. There are no arguments, no group discussions/votes over some inane nonsense like the initial upward velocity of the zombie giblets. What I say goes, because there’s no one to argue with me. This makes things go way faster. Plus, there’s no one to check my sick sense of humor. “Shoot Everything” probably never would have made it into the game if it were put to a group vote. Honestly, how many serious developers would be willing to throw away any chance at winning the story category for a few tongue-in-cheek laughs?

However, the disadvantages turned out to be many. The most obvious is that I had to wear all the hats: Programmer, Artist, Musician, Marketer, and Producer. The result is that I had way more mutually exclusive work on my plate than I really wanted, and the quality of the game suffered because less of each got done. The other obvious disadvantage is that I’m not particularly good at a few of the hats. I’m horrible at art, and it’s obvious from the sprites. I hate doing it, and it hates being done by me. I have a newfound respect for artists, and I definitely want to bring a talented artist along for the ride next time. As for music, I love working on it, but I’m still an amateur musician, and it takes time. Finally, working alone means there was really no one there for constant motivation. Having a teammate means having someone to potentially let down, and that always fires me up. Having another person working on the game with me may very well have prevented my burnout halfway through the contest.

Future plans for Kill Dr. Cote

There are a lot of ideas I had for Kill Dr. Cote that never made it into the game. There are also a lot of ideas I had that I knew I’d never be able to do with my current skills and time budget, things like multiple playable characters each with a different weapon set, boss monsters, different laboratories with traps; the list goes on. The only way to truly realize all these ideas would be a future sequel.

As for the game as it is now, I want to implement all the minor features that haven’t been put in that I had planned to finish before the contest deadline. Things like the robotic hunter-killers, a cooler SNES-style cinematic intro, upgradeable weapons, and Internet high-scores, along with a round of bug and gameplay fixes. I’m definitely not done with the game just because the contest is over.

After that, I’ll probably create a website to host the Kill Dr. Cote Internet high score list, and any future projects. My personal site just doesn’t do the game justice. It needs a proper vehicle!

There will be a point however, where the planned changes will have to be put off until a sequel. I love Kill Dr. Cote but I’m eager to move on to my next project. I have a lot of cool ideas that I’m sure fans of Kill Dr. Cote will love. Someday, though, you can count on me returning to the laboratory: “Kill Dr. Cote… Again.”

Conclusion

Truthfully, these have been three of the most exciting months of my life. A look at the original Kill Dr. Cote from 1995 makes it obvious that I’ve been working towards being a game developer since I was a kid. uDevGames gave me the motivation to follow through and finish a game, and getting to know and prove myself to my peers at iDevGames has been a really wicked experience. Regardless of how the votes turn out, no gamer nor developer can deny the blissfully addictive butt kicking they get from Kill Dr. Cote, Gib on!

Xcode,OpenGL,SDL,gameplay,3d,SNES

iDevGames Forum

iDevApps Forum