******************************************************************************

This 3D game was created
    by: Jason Brink (Student #213759)
    for: 95.402, Professor Wilf Lalonde

You can download this game (and possible new and improved versions) at
    http://www.geocities.com/jb_eagle/402/

******************************************************************************

Table of Contents
-----------------
1. How to play
2. Interesting Things I Implemented (watch for these!)
3. Bugs (or things that should be improved)


1. How to play
--------------
To run the game, go to the "Game" subfolder, and run game.exe. You will
immediately be placed into the game. To get a list of keys, press F1.
To move around, you can use the arrows. I, however, prefer to use the mouse
to look up and down, and to turn, 'w' and 's' for forward and backward,
and 'a' and 'd' to strafe left and right. The spacebar jumps, and the
left mouse button fires a rocket (after you fire, it takes 5 seconds for
your rocket to re-load). When you want to quit, press Escape. If you need
to use the mouse to do some other task on your desktop, press 'm' to release
it from the game (press 'm' again to turn mouse control in the game on again).

2. Interesting Things I Implemented (watch for these!)
------------------------------------------------------
a) Height fields - height fields can be generated from Worldcraft by creating
   a cube, and specifying which image to use to generate the height field.
   Brighter colours in the image will be mapped to higher terrain, and darker
   colours represent lower terrain. Height fields are optimized in several
   ways in my game. First, the vertices are stored, rather than a list of
   faces. This prevents duplication of vertices that are part of several
   faces. Second, they are drawn using triangle strips. Third, collision
   detection doesn't use a BSP tree. Instead, when checking for a collision
   on the vector from p1 to p2, it figures out which height field grid
   squares are along the path from p1 to p2, and just checks those.
b) Pre-computed vertex lighting - all the static objects have lighting
   calculated in the builder for their verticies. OpenGL then smoothly shades
   the polygons using the vertex colours. Lighting calculations in the
   builder start with an ambient light, then add a diffuse component for each
   light which can be seen from that vertex (collision detection is done to
   check if lights are visible).
c) Dynamic vertex lighting - dynamic objects have lighting calculations done
   on their verticies every game tick (in my game, the robot drone, the
   rockets you fire, and the rotating dish near the helipad are dynamically
   light).
d) Light coronas - lights can have coronas of different sizes. Most lights
   have coronas, but those which light up the walls near the lava are
   examples of ones that don't. The coronas draw in front of everything if
   the light is visible from the camera.
e) Particle explosions - the rockets you fire explode when the collide with
   something. If they collide with the robot drone, the drone will also
   explode and then be recreated 10 seconds later.
f) BSP Tree drawing - pressing 'b' in the game will draw the BSP tree. This
   is not actually part of the game, but was used for debugging purposes.
   I've left it in because it could be quite helpful to visually show someone
   how a BSP tree works.
g) Articulated figures - I haven't done any work on this since the assignment,
   but you can at least see a stick figure if you press F7 to go to external
   rotating camera view.

3. Bugs (or things that should be improved)
-------------------------------------------
- There are special "Emitter" objects which can appear to glow. These are
  useful for creating lights. In order to set it up so that lights could
  be placed inside these objects, Emitter objects can be set so they are
  not solid so light can go through them. Unfortunately, this also means
  people can walk through them!
- Since I'm just doing single-point collision detection, if you approach a
  wall from a sharp angle, it is quite easy to get so close to it that you
  can see through it.
- I didn't spend much time on jumping, so it is still buggy. You can
  sometimes jump up through things.

