BEFORE 0.90

OXYD IMPORTER

. oxyd: timers
. oxyd: flat forces
. oxyd: initialize game variables (force factors etc.)
. plain stone like in oxyd (mostly there? check)
. oxyd: rubber bands
. oxyd: shuffle oxyd stones (not documented so far)

IMPORTANT
. edit in-game documentation
. blocker stones appear at beginning of level (peroxyd)
. st-bug
. fourway switches (use up to four signals or send numbers 1 to 4)
. fix win32 build -- why two copies of zlib.dll ???
. "essential" hollows -> must be filled with meditation ball to finish level
. Extend LevelPack class to include get_status, set_status, count_solved_levels, etc
. "essential" attribute for actors -> restart level if actor dead
. run actor_enter() / actor_leave() when jumping
. real 3D coordinates for actors
. expose signal mechanism to Lua scripts
. fix: all other stones that can be destroyed
. properly handle collision between flying actors
. add missing models for small whiteball (swamp, jump) or disable
  these messages
. sort levels into level packs / subdirectories
. fix error handling in .zip level packs
. execute Lua scripts from .zip files
. script for levelpack creation
. cache automatic previews on disk (pnglib)
. level revision (index file?); use instead of time to flag as changed
. new scheme for level metadata (author, level name, revision,
  hints, par time, has easy variant, etc.)
. clean up Lua interface
. turnstiles: animate when rotating (how?)
. Improve some of the graphics
. error dialog
. "Exit Program" in game menu / on SDL_QUIT

CRASHES
. Screenshot (F10) crashes enigma in most cases

LEVELS
. Fix 'Push and Pull' (very easy)
o polish existing levels (easy mode etc.)

EDITOR
. icon bar
. signal layer
. object selection menus
. loading
. saving
. change level size
. documents -- how?
. level attributes (name, author, gravity, ...)

MISC
. low detail graphics
. assign priorities to sound effects
? use pnglib directly instead of SDL_image

GAME
. background behind floors: water/abyss/space/swamp
. use material properties (restitution coefficient, sound) for collisions
. network/internet game (use quake networking code?)

DISPLAY / GRAPHICS
. models: st-fart
. highlight current item in inventory
. implement bbox() for models
. special menu entries (editable)
. animation for falling st-wood, st-block

SPECIAL OBJECTS / ACTORS
. warp tunnels (a la sonic)
o "horse"
. spermbird

ITEMS
. fix ShogunDot graphics (size=2+3)
. bottles (that make the actor drunk, see esprit)
. bags
. rubber band
. cherry 

FLOORS

STONES
. spitting stone
. flash stone (transfers impulse from one actor to the other)
. "four small marbles"-stone (from oxyd, don't know what it does)

OPEN QUESTIONS / DUBIOUS IDEAS
? rotating marble
? add simple window manager (for editor?)
? also use angular velocities for the marbles
? redesign signal mechanism
? only distribute Intro level pack with Enigma
? wire
? opengl display
? different oxyd stone animations in 8bit mode
? re-implement stippled shadows
? use Object reference counts
? edge radius as parameter for stones

DONE
--- before 0.81 ---
x fix level-restart bug
x display state of coinslots
x renamed *vulcano* to *volcano*
x dynamite explosions in space don't create abyss

--- before 0.80 ---
x move zipios configuration to toplevel [no need to do so]
x rethink coin implementation [works fine as it is]
x "Slinky Racing" solvable?
x fix door bug
x fix: intersecting actors getting stuck
x umbrellas protect against thieves
x fixed timing problem with st-stoneimpulse stones
x fixed bug where triggers can get stuck
x Fix shadow rendering on OS X
x give marble an emergency shield if it would die after respawning
x update credits
x disallow starting locked levels with the "Start Game" button
x open pair of oxyds only if first one was already blinking
x mouseforce attribute for actors acts as multiplicator, not boolean flag
x fix extinguisher display bug
x finish user manual
x flip arrow on st-oneway on "signal" or "flip" message
x only handle actor-actor collisions if both actors are alive and on
   the floor
x horizontal and vertical strips
x toggle holes and hills on signal
x disco stones: normal messages
x fix Oxyd 2p meditation landscapes
x fix fl-acwhite, fl-acblack
x killer balls
x do not make all level in a levelpack freely playable (force players to solve levels).
x ac-bug
x rotors shatter the marbles
x knight
x remember stones<->actor contacts, don't treat these as collisions
x fix: inventory does not show when starting a level [rw]
x draw rubber bands to gc, not to screen
x update credits
x remove lib-src/libtolua directory from CVS
x build tools optionally (configure --enable-tools)
x sunglasses [rw]
x fix: blocker stones (use Model::reverse() like in other doors) [rw]
x fix floor traits problem (see DefineSimpleFloor for note)
x protection shields
x swamp (tweak parameters)
x add missing models for whiteball [rw]
x warp tunnel (a la oxyd) [rw]
x cherry
x add Menu::tick() and move update_info() calls there
x display warning when option cannot be activated immediately
x item radius [rw]
x bolder stone falls into abyss [rw]
x Fix all memory leaks [ant]
x cup of coffee
x rotors
x spinning tops
x fix: actor animations
x make fart stones destructible (laser, dynamite, hammer, bomb) [rw]
x disco stones
x floating stones do not activate triggers
x bridge items for Oxyd
x time game
x redesign level menu
x different screen sizes
x white and black tiles
x electric stones
x fix puzzle stone <> magic wand interaction [rw]
x added oxyd-compatible puzzle stones [rw]
x make black ball shine
x include zipios in distribution
x turnstiles: fix strange behaviour when trying to turn them with
  pullers / rotator stones [rw]
x brittle floor [mh,dh]
x Draw rubber bands in one pass
x update autogen.sh to configure libraries
x do not use global Lua state for model initialization
x display-lua.pkg
x move parts of init.lua to startup.lua
x add parameters for friction/slope for oxyd compatibility
x flags [rw]
x mail stone
x update zipios++ from CVS to fix compilation problems
x get rid of pink border in oxyd mode
x self-contained level packs
x white/black switches [sf]
x two modes: easy/hard [rw]
x implement easy mode stone
x bolder stones: do not change direction when pushed by
  st-stoneimpulse
x allow using the mouse wheel for rotating inventory entries [ant]
x white bombs [mh]
x rotators
x blocker stones [rw]
x use signals for oxyd levels
x better scrolling (marble cannot leave the screen)
x signals
x track down mingw compilation bug [none found]
x improve documentation
x move display code into a class
x reuse display code in level editor
x try to get rid of global variables as much as possible
x use only 2d coordinates
x don't crash when creating unknown objects or models
x pullers
x fix remaining problems with shadow rendering (memory consumption &
  slow screen flips in large levels)
x turnstiles
x turnstiles: allow use of pullers to rotate
x turnstiles: crush actors
x rotary switch [sf]
x Import oxyd level pack if .dat file present
x Save config file more often
x trampoline (springboard) floor [mh]
x turnstiles: draw pivot stone
x impulse stones: interaction with stones; movable version
x puzzle stones: allow use of pullers

--- before 0.70 ---
x reorder levels
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
