07/18/08
- created BDSM::Map with its necessary bits
- added test script
- added BDSM::Transform
- BDSM::Map has a coordinate check() method
- BDSM::Map gets random getpt()
- Sprite object and player-centered skeleton
- BDSM::Vector

7/19/08
- Sprite::Shape, a multi-celled sprite has been created. It works perfectly and the blitting
  is miraculously efficent
- Everything can validly push everything else, with only 2 minor bugs.

7/20/08
- experimental scent diffusion for emergent collaborative pathfinding seems to work
- tiles are now hashes that can store stuff
- diffusion is now in BDSM::Transform, though it doesn't work as well as originally
  conceived

7/21/08
- changed test scripts to support hash tiles, color, and ridded deprecated render routines
- reverted to old border() for speed reasons and fixed minor issues

7/23/08
- fixed Shape moving bug... incorrectly prevented moves where only the invisible part of
  them would collide with something
- BDSM::Map can load maps from files
- Sprite::Platformer for bastardization of a 16-bit era...
- crappily implemented gravity

7/25/08
- crappy GameLoop::Realtime
- BDSM::Map has hooks for all the Sprite::*s to call an autodraw after a move on the map
- crappy gravity, not working yet
- Sprite::Platformer has appropriate movement method names
- basic gravity seems to work, bugless, in a semi-clean (but not "smooth") way...
- jumping, but still no smooth movement
- almost consistent jumping physics
- fixed outofbounds starting bug
- BDSM::Map can rotate()

7/26/08
- BDSM::Map has clone
- arbitrary wheels and connectors are generated, no module yet

7/27/08
- Sprite::Shape can now transform into different shapes
- Toy::Gear
- BDSM::Map can _dump to a string
- rotating Toy::Tooth, which matches Toy::Gear
- all the routines for teeth to attach to a gear, but the resulting structure is buggy...
  pushing it is a nightmare of push-dependencies
- old gear setup is wonky. trying to let Sprite::Shapes attach and form a new aggregate
  sprite that can split up. attach() merges shapes correctly so far.

7/28/08
- Sprite::Shapes can blob together
- BDSM::Agent and BDSM::Agent::Sprite are the analogues of the old Sprite and Sprite::Shape,
  except in a new appropriate location (for their routines depend on BDSM::Map's structure)
  and with greatly cleaned code
- fixed longtermish recursive pushing bug and the insane visual screwiness associated
  therewith
- basic BDSM::Agent::Blob-age is running smoothly... things are getting interesting in the
  dungeon.
- BDSM::Agent::Blob's new blob dimension calculations have been simplified by a simple
  trick... they're not. :P  But the resulting shape is pruned
- Toy::Gear and Toy::Tooth are back in action and more or less work
- Agents can move (basically) inside cage blobs

7/29/08
- Blob at least checks to see if the new shape can fit. If it can't, it croaks loudly. The
  current workaround is to omnomnom agents before placing the blob.
- growing blobs work much better. adding agents to them before warping is still recommended
  heavily, but it fails appropriately and cleanly

7/31/08
- BREAKTHROUGH! The brilliant emergent idea of antiobjects has been correctly implemented!
  The two pacman examples demonstrate this powerful system

8/01/08
- BDSM::Map helper functions split into 2 modules (mutating and metadata-processing)
- The scent tracking system properly integrated internally in a map
- internal function for finding the next step for tracking
- always-accurate but slow tracking

8/04/08
- minor padding fix in loaded maps

8/12/08
- preliminary steps of transforming a map into a compressed blockworld... successful,
  surprisingly O_O

8/13/08
- the rectangle-ifier now does not overlap blocks
- rectangle-finder isnt even needed... scan rows and columns for sparse spaces
- perfect blockmapping... wow... so simple...
- basic implementation of diffusion with the blockmap

8/15/08
- BDSM::Maps have rooms which map virtual spacial logic nicely... going to move
  microsniffing there

8/16/08
- minor fixes in the room<->block<->tile relationship
- agents pathfind again, just need localized blockage assertion

8/17/08
- minor fix in room's flowto()... agents now demonstrate basic tracking behavior using all
  ideas. lots of finetuning needed.

8/19/08
- logic fixes.. pac1 runs stabley, but pac2 screws up in many ways... not sure why yet

8/20/08
- changed second test script to reflect features of first
- if stuck, ignore old scents and track as best as possible

8/22/08
- use euclid to localize moves instead of room-direction. helps.

8/23/08
- last minor preps in BDSM::Room before I hack out a bunch of old fxns
- new system is in place, seems to work. only need to code the critical part - room blockage
  routines.

8/24/08
- minor fixes to new system, slowly it improves

8/25/08
- more fixes, but it looks like scents are a bad idea completely for the macroblock thing

8/30/08
- last revision before slightly retrying. A* instead of scents on the room helps, but
  everything's even slower than the original now. >_<
- zomg... finally. new room-blockage algorithm runs very fast; depends on number of agents
  in room, not room size. needs polish.

8/31/08
- room blockage algorithm updated slightly to factor in hallways

9/04/08
- for the source and target room, manually floodfill to determine the absolutely definite
  list of entrances/exits.
- pac1 simulation perfect and fast, it seems...

9/05/08
- removed annoying seemingly randomness from deep in the hacky mess. I was returning the
  values of a hash, which is randomly sorted, resulting in random behavior since my A* needs
  better heuristics to rank paths. fixed, now pac2 is running as "perfectly" and quickly as
  pac1!!!

9/06/08
- if there's no path to the target, the agent correctly attempts the next best path

9/07/08
- made compatible changes and started on application 1 (formation). need to fix minor issue
  with core algorithm before proceeding

12/08/08
- untriumphant return after about 3 months of no work! huzzah!
- forked sim/ branch to scifair/ and removed some irrelevant stuff so I can focus

12/09/08
- removed more irrelevant code for blob sprites and such, and pushing. now i can focus.

12/20/08
- first actual coding in over 3 months! Revamped Room module according to new design ideas
- blockmap module overhauled completely except for nextmove(). simpler code, faster design
- all code up, things moving, just incorrectly

12/21/08
- the path is stored and used that way. roomfind gets the correct path.
- roomfind and nextmove fixed to produce and follow correct paths.

12/22/08
- the goal agent moving sparks roomfind to recalculate path. single agent movement works!

12/23/08
- Manhattan distance heuristic is used in roomfind for all rooms (I forgot it somehow)
- Path always updated if there isn't one available
- one-room paths work. old formation behavior correctly reproduced!
- restored old examples, reordered project directory slightly

12/24/08
- Collaborative Diffusion is now an algorithmic backend to BDSM::Map, so all examples can
  easily choose it

12/26/08
- stored maps can define agents themselves
- one test script to rule them all
- one test script to rule them all

12/27/08
- Rooms recalculate their exits when agents enter them on the initial turn of the simulation
- slightly simplified event loop

12/30/08
- minor fix with CollabDiffusion. tile we tracked was static.
- AStar algorithm implemented, the control group.

12/31/08
- minor optimizations randomly from NYTProfiler's analysis
- er, fixed the A* algo while I was at it.. dont remember breaking it but whatever

01/01/09
- implemented sort-of working temporal A* idea

01/06/09
- test script returns scifair results data... turns taken, time, and a copypasta string to
  replicate
- Room's flood accepts one agent as "invisible", fixing a few minor bugs

01/07/09
- coded formation example
- made the rest of the maps. READY FOR TESTING!
- A* and collab also follow backup plans

01/15/09
- cleanup, imported old sprite/blob code from revision 55 or so

01/17/09
- fixed old examples that were slightly broken by mixing code
- removed obselete functions, moved Blockmap code cleanly away
- BDSM::Agent and Agent::Sprite refactored into new object system
- BDSM::Agent::Blob follows. everything refactored and untested!

01/18/09
- changed module layout of Agents to make them Objects

01/19/09
- fixed minor warping bugs and such
- collisions and pushing work!
- pushing with blobs works
- all old examples run

01/20/09
- Dungeon::Cave, the simplest random map, based off cellular automata rules and random noise
- Room and Hall shapes generated
- ported old code to find and mark connectable walls
- old Dungeons generated correctly, deadends unconncected

01/22/09
- Dungeon deadends are connected with nice paths

01/24/09
- changed Agent definitions slightly to reflect new Object interface
- new test script to try out StdLib stuff

01/25/09
- maps flyweight containers

01/26/09
- changing test scripts and Objects to reflect new stuff

02/02/09
- updated to reflect new Object stuff
- converted to even newer Object stuff

02/03/09
- more new Object changes (paranoid of losing changes)
- Sprite overrides all of Agent's stuff now with the roles
- standard role names

02/08/09
- added a Level class to provide methods for making stairs, items, and monsters
- tiles have separate _ (permanent type) and Actor

02/12/09
- loadmap can take in non files

02/15/09
- maps can serialize themselves
- comply to the try_action interface for nested actions

02/23/09
- changed serialization stuff

02/28/09
- removed serialization dependency on client
- another

02/29/09
- serialize shares player inv

03/05/09
- send all items on a map
- simplified serialization

03/08/09
- Sprites can serialize themselves

03/09/09
- Sprites correctly sent

03/14/09
- snapshot for changing objects again
- more

03/15/09
- changed serializstion stuff
- more changes

03/16/09
- change to new message sending

03/17/09
- new test dungeons

03/18/09
- Static object, a sprite-derivative to show off light

03/19/09
- blobs shared, doesnt fully work yet

03/22/09
- blobs sort of shared
- blobs working
- 3D dungeon generator... invert a floor. unfinished
- send 3D layer

03/23/09
- more test dungeon stuff, minor fixes
- blob callback fixes
- camera follows player-in-blob

03/25/09
- reworked BDSM::Static to be... cool map-modding things

03/30/09
- fixed collisions

04/05/09
- bestadj solver
- serverside wakeup/scentfinder

04/06/09
- beginning a map editor

04/16/09
- minor changes to blit code to redirect to attacks

04/17/09
- badass flood effect

04/18/09
- bounds check in flood

04/23/09
- minor FOV fix

04/26/09
- map editor paintbrush
- save a map with 3 layers
- loading 3 layer map
- network sending map uses new stuff too
- delete key

04/27/09
- change tile type for brush
- minor but vital loadmap fix
- change just tile type
- great UI changes, tile flags
- tile flags saved/loaded

05/01/09
- better support for blank tiles
- symbols can be ' '

05/04/09
- resize a map
