CrossFire

After Orion Lander, I felt it was time to move into OpenGL's 3D capabilities fully. I think ground textures are the lamest thing in modern games. We have all this fantastic hardware, and yet we can't render some decent blades of grass? I wanted to prove to myself that a field of grass could be created, and rendered in real time. I'm pretty happy with the result; it even sways in the wind! Sure it's not exactly photo realistic... But if I can get this far as one man in a few days of hacking around in my first 3D app, I don't see why experienced 3D programmers can't nail this effect.

If I did it all again, I could improve it dramatically in the following ways:

  • Multi-polygon blades of grass (so they can bend and droop like real blades of grass)
  • Color shift from base to tip
  • Package grass blades into clumps to form more realistic vegetation.
  • Leafy textures, although grass doesn't have much of a texture.
  • Rather than caching the whole world's grass (which is dog slow), just cache grass in the players visual range (could easily have real-world density in real-time)

Concept

Players will hover in an helicopter-like vehicle above a virtual 3D terrain. The ship’s design is unique in that the fuselage is suspended from an array of maneuvering thrusters by “elastic” cables. The “mountainous” terrain means the player will have to navigate around it skillfully, without crashing, as collisions will be detected. There are a number of hostile gun batteries that will fire if players get too close. If hit, the player’s ship incurs damage, and will explode if too much damage is suffered. The player’s ship also has weapons, which it uses to eliminate all of the gun batteries on the map.

Game Features

Terrain

  • Read in external height map file (I made this terrain and generated the file)
  • Calculate average normals per vertex to provide smooth shading
  • Use CallLists to speed rendering (mesh cached on video card)
  • Randomly generated grass to make ground more interesting

Particle Effects (general)

  • Different color modes and type (Smoke, thrust, etc.)
  • Particles can change colors and alpha level over their lifetime.
  • Particles have realistic velocities. (Gravity is trivial to enable, but is not used)
  • Ability to tweak the dispersal variance to produce fountain-like effects
  • Particles used for ship thrust, engine smoke, rocket trail, explosions, and steaming wreckage

Ship

  • Players move by changing the pitch, roll, and rotation
  • Players can change the speed of the rotor to change vertical velocity (the speed of the propeller actually reflects this)
  • Main fuselage hangs by "springy" cables.
  • Targeting moves with actual fuselage body (which is often swinging)
  • Ship can fire rockets to destroy enemies
  • Pitch and roll adjustments cause maneuvering engines to thrust (generate particles)
  • Ship fades blacker and blacker as damage is sustained, eventually exploding

Camera

  • Camera follows ship's rotor assembly (including orientation)
  • Players can change the camera's vertical angle to look up or down at the ship
  • Players can also view the ship from the closest turret’s perspective

Turrets (enemies)

  • Turrets rotate their barrels towards the player (both vertically and horizontally)
  • Intermittent firing with velocity variance when in range (otherwise too precise and deadly)
  • Turrets explode after one direct hit

Smart Rockets

  • Explode near ship, terrain, or turrets
  • Explosion uses brief particle effect

Other

- Linear Fog to "hide" camera cutoff. Adds to game "polish". - Sky texture to make the world more realistic - Player can only fly around a subset of the terrain (prevented from getting to the terrain edges) - Things like grass density or viewing distance can be easily adjusted in game code

Videos and Screenshots

Highlights Quicktime Medium Quality (with music)

Continious Clip 2 Quicktime High Quality

© Chris Harrison