Authors:


            Nick Kuyakanon (nrk@andrew.cmu.edu)
            Donald Tang (dtang@andrew.cmu.edu)

 

 
Game Description:

Winter is here!  It’s time for a snowfight…Red vs. Blue – who will prevail?

 
Gameplay:

Two player split-screen first-person action, with each player commanding one team of three.  The gameplay is simple – navigate the terrain and take down the opposing team with well-aimed snowballs while evading theirs.  The characters’ snowballs are thrown at a fixed angle while the player’s control velocity with well-timed key presses.

 
Technical Features:
  • Customizable terrain

  • Dynamically loadable player meshes and animations

  • Physics model

  • Customizable player interface

  • Graphical Statistics

  • Player "radar"

 
Controls:
    Player 1    Player 2

W                     Up
                     Down
A                      Left
D                      Right
1                      Switch view to teammate 1
2                      Switch view to teammate 2
3                      Switch view to teammate 3
SPACEBAR         Hold down then release to
                        throw snowballs!

UP                    Up
DOWN               Down
LEFT                 Left
RIGHT               Right
[                       Switch view to teammate 1
                      Switch view to teammate 2
\                       Switch view to teammate 3
ENTER               Hold down then release to
                        throw snowballs!

 
Key Technical Challenges:

Importing Content
.3ds is a full-fledged file format, and not easy to parse and process into a form useable by the game engine.

In the end, lib3ds was used to simplify this – however, it was still difficult to render meshes exactly as they looked in 3dstudio itself.  In particular, reapplying the material settings in 3d studio in the game engine requires replicating the right lighting.  This proved troublesome and was ‘resolved’ through lots of trial and error.


Optimizing Polygon Meshes
It was difficult to find the right balance between low polygon counts and appropriate amount of detail.  Our snowman model used a number of deformed or otherwise modified spheres, and it was hard to reduce the complexity of the model in only the necessary places.  Familiarity with 3dstudio would have made this step much easier.

In the end, models were redone with spheres that had less polygons to start with.  This is much easier than doing the model with lots of polygons and then trying to choose which polygons to drop.


Cross-platform Code

One developer worked primarily in Linux while the other couldn’t bear to give up Windows.  This made maintaining portable code a priority.  Initially getting all the libraries to compile under both Linux and Windows was a huge hassle.   

After porting the startup code to Windows, we made sure to only write portable code.  In addition, CVS was used extensively to check in code regularly and test for compile issues.  Hence all the issues that arose were quickly resolved – the goal was to have code checked into CVS compile successfully at all times on both platforms.

Only real problem with Linux/Windows – OpenGL extensions don’t want to work.

 

 
Screenshot:
 
Postmortem:

Things that went right

  • CVS worked well, no big screwups this time.

  • One developer worked in Linux, the other in Windows yet no big issues arose.

  • Overall, game is visually appealing like we originally wanted as well as fun and easy to play

  • In the end, teamwork was key in bringing the game together

Things that went wrong

  • Textures, colors, and lighting for 3ds meshes

  • OpenGL extensions (fog etc.)

  •  Game play slows down significantly with terrain maps larger than 128x128

  • Didn’t get to implement some things as planned (AI, falling snow, network)… maybe spent too much time to get the game looking nice

Things we learned

  • How to import 3ds models

  • Using custom graphics for stats instead of the standard openGL text makes the game look much better visually and is still easy to do

  • What it takes to create a game from scratch

  • Programming in pairs can be effective