-----------------------------------------------
0.1.2

* Fixed nasty bugs in teleport code.

* Changed the up/left links in the struct xor_move
  to a single link 'chain' which was all that is
  needed. (A previous improvement taken from
  XorGramana).

* Updated replay section of help_keys.txt to
  not suggest pressing 'r' will enter the replay.

* Pressing 's' to save a replay now only highlights
  the save replay menu item and no longer automatically
  assumes you want to do it (it was annoying to enter
  a replay save name when 's' was pressed by accident).
  After a replay is saved, the replay menu selects the
  'play game' menu item and waits.

-----------------------------------------------
0.1.1

* After the new menus, fixed level menu scores
  to be updated upon level completion and score
  bettered - via callback called by save_score
  set to new function level_menu_update_score.

* Hyper replay speed by pressing ')' - does not
  affect replay speed, is disabled by recalling
  menu.

* Single stepping replay mode - press 's' to
  enter it. Required very little coding.

* Options struct has two new single bit fields
  replay_hyper, replay_step. options_replay_speed
  sets conditionally upon not these, returns
  conditionally on these.

* Updated help_keys.txt file.

* Use of page up and down keys implemented
  for fast scroll through help.

-----------------------------------------------
0.1.0

Many changes have taken place in this release,
and I've made most of them so far without
documenting them, so half this list is from
memory.

* Pressing 'q' (quit) during game play no
  longer increments the number of moves.

* Replay code moved out of play_xor.c and
  into replay.c. Splash code moved out of
  level_menu.c and into splash.c. Help code
  moved out of level_menu.c and into help.c.

* Added new function to screen.c to display
  menus. Shortcut keys work with this also.
  Items in the menu can be disabled, hidden, or
  treated as labels, as well as normal operation.

* The level menu now uses generic menu function
  as described above. Shortcut keys work as
  before.

* Help now uses the new generic menu function
  to allow choice of which help is displayed
  (which has been split into game, keys, and
  objects). Help files renamed to help_*.txt.
  Old help read/display functions removed and
  replaced by generic versions. Max length of
  text files no longer hard coded. Help viewable
  from within game play as well as within level
  menu.

* Replays - the replay can now stop at breakpoints
  set during play. Replays now using the menu
  system which allows breakpoints to be set/unset
  as well as being set by pressing 'b' during
  play. Number of moves no longer increments
  upon pressing the quit key.

* New code - control_flow - due to breakpoints
  in replay, the old paths between playing the game
  and replaying it were no longer valid. the new
  code actually tidies it up by removing the nested
  loops that were dotted around to handle these
  paths. The new code necessitated changes in return
  values from play/replay related functions.

* scr_wmsg has become a macro invoking scr_wmsg_pause
  - passing FALSE as the boolean pause param.


-----------------------------------------------
0.0.9

* Fixed flickering level menu during repeated
  key presses.

* After a terminal window resize, changed from
  using delwin and newwin, to wresize and mvwin.

* Changed types in screen data structure from
  char to int to accommodate maximized windows
  on large displays.

* Enabling DEBUG no longer disables ncurses
  from the build. #ifndef directives therefor
  mostly removed from source. All printf's
  enabled by DEBUG, have been changed to
  fprintf and output is sent to stderr.

* Changed DEBUG_RESIZE directives to DEBUG.

* Using -std=gnu99 rather than -std=c99. Removed
  -D_POSIX_C_SOURCE=199309L from CFLAGS.

* All errors are now sent to stderr.

-----------------------------------------------
0.0.8

* Added -std=c99 and -D_POSIX_C_SOURCE=199309L
  to CFLAGS in Makefile. Allows better usage
  of variable declarations and scoping.

* Used GNU indent to reformat all source code.
  (See indent.pro for options used).

* xor.c has been renamed xorcurses.c 

* game remains central in terminal when it is
  resized.

* display full detail map in info window when
  terminal is (or is resized to be) large enough.
  full detail map is updated to reflect mask
  collection and explosions (as opposed to scaled
  map which is a roughly vague aproximation).

* increase game display area when terminal is (or
  is resized to be) large enough.

* oldschool difficulty level restricts game display
  area to 8x8 and scrolling threshhold to 1, for
  game play just like the original Xor game.

* newschool difficulty level allows increased game
  display area and larger scrolling threshholds for
  those who'd like things more playable.

* removed creation of game_win and info_win from
  game_display.c and info.c into screen.c which
  also handles the resizing of these windows.

* messages and input (ie for replay options and
  death messages) now handled by two functions
  in screen.c.

-----------------------------------------------
0.0.7

* Additional checks for gravitating objects
  added where some points around explosion
  were only checking for one direction, where in
  fact checking both directions was required.
  (funny, I don't recall finding  any instances
   where this new check is required. Atleast not
   in the first 8 maps).

-----------------------------------------------
0.0.6b

* For the first five levels, the initial least number
  of moves to beat is set to 1000. For the remaining
  levels, the target to beat is the maximum number of
  moves allowed: 2000.

* Corrected map-piece pickup/location data for level
  8, Enlightenment.

----------------------------
0.0.6

* Blowing up a sad-mask-switch now toggles wall
  visibility. Blowing up two switches simultaneously
  leaves wall visibility at current state. All as
  should be.

* Some .c files included play_xor.h simply to
  gain access to the current level being played
  (.level member of xor_replay struct) - added
  level member to xor_map struct and accessed
  the level number from here instead.

* Removed unused functions show_wall and hide_wall
  from player.c. (This functionality was already
  deferred to init_wall in icons.c).

* Changed the display in info panel during play
  to display the number of moves taken so far,
  instead of the number of moves remaining.

* Basic score tracking. Stores scores in
  /home/user/.xorcurses - if HOME is defined
  in the environment & ./xorcurses can be written
  there. The best score is the least number of
  moves taken to complete a level. Scores file
  is in binary format so as to be slightly more
  awkward than text format for stingy cheats.

----------------------------
0.0.5

* Many of the map files had incorrect map pickup
  data compared with BBC Xor version (run via
  beebem a BBC micro emulator, very handy).

* Removed some unused values within enumerations
  in actions.h

* Modified various structures/code in options.h
  and options.c. Now xorcurses looks in the
  current working directory if it can't find maps
  in the install dir. Will exit gracefully if no
  maps found.

* Map loader scans for teleports and ensures
  that if there are any, then there are two, and
  if there are two, then read their exit view data.

* New game_win_show function takes map coords
  tlx,tly as top left corner of view, primarily for
  showing teleport destination (until calculated
  teleport ok).

* in the level menu pressing keys 1-9 will select
  that level.

* changed all files which #include <ncurses.h> to
  #include <curses.h> for portability reasons.

* telports working (unless one is exploded).

* levels 10 - 15 now playable - with any luck.

* map loader validates against unsupported
  gravitating objects.

* fast replays are easier on the eyes when playing
  with a scroll threshold of 3 - replays always play
  back with a scroll threshold of 1 now.

----------------------------
0.0.4

* Changed many variable types to typedefs defined
  in "types.h". I've used the minimum size types
  for each, so many structures are a few bytes
  smaller now. Does not really make a lot of
  difference, but it seems a good thing not to
  waste memory just because we might have gb
  of it.

* pressing keys 1,2 or 3 while playing, changes
  the scroll threshold for the game area. These
  values are the number of blocks from the 
  boundaries of view the player may approach
  before scrolling occurs: 3 is centered,
  1 is traditional, 2 is pleasing.

* pressing keys 1 to 9 during replay changes
  the replay speed. 1 is slowest and 9 is
  fastest.

* replay speed also effects object movement
  and bomb detonation speeds.

* removed differentiation between y and Y when
  asking if player wants replay - (this previously
  gave two replay speeds) - due to new implementation
  of replay speed choice.

* created new structure, options, holds various
  options such as replay speed and scroll threshold,
  maintains them from level to level. other stuff
  in there not implimented.

* make install - installs xorcurses (if you have
  root privaledges) to /usr/local/bin and maps and
  help files to /usr/local/share/XorCurses.

* moved level menu from game window to info window.

* map names are now displayed when selecting a
  level, and as the info window title while playing
  a level.

* updated help files to reflect changes.

----------------------------
0.0.3

After getting the fish and chickens to do their
stuff correctly, I thought/imagined getting the
bombs to work within this would be a simple matter
of 'plugging' in some straight forward code. How
much more ****ing wrong could I have been? The
code to do all this is a maze in itself.

* moved gravity_process_moves from player.c to
  moves.c and renamed to move_gravity_process
  (some vague convention dictated this).

* changed nodelay(game_win,TRUE) to FALSE.
  on an aging laptop this caused the cpu usage for
  xorcurses to fall from 80% to next to nothing.
  (wonder if this had anything to do with XorCurses
  getting killed as I played it via SSH over dialup
  on the server that hosts my website ;-p)

* finished xmvlist_unlink_xor_move function so it
  actually works properly. one of the biggest problems
  was that it did not update xmvlist->current if the
  link being removed was what xmvlist->current pointed
  to. fixed and completed some cases where i'd completely
  forgotten I'd barely even started coding them. (this
  had been a source of myriad problems).

* dolls working

* wall visibility switches working (sad masks)

* the level menu selection remains at the last level
  played.

* more levels (includes up to level 9)

* new replay options, load/save/continue and two
  replay speeds.

* lots of code changes, to get replays working...

* new wall colours and new wall patterns.

----------------------------
0.0.2 (take 2)
* just can't get map name to display for some reason
  i've not yet fathomed.

* changed getch to wgetch at end of player death..
  can't really understand how it was just a getch - i'm
  sure it changed for no reason - must have been the
  pixies, or lemonjelly more like.

----------------------------
0.0.2

* a whole load of other stuff too... map is now
  working (small map is a bit iffy)

* chickens and fish can be pushed up/down and left/right
  respectively. chickens also run to the left, and fish
  also drop - both stop when they reach an obstacle.
  these actions set off chain-reactions of other fish
  and chickens as it should.

* mask collection re-implemented
* falling fish and running chickens can kill (as they
  should) either/both of the players.

* uncommenting the -DDEBUG compiler option disables
  ncurses and the replay option entirely. a primitive
  text-only character game can then played alongside
  the display of various data.

* added new keypresses:  [edit forgot to change this]
  z and x for left/right  [arrows + enter still work]
  ' and / for up/down
  p to swap player
----------------------------
0.0.1-4f (unreleased)

many functions no longer expect a pointer to a xor_map
struct as their first argument. there is only one map
in use at any one time so it is better for its pointer
to have global scope and not be passed around so much.

* fixed error in player swap code which caused the main
loop to quit, and a move index skipped, which  sometimes
hung the replay.

* added missing free()'s in player_move().

----------------------------
previous changes from initial version are undocumented.
--james jwm-art net
EOF
