29 May 2004

  Work in progress.

  Current version contains
  Dungeon, comprising a grid of
    DungeonCells, each of which has a
      single TileType and a
      list of FieldType.  Also,
      memo_tile and
      memo_fields, which indicate whether the player's memorized those
        features of the dungeon yet.  Those have to be set inside the
        Interface-controlled LOS code, which is inconsistent.  Needs fix.
  Player, who knows what
    Dungeon he is in, and which
    DungeonCell he is in, in that Dungeon.
  Interface, which controls the conio stuff through
    user hooks.

  Universe, which controls the algorithmic stuff, including
    a hook for the user to define a Line-Of-Sight (LOS) algorithm,
    has_LOS(Dungeon *dg, x1,y1, x2,y2), which returns TRUE or FALSE
    depending as cell (x2,y2) is visible from (x1,y1).
  Dungeon::default_LOS is provided as an example simple LOS algorithm,
  and DecentLOS is provided as an example of a more complex algorithm.
  PatchyLOS is provided as an example of an experimental, "compound"
  algorithm that uses DecentLOS as a subroutine.

  Dungeon also contains utilities for use by
    user-defined dungeon generators.
    These generators must have a member operator()(Dungeon*)
    which can be passed an already-sized dungeon to mold as
    they see fit.
  OvalGenerator is provided as an example dungeon generator.
  SlantGenerator is provided as an example dungeon generator.

  MyTiles defines the various tile types.
  MyFields defines the various field types.
  MyDisplay defines the various conio hooks required by
    Interface; namely,

      void myDisplayCell(int x, int y, char r, int c);
        Display 'r' in color 'c' at screen location (x,y),
        where x is horizontal and y is vertical, and both
        coordinates are relative to the upper left corner
        of the map screen display.
      int myGetKey(void);
        Get a single keypress and return a keycode for it.
      void myDisplayMessage(const char *msg);
        Display a message to the user.
      void myHighlightPlayer();
        Highlight the player character with the cursor.


  At the moment, the project is at such a state that the Player
  can be controlled via an infinite game loop comprising calls
  to Interface::displayDungeon() and Player.command().  The
  player can move freely about the randomly-generated dungeon,
  and go up and down stairs to a depth of 10 levels.  The stair-
  related code is part of
    MyDungeonStructure, a sample dungeon-master.  These levels are
      persistent, as opposed to Angband's level system; it would
      not be hard to change the design of MyDungeonStructure to
      allow non-persistent levels.