Blastzone

DESCRIPTION:

* Blastzone is a first-person PC multiplayer shooter that is a modification of the GoldSource engine made famous by Valve's original Half-Life game.  It is a relatively tame shooter that revolves around team vs. team gameplay similar to the Domination game mode from the Call of Duty or, if you insist, similar to another Half-Life mod, Team Fortress Classic.


DURATION:

* Four months, or one college semester long.


TEAM SIZE:

* Five people.  Me, three computer scientists, and an artist who did nothing.


PRELUDE:

* This was a project idea pitched by me in a capstone class for my undergrad.  Once I learned how to program, I always wanted to make games so I can't pass up this chance.  The students I was assigned to was okay with this idea.  But going into this, perhaps the biggest mistake that I made was I overestimated the enthusiasm others had for the project.  It may have been ambitious at the time but I was willing to try new things and be a good role model for the team.


PERSONAL GOALS / ACHIEVEMENTS:

* First things first, if you're going to make a mod, you need the source code of the game to modify.  I dug up the old C / C++ Half-Life code, got it to compile and debug in Visual Studio 2008, and went over with others on how to do so.  This seemed like the hardest step--becoming acquainted to an existing database with little or no help on how to begin.  And for the second hardest step--meeting with people who live an hour away with you on a regular basis.  I was the team leader so I had to rally the troops and do code reviews on occasion.

* The good news about this GoldSource codebase is that it gives developers a standard host-client multiplayer model so adding new multiplayer code was relatively simple.  The main challenge from the game was adding new rules and features for clients to utilize.  This meant things like trigger boxes, HUD/UI elements, sprites that must follow a specific format, player stats like health & gravity, weapon stats, and entities detailed in a .bsp file's (binary space partition or a GoldSource map) XML.  Many of these things are on display in the media section with plenty enough pictures to go around.

* Added Blastzone's basic rule system.  There are three capture points in the map (A, B, or C), two teams (red or green), and three classes (sniper, assault, close-quarter-combat guy).  When members of a team stand on a capture point (more teammates = capture goes faster), as long as no enemies are on that point, it transfers to white to the team color.  The longer the point is owned by one team, the score multiplier for that point goes up so the team is awarded more points per second for holding that spot.  Also earn team points for killing members of the other team.  First team to a set score wins.

* Changed the map's XML allows any GoldSource map to be converted from one mod to another.  Blastzone's only map (the Complex from Goldeneye N64) has 3D point entities with types like "spawn_point" or "capture_node_point."  Change the XML in Valve Hammer Editor or, if you don't have the original precompiled files, edit and replace an existing map's file using tools on the Internet.  Suddenly, I've become able to rip the guts out of a map and replace it with completely new ones!  Take the "spawn_point" entity.  There are about 50 of them in the map.  Each one is assigned a tag assigned to the nearest capture point labeled 'a', 'b', or 'c'.  When a player respawns, have him respawn at a point owned by his team (ex. green team owns point A and B but not C so have green player spawn near A or B but not near C).  This is done to make teammates spawn near one another and not deep in enemy territory.

* Like any Valve multiplayer game such as Counter-Strike, the console allows the admin to enter a string of a global variable such as "friendly_fire 1" which enables friendly fire or "round_time 15" which sets the round to 15 minutes long.  These global variables can be set by the admin mid-game or in the Valve splash menus by digging in to some XML-like text files and adding those variables yourself.  I added plenty of commands to make the game more customizable.

* Set up the project file to compile two .dll's: client and mp.  This is where all the code ends up.  These two dll's are tucked away in a specific Half-Life mod directory containing the sprite/graphics, sound, models, map files, Steam splash screen menus, and text files to set the positioning of in-game HUD to certain coordinates on the screen depending on the resolution (640x480, 1024x768, etc.).  Set it up right and you and your friends can start up the mod through Steam and play a LAN game.  I saw this first-hand and my friends got a few laughs blowing stuff up!

* Presented the game to class about 4 times this semester.  It was fun to pitch a video game while everyone else was pitching business software :D

* My eight-year-old HP laptop that I used for this project had its back light burn out mid-semester.  That means I had to lug around a computer monitor and hook my laptop up to it just to see the screen.  I deserve kudos for that alone...

* Not much else to say.  Check out the pictures with details:


MEDIA:

Here is the splash menu.  That wonderfully attractive woman right there is what happens when you let programmers do an artist's job (well someone had to design new art assets!).  Someone followed a tutorial to design a combat girl model but this is what we had to work with.

An introduction screen detailing the game's rules.

Pick a class and begin playing.  Here, fun HUD elements like the "GO!!!" only appear temporarily and accompany a lovely zap noise.

Thanks to the capture points provided by the XML, a handful of sprites are rendered around each point.  They change color depending on which team owns it at that moment.

Keyboard config menu.  Extra keyboard inputs were added here (see 'Cloak' command).

The class select menu.  Unfortunately due to lack of artists on the project, the default Half-Life weapon models were used (would've loved to get new weapons!).  At any time during the game, press a key and choose another class (or be a random class every respawn).

Examine the HUD elements on this screen.  First off, the number sprites have been changed to a more pixelated font.  Upper left is the radar which shows where the points are relative to where you're facing (and which team owns them).  Upper middle is another picture of the points with the current score multipliers (pro tip: take down the highest multipliers if you can).  Upper right is the game's current score.  Bottom middle is the time remaining with the game.  Lower bottom right is a  text message sent by the server fired off by some event (in this case, a point being captured).

One more HUD element.  Take a look at the bar in the middle of the screen.  It scrolls between red/green or white to show capture point progress.  The bar goes away when you leave the point.

Third person view of the red team model--a Barney recolor, very original.

Demonstration of the game's scoreboard.  It's a highly tweaked version of the default Half-Life scoreboard.  Features things like individual players' score (get points for capturing points and killing enemies) and even states the class the player is currently running.

The Sniper class has a special feature.  Press the cloak button to turn invisible for a few seconds and flee the scene if you must.  The Pacman Ghost icon shows the cloak state.

The satchels from Half-Life have been turned into proximity mines.  If an enemy player gets too close, it explodes.

There is no blood in this game, only computer part giblets (this was meant to be a family-friendly game).  Also players drop ammo crates so you can replenish any weapon you're carrying.

Me using the Half-Life console.

Our attractive green team model in action!

A writeup on how I think game design works.

I don't know what I was thinking when I made this diagram.  It details all the Half-Life methods that I have modified and which ones reference which others.  Most of the heavy editing was done in two files: Player.cpp and Teamplay_Gamerules.cpp.  The HUD and messages had their own systems set up.  Overall, I know much more about C and C++ than I did then, but I tell you what--this is a MASSIVE project and I can't believe I accomplished as much as I did.