IMPORTANT
. "Exit Program" in game menu / on SDL_QUIT
. fix remaining problems with shadow rendering (memory consumption &
  slow screen flips in large levels)
o reorder levels
. two modes: easy/hard
. re-implement stippled shadows
. track down mingw compilation bug
o polish existing levels
. move additional configuration scripts to etc/
. make fart stones destructible (laser, dynamite, hammer, bomb)
. fix puzzle stone <> magic wand interaction
o add missing models for whiteball

MISC
. different oxyd stone animations in 8bit mode
. low detail graphics
. level editor
. add simple window manager
. move display code into a class
. reuse display code in level editor
. try to get rid of global variables as much as possible

GAME
. rethink coin implementation
o don't crash when creating unknown objects or models
. background behind floors: water/abyss/space/swamp
. allow using the mouse wheel for rotating inventory entries
. remember stones<->actor contacts, don't treat these as collisions
. restitution coefficient for collisions
. error handling in world::  (eg world not created)
. client-server architecture
. network/internet game (use quake networking code?)
. also use angular velocities for the marbles

DISPLAY / GRAPHICS
. models: st-fart
. highlight current item in inventory
. implement bbox() for models
. make black ball shine
. opengl display
. rotating marble
o special menu entries (editable)

SPECIAL OBJECTS / ACTORS
. rotors
? level teleporter
. warp tunnels (a la sonic)
. protection shields
. "horse"

ITEMS
. cherry
? wire
. white bombs
. warp tunnel (a la oxyd)
. flags
. bags
. sunglasses
. cup of coffee

FLOORS
. trampoline
o brittle floor
. swamp

STONES
. remove magic stones when key is pressed
. make complete puzzle stones explode
. rotary switch
. white/black switches
o electric stones
. rotating stone
. knight
. mail stone
. spitting stone
. turnstile

OPEN QUESTIONS
? use proper 3d coordinates throughout
? use Object reference counts
? edge radius as parameter for stones

DONE
--- before 0.70 ---
x fix sound effect volume (explosions in particular)
x run levels in a "sandbox"
x help screen
x elastic bands
x scissors stone
x rubber band stone
x finish worm hole
x spatialize sound effects


--- before 0.60 ---
x redesign level menu
x speed up level loading (profile - where is the bottleneck?)
x fix blackball- graphics (make them smaller)
x sound volume in options menu
x music volume in options menu
x improve collisions with stone corners (finally!)
x mouse speed in options menu
x options in game menu
x level pack menu
x player switcher
x let main actors appear/disappear when level is beginning/finished
x new main menu
x fix shogun stone graphics
x save par times for levels
x grab mouse cursor in windowed mode; release it in the menus
x save information about completed levels
x change sprite being followed when switching players
x level packs
x let main actor decide whether an item may be dropped 
  (eg, only if in state IDLE)
x remove main actors as soon as level is completed
x properly update changed models on the screen
x fix laser--stone interaction
x update AUTHORS and credits
x fix trigger signal of holes/hollows
x magic stones
x spade
x finish yinyang item
x sword
x ice
x pipes
x fix bridges
x finish magnets
x add alias model
x fix graphics bugs
x fix shadows
x white ball
x convert level previews to 8bpp
x try out NSIS for win32 packaging
x merge gfx8 and gfx directories
x fix webpage--main server now nongnu.org
x stop scrolling messages when rotating the inventory
x redraw status bar only when necessary
x puzzle stones transform to gray floors on water/abyss
x support for 8bit gfx
x replace dictionary in Object with assoc list and save loads of
   memory 
x improve menu redraw speed
x stone seed
x laser switch (mh)
x yin-yang stones of all sorts (mh)
x impulse stone that pushes actors
x generic rectangle class
x credits
x magnets
x worm holes
x implement soft scrolling
x check for and raise errors in Lua interface routines (handled by tolua)
x save configuration file

--- before 0.50 ---
x models: st-timer
x springs
x impulse stones
x pause game if program is deactivated
x speed up complex screen updates
x finish implementation of meditation landscapes
x models: fl-gradient
x subimage models
x sloped floor
x emerging/disappearing floor (mh)
x alpha blended shadows
x re-do actor shadows properly
x breakable stone (sf)
x new door types (st-doora, st-doorb) (sf)
x enigma.GetTicks() function for Nat's maze generator
x thief stone (mh)
x options menu
x mouse cursor for menus
x new menu system
x keys in various colors (sf)
x key switches (sf)
x in-game menu
x activate menu entries with the mouse
x slot machine (jf)
x coins (jf)
x ball--ball collisions
x small balls (different colors?)
x "bolder" stones
x floppy switch (mh)
x stone impulse stones (mh)
x reorganize objects.cc into smaller pieces
x cross-compile using mingw
x finish rpm spec (as)
x bomb explosions destroy nearby items and the floor underneath

--- before 0.40 ---
x flavor "c" and "d" oxyd stones (thanks to Johannes Fortmann)
x removed in-game music and the .texi documentation (for now)
x puzzle,door: destroy marble
x flavor "a" oxyd stones
x --nomusic switch
x fart stone (st-fart)
x timer stone (st-timer)
x extend and fix tools::Timer class
x wooden floor
x wooden stone
x modify PUZ_0000 so that it's fully connected and actors can pass through
x make moving & swapping work for animated stones
x kill actors inside a closing door

--- before 0.39 ---
x oxyd_shuffle
x polish puzzle stone gfx
x allow definition of new object types in Lua (restricted to simple
  floors and stones so far)
x distinguish between "touching" and "hitting" a stone
x nice background image for main menu
x pause (enter in-game menu)
x handle contact with floor tiles and items
x new "items": hills and hollows
x new floor: water
x death's head stones
x extend configure.in to distinguish Lua 4.0 and 4.1
x add Lua 4.1 support
x remove Lua from distribution
x soft fading of music
x background music for main menu
x tint_rect()
x upload CVS snapshot
x let objects create force fields
--- before 0.38 ---
x there seems to be a subtle bug in the laser code. track down and fix.
x new level: mirrors
x fix LaserSensitive to handle laser stones and mirrors
x fix interaction laser beams <-> doors
x glass stone
x new level: space
x switch gfx
x shogun dot/stone gfx
x switch
x shogun stones
x shogun dots
x doors
x door gfx
x inverse motion floor
x space
x put together a small homepage
x puzzle stones
x chameleon stone
--- before 0.37 ---
x submit project description for savannah
x level preview
x finish levels if certain criteria are met
x play music during the game
x implement image cache
x level selection menu
x return error codes from lua::Dofile
x add license information in all source files
x register at savannah
x add fadein/fadeout effect when (re-)starting a level
x move to next level when all oxyd stones are open
x oxyd stones open when hit by a laser beam
x re-start level when all main actors have been killed
x explosion as new item type
x different model for extra life in inventory
x animation for falling marble
x abyss
x time limited text display in the inventory area
x more accurate collision detection with laser beams
x implement on/off actions for switches etc.
x marble shatters when hit by a laser or an explosion
x paint laser stones in other orientations
x message handler for LaserStone
x fix update of inventory when displaying messages
x make it easier to create objects in level description files
x clean up display_2d.cc
x let laser beams pass through floating stones
x ignite dynamite and bombs when hit by laser
x do screen updates more cleverly
x recalc light only once, and at the end of a turn
x laser recalc on changes to "illuminated" fields
x invoke removal() when objects are removed from the grid
x fix laser recalc when moving mirrors
x fix laserhv gfx
x laser beams
x laser
x mirrors
x mirror gfx / impl
x oneway stone gfx + impl
x use GridPos instead of explicit (int x, int y) specifications
x GridObject _always_ know about their position (heck, memory is cheap
  these days, 8 bytes more for each object won't hurt that much)
x interface for naming objects/retrieving objects by name
x image cache
x animation for active laser stone
x LoadImage, LoadFont routines in enigma.cc
x configure.in: create config.h, including DEFAULT_DATA_PATH
x enigma::FindDataFile
x load data from the installation directory
x add a way to define overlay images
x paint missing oxyd stones 
x make data path configurable
x make "make install" work 
x adapt item_under, floor_under in SetFloor, SetItem, etc. [removed
  these fields from ActorInfo]
x include LUA in distribution (convert to autoconf?)
x call Item::on_drop for dropped items
x clean up state transition in dynamite and bombs
x play sound on collisions with stones
x fake oxyd stones
x complete implementation of oxyd stones
x remove generic model manager in display.cc (use map<> instead)
x reversible animations
x animation callbacks
x remove class Model, do not pass Model objects between display and world
x gfx swap stone
x proper state transitions for oxyd stones
x opening and closing animations for oxyd stones
x composite model
x make --help actually output something
x complete bomb impl.
x complete dynamite impl.
x active objects in world::
x add --nosound option
x easier ways to define animations in models-2d.lua
x burning dynamite animation
x oxyd stones
x reset text display when entering a new world
x complete menu implementation
x colored fonts (in ttf2bmf ?)
x main menu
x check for SDL_ttf
x build ttf2bmf only if SDL_ttf present
x oxyd stone animation
x implement text display (only in inventory? on the screen? scrolling?)
x px/font.cc|hh
x fonts/ttf22bmf
x option for mouse sensitivity
x object callbacks to LUA functions
x calling Object::on_message from LUA
x only redraw sprites that have actually changed
x add border stones that keep objects from leaving the level
x fix add_contact()
x swap stones
x distribute all necessary files
x implement scrolling (also soft scrolling?)
x scroll if main actor of current player reaches the border of the screen
x set tile width/height in model description file
x make certain stones movable
x gfx: bombstone
x remove scheme code, adjust configure.in/Makefile.am
x write lua interface code
x lua interface code for display_2d, models-2d.lua completed
x load a configuration file
x rewrite guile files in LUA
x bomb stone
x make px::Array2 exception safe
x write .spec file
x it-dynamite
x it-black bombs
x it-magic wand
x it-hammer
x it-umbrella
x it-one up
x it-trigger
x actor-stone collision fine tuning (rounded edges for stones)
x make marble a little smaller
x vector reflection: use plane instead of line
x drop items or kill them if they so desire
x scanlines are seldomly used in px::Surface; calculate on demand
x insert picked up items at the beginning of the inventory
x do not pick up items if any mouse button is pressed
x activate objects
x player:: must have a way to determine the main actor for every player
x pick up items => on_pickup
x inventory management
x build and link LUA
x fix type checks in scheme interface
x object attributes (en-set-attrib / en-get-attrib)
x find and plug memory leaks
x random model factory
x reduce screen overdraw (particularly bad for many collision animation)
x make it compatible with older Guile versions
x inventory window
x two sprite types: ACTOR and EFFECT
x remove finished animations
x allow animationens for stones, items etc.
x px::abs(Vector) --> px::length(Vector)
x rename project to Enigma
x fix strange bug: ball can penetrate (and pass) solid stones
x fix rebounding from adjacent stones
x define animations
x show animation at collision points
x collision with stones => stone->on_hit()
x draw marble above stone shadows
x display2d: ShadedModel new
x remove `max_force' method
x collision handling (how?)
x physics simulation
x ball--stone collisions
x rebound from stones
x friction
x pass mouse force to world::
x use Assert<TypeError> in Value::get* instead of assert()
x world::get_force(Object *obj) -> friction, force fields etc
x force management in world.cc
x bewegung + position von actors in Terra richtig (->on_creation...)
x use o2-make-object instead of -make-actor, -item, ...
x correctly set window caption
x sprite movement: also redraw old position
x display_2d: fix screen update
x scheme-interface for model definitions in display_2d.cc
x display_2d.cc: do not save sprite positions in the model itself but
  keep it separate -> unified meaning of draw_at()
x display_2d.cc: implement animations as a vector<Model2d*>
x evtl: draw_at() und draw_shadow_at() fr jedes Model2d?
x define models in scheme; remove init.cc
x redraw sprites only if they really moved on the screen
x World::tick
x rewrite main loop / screen update
x fix crash when reloading levels
x at program start: flush the event queue to avoid mouse jumps
x mouse force
x mouse grab
x make_actor, set_actor
x animation, sprite, animatedsprite
x timing module
x link to guile
