4E4 postmortem, part 1

posted in Journal of xaver
Published December 05, 2005
Advertisement
Here is part 1 of my postmortem for Zirconia 2, my 4E4 game.

What is Zirconia 2?

Zirconia 2 is a vertical-scrolling 2D shooter. It is not like an ordinary 2D shooter though; another player, a computer-controlled opponent, is also playing alongside of you. To win, beat all 7 opponents by reducing all their health to zero. Each player has a hand of up to 3 cards which have various effects when used. In order to use cards, coins appearing in 3 colors must be collected. There are some cards which are "free", these are the special weapon cards that are specific to each vehicle.

It is a sequel to a game I've completed about a year ago using Visual Basic. The original Zirconia was just a standard shooter and the goal was just to complete all the levels. It only used the GDI, 256-color gifs, and is pretty unpolished. So that's where Zirconia 2 comes in- I really wanted to remake what I had and improve upon the original by adding in new elements.

Engine use

My previous games have used mainly the GDI+ with Visual Basic. It is easy to use, but very slow! I was only getting 7 to 10 FPS with GDI+ with just a few sprites on the screen. This is unacceptable for a game of this type, so I needed to look for an easy-to-use and free game engine. I first did some messing around with SDL, but wasn't satisifed due to several limitations, most notably rotation and scaling (yeah I know there are some add-on libraries like SDL_gfx). I then found HGE which was free for non-commerical use (BTW, it is now open source!) and has plenty of functions for displaying images/playing sound files, plus a nice particle editor included. It even has a resource manager to pack all of your game assets, which I find is a big advantage in keeping file size down. I then make the final decision that I will use this engine for the project, along with the Dev-C++ compiler.

Graphics

Since I'm no artist and wanted the sprites to look better than programmer art, I used combination of free resources found on the web and sprites designed by an artist (who dropped out early on). I know it kinda looks sloppy (damn pixelated Voozles!) but I was pressed for time and needed some art badly. I used one 1024x1024 sprite sheet for the enemies, another one for the vehicles, and two more sheets for miscellaneous effects.

There were a LOT of cards to be designed, so it was decided early on that there will be NO art for the cards, just text. Furthermore, there would be no room on the cards for the art since certain cards' descriptions fill up the entire card.

The preferred file format is PNG since it supports an alpha channel (HGE doesn't do color keying). To save space, I also used some JPEG's for the background images.

Tools used: Paint Shop Pro- not as pricey as photoshop, but gets the job done just fine.

Sound

Like the graphics, the music was taken from free resources and also the works of 2 fellow gamedev members (boseo and MattMcFarland) who agreed to let me use a few tracks of theirs for my game.

I should mention that BASS is the sound library that HGE uses, free for non-commerical use but is not open source. BASS supports the playing of MOD, XM, and S3M formats, which have a better quality than MIDI and a relatively low file size too.

I used mostly OGG files for the background music with a few XM and S3M tracks thrown in. The sound effects consisted of mostly OGG and WAV files.

Tools used: Goldwave- for converting between the different sound formats and adjusting the volume levels.

Game design

If you haven't figured out already, the design was inspired by then MTG trading card game. I wanted to combine genres in a strange way. It plays nothing like MTG at all really (which is turn based), so it's not a direct ripoff. It is also different from a traditional vertical shooter. You must now pay attention to what your opponent is doing, so that you can prepare for incoming enemies and/or avoid shots used against you. Additionally, you must time your attacks well, so that you can hit your opponent at the right opportunity.

A controversial design decision was to eliminate multiplayer. I'm not experienced with network programming, so the alternative was 2 players at 1 computer, which would be pretty dull since you can just glance over and look at the other player's cards and see what's coming easily.

The coding was not the best (this was my 1st C++ project), but it worked out alright in the end. I used mostly a combination of classes (Player, Enemy, and Shot), and structs (Wall and Item). Most of the code follows the basic format of:
initialize -> update -> draw
for each of the game states.

AI:
There was not much time for advanced AI, so I stuck with a more basic one. Each opponent beyond the first chooses and enemy, and then shoots at it until it's dead. Then it will select another enemy, and so on. It will not avoid any incoming enemies or shots. To overcome this defect, all opponents start with pre-built walls and the more advanced opponents can use special moves for free to kill off swarms of enemies. This design choice was for the better actually: design an AI that the average person can beat, instead of me (and players!) getting frustrated with "perfect" AI.

The 4 elements:
Here is how the elements were represented.
Robots and ninjas = your opponents; odd numbered stages are robots and even numbered stages are ninjas
Zombies = most enemies
Pirates = not heavily represented; only 1 vehicle and 1 enemy

The vehicles and decks:
The same vehicles that were in the original Zirconia are here again (with the exception of 1 vehicle- the pirate ship), with updated graphics. Each vehicle has an innate special ability, special weapon cards, unique starting stats, shot pattern, and coin distribution. There were 20 decks planned originally; this got reduced to 12 eventually due to time constraints and redundancy of some decks. In retrospect, I think it would have been simpler to just have a deck associated with a vehicle; it would've made more sense that way since, for instance, one would usually play a defensive deck when choosing a defensive vehicle.

Difficulty level:
The overall difficulty level for the game was toned down greatly, after some playtesting was done. Opponents were using cards WAY too often and resulted in players unable to avoid stuff that were being thrown at them. The durations of some negative status effects were too long and that was reduced also. The final opponent is still a challenge, however. There is always hard mode if you want an even greater challenge.

Stats

Lines of code: 11700
Sprites: 88
Animations: 117
Backgrounds: 14
Sound FX: 112
Music tracks: 20
Particle effects: 74
Total number of cards: 344
Size of game (packed): 16 MB (a lot smaller than expected!)
Time taken: 4 months


Okay, that's all I will cover for now. In the next part, I'll cover enemy design and the combo system, and explain some of the techniques I used to spawn enemies.
0 likes 1 comments

Comments

Ravuya
I've seen Zirconia 2 floating around; it is competing with my games on Madmonkey and Game Alchemy.

I'll defeat you yet. [grin]
December 05, 2005 05:27 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement

Latest Entries

Advertisement