Doug Kavendek - Portfolio


Captain Awesome
Title Captain Awesome
Date 2004
Platforms Windows
Created For Real-Time Rendering and Simulations class
Source source (1.4 MB)
Executable Win32 (1.4 MB)
A swarm of fighters

For the newly-created Real-Time Rendering and Simulation class (with a focus on 3D game creation), we were given, with barely a month left in the course, the task of creating a 3D game. I chose to work individually. I am a fan of top-down scrolling flight games like Tyrian or Raptor, and I had some ideas about how I could create something similar in 3D, with the same basic gameplay and interface.

I created a very one-dimensional map structure, which was simply specified with a string, with various characters signifying different segments along the level. In this manner, I could create maps that twisted and turned different directions, and populate them with enemies. Then each map would conform to some predefined style, which determined turning angles, segment lengths, textures, lighting, and other parameters. As a result, it was really easy to create maps, and each map would be guaranteed to be playable.

Colliding with an enemy in the Metal map

The rendering of the maps is pretty simple. A given terrain style had an associated "cross-section", which was propagated along by segment length and segment angle parameters, generating a series of connected hollow cylindrical objects. This structure was generated on the fly as the map progressed, and simply discarded segments that the player had passed, as movement was strictly in the positive direction. This game would have greatly benefited from some level-of-detail adjustments, but I was not quite at that level yet -- this was actually the first program I made that even utilized texture-mapping.

Gameplay is ludicrously simple. The mouse points your ship around, and it moves inexorably in that direction, though you can adjust your overall engine speed. The two mouse buttons fire different lasers, and the WASD keys strafe your ship relatively. The goal of the game is to simply make it to the end of each map, though destroying enemies along the way earns points. You lose armor if you take damage while your shields are down, and you explode if you run out of armor, and of course, you've only got a handful of lives to get through all the maps. Luckily, with the time-frame given to me, there are only four maps, one of each map style, so getting to the end is not terribly difficult.

Cheap damage/explosion effects

I included the Coldet libraries for collision detection, but I don't think I did a very good job of it, as the wall collisions are a little shaky. The enemy behavior actually works pretty well, as I imported some of my flocking concepts into it to keep them avoiding walls, moving towards the player, and avoiding collisions with each other. They also put a bit of a lead on the shots they take at the player.

As for the models, I managed to find quite a few appropriate ones on a site by Lars Rinde, and the textures are either from various image searches, or from Half-Life. I can take credit for the floating, spinning mines, but it is obvious that I am responsible for them because they are terrible. I have not mastered Milkshape 3D.

In regards to gameplay, this game is actually far more fun to simply play by avoiding collisions and enemy fire, as it is really difficult to do so while also shooting at the enemies. I would like to redo it completely, but with a focus on that concept instead. Given the time constraints, I did not have the liberty of such a complete change of goals while working on this. Also, there is really no out-of-game interface -- you're either in the game, or the game is paused. When you win, the game just pauses again, and unpause resets the game. This half-finished game structure is a bit too familiar, as by the time I get the meat of a program fleshed out, I've already come up with a better idea of how it should have been done, and by then I have to move on to something else. The ridiculously short deadline on this project did not help, either.

Taking fire in the Valley map
Avoiding mines in the Cave map
The Space map is extremely dense with enemies