Hunter
------

By Carl Olsson
Jan 2001

mail:carljolsson@yahoo.com
http://www.geocities.com/carljolsson

Todo
----
 * Make lights iterate through squares, not squares through lights, more
   efficent in most circumstances (Not when many lights are lighting the
   same squares).
 * Colision between objects and walls, and objects and objects.
 * Make obstructLine step through squares, not units, more efficient.
 * Layers. Four graphical layers: floor, detail, object, ceiling. Light
   obstruction. Object obstruction. Sound obstruction. Perhaps have floor,
   middle and ceiling, but each with its own detail layer.
 * Multiple shapes for square obstructions: full, diagonals.
 * Spotlights, like point lights but restricted to an arc.
 * Colision with vectors, point of collision and reflection vector.
 * Slide along walls.
 * Make bright lights wash out dark colours, as it is pure black will never
   get lit up any.
 * Apply light to objects.
 * Wrap-around worlds, or world edge obstructs.
 * Line-of-sight.
 * Directional lights. A line that emits parallel rays in one direction.
 * Alpha anti-aliased sprite resizing and rotation, so rotated sprites look
   nicer.
 * Mass and momentum.
 * Friction.
 * Non-axis-aligned bounding box collision.

Problems
--------
 * Lights stopped working properly, now they don't reach some points they
   should some of the time, making them flicker. This is because the
   World::obstructLine function only works properly as an inline function,
   why the hell would that be?
 * Sometimes crashes out of play function just after starting, seemingly
   when creating the enemies.
 * Crashes when built for windows, probably be using members of a NULL
   pointer somewhere.

Controls
--------
Esc or LMB+RMB - Exit.
G - Toggle game mode, Play or Edit.
M - Toggle lighting.
O - Toggle light obstruction.
C - Capture screen as SCRNxxx.PCX.
Game mode Play:
   Up/Down - Move forward/backward.
   Left/Right - Turn left/right.
   Left Ctrl - Fire.
   Shift - Run.
   Alt - strafe.
Game mode Edit:
   Up/Down/Left/Right - Scroll.
   Left Ctrl - Fire.
   Shift - Fast scroll.
   E - Toggle edit mode, Tile or Obstruction.
   -/= - Cycle through tiles.
   S - Save level.
   L - Load level.
   Edit mode Tile:
      LMB - Paint tile.
      RMB - Pick tile.
   Edit mode Obstruction:
      LMB - Obstruct square.
      RMB - Remove obstruction.

Collisions
----------
 * Take: Position (Vector), Velocity (Vector), Time (Real)
 * Return: Collision (Boolean), CollisonPosition (Vector), CollisionTime
   (Real), Reflection (Vector)
 * Find collisions, find first collision, collide, update colliders, find
   collisions, find first collision, and so on till end, apply velocities to
   positions, next discretion.

Gameplay Ideas
--------------
 * Have an energy attribute, this is required for performing actions such as
   running and jumping, it is regained when you stop and rest. When walking
   you don't spend any energy, but you don't regain any either. When your
   enegry is running low you become less stealthy as you stumble along, and
   really over-doing it can damage your health.
 * Use stealth by steping carfully and keeping to the shadows to take your
   enemies by suprise.
 * Have "hearing", this is visually aided, so you don't need a fancy 3-d
   sound setup. Perhaps a circle surrounding your character which stretches
   out in the direction of noises, stretching more for louder noises. The
   enemy utilizes this the same, if they hear a noise they'll turn around to
   look.
 * Restricted sight to allow sneaking.
 * Tiles have differing effects, some reduce speed, some are slippery, some
   are noisy.
