| Overview Concept:
Godblaster is a networked two player real time strategy game.
Each player has his own religion and must confront the opposition by exploding, manipulating and annihilating any resistance to see who God loves most. Units:
Missionaries help convert the opposition
Suicide bombers self destruct and kill the opposing units
Religious leaders heal ones own units’ faith and stop them from converting All these actions are based on proximity. Units can attack in many to one fashion as well. Selection is based on range of influence of a 3D selection halo which means you always select a “flock” of units and they move in a cluster. Features:
80 animated characters on screen at one time
Peer to Peer network gaming
Soft skin animation
Effects using lens flares, halo effects, a particle system, shadows and swirl effects
Original background score featuring Godblastin’ choir and custom sound effects
Multitextured terrain and data driven 3D trees
Selection halo and animated arrows showing direction of motion
Heads up display showing score
Faithbars and unit conversion
Suicide bombers, healers and converters User Controls:
To move units just click on them and click again to move them to that point
To move the camera use the keys w, a, s, d, r and f
Keep spacebar pressed and move your mouse to change your look direction
Development Summary: Code:
Files and their meaning
camera.cpp and camera.h :
- Camera control
Character.cpp and Character.h
- Resource manager for all the characters. Contains multiple instance of Fundamentalist, Leader and Missionary
- Rendering models with animations based on team and character variations allowing to play more than one animation on the same type of characters
- Looping and playing animation
debugHelpers.cpp and debugHelpers.h
- Debugging and printing debug stuff
directionArrow.cpp and directionArrow.h
- When you click to select arrows appear to show you direction in which you will move your characters until you click again and select destination
Fundamentalist.cpp and Fundamentalist.h
- To handle asset loading, rendering and animation for the religious fundamentalist
- Looping and Playing respective animations
fx.cpp and fx.h
- For animated alpha blended geometry used for effects
healthbar.cpp and healthbar.h
- To show the “faith” bars above the characters
hud.cpp and hud.h
- to show a heads up display with score
- Input- to handle keyboard and mouse
Leader.cpp and Leader.h
- To handle asset loading, rendering and animation for the religious leaders
- Looping and Playing respective animations
lensflare.cpp and lensflare.h
- Renders the alpha blended lens flare
logicGrid.cpp and logicGrid.h
- Contains and invisible grid that the characters occupy
- Imporant to the flocking
main.cpp
- OpenGL initialization
- Program entry point
Missionary.cpp and Missionary.h
- To handle asset loading, rendering and animation for the missionaries
- Looping and Playing respective animations
newtorkInput.cpp and networkInput.h
- Sends and receives game inputs across the network
particlefx.cpp and particlefx.h
- Particle Effects code
player.cpp and player.h
- Maintains units for each player
- Instantiates the unit class for the units
skybox.cpp and skybox.h
- Sky rendering
Sound.cpp and Sound.h
- Sound resource manager using Fmod
taunts.cpp and taunts.h
- Taunt text rendering… implemented but not used
terrain.cpp and terrain.h
- Generates and renders multi textured terrain from an image file
- Also renders the selection glow that wraps on the terrain
- First we tried to use projective texturing for this but ended up just reconstructing selected regions of terrain, raising them and alpha mapping to create the selection glow
- The 3D character selection code also lies in here and uses ray poly collision
- The terrain hugging code is also in here
textureManager.cpp, texturemap.cpp and textureManager.h, texturemap.h
- Resource management for all the textures…we only use Raw files
- Alpa blended images are allowed
timeKeeper.cpp and timeKeeper.h
- Manages the clock in the game and synchronizes everything for frame rate independence
titleScreen.cpp and titleScreen.h
- Renders the title screen
tree.cpp and tree.h
- Reads an image file and generates 3D trees in an area based on the image adding random features and positioning to the trees in that area
units.cpp and units.h
- Manages all the characters on the screen, changes in their states and all pertinent information
- Handles rendering of shadows
usefulUtilities.cpp and usefulUtilities.h
- just some rounding functions
vectorpops.cpp and vectorops.h
- Simple vector operations
world.cpp and world.h
- Where most of the stuff happens, main rendering loop
- All initialization
External libraries used:
Fmod for sound
Cal3D for character animation
Content:
Models ( made with 3DS Max and Maya): Missionary, Leader, Fundamentalist, Tree
Textures: for all the models unwrapped with Deep Paint and painted with Photoshop
Animations: Walk and Idle cycles for Missionary, Leader and Fundamentalist
Terrain: Multitextured terrain generated with terragen and textured with Bryce
Skybox: Generated with Bryce
Textures: Alpha blended images for arrows, lens flares, particle effects, taunts, selection halo and other effects.
Level Data: A black and white image indicating the regions that must be populated with random trees
Original Music: Custom sound effects, recording and original background score and live Godblastin’ Choir
Key Technical Challenges:
1) CVS merging is horrible
2) Character Animation: Cal3d catered to most of our needs except that its not efficient for playing different animations on many characters
3) Networking: Kyle handled this extremely well by building a robust and well synchronized system with regular sync-updating
Reflections:
Things that went right:
1) 3D selection, terrain rendering and character flocking code
2) Artwork and visual feel of the game as well as sound and music
3) Networking and character animation code
Things that went wrong:
1) We couldn’t do a full feature demo because we couldn’t set up networked windows machines for the demo outside the ETC network
2) Did not get enough time to iterate on the gameplay
3) Too much time spent initially on researching projective texturing
Three things to do differently:
1) Begin to research visual effects earlier
2) Implement gameplay much earlier
3) Be more prepared for setting up a networked demo
|