Entries in this blog

Hello all, my GDNet+ status was just activated and this is my 1st journal entry! In case you may not know, I was the one that designed the 4E4 game Zirconia 2 , which took 4th place in the contest.

Overall, 4E4 has been a lot of fun and a learning experience (yes, the last 20% actually does take 80% of the time). I really didn't expect to place this high in the contest; I was kinda intimidated by all the 3D FPS entries and maybe mine would get overlooked cause it was "only" 2D. It's also the first time I've made a complete game using C++; my previous games were mostly using VB. I'll say more on my choice of languages/engines next entry.

I'm currently in the "in between" phase regarding my next project(s). I'm a bit burned out from 4E4 and would like to take on a smaller project. There is a plan for version 1.1 of Zirconia 2 however, no really big changes- mostly bug fixes and a few new cards.

What is going to follow in subsequent entries is a postmortem of my 4E4 game (not all at once though).

Currently revamping the gameplay for the first part of the game, the previous rules I had just weren't fun enough.

Now it works as follows: Enemies sometimes have numbers on them. When it is defeated, you add that number to the "blocks" at the top. Certain blocks have stats underneath them; the value of the stat increase is relative to the number you just obtained. When all blocks are full, you get a bonus, and then the next block layout will appear.

For the 2nd part, the rules will remain the same. Blast all the enemies that have misspelled words on them.

The last part of the game, will be the boss, which I have only implemented a placeholder graphic for.

Overall, 2005 was a great year for me, it was when I stopped "messing around" with various incomplete VB stuff and started to work on more serious projects. Most notably was my 4 Elements 4 game (Zirconia 2), and I've also took part in some mini-contests such as 3H-GDC and LD48.

Right now, I'm currently suffering from programmer's block, not sure what my next project will be. It will most likely be freeware, not trying to go commercial just yet. I've had some initial ideas in my head, but that's just about it. Here are some of those ideas:

* A single-player RPG. I've tried to design an RPG in the past, and never got to finishing it. In order for it to actually be a feasible project, I need to make it "lite" somehow. I don't really want to go for a Diablo-style hack and slash though. * Simple puzzle-type game. This seems to be the best route for getting a game out quickly. A really saturated genre, I worry that the game may turn out to be too simple and not innovative enough. * Mini-game collection. I've done some of these in the past, they were quite fun to play. One can easily mix many genres here, I think I may take this route because it seems the most "fun", although I would go for quality over quantity this time.

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.

Here is a screenshot of the project I am working on. Despite what it looks like, I plan to make it a type of shooter/puzzle hybrid game. Right now I'm working on the projectile system, I just have the character shooting fireballs at the moment.

Next up is working on some of the enemies (I don't plan to have that many this time), and maybe add some more terrain. I have not fleshed out the puzzle element completely though, this will be worked on soon.

I'm gonna finish my Zirconia 2 postmortem in this entry, and then show a preview of my upcoming project.

Enemies For the enemies of Zirconia 2, they were originally ALL planned to be zombies. This was of course going to cause problems eventually, since there were 30 different kinds of enemies planned and there would be no way to possibly come up with that many different kinds of zombies! Towards the end of the project, 24 enemies made it in (a wide variety of things other than zombies) but zombies still made up about 40% of those enemies. The Enemy class I used contained the usual member variables, like hp, attack power, and score value, plus the movement pattern of the enemy. This movement pattern can be one of 14 patterns I made up: do nothing, move linearly, use a sine wave pattern, a circular pattern, etc. There are no set enemy waves in the game, everything is spawned at random.

Combo system The combo system was not in the original design, surprisingly. It actually added a lot of strategy to the gameplay, as when you finish a combo, an appropriate number and type of enemies would spawn on the opposing side. You could purposely wait for a lot of enemies to spawn on the screen, then take them all out in a combo. You also have to watch your opponent's combo counter, so that you can prepare for some enemies to spawn on your side (and you can take all those out in a combo, and add more enemies to your opponent!). This was one positive thing that came out of the "feature creep" session I had during the halfway point of development.

Cards There are over 300 cards designed for the game. Some of them are very simple effects, like power +1, and others are more complex attacks. In retrospect, I probably shouldn't have made so many cards, as writing the code for them was very time consuming. Also, each vehicle has a set of unique special weapon cards that are only available to a specific vehicle. This adds some replay value to the game, as you will have to beat most opponents to get all the special weapon cards.

Overall, this has been the most complex project by far I've worked on. Even though the game could probably use more polish, I am pretty satisfied with way it came out in the end. Some of the code was quite a mess unfortunately, looking at all of the 12K or so lines of it; I probably should've broken up my code into even more files. This concludes my Zirconia 2 postmortem, I will say more on my current project in the weeks to come.

Here is a small preview what I am working on, still in the beginning stages, just getting stuff on the screen:

Finished with phases 1 and 2, now currently working on the boss. I have implemented lazer cannons, if you stand next to one, it will continuously fire lazers.

The puzzle element in phase 2 is a bit different. Enemies will sometimes have words on them. Your goal is to defeat the ones that have misspelled words. If you kill an enemy that has a valid word (i.e., a false positive) it will counterattack.

Ever had an initial idea planned out, but after you implemented it and tested the initial gameplay, it is not as fun as you thought?

I've done some testing of the puzzle element of my current project, and it did not meet my expectations.

I'm currently re-writing my gameplay code, thinking of a way to make it more fun. It plays like a standard horizontal scroller; there will be 2 relatively short phases, each with a different gameplay element added to it.

I've just completed version 1.1 of Zirconia 2 and it's most likely the last update for a while, so I'm gonna put the Zirconia 2 postmortem on hold for a bit.

I see that there are some game development contests coming up, the 3-Hour GDC, and Ludum Dare. I'm looking to get a new project (or 2) complete before the holidays, so I'm probably gonna enter these contests and see what I can come up with. I've never done a very short term development contest yet, so this will be a learning experience for me. On the other hand, I'm more familiar with HGE, the game engine I plan to use, so hopefully I can get things up and running faster.

Just bought some new hosting for my site, since I was tired of using a free host. I decided to go with siteocity hosting; it is relatively inexpensive: $24 per year for 5GB of monthly bandwidth. I know there is probably cheaper hosting available but they've got some good reviews according to other webmasters and they also respond to support emails.

I've given my site a slightly new design, changed the background color of the logo at the top to a more bluish color instead of grey. I don't have any projects planned currently, I want to take a break for a bit after just completing Cognizance. I may write some quick prototypes of games that I would like to make, just to make sure they are viable ideas.

Currently working on the boss phase now. I haven't really done any bosses before in games, so this is somewhat challenging to do. Actually implementing each of its attacks is a pain, and I have used some "hacks" to make the boss act the desired way.

Since it got kinda boring just fighting the boss using your regular shot, I have added "elemental" tiles for this phase that you can stand on to perform an extra kind of attack.

Do you think that is it absolutely required to be innovative? I think it is a bit overrated, that maybe the overall fun of the game is more important than innovation is. I do have a list of zany/weird ideas that I want to implement, but most of the time they are not turning out to be that fun in the end.

After all, gamers are continuing to buy the titles with huge roman numerals after them, and you seldom hear complaints that "this game isn't innovative enough". Although one should avoid direct clones of other games, there maybe is a such thing as trying too hard to be innovative and not worrying about the fun factor.

After a long break, I've finally decided on what my next project will be. It is planned to be a shooter/puzzle game hybrid (with maybe a 3rd genre mixed in). I haven't finalized much of anything yet, and do not have any screenshots currently (it is currently untitled, I'm terrible at thinking up names).

This will be a minor project, which shouldn't take more than 2 months to complete. I'm actually aiming to complete it within a month, as I would like to finish a minor game rather than a big project which I did at 4E4.

I'll also finish up on my Zirconia 2 post-mortem soon, almost forgot about that completely. I'll relate how I plan to use some of its code for my current project (though my current project has completely different gameplay than Zirconia 2).

I'm about done with my current game, I am busy tweaking various numbers to balance the difficulty levels and other things of that nature. Sometimes the boss was very difficult and had too many hp, so I toned it down a bit, and then it became to easy, and so on.

It really is a more difficult process than one might think, I didn't think that "just tweaking numbers" would take as long as I thought it would!

On a related note, I think the music I chose for the boss is pretty catchy (it isn't composed by me BTW). The boss also gets different attacks depending on the difficulty level selected, which I think gives the game some variety and replay value. Some of the attacks on higher difficulties are pretty weird though!

Anyway, I should have the game complete sometime this week, and I'll upload it to the showcase at that time.

More gameplay tweaking has been done; I think I have settled on something fun and playable at least. Here is a rundown on the previous gameplay versions I had before:

1st version Enemies spawn periodically, they have letters on them. When an enemy is killed, that letter gets added to your word. You must form words from those letters.

Why it wasn't fun: Too random. Often times there were not enough vowels or common letters (even after adjusting letter frequencies) to form words easily, causing frustration.

2nd version Same as the 1st version in that enemies spawn with letters. Except this time, hitting (but not killing) an enemy increases the current letter value by one (it loops around if it's at Z), and killing an enemy increases your position in the word by one.

Why it wasn't fun: Too slow-paced. The player would often avoid groups and groups of enemies just to "wait out" for a certain letter. Also, stray shots often unintentionally messed up your current word.

3rd (and current) version You start with a certain number of blank spaces (shown on the status bar). Enemies spawn with words (not letters). Killing an enemy with a word of the required length (it must fit the blank spaces exactly) will give you points based on the rarity of letters in that word. In addition, some of the spaces have "stats" under them, these will increase your stats based on that letter's rarity. It sounds kinda confusing, but I have tested it and it's the best of the 3 versions I have so far.

My next project, Cognizance, is now complete! I have uploaded it to the showcase here.

About the game: Cognizance is a 2D horizontal shooter game that combines a traditional shooter with puzzle and RPG elements. In the first phase, you build up your stats by killing enemies to fill up empty blocks at the top of the screen. These blocks can contain stats, the amount of stat increases depends on the number that was on the enemy. In the second phase, blast the enemies that have misspelled words! Be careful though, killing an enemy with a correctly spelled word will cause it to counterattack! The final phase is a boss, there are certain elemental tiles you can stand on to aid you in defeating it.

The controls are simple: use the WASD or arrow keys to move, and Ctrl or spacebar to shoot. Mouse control is also supported.

It was also entered into www.shmup-dev.com's horizontal shooter contest.