IRE - IT-HE Role-playing-game Engine 0.82
=========================================


Latest Version
--------------

	Release 0.81 - 29/12/2002


To Do
-----

	 * PAthfinder doesn't handle large objects very well (dragon turning)
	 * Using a global array for polygons in FX is bad (null pointers)
	 * If a large object moves under an arch, the movement engine detects
	   an obstruction that isn't the object (it's the arch!) and blocks it.
	   This may be the cause of the 'bocked' error message
	 * Editor should have a universal Allegro dialog with all funcs
	   instead of the pages used at the moment
	 * Make the world-tools Resize and Mover work again
	 * Make object structure use dynamic strings
	 * New resource editor?


Documentation
-------------

	There isn't much.  Finish the PEscript and Converse docs.

	*Document that stats.oldhp must also be changed if .hp increases.
	*Document system-critical VRMs (playervrm, trackstop etc)
	 in a new chapter about writing games
	*New SPEECH functions are_there and choose_party_member
	*New script stuff for scrolling tiles, animation splicing and
	 random animation
	*Document that global object pointers are only preserved in
	 save/load if they point to objects in the current world.
	 Objects that don't exist in the map (e.g. the cursor) don't
	 get saved.


Maybe
-----

	 * 'virtual life' behaviour engine for NPCs where behaviour is
	   based on individual urges to do things rather than the
	   "God's Plan" methodology used at the moment.
	 * strcpy and associated capabilities such as making your
	   own strings.  I'll need a way to work out how long a
	   piece of string is (to prevent bounds overrun).
	   I think I should re-write the string handling system so
	   that strings are ALWAYS copies of strings and never pointers
	   this simplifies everything (after the initial effort)
	   and doesn't have the problem where a pointer to the name of a
	   destroyed object isn't picked up by the G.C.
	 *  Allow user to enter a whole string, not just numbers
	    (needs previous enhancement)


Work Log
--------

Date (DD/MM/YYYY)

05-08-03	-I had been preparing for a 0.82 release.  However, this
		 has been put on hold, as the tangle of config files and
		 platforms becomes more complicated to resolve.
		-Instead, I have redesigned the way the game handles 
		 files, and because it breaks compatibility with 0.81,
		 it will most likely be 0.90 instead.
		-The '-game' option now specifies a path, where the
		 game data will be found.  In the data directory, the
		 game.ini file contains the configuration for that project.
		-The game will look for a config.ini file, which contains
		 the user's own settings, such as the video mode.
		 This will be found in their home directory, or failing
		 that it will look in the current directory instead.
		-The editor will also look for an editor.ini file,
		 which allows editor-specific customisation.  This can
		 be in the user's home directory, so you can make the
		 editor always launch a certain project if desired.
		-I am contemplating dropping support for .RAR files and
		 having the data just sit in a directory.
		 Removing this will speed up file operations, but I
		 will have to repackage the demo game (and ROTJ).

21-07-03	-Fixed an obscure bug involving structures, which may
		 have been brought to prominence by the savegame stuff

12-07-03	-Savegames now store global variables, both integers
		 and also pointers to objects.  

29-06-03	-Moved house.. this kind of upset the development
		 schedule.  Not there there was a great deal to do
		 lately.
		-Added SHL/SHR (or << >>) operators to the script
		 language.  Does a bit-shift.
		-Fixed problem where objects with 'oninit' function
		 didn't work properly if created in-game.
		 (The 'current' variable wasn't being set.. nasty!)

10-05-03	-Fixed some glitches involving special effects.
		 ALPHA_SOLID now sets the transparency level for sprites
		 to 255 (solid).
		-Added new command fx_animsprite, which, like fx_sprite,
		 projects a sprite onto the screen, but with animation.
		 It is transparency-aware.
		-show_roof (in the script) now works again, but
		 differently.  It now overrides the game's decision.
		 Instead of true and false, it is now a tri-state.
		 Set to 1, the roof is always shown, even when the player
		 is beneath it.  Set to -1, the roof is never show.
		 Set to 0, the game decides whether the roof should be
		 drawn, as usual. It is reset to 0 after each turn.

04-05-03	-Code now compiles cleanly with -Wall, a few ambiguities
		 should now be resolved correctly

03-05-03	-Various code cleanups
		-User1 and User2 are now preserved when using 'change'

02-05-03	-Fixed a bug that caused Allegro to crash during
		 shutdown under some very specific and odd circumstances.
		 It should work in DOS now.

22-04-03	-Added a new Status request to display zoomed maps.
		 The debug keys 'W' and 'E' have been removed, but their
		 functionality now can be emulated in the script.
		-Added key 'KEY_PLUS_PAD' to the script language.  Oops.
		-Zoomed maps can now show rooftops, which will be more
		 suitable for satellite views, peer spells etc.

21-04-03	-Fixed a number of problems involving pathfinding for
		 large, rectangular objects.  They now turn around corners
		 and do various things to try and manuver in the given
		 space.
		-Fixed a problem caused by earlier experiments with
		 this that caused NPCs to walk backwards sometimes.

03-04-03	-The IRE censorware engine does not now censor embedded
		 swearwords, such as 'scrap'.  Hopefully it will still
		 censor all genuine cases.
		-Alexandre Pineau tells me that his (slightly modified)
		 package of IRE has now been submitted to Debian and
		 will appear in Unstable over the next week or so.

		-Elsewhere, the disagreeable events which have cost the
		 existences of many people and sub-sentients for a hazy
		 and questionable goal, continue unabated.

20-03-03	-Some quite disagreeable things have occurred regarding
		 one insane president attempting to kill another.

09-03-03	-Editor now saves user1 and user2 strings for objects
		-Added support for function calls from an animation seq.
		 'me' contains the object associated with the function.
		-Special FX functions are now based around 'me' instead
		 of 'current'.  For now, both work but this may change.

02-03-03	-Editor doesn't compile scripts fully anymore, this helps
		 when using memory checker tools like 'Fortify' and
		 should speed the editor startup in general.
		-Editor now uses a list of statistics for editing
		 objects.  Not quite as pretty but far more maintainable.
		-Objects now have a 'Quantity Change' function, which
		 is called when an object's quantity has been modified.
		 You can use this for money, to show different sprites
		 depending on how many coins it is.
		 There is also an 'update_quantity' command in the script
		 for when you change the quantity by hand.

23-02-03	-Fixed BeOS zipfile now available (old one was truncated)
		-Fixed a bug involving object arrays (CHANGE wouldn't work)
		-Added two new effects, fx_poly and fx_rect, which draw a
		 polygon and a rectangle respectively.

13-02-03	-There is an updated datafile on the IRE web page that
		 fixes an issue with The Flat where the command console
		 didn't appear.  This appears to have been overlooked in
		 the hurry to get Reign of the Just out of the door.

09-02-03	-The game and editor are now frame-locked.  While you
		 wouldn't normally notice it in Reign of the Just, on
		 empty worlds the game and editor run way too fast on
		 modern hardware (or even older hardware!).
		 The problem is most apparent when playing woth the mouse
		 because the keyboard has its own internal limiters.
		 Both game and world editor are by default locked so
		 that each turn will always take at least 2/35 of a
		 second.  (This rate is adjustable with -framerate).
		 It does not slow down the game any further if your
		 machine is already struggling.

26-01-03	-In the new 0.82 branch, edit-area in the editor now
		 outputs the size directives in the same order as they
		 are in the resource file (oops!)
		-Play_Music now does nothing if it is trying to play the
		 same song that's already playing.
		 It should also stop the current song so you won't get
		 two songs playing at once under Alogg anymore.

23-01-03	-Alexandre Pineau has kindly made Debian binaries for
		 IRE 0.81 and Reign of the Just.

12-01-03	-Thanks to the help of Michaelle Febvre, a new version of the
		 Linux binary has been made which links statically to 
		 libXxf86dga.a instead of the shared object version.
		 Because the shared object version was peculiar to Mandrake
		 the resulting program only worked on Mandrake!
		-A fixed version of the binary has been uploaded.

10-01-03	-Found a problem when compiling IRE 0.81 with Alogg instead of
		 FMOD.  It seems that Alogg 1.30 has had a few changes since
		 the beta I developed with, but they both have the same version
		 number.  I'm sure I checked the new version but obviously not.
		-A source patch has been made available at http://ire.sf.net
		 This doesn't affect any binaries, or people compiling with
		 FMOD, but it has affected the Debian version ;-)

31-12-02	-Released the Reign of the Just demo!
		 It (and info about it) can be found at http://rotj.it-he.org
		 Downloads are available for Windows and Linux, 10MB each.

29-12-02	-Released IRE 0.81.  This is the version of the game engine
		 that the Reign of the Just demo will use when it is
		 released, hopefully tomorrow.

22-12-02	-Found a last-minute problem with reloading from the
		 game menu (instead of starting a new game then loading)
		 There are still a few glitches with this new feature
		 but they seem only to visual bugs which don't harm the
		 game.

10-12-02	-Fixed a problem with set_local in the conversation system
		 where it wouldn't add a flag properly if you cleared one.

08-12-02	-Fixed the problem where you see through doors into blanked
		 rooms if you place the cursor over part of the door.

30-11-02	-Engine now calls a script called 'initproc' before the
		 game engine is initialised.  You can use this for menus.
		-Added 'secret' API calls to allow script to do various
		 magical things like loading, saving and volume controls
		-Lots of internal modifications for starting the game with
		 a savegame instead of loading back after the game has
		 begun
		-Rewrote the volume slider to use allegro
		-New script command like 'all_onscreen' but with user radius 
		-Various other enhancements but it's 3am and I'm going to bed

25-11-02	-Released a fixed version of the Flat datafile.

23-11-02	-In The Flat in IRE 0.80, a few gameplay bugs have
		 been uncovered.  I have a fix for some of them but it
		 has not yet been released.
		-There is a bug in the RAR file handler involving
		 multiple RAR files.  This has been fixed in 0.81 but
		 not yet in any released version.

21-11-02	-A Debian package of IRE 0.80 and The Flat has been
		 released.  See the download page for details.

15-11-02	-Fixed a crashing bug in the editor

02-11-02	-Added new label attribute 'party', which allows for
		 parties of NPCs other than the player's party.
		 NPCs of the same party will get out of each other's way.
		-Added new script keyword 'stopsearch' which stops
		 function-based searches like 'search_inside'.
		-Added access to a few more internal variables in usedata

26-10-02	-Fixed a 'creative accounting' problem with SumObjects
		 where it reported more money than you really had.
		 This could lead to crashes when you tried to pay someone..
		-Improved detection of changed data in savegames after
		 finding that it would routinely store temporary data for
		 all the objects in the world.  One of my savegames is
		 now 46 times smaller as a result.

25-10-02	-Savegame format has been changed and is incompatible.
		 New format should offer a degree of future-proofing though.

24-10-02	-Improvements to the makefiles, courtesy Alexandre Pineau

20-10-02	-Whether a creature could open and close doors was being
		 determined by their intelligence level.  This was, at
		 best, a hack.  This aspect of the pathfinder is now
		 controlled by two flags, WONT_OPEN_DOORS and WONT_SHUT_DOORS
		 which are defined in the CHARACTER section of the
		 resource file.
		 By default, all objects with the pathfinder can open and
		 close doors.  Set this for the ones that can't.

18-10-02	-Removed the start_music command from the script
		 language.  It did nothing anyway.
		-The stop_music command now works and halts the current
		 song.  Previously it was intended to pause music so it
		 could later be restarted with start_music but this
		 idea has been abandoned.
		-The lightmap reader now properly handles zero, so the
		 faint square borders around candles etc. are gone.

16-10-02	-Added experimental support for the ALOGG library, which
		 can stream Ogg Vorbis files under Allegro.
		-The Linux makefile now has options to choose between
		 the FMOD and ALLEGRO/ALOGG audio libraries.

13-10-02	-The game data can now be read from a system directory
                 under Linux.
		 For example, the game program can go in /usr/bin/ire
		 and the datafiles and INI files can go in
		 /usr/local/games/ire
		-You can change this default data directory with an
		 environment variable, and you can have different
		 variables for each game, depending on the filename of
		 the game program.  It will default to the master one if
		 a 'local' environment variable is not set.
		-The editor can take some of it's resources from the data
		 directory


12-10-02	-Create, Take, Give etc. in the conversation scripts now
		 strips quotes from the objects, e.g [create 1 "cheese"] will
		 create the object 'cheese' not '"cheese"'.

06-10-02	-Fixed projection problem with large objects near border
		 of map.
		-Fixed problems with the random number generator in
		 PEscript.. I had wondered why 'heal' sometimes did harm.

28-09-02	-Version 0.8 has been released on Sourceforge.

27-09-02	-Oops, looks like someone forgot to upload the worklog ;)

21-09-02	-Fixed a horrible bug when you went to another map and
		 reloaded a saved game from another world.
		-Speeded up the Windows version load and save by
		 removing some long-forgotten debug messages.

12-09-02	-Fixed the Windows memory bug.  Windows doesn't support
		 mkstemp(), the safe way to get a temporary filename.
		 It has to use tmpnam() instead which returns a pointer.
		 I freed the pointer when I was finished with it, and it
		 turns out that it's statically allocated and this act
		 drove Windows mad.
		-Fixed build problems in DOS, where it used the original
		 Allegro sound driver instead of the new FMOD one (which
		 isn't supported for DOS)

11-09-02	-As I begin the preparations for releasing 0.80, a nasty
		 bug under Windows pops up from nowhere.  It seems that
		 under some circumstances calloc() returns the same pointer
		 for two different memory allocations.  Time to look at it
		 with Fortify..

28-08-02	-It has been possible to make conversations where the
		 possible options disappear as they are used, but this
		 has been something of a bodge.
		 From now on, conversation links will disappear when they
		 are used, unless they are followed by the [always] tag.
		 The list of conversation links that have been followed
		 is deleted when the conversation ends.  Use [once] to
		 make the effect permanent.

26-08-02	-Mouse support is now >95% functional, in TFM at least.
		 Adding mouse support to The Flat will be a pain..

13-08-02	-Added a corona effect and fixed a few more bugs

08-08-02	-Fixed problems with objects not becoming active when they
		 change form.  This meant that NPCs would not close doors
		 they went through unless they were already open when the
		 map was loaded.
		-Investigated a crashing bug if you shot the Cardinal.
		 Involves objects being used after they were freed.  I have
		 a solution, but there are a few unanswered questions about
		 the cause.

03-08-02	-Added an effects command to draw a sprite in the current
		 effects brush.
		-The resource editor has not been properly maintained and
		 is coming to the point where using it would damage the
		 game's resource file.  Fact is, I never use the thing
		 because it's quicker for me to just use a text editor.
		 However.  The most useful feature of the resource editor
		 was always the Active Area/Solid Region calculator.
		 So, I have bolted that in to the map editor.
		-If you invoke the map editor with the -area parameter,
		 it will bring up the Area Editor (much faster than the
		 map editor comes up).  You can then play around with
		 the sizes and offsets.  The lines to go into the resource
		 file are constantly updated at the bottom of the screen,
		 so you can scrawl them down.  I may later add the ability
		 to export them, perhaps even directly to the resource file. 

01-08-02	-Fixed a long-standing bug in large object movement
		 (that caused the car to be over-cautious in all previous
		  releases!)

31-07-02	-Fixed a problem with eggs when the game is restarted.
		 This was because the first-time init functions for the
		 objects were not being called for a Restart, only when the
		 game is started up from cold.
		-Fixed some insideous problems involving strings in the
		 script language.  Strings always work by reference at the
		 moment.  If you assign an immediate string to a variable
		 (e.g. let mystring = "hello") it will now assign the address
		 of the master copy of the string (not the local copy from
		 the VM pool which will discorporate unexpectedly!).
		-Talking of which, the size of the VM memory pool can now be
		 overridden by the config files.
		-Worked around a problem with VC being retarded where the
		 compiler announced that the keyword 'near' is a non-standard
 		 extension and should be avoided.
		 This is true of course, but not allowing the programmer
		 to declare a variable called 'near' is ALSO a non-standard
		 extension which should definitely be avoided too.
		-People using the pathfinder are no longer afraid of
		 crossing bridges over water.

30-07-02	-During the course of an investigation into apparently
		 random slowdowns under Linux, I made the VM use a static
		 pool of memory to run the scripts in, instead of allocating
		 and freeing memory each VM function call.
		 This, it turns out, was the reason why the Windows version
		 was unplayable on a GHz machine: Windows seems to use a
		 very, very poor memory allocation strategy which takes
		 milliseconds to allocate each block.  This is BAD.
		 With my own stack-like allocation routine, the windows
		 version is no longer soundly thrashed by the Linux version.
		-At the moment the VM has a fixed 128k of memory, which is
		 quite enough, but I'll make it configurable later on.

29-07-02	-Found and fixed some memory overruns

28-07-02	-String arrays are now closer to working and can be used
		 for simple tasks.
		-Added a new alternative to find_tag, called 'fast_tag'
		 which is a lot quicker on large worlds, but is limited
		 to a 32x32 grid centred on an object.  This is being used
		 in activities (where an NPC goes between points or
		 picks up a prop etc.) and gives a noticable speed increase.

27-07-02	-Added new script commands:
		 get_key_quiet (get a key without redrawing game window)
		 textfont (set font used by succeeding printxy commands)
		 commands to save and restore the screen now also store
		 the mouse ranges (and erase them for the new screen)

24-07-02	-Schedules specified in resource.txt are now ignored in
		 the world editor to prevent them being added to the real
		 schedule each time the world is edited.

23-07-02	-Improved VM crash debugging again
		-Objects with radius triggers can also have scheduled
		 activities now
		-New SCHEDULE keyword in resource.txt, now you can specify
		 default schedules.  This is used by eggs for night-monsters
		 that fade away at dawn.

21-07-2002	-Animated tiles now animate in the toolbar of the map editor 

20-07-2002	-Fixed some cruft in the way 'active' objects were handled,
		 now the code makes sense and there are a lot less hidden
		 implications.  Those which remain are at least
		 partly-documented.
		-Removed the 'trigger_dummy' kludge for eggs, chairs etc.
		-Fixed a problem with loading and action queues
		-If a VM function crashes, a full debug log will always be
		 written to the log file, not just when -debugvm is used.
		 This will make debugging of random/obscure crashes easier
		 without any performance impact.
		-Pathfinder is more intelligent and can now leave the
		 given path if the target is en route instead of following
		 the path to its conclusion every time.  This means you can
		 re-use a 'backbone' path for other things.

19-07-2002	-You can now assign a function to a tile, for things like
		 swamps or desert which can eventually kill the player.
		-Fixed a few quirks involving trigger objects

08-07-2002	-Added support for an earthquake effect

07-07-2002	-Modified editor large map display to give more accurate
		 display of solid areas.
		-Added new command to set current task without erasing
		 queued sub-tasks

06-07-2002	-Fixed a bug in the script where you couldn't have a
		 do/while loop immediately after endif

02-07-2002	-Support for more generalised radius-triggers.
		 Previously this was intended solely for eggs, and the
		 radius of the object's triggering was fixed.
		 Now there is a new property 'radius' which is the
		 radius of the object in squares.  If the player enters
		 this radius, the object's USE function will be called.

30-06-2002	-PEscript arrays are now 1-based, not 0-based.
		 I'm assuming no-one has yet done any serious coding with
		 the language.  If you do go out of bounds, the program
		 will let you know soon enough. ;-)
		-Fixed a few chinks where the game could be crashed by
		 a VM failure

20-06-2002	-Fixed a bug in chknpc that caused it to miss some
		 links to pages that didn't exist.

22-06-2002	-Editor now saves a backup copy of the .mz1 file to
		 .bak, just in case.  (This is the most important file)
		-Editor now Uproots large areas of objects much faster
		 (it took many minutes before, now it takes seconds)

09-06-2002	-Switched sound system from Allegro's own routines
		 to use FMOD, on platforms which it supports.
		 I am still keeping the Allegro driver around for DOS,
		 BeOS and the other platforms that FMOD won't do, and
		 also for you Free Software puritans (FMOD is closed src)
		 However, getting Vorbis music to work in Allegro without
		 FMOD is left as an exercise for the reader.
		-Fixed a few windows-specific problems.

08-06-2002	-Various experiments with Ogg Vorbis streaming to try and
		 replace audlib.

04-06-2002	-The conversation engine will now try to load backings
		 from the '[project]/backings' directory if it can't
		 find them in the pics directory off the one where the
		 book or conversation file lives.
		 This saves space a lot when you have lots of files that
		 use the same backing picture (e.g. generic paper backings)
		-More fixes for partially-blanked large objects

03-06-2002	-Savegames now seem to work correctly again, and support
		 multiple worlds more thoroughly.
		-Fixed problems where creatures given certain activities
		 could sometimes walk through closed/locked doors.
		-Fixed problems with overzealous blanking code, where
		 trees and similar objects (partly-offscreen) would vanish.

28-05-2002	-Work continues on savegames..

26-05-2002	-In the editor, made a number of minor usability tweaks
		 and stopped a range of cosmetic glitches, including text
		 in buttons etc. overflowing out of the controls, and
		 buttons staying down after they've been pressed.
		 Also you can use ESC to exit the ownership dialog.
		-Savegames now save light states and have better support
		 for multiple worlds, but still not enough for a full
		 adventure spanning several worlds.

20-05-2002	-Fixed a problem where NPCs using the new pathfinder
		 would overshoot by one square .
		-Added a new label tag 'location' which can be set
		 in the editor to a string up to 31 characters.
		 This is now used by the long-range pathfinder instead
		 of the 'personal name' tag.  What a hack that was.

18-05-2002	-Fuzzy container searchers now really are fuzzy

16-05-2002	-VM local variable allocation now uses VMTYPE correctly
		 and should now be portable to other word sizes

15-05-2002	-Fixed major cosmetic problem with mouse droppings in
		 the conversation system.

13-05-2002	-Fonts can now be loaded from RAR files.

12-05-2002	-Fixed a couple of exotic crashing bugs and stopped the
		 editor from writing the 'oldhp' field to the map, which
		 is pretty redundant except for savegames.
		-Fixed a formatting bug involving conversation fonts.

06-05-2002	-Mouse support in conversations.  Works but has cosmetic
		 issues.

04-05-2002	-Exclude option in the editor now only shows objects of
		 the type selected, not just he one that was selected.
		 This is more useful, for finding hidden eggs and suchlike.

02-05-2002	-Pathfinder now treats people as if they are NOT solid,
		 but attaches a high cost to moving through them.
		 This means that paths won't fail as impossible just because
		 someone is blocking the doorway at the wrong moment, and
		 yet they won't try to barge through crowds of stationary
		 people	(e.g. sitting in church) as if they weren't there.

01-05-2002	-ResumeSchedule now looks to see if the object type has
		 a default activity set in the resource file.  It will use
		 this if there isn't any scheduled activity.
		 This stops a problem where an animal defends itself, kills
		 the attacker, but then stands around like a lemon because
		 it has no task to resume to. 

30-04-2002	-Fixed problem with large objects when no width and height
		 are specified in the resource file (no 'setsolid' etc).
		 Defaults are now properly chosen instead of bodged.
		-The VM system now uses unions instead of stuffing any
		 kind of data into a pointer and hoping it will fit.
		 In theory the game should now be portable to other
		 architectures (with different word/pointer sizes) but
		 I won't know for sure until I try it ;-)

29-04-2002	-Martyn improved the pathfinder heuristics and optimised
		 the pathfinder engine to get a tenfold speed increase.
		-Looked into problem with map reader regarding width and
		 height of large objects

25-04-2002	-Martyn rewrote the A-star pathfinding engine completely
		 and it works very well.  The problem where NPCs would
		 sometimes peep into rooms on their route is cured, and
		 I have added the ability to assign costs to map tiles
		 so they will prefer not to walk on grass etc if there
		 is another possible route.

24-04-2002	-Fixed map compatibility between Windows and Unix (CR/LF)

20-04-2002	-Self-coloured font support for conversations.
		 This lets you have nice multicoloured bitmap fonts, so
		 you can have a special antialiased font for paper, or
		 something shaded like the Doom font.

18-04-2002	-Music now works again.

15-04-2002	-Changed the Orbit command's parameter spec.
		-Added support in the conversation engine for links based
		 on the left and right arrow keys.  Good for books.
		 The new commands are [left="page"] and [right="page"]

14-04-2002	-Added a new special effect call, to calculate orbits.
		 This allows you to make objects orbit in a circle around
		 the player or anyone else.  Good for spells.
		-Fixed problem with conversation where it would sometimes
		 display the entire file on one page.

11-04-2002	-The map editor now creates the object layer correctly
		 when building a new map from scratch.

09-04-2002	-Fixed an off-by-one bug in array support.
		 Fixed a little-used command so it actually works and
		 made it behave like the documentation says it should.

06-04-2002	-Began work on mouse support.
		 You can now create buttons that can be clicked on, and
		 script features now exist for getting the map tile that
		 was clicked upon, or the position of a 'grid' which 
		 will be helpful for objects in the backpack.

03-04-2002	-Optimisations for startup and loading.
		 This involves speeding up mass object deletion and has
		 left the game somewhat unstable for the present.

02-04-2002	-p-flags support is removed from the engine.
		 This was not used much, except in conversations.
		 The [if_pflag=] keyword is still supported, but now uses
		 local flags internally.

30-03-2002	-Fixed a long-standing problem with the room blanking
		 where bits of large objects sometimes got projected
		 when they shouldn't be.

28-03-2002	-Most string comparisons in the script language are now
		 'fuzzy' and support partial string wildcards.
		 For example, 'food*' matches 'food00', 'food_portion' etc.
		 This only works with a * at the end of the string, and
		 '?' for a single character is not implemented at this time.

26-03-2002	-Proper UNIX support for user-specific settings and
		 temporary files.  They are now created in a
		 subdirectory off the user's home area.
		 For Windows and DOS they are created in a subdirectory
		 off the current directory (normally where the game was
		 run from)

18-03-2002	-Gender-specific tokens in the conversation system are
		 now managed using Data Tables (MaleWords and FemaleWords)
		 so the list of tokens (His->Hers, Mr->Miss etc) is now
		 user-definable.

17-03-2002	-Editor can now optionally view all solid objects on the
		 large-scale map.
		-Effects are now per-object, and a screenful of effected
		 has no measurable impact on the game's frame-rate.
		 I'm not sure I would like to try this on a 486, mind.

16-03-2002	-Broke something in the VM and spent the day trying to
		 find out what.  Eventually reverted VM to yesterday's code.
		-Strings are now padded to system word size, and can be
		 more than 256 characters long.
		-Made a few tweaks to the effects system but nothing major.
		-VM Debugger now gives correct addresses, this broke
		 when the opcode size was moved to word instead of byte.
		-Invisible objects can now be seen by get_object.
		 This means that if the player examines the square, the
		 object will be described.  If you don't want this to
		 happen,  set the System flag for the object.
		 This will be useful when per-object FX are implemented.

15-03-2002	-Added support for hexadecimal numbers to the script
		 language.  It uses C notation, e.g. 0x240a
		-Added some new PEscript commands for special effects on
		 the game window.  This will be used for magic and similar 
		 things which the game engine alone cannot easily do.
		 The special effects code will be run once per animation
		 draw, so any such code will have to be fast.
		-Modified the internal format for PEscript object code.
		 Everything is now word-aligned except for strings
		 which will be done later.  Padding will be required.
		 This will, sadly waste a lot of memory, but it should
		 speed up the game, and it will make it possible for the
		 script engine to be ported to dodgy processors such as
		 MIPS and ARM which crash on unaligned data access.
		 It has also increased the 256 opcode limit for the VM which
		 was starting to make me nervous.  The final stage will be
		 to make it use a custom data type (union) for everything.

09-03-2002	-Removed last remnants of VRM handling from the game.
		-Began work on a long-range pathfinder at long last.
		 NPCs can now walk between different parts of the starting
		 town, which will make schedule development of that town
		 possible!
		-The pathfinding is achieved with markers.  Each marker
		 has the name of the location it leads to as its name.
		 Its owner is set to the next marker, so they form a chain.
		 The NPC searches for a nearby marker and follows it.
		 When they reach the end of the chain, the current task
		 is completed.
		-This can be used with Action Queues e.g. for work.
		 The first task in the queue is to go to work,
		 the second task starts the work activity.
		 This means that the NPC will only start working when
		 he has actually got to work.  He won't go crazy in church,
		 or start baking bread in the street because the player
		 stopped them from getting there on time..

08-03-2002	-Got access to a slower machine running Windows.
		 Profiled the engine and did lots of optimisation work
		 on the startup time, including a major change to the
		 guts of the PEscript compiler.

03-03-2002	-Fixed a bug with caching that meant it wasn't actually
		 working at all!  Now there is a nice big performance
		 increase.  I'll still have to check it under Windows at
		 work, though, to see what it does on a slower machine.
		-Wrote a general sprite loader (using the cache) that works
		 for both sprites and tiles.

27-02-2002	-Implemented RLE sprite caching, but saw only a
		 disappointing performance increase.

25-02-2002	-In the editor, added support for 'tile cycling'.
		 When enabled, you can paint tiles on the map, but the tile
		 drawn will be one between the left and right tiles.
		 The tile number increases until it reaches the Right tile,
		 at which point it goes back to the left.  In practice, it
		 is useful for drawing repeating tiles, e.g. 123123123
		-Rearranged the way resources are loaded internall to help
		 optimise the startup time.  I'm also planning to cache
 		 the compressed and converted graphics for each bitmap,
		 which will make the game start faster after the first run.
		 The trick will be to stop it from loading the old sprite
		 from the cache if the original has been updated.

20-02-2002	-Added new RANGE member to stats structure.  This is
		 intended to be used to store the range of a weapon in tiles.
		-Replaced PEscript function if_line_of_sight with
		 get_line_of_sight, which returns the number of tiles away
		 the two objects are.  If there is no line-of-sight it
		 returns -1


12-02-2002	-Fixed the screwed-up implementation of 'Break' in PEscript
		 that waited until the loop cycles instead of bramching
		 immediately.
		-Fixed wielding problem in TFM (caused partly by Break)
		-Changed 'wait' command in PEscript to take a parameter,
		 either 'BLOCKING' or 'NONBLOCKING'.
		 NONBLOCKING continues to draw animation while waiting
		 (fixes issue where flames stopped when player is hurt)
		 BLOCKING stops the animation, typically used outside of
		 the game loop (e.g. when the player's dead).
		-Added Dexterity support to TFM for ranged weapons.
		 Now monsters don't spit venom at you with 100% accuracy.
		 Also there will be a scuffle if they smite others by mistake 

05-02-2002	-Init systems now return correct amount of memory used 
		 by the sprites.

04-02-2002	-Fixed a problem where the roof could be redrawn over
		 the player if they were attacked in a house

03-02-2002	-This log mainly reports coding work, as opposed to art,
		 worldbuilding and writing.  There hasn't been much of 
		 the former for a bit, not least because Deus Ex is so damn
		 addictive. Look out for a DE page eventually on it-he.org.
 		-For some time, NPCs have occasionally gone into a pathfinding
		 loop, where the shortest distance to their target is 
		 unclear.  Because the path is recalculated each time, they
		 sometimes decide (possibly owing to a subtle bug in the
		 pathfinder logic which I don't understand) that it is 
		 quicker to go in the opposite direction, which usually 
		 has them wibbling crazily between two adjacent tiles.
		 I have now changed the pathfinder engine to cache up to
		 eight steps of path for each NPC.  This should stop the
		 wibbling and also speed the game up because it can use
		 pre-calculated paths instead of recalculating everything
		 every time.
		-I managed to delete a syntax highlighting file I made for
		 PEscript and had to rewrite it.  While doing that, I made
		 one for the conversation files as well.  They're for MCedit.
		 Ask me by email if you're interested in it.

07-01-2002	-Progress will be slow for a bit, owing to Deus Ex.
		 However, I have now implemented a special-effect feature
		 to pan a large image across the screen in any
		 direction.  It's called from PEscript and is useful for
		 cut-scene pictures, or similar.  It's like the endings
		 of Doom or Heretic.

23-12-2001	-RELEASE 0.7 IS NOW AVAILABLE!

17-12-2001	-0.8.. Conversation Engine now starts on page 'startname'
		 if you know the NPC's name.  This is optional.. if that page
		 doesn't exist it will try 'start' as normal.
		-0.8.. Fixed bug with Eggs and similar Proximity devices
		 introduced by the text-based map format.

11-12-2001	-0.7.. Allegro 4.0 released, checked it still builds.
		 BeOS embraced the Left-Hand Path and had to be put down.
		 Then I couldn't reinstall it.  Eventually managed to coerce
		 it into working.

22-11-2001	-0.8.. Added support for Horror objects.  If an NPC notices
		 one, it freaks them out really good.  It calls a script which
		 can be made to do various things.  For example, a dead body
		 can be marked as Horrific and NPCs may run away from it or
		 shout 'Help! Murder!' and call the guards to find the killer.

19-11-2001	-0.8.. You can finally go back out of a bag.

18-11-2001	-0.7.. found a showstopping bug in BGUI requiring a library
		 change.  Also, Allegro is finally approaching version 4.0
		 so I'm going to stop and wait for it..

13-11-2001	-0.8 preliminary:
		 Added support for action queues.  Up to 8 activities can
		 be put in a queue so they are carried out in sequence.
		 The commands are identical to the Action commands.
		 This replaces the Goal code (removed early 2000) and allows
		 complex tasks (e.g. sub-tasks) to be programmed more easily
		 and without the associated problems (task stack-up) because
		 all the sub-tasks are flushed when a new Action is set.

		 An example would be bread-baking:
			queue_action baker does get_flour
			queue_action baker does get_water
			queue_action baker does mix_dough to flour
			queue_action baker does bake_dough to oven
			run_queue


08-11-2001	-0.8 preliminary:
		 The editor now uses about the same amount of memory as the
		 game, instead of 4 times as much.  It could still take
		 some improvement.
		-Roof tiles can now darken the game window, for caves etc

07-11-2001	-The binaries and source are now packaged for release.
		 This is in a way unfortunate, because the data isn't ready.
		-0.80 preliminary:
		-New map format now does Schedules.  Now switched to the
		 new format for general use, not just savegames.

06-11-2001	-0.80 preliminary:
		-Fixes are made to the map format so that it actually
		 works.  Decorative support is also added to it.
		-Fixed a long-standing bug with -very- large objects
		 (e.g. 747 sized) which would cause a crash.  This shouldn't
		 affect 0.70 unless someone really gets overzealous

05-11-2001	-Preliminary works begins on 0.80
		-The MZ1 map format changes yet again, this time to a 
		 text-based format.  This will put an end to the kludges
		 that were necessary for a binary file format to evolve.
		 For testing purposes the format is currently used only
		 by the savegame engine.
		-Objects now have a 'parent' field which is a pointer to
		 the container they are in.


01-11-2001	-For the Flat demo, some more debugging.  Fixed some more
		 bugs, including the bank.  Now you actually can withdraw
		 money from other users' bank accounts.

31-10-2001	-Fixed garbage collection bug that caused people to forget 
		 what they were doing when a bomb was detonated anywhere in
		 the world.

23-10-2001	-Switched to static Allegro library

04-09-2001	-Putting the Flat back together for a release, may take a 
		 while

03-09-2001	-Win32 version now compiles as a console application, so
		 you can see what happens during startup.

30-09-2001	-Tried to fix 8bpp mode, but it is still unusable.

22-09-2001	-Not much has changed with the code, owing to a freeze
		 which should hopefully lead to 0.7 fairly soon.
		-Fixed problem (esp. in Windows) where the mode selection
		 dialog was purple and totally unreadable.

15-09-2001	-Conversation engine supports different font sizes now.
		 This is still experimental, and the in-game console will
		 need a lot of re-engineering to support different fonts
		 but this is still useful for the NPC conversations.

02-09-2001	-I believe the memory issue is now fixed.

01-09-2001	-Found a problem, some kind of memory screw-up, fortify
		 is assisting with the debugging.

29-08-2001	-Disabled the Pathbuilder in the world editor for 0.7 because
		 it doesn't work and requires a lot of attention to the 
		 tilesets.
		-Turned my attention to The Flat demo, which didn't work 
		 owing to a number of changes since 0.68, most prominently
		 the fact that SEER has been discarded.
		-The Flat now starts up, but works VERY slowly owing to a 
		 stream of warnings about obsolete VRM files being called.
		 This should soon be cleared up.

28-08-2001	-Tried to do a test build of IRE in Windows.
		-Visual C++ broke.  Trying to decide what to do.

27-08-2001	-Tried to compile IRE for Windows.
		-Windows broke.
		-Reinstalled Windows.
		-IRE compiled for Windows with a handful of changes.

26-08-2001	-Redesigned the way we handle objects that are going to travel
		 between maps (e.g. the party, stuff in their pockets) to allow
		 the party to change maps while in a vehicle.  This caused 
		 crashes before since the vehicle (which contained the party)
		 didn't get transferred to the new world since it wasn't 
		 a true member of the party.
		-Fixed glitches with the roof where it would sometimes 
		 appear over you when the cursor appears.

25-08-2001	-Fixed crashes when restarting the game after changing maps.
		 Once it no longer crashes if you change maps in a car, the
		 engine should be stable enough for a 0.7 release.

21-08-2001	-Slight changes to the makefile for compatability with GCC 3.01

20-08-2001	-The game now bootstraps all the NPCs when the game starts
		 and when the map changes, so they start their activities
		 immediately instead of waiting for the next schedule change.
		-Fixed yet another problem with pathfinding and trees.
		-Tried to fix some bugs in the pathfinder, which came to
		 light when the farmer would 'oscillate' between two possible
		 routes.  This now happens less often but needs a more 
		 permanent solution.

13-08-2001	-Went through the code to clean up a lot of bad practice.
		 It now emits fewer warnings, but is not completely clean
		 and won't be without some substantial changes to the way
		 pointers are (ab)used, especially in the script system.

12-08-2001	-Fixed bug in script command table that prevented two numbers
		 (i.e. not variables) from being added together.
		-Fixed a problem with pathfinding, where large objects which
		 started on a solid square (e.g. a tree by a lake) would not be
		 treated as solid by the pathfinder, but they were by the
		 rest of the game so NPCs would just ran into them and stand
		 there mindlessly.

11-08-2001	-Put a new screenshot of TFM on the web page.

06-08-2001	-Resedit now only writes stats etc that are not zero (tidier)

04-08-2001	-Editor now supports copying objects (before it was just 
		 cut and paste.. and you couldn't paste multiple times..)

02-08-2001	-The game engine now automatically wakes up an NPC and makes
		 them get out of bed (by calling the 'WakeUp' script) when
		 an activity is requested.  This means you don't have to
		 put WakeUp as a task in their schedules anymore.
		-It also stops the 'NPC stuck in bed' problems.

01-08-2001	-The Rescheduler now seems to be working properly, but 
		 unfortunately it tends to skip NPCs WakeUp events unless you
		 are very lucky.  This means that they stay in bed all day,
		 trying to do their regular activities, but unable to do so.
		-Looks like I will have to add special sleep-related code to
		 the game engine itself.

30-07-2001	-Work on the Re-schedule code (used when you sleep for a
		 long time and the game needs to sync NPC activity)

22-07-2001	-Fixed bugs with loading and saving maps caused by npc class.
		-Fixed bugs where the editor tried to save the state of decors
		 and the game grumbled because it couldn't load them back.
		-Bottles now ported to PEscript.

19-07-2001	-Added a new user data entry 'vigilante' which is reset
		 automatically by the NPC activity API (do_action, stop_action)
		 It is used by TFM to mark certain individuals as being allowed
 		 to attack the player.  This is used by the Justice engine to
		 allow acts of desecration etc to be punished.  Otherwise, any
		 witnesses see the act of revenge and attack the attacker.
		 Then they are attacked and a melee results.
		 (Actually this does happen in Pagan!)
		-Added a new field to STATS for npc class.  This is a number
		 that can represent a character class, e.g. King, Soldier,
		 peasant etc.
		-Fixed bug in for_all_onscreen which made it only work
		 sometimes.

13-07-2001	-Fixed a long-standing problem with Active Areas in objects.
		 Now they are handled correctly, and the tacky 'crutches'
		 placed in the doorways since around 1999 can finally be
		 removed.
		-In a similar vein, some of the nasty cruft from even earlier
		 has now been fixed: there is now an Attack function in the
		 object.funcs structure.  Previously, all attack code was
		 shared with USE and it had to check to see if it was wielded
		 to decide what to do.  Which was a crock of shit.
		 Now it works how it should have worked in the first place.
		-Most of the attack code is now in PEscript.

12-07-2001	-Fixed several crashing bugs, notably with the pathfinder
		 at the edge of the map.
		-Creatures that chase you using the Pathfinder can now cross
		 bridges made of objects.

11-07-2001	-Numerous enhancements to the world editor.
		-Lots of stuff for the pathbuilder.. it half works now.

10-07-2001	-Fixed a problem where bridges didn't work if they weren't
		 solid.  (Which was most of the time)
		-Fixed a problem with Decor objects that resulted in crashes

07-07-2001	-Began developing a path builder in the editor, which automates
		 the process of building a path out of edge tiles.

02-07-2001	-Multiple Map support now seems to work properly.
		 It hasn't caused a crash yet, and it also saves the state
		 of the map you just left in savegame 9999, so things aren't
		 reset to their original positions when you go back.

01-07-2001	-Lots more stuff works again.
		-Fixed a bug in the script parser so it shouldn't get confused
		 anymore about variables local to a single module.
		-Fixed a bug in the tile blanking, where it considered walls
		 adjacent to darkness to be dark as well, resulting in
		 confusion and impossible rulesets.
		-Optimised the tile blanking code and documented it somewhat.
		-Fixed a problem where 1 pixel too much was blanked out

27-06-2001	-Death now works again.
		-There seems to be a problem with the blanking of the H-wall
		 using rule LD (bottom left) visible in the King's Castle.

26-06-2001	-Fixed problem with CR/LF anullment that caused the parser
		 to become picky.
		-Debugging the DROP code.. it does some awkward things.
		-DROP now fixed.
		-Desecration is now a crime.

25-06-2001	-Ported DROP to PEscript, removed some bits of InitVRM.
		-Then found a peculiar bug in the PEscript parser that
		 caused it to not compile some pieces of code that it
		 'didn't like'.

24-06-2001	-Missed a few days owing to system backup and upgrade to
		 Mandrake 8.0.
		-Seer is out.  It is no longer in the program: mostly because
		 it won't compile under gcc 3.0 owing to strange C++ errors
		 and the fact that the source is a tangled mess.
		-Seer is out, but the game isn't free of VRMs yet,  most 
		 notably the status area is no longer displayed because the
		 VRM isn't being run anymore.  Time to port that to PEscript.
		-The status area code has finally been rewritten in PEscript.
		-Drop is the second most important function..

17-06-2001	-Apart from missing or incomplete rule sets for some tiles,
		 the corrected blanking seems to be correct with no glitches.
		-ResEdit was trashing the Window flag for objects
		-ResEdit should now handle the Blanking rules properly too

16-06-2001	-Added support for correct blanking of walls.  This requires
		 that the appropriate wall tiles are set up correctly for it
		 to work.
		 Each wall tile that must be corrected has a set of rules
		 that determine what shape is displayed depending on which of
		 the adjecent tiles are blanked out.
		 blank LU new_wall
		-Walls adjacent to blacked-out rooms now do not display
		 the objects in those rooms.
		-There are some visual glitches at the edges of the game window
		 that need to be sorted out.

14-06-2001	-Fixed a problem in the blanking that allowed you to see
		 through walls with a door in under some conditions.
		-Fixed recent bug where the editor would always save the map
		 even if you said no.

12-06-2001	-Fixed problems in wipe_z1 that cause crashes when changing map
		 it's now a lot better but still not totally stable.

11-06-2001	-If various safety interlocks are disabled it is now possible
		 to move between maps.
		-However, there are a number of memory or list management
		 issues still to investigate and resolve.
		-CARPET2 can't be found by the garbage manager after reload.
		 Looking at the flags it seems to have been deleted or not
		 fully created.  Need to put a log on PE delete code so I
		 can see when/if it is marked deleted.  It MIGHT be related
		 to wipez1!

10-06-2001	-Wrote simple support for changing map in-game but now I'm	
		 debugging it.  Currently it goes into an infinite loop..

09-06-2001	-Multiple Map support has begun.
		-I have changed the way maps are handled by the engine.
		 Instead of having names, they are now numbered, and the
		 base filename is taken from the project name, which is the
		 name of the directory where the datafiles are kept.
		 E.G. the FLAT map is called flat0001.* and the TFM maps
		 are called tfm0001.* tfm0002.* etc
		-Map filenames are automatically generated by the engine from
		 the map number.
		-All this is to let me use numbers for the maps because it makes
		 the world connection easier (takes less space in the headers)
		-Savegame support, being closely tied to the map saving code,
		 has also been revised.  Under Linux and other Unices, it now
		 creates a directory in the user's home called .iresaves
		 In that directory, it creates a subdirectory for the project,
		 e.g. tfm or flat, and in THOSE it creates subdirectories for
		 all the savegame slots, since we'll need a savegame file for
		 each world, and also a 'currently running' savegame directory
		 as used by Ultima 6 and above.
		 Under other OSes, it creates a directory called 'savegame'
		 in ire's own directory.
		-The world editor has been modified a little.  The World View
		 now contains the map connections editor, and it has been made
		 the first item on the toolbar (and hotkey 1).  This is probably
		 for the best, since I tend to go to it first anyway, to speed
		 up moving around the map.
		-The next step is to make the game use the World Connections,
		 and work out some heuristics to decide what needs to be kept
		 in memory (the party, their posessions) and what can be
		 swapped to disk.

06-06-2001	-I now have a complete set of mountain tiles.

01-06-2001	-Back up after moving house, but not online yet.
		-Fixed problem caused in 0.68 where an object could either
		 have a default behaviour OR a stood-upon action but not both.
		-Implemented new conversation commands [append=] and
		 [random_page=]

19-05-2001	-Art, design and world work for TFM.

15-05-2001	-Fixed bug in wipe_z1 where Decoratives weren't removed
		 properly.

13-05-2001	-Fixed bug in ChkNpc
		-Experimental support for video acceleration (no real gain)
		-..but mostly work on rivers, bridges and so forth.

10-05-2001	-One more set of tiles to add, and I will have a complete
		 set of shores with the water flowing in 8 directions,
		 just like Ultima 6.  (Ultima 7 doesn't have this)
		-Currently two directions are missing, but even so the test
		 river I made looks quite nice.

07-05-2001	-Map editor now animates tiles.. this is very useful for
		 editing rivers etc, so you can instantly see that the flow
		 of the water is correct.

06-05-2001	-Added a new command to PEscript to check whether a square
		 has been blanked (isn't visible by the player).
		 This is called after get_far in the UI code, to see if the
		 square at new_x and new_y is visible, before doing anything.


05-05-2001	-Improved the room blanking.  You now only see through
		 windows if you are standing next to them, just like U6.
		-Moved post_overlay from CHARACTERS to SEQUENCES.

29-04-2001	-Fixed a bug in the pathfinder where large objects were
		 being erased from the pathfinder's internal map, leading to
		 invisible obstacles for the NPCs, and inevitable confusion.
		-The editor allows you to put several Decorative objects on
		 the same map tile.  This is not acceptable to the game and
		 may lock the engine under certain conditions.
		 A safeguard has been added to the map loader that deletes
		 one of the objects when you play that map, and it logs a
		 warning to bootlog.txt so you can fix it in the editor.
		-Fixed a bug in the Datatable parser, where you could have
		 an entry with just a key and no data.
		-Wrote a small utility to move a collection of objects
		 from one part of the map to another.  Very crude.

28-04-2001	-Added a new resource to resource.txt, Data Tables.
		-You can define a list of data items, each of which has a
		 key.  You can use them for lookup tables, for example, when
		 a creature sits on a chair.  If you use the object's name
		 as the key, it returns the name of the appropriate sequence.
		 This is used in TFM to replace the VRM-based sit action.
		-Tables are accessed using:

			get_data <variable> from <table_name> = <key>

		 At present there is no provision to modify or create tables
		 from within PEscript.
		-Improved diagnostics for 'No Match', now it attempts to
		 guess the meaning of what you typed.

23-04-2001	-Added a panic button (SHIFT-BREAK) that kills the VM and
		 stops the program.  Handy if you've written an endless loop
		 in PEscript, since it will give you a dump of the function
		 that it died in.
		-Panic and Safepanic now have a panic prompt using
		 lower-ASCII characters for non-DJGPP platforms such as
		 linux.  Previously it had ANSI characters for the box.
		-You can set the translucency level for sequences.

22-04-2001	-Fixed bugs in MoveTag where objects on the moving thing
		 (such as candles on a table) would get sucked underneath.
		-Fixed bug for Decoratives where they weren't displayed
		 as 'always on top' when they should be.

21-04-2001	-Ironed more bugs out of Decorative objects.
		-You can now define the number of turns per minute for the
		 game calendar, before it was fixed so each turn was one
		 minute of the clock.  But that was stupid.
		-Optimised the PEscript compiler to speed up name searches.
		-Added new script command to do block movements of tagged
		 objects (VERY useful for secret passages where the whole
		 bookshelf and all its shadows have to move)

20-04-2001	-Decorative object support added and mostly working.
		 You can now have objects that are shared throughout the
		 map.  This improves the speed and memory usage of the game
		 (decorative trees in TFM reduced memory load from 96M to 28M!)
		 but there are several disadvantages:
		  * Decorative objects can't move
		  * They can't have anything above them
		  * They can't have anything individual about them
		  * They can only face in one direction
		  * They must be taken into account when programming scripts
		 Clearly they are useful only for circumstances where you have
		 a very large number of identical sprites, e.g. wall sections,
		 and trees (4 types of tree in TFM makes nice forests).
		-Tried to add support for decorative objects to the editor, 
		 but failed.  Then I realised I don't -need- to add support..
		 If the editor treats them as normal, editing is just the
		 same as regular objects, and it all becomes simpler.  Only
		 the game itself needs to treat them as shared memory.
		-You should be able to compare strings using the logical
		 operators in the script language, e.g. if o.name <> "test"

19-04-2001	-Release 0.68 is out for all platforms.
		 Come and get it!

18-04-2001	-Found a critical bug (memory leakage).   Fixed.
		 Updated source, and re-built for all platforms..

17-04-2001	-Fixed more late script bugs, built for all platforms.

14-04-2001	-Fixed some late bugs, mostly in the scripts not the engine.

12-04-2001	-The engine is fairly stable again (apart from the Gunpowder
		 issue, which actually seems to be just a minor issue
		 although still not fully understood)
		-Began compiling for MSVC.  Just a few things need to be
		 changed to make it work.

11-04-2001	-Fixed problems with the list caching (speed up loading)

10-04-2001	-Fixed some minor bugs in the disassembler table.
		-Found a major bug where exploding a barrel of gunpowder
		 stuns all attacking NPCs (they start doing 'close_container')
		 for no apparent reason.
		 Seems to happen when the whuptable is setup.  Installing
		 older versions tells me this bug is fairly old.

09-04-2001	-Ironed out some bugs in the room blanking code and some
		 subtle bugs in GetObject caused by variable sized game window
		-The pipe character '|' is now treated as a linefeed once more.

02-04-2001	-Followers now follow you.
		-Pressing F1 for help doesn't crash the engine anymore.

01-04-2001	-Debugging keys are now SHIFT-function
		-Lots of bugs in the flat squashed, mostly related to doors
		 and pathfinding for NPCs.
		-You now drink the potions, not the other way round.
		-Potion bottles can now be smashed.
		-Doors now use a new algorithm for NPCs closing them, based
		 on what Ultima 6 can be observed to do.
		-Fixed problems where broken doorways were fragile as eggs

28-03-2001	-Fixed bugs in Flat.  Potions now in PEscript, but buggy.
		-Attempted to add support for CTRL+function key for new
		 debugging stuff and to make the existing stuff less obvious.

26-03-2001	-Vehicle entering/leaving support is now in PEscript
		 for the Flat and it seems to work properly aside from the
		 message 'resumeactivity not implemented'

25-03-2001	-The car now crashes the game instead of not working.
		 It dies in leavecar.cpp - Port to pescript.

19-03-2001	-It's been a long time since last release, so I've decided
		 to make an intermediate release 0.68.
	 	-For this, I'm fixing the Flat demo, since it has been
		 neglected for a long time while I concentrated on the
		 'False Messiah'.

14-03-2001	-Windows needed rebuilding and other distractions.
		-Wrote a program to check the links of conversation files.
		-Various amounts of conversation work.

10-03-2001	-Began to look at splitting the map into smaller sections,
		 this will help both memory and performance.
		-Updated Resizer to help with this, now you can specify what
		 part of the map you want to copy from, which allows for many
		 different kinds of cropping instead of just from the top-left.

09-03-2001	-Fixed another bug with UserFlags.
		-NPC's combat now works but could be improved.

08-03-2001	-Fixed the gunpowder problems, this was caused by a tweak to
		 the VM microkernel to prevent nesting, as an optimisation.
		 Now the microkernel is nested as before.
		-Discovered and fixed a very old bug in UserFlags that
		 prevented you from being able to define more than one.
		 Whoops.

07-03-2001	-There is a problem with the caching (19/02/01) which causes
		 the ActiveList to become unstable, resulting in the
		 intermittent combat and gunpowder, and probably a few other
		 unexplained bugs.  For now I have disabled it to concentrate
		 on making the gunpowder work fully in PEscript.
		-When gunpowder explodes it damages surrounding objects but
		 they do not react properly.  It seems that check_hurt is
		 getting or passing on the address of the explosive, not the
		 object that was damaged.

06-03-2001	-The general combat system and the close-combat module are
		 now done in PEscript, and working.  So it looks like the
		 Seer-PEscript bridge might not be working properly.
		 Hopefully I will have removed all SEER stuff for the next
		 release anyway.
		-Fixed some bugs in OR handling, in the parser tables and
		 radically improved NULL pointer detection in the VM system.

05-03-2001	-While researching the gunpowder problen, discovered that
		 combat doesn't work either.
		-Began porting combat code to PEscript, since it's much
		 easier to monitor the interface between functions that
		 way.

04-03-2001	-Added memory debugging system to ithelib.
		-Gunpowder is now using the PEscript routines so it may not
		 work, however it doesn't seem to be actually getting to the
		 explosion.
		 It seems (and this happened with SEER too) that the barrel
		 of gunpowder is being deleted from the ActiveList before
		 it gets to explode.  Why?  How?

03-03-2001	-Added more leeway for large objects to prevent them
		 vanishing when they disappear out the top of the screen.
		-Intermittent problem with night.  Sometimes the game
		 freezes when dusk starts.  It goes into an endless loop
		 of assigning start_dusk to an object.  Try to make this
		 happen while running -debugvm
		-Set time to nearly dusk to speed up testing?

02-03-2001	-Gunpowder doesn't seem to work anymore.
		 Keep

01-03-2001	-Global arrays seem to work properly now, using the memory
		 reserved for them, not the memory immediately afterwards.

28-02-2001	-Added partial support for C-style comments /* */
		-Improved global array support, but not fixed yet.
		-Some bugs in local array support should be ironed out.

27-02-2001	-Set recent log entries to 2001, not 2000. :-)
		-Preliminary support for global arrays.  However it seems to
		 be causing very strange bugs, so it probably isn't working
		 properly.

25-02-2001	-Fix for 24-bit JPEG colour conversion.

22-02-2001	-The keyboard buffering code used a stack, which was silly
		 and caused a 'wobble' when the player turned a corner fast.
		 Now uses a ring buffer.

21-02-2001	-Fixed bloody stupid problem with the INI file parser.
		-Conversation engine can now parse more than one token on 
		 the same line.

20-02-2001	-Added 'censorware' support.  The conversation engine will
		 automatically replace 'bad words' if this is switched on.
		-For some reason it doesn't want to switch on unless you
		 put the command on the command-line, not in the ini files..

19-02-2001	-Found that the map loader was spending forever adding objects
		 to the linked lists, since it has to traverse the entire
		 linked list every time it wants to add a new object, and the
		 amount of time grows longer with each object added.
		-Devised a system of linked-list caching to help alleviate
		 this problem.. each linked list that is registered with the
		 cache system (and has appropriate support in it's add/remove
		 code) stores the address of the last node in the list, so
		 it can add new objects very quickly.  A lot of debugging was
		 required to make it work (and some bugs didn't really exist!)
		-Optimised the find_id search, used a lot in the map loader.
		 It now does a binary search from a sorted snapshot of
 		 everything in the MasterList.  Obviously it won't work well
		 in-game as the list will keep changing.

17-02-2001	-To help automate the construction of forests, created a
		 facility in the editor to add objects over the Random
		 tiles.  You specify a probability that the object will be
		 created for each square, so you can do several passes, one
		 for each kind of tree.
		-Created a section of forest, but quickly discovered that the
		 large number of objects this entails put a huge strain on
		 the map loader.
		 Trying to profile the thing to see where the CPU is going to.

12-02-2001	-Added static light controller to pescript.
		-Added debugging function to pescript.
		-If an object tries to Resume and this gives it the current
		 task (i.e. the one that called Resume), a warning appears
		 and it doesn't happen.  This was causing an infinite loop
		 when people got out of bed, which put a huge strain on the
		 engine and slowed the game to a crawl.
		-You can now cut and paste static lighting in the editor.

11-02-2001	-Much world design.
		-Fixed bug where get_user_flag was expecting different
		 parameters to those given in the language spec.
		-Editor now copies more information when duplicating
		 sprites.. PersonalName and Funcs are now copied too.
		 This is very useful for triggers (e.g. critical plot sequence
		 happens when player steps on a certain square) where you will
		 have to have the trigger duplicated for a lot of squares
		 around a door, for example, and they will all have to
		 have the same function (and the personal name can be a
		 parameter for a custom function).

05-02-2001	-Locking and unlocking of doors etc is now handled in
		 PEscript.  New door types added.

04-02-2001	-All sleep-related functions except 'lie_down' are now in
		 PEscript and support has been added for various missing
		 intrinsic functions.
		-The API has changed slightly for active objects.. previously
		 the game would set 'current' to be the object being
		 processed.  Now it sets a variable called 'me' (or 'person'
		 internally and in Seer-space) and current is set to NULL to
		 weed out all the scripts which haven't been changed yet.
		-Improved NULL pointer handling in GET_MEMBER.. there were
		 some 'holes' that let you sneak in a NULL pointer and cause
		 a crash.. these have been fixed.
		-You can now be arrested and thrown in jail.
		 

02-02-2001	-Various minor fixes.
		-Guards now try to arrest you, but they just print 'got you!'
		 when they catch you since there isn't a jail yet.

01-02-2001	-Theft implemented more fully.  I stole a candlestick in the
		 Church and the congregation leapt off the pews and came
		 after my Blood..

29-01-2001	-Mirrors converted to PEscript.
		-Finish rewriting X63's dialogue.  See notes in file.

28-01-2001	-The first ever monster egg is now operational.  It creates
		 guards that do a simple back-and-forth patrol.
		-Added support for a simple 'random' patrol, but it's a bit
		 too random.  Probably best to use for animals.
		-Logging support in the script replaced with 'BUG START'
		 and 'BUG END' which prints all console output between the
		 two in red and writes it to the logfile.
		-Support for INIT functions now works a lot better.
		-transfer_object can now move objects out of the syspocket,
		 which is where newly-created objects live.

27-01-2001	-Updater.vrm is now changed to update_life which is a PE
		 function.
		-The function and data search routines (getnum4sprite etc)
		 now use a binary search instead of a linear one.
		-The PEscript parser now has (crude) support for OR
		 conditions in IF statements.  The OR part is a second line
		 for example:

		 if a = b
		 or c = d
			print "It was so!"
		 endif
		-Support for more than one OR statement per IF is flakey.
		-Started work on Guard eggs.

25-01-2001	-Switched Allegro to 3.9.34.  Found some bugs in doing so.
		 Unfortunately the game now crashes while loading sprites
		 for no obvious reason unless I use the debug version of
		 the library.
		-Seems to be a problem with Allegro's ASM routines.  Works
		 if they are disabled.

22-01-2001	-Noticed that the shadows were crisper and the nights were
		 darker than they should be.  Found that the projector was
		 doing two passes of the light engine instead of one, which
		 also slowed the game down a lot.

21-01-2001	-Optimised the 'pick from list' option so it doesn't take
		 several seconds to appear anymore.
		-Forked TFM away from Flat so that it actually lives in it's
		 own directory instead of sharing with The Flat.  I was
		 reluctant to do this before since I'm in the process of
		 rewriting the game scripts and I didn't want to confuse
		 myself unnecessarily.  Now the scripts are bug-free enough
		 to make it do-able.  
		-The start church is almost complete.  I wish I could say the
		 same about the NPCs.

20-01-2001	-Moved Scheduler out of SEER and into pescript.  Fixed bugs in
		 Wield structure table (didn't have any redirections).
		-Caused and then wasted time hunting bug related to the way
		 Scheduler function is called in the game loop.
		-You can now resize the map window with -view_w and -view_h
		 which allows it to be set in the game's config file.
		-Caused and then wasted time hunting ANOTHER bug involving
		 a new switch -nosound (for buggy OSS drivers in Linux)
		 Fortunately the bug worked by exploiting a larger bug in the
		 map projector, so it was actually worthwhile.

17-01-2001	-Last few days artwork and world design.  Today, fixed problems
		 with wielding and attacking.
		-Implemented open,close doors in PEscript, removing VRM
		 callbacks.  Still need to do autoclosing doors.
		 This needs to be reworked completely using an algorithm based
		 on what U6 seems to do.

14-01-2001	-Conversation engine fixes.

09-01-2001	-Fixed crashing bug in conversation engine caused when talking
		 to the flower woman.  Still not working properly, though.
		 The $SIR tag isn't being handled correctly.

08-01-2001	-More art and design.  Fixed critical bugs with Resedit and
		 Ed, which corrupted object's behaviour function and damaged
		 the map data respectively.

07-01-2001	-Mostly art and design.  Changed SCRIPTER so it is now called
	 	 RESEDIT, or Resource Editor, which is far more appropriate.

06-01-2001	-SourceForge site doesn't quite exist yet although there is now
		 a project entry for IRE.
		-Started to convert user interface drawing away from SEER.
		 Wielded objects handling is now done in PEscript.

04-01-2001	-The IRE web page has been deleted.  Moving to Sourceforge.
		 Decided to switch to BSD license, which is the closest match.

03-01-2001	-Fixed bugs with DROP and wielding/unwielding objects.
		-Almost all the user interface is now in PEscript.
		-The MOVE command isn't there.  Implement it.
		-Implement the WIELD_xxxx functions in PEscript.  Trivial.
		-Fix global array support.

31-12-2000	-Fixed problem where if <object> != <object> was compiled
		 as if <object> == <object>

30-12-2000	-Fixed problems with PEscripts being called as VRMs.
		-improved room blanking slightly.
		-Problem where it tries to erase the player in blatant
		 defiance of the command 'if current <> player'.
		-It compiles this as 0x0e (if_oEo) instead of 0x0c (if_iei)
		 It might be compiling as if_oeo instead of if_oEo

29-12-2000	-Fixed problems where player had no hurt/death functions.
		-Fixed problem with parser and setting an object in a structure
		 to NULL ( let current.wield.head = null didn't work)
		 There was an ambiguous parameter match so it looked for an
		 integer match for the Object and this broke the structure
		 lookup.  Made the (more obscure) NULL match come first and it
		 fixed the problems.
		-Main loop was still calling player using a VRM.  Problems
		 enountered.. where is player->activity set?
		

28-12-2000	-You can now use the APPRAISE cheat without the game crashing.
		 This should help debug the player's damage problems.
		-Fixed long-standing bug with text-wrapping on the console.
		 Support for '|' carriage-returns isn't there yet.
		-Discovered that the player has NO hurt or kill functions!

27-12-2000	-After a number of days fiddling, the game now works again.
		 Since the 22nd a number of critical script functions would
		 not compile because they relied on other functions which
		 hadn't been done at the time.  There's now enough to have it
		 back on its feet, although the player doesn't repond to
		 damage properly which is rather odd.

21-12-2000	-2112.  Compat.pe is now a complete list of all functions
		 which are called by the function tables.  There are however
		 many other functions which are NOT in the function tables.
		 Also, virtually all of the functions now in compat.pe simply
		 call down to their SEER equivalents rather than replacing
		 them.  However all functions in the MESSAGES directory have
		 been ported to PEscript, and more will soon follow.
		 My aim is to have all trivial VRMs ported to PEscript for
		 the new year.  However I am not planning a new release
		 at this stage.  There isn't really enough changed to make
		 it worthwhile just yet.

17-12-2000	-GetFar works.  Generic_Input has been replaced with input.pe
		 and all is well.
		-Added support for functions and variables local to a
		 particular source file.  This will come in handy later.
		-The game now calls PEscript functions by default.  Added
		 a script file called 'compat.pe' which contains functions
		 that call their VRM counterparts.  This will make the
		 game work until all the Seer code is rewritten with
		 PEscript.
		-PEscript Call now supports function types other than DWORD,
		 so 'call current.funcs.use' now works instead of crashing.
		-ED now shows a list of PEscript functions (still needs work)
		 for the Behaviour editor instead of VRMs.
		-Loadsave now resets functions that don't exist to their
		 default for that object instead of screwing up and preventing
		 you from replacing the nonexistent one.

16-12-2000	-Removed the horrible objectstore array from the game.  This
		 was a throwback for SEER, where user-defined global variables
		 could not be accessed by the game itself (because only
		 SEER knew what they were and how to handle them).
		 This was superceded by the PEscript engine.
		 Storage is next but that will take a lot more work.
		-Verified that CHOOSE is now working.  Removed Choose.vrm and
		 Browse.vrm from the system.  Getfar needs rewriting.

12-12-2000	-Implemented a system to blank out areas you can't see, like
		 Ultima 6 does.  Still needs attention.  Found some problems
		 where the player jumps two squares if they use nothing.

28-11-2000	-The game bugs out when the player dies, so I compiled with
		 FORTIFY to see if there were any overruns taking place.
		-FORTIFY brought out a lot of very interesting bugs in the
		 script compiler (mainly to do with IF and DO/WHILE matching)
		 but it did not find any problems when the player dies.
		-A detailed examination indicated that the changes to the
		 AI system (6/11) stopped objects being taken out of the
		 activity list after they had been freed.

27-11-2000	-Fixed strange problems where cursor and player would become
		 invisible etc (move to 0,0 caused bad stuff when 0,0 had
		 sea tiles!!)
		-Getnear, GetFar and Choose now call their pescript
		 replacements, which aren't fully functional.
		 storage[OBJ_X], OBJ_Y and storage[OBJ_FLAG] must be replaced
		 with cursor_x, cursor_y and show_cursor respectively.

26-11-2000	-Quite a fruitful art & design session.
		-Realised that the player is entering water when he gets in
		 the car, which is why he becomes invisible.
		-If you right-click on the map in 'World View', the editor
		 window now goes to that point.
		-Scripted compiles and runs again (broken 6/11/00)
		-You can abort 'Add Character' in scripter.

25-11-2000	-Fixed Random.  Removed debugging message from Spikes.
		-Game segfaults after the Ark has run its course.
		 Investigate.

23-11-2000	-Fixed some bugs, mostly errors in the parameter table for the
		 intrinsics.

		 Ranged Random is crashing.  Rework the math and fix it.

22-11-2000	-Added party control functions to the script language.
		-Random now has a range, e.g. "random var between -4 4"
		-Added new keyword 'add' which is a shortcut for changing a
		 variable.  'add var + 50' is short for 'let var = var + 50'
		 likewise 'add var1 * var2' equals 'let var1 = var1 * var2'

19-11-2000	-Upgraded system.
		-Added support for arrays of objects, but the script compiler
		 is becoming increasingly untidy.  User-defined global arrays
		 are not yet supported.

16-11-2000	-The game is now working as it did before I added the
		 disassembler.  That is, it crashes when you try to access
		 an array but works perfectly otherwise.
		-With the disassembler I can see that some code is being
		 trampled by DOFUS when the array access is fixed up.
		 It looks like it's patching at an offset 1 byte too many?
		-Arrays -seem- to be working now.  I won't know for sure
		 until I compile with Fortify to see if it is overwriting
		 memory past the end of the function, but it isn't crashing 
		 anymore.
		-You can now access the party[] array, which is provided by
		 the system.  It is an array of object in the party.
		 party[0] is the player, for example.  (This is actually why
		 I added support for arrays.. party[] is used extensively)

15-11-2000	-I now have a working PEscript disassembler for the first time
		 since AViOS was written.  There have been substantial changes
		 to the addressing format used by the VM making it much easier
		 to work out what's happening, which is what the disassembler
		 needs to do.  One of the uglier sections of code in the
		 compiler has been replaced so it's a bit easier to tell what's
		 happening.
		-The game however is NOT working and the fixup engine believes
		 that there are over 142 million variables in start.pe.

13-11-2000	-Began writing a disassembler in pe_vm.cpp to help study the
		 problem with the variable system.
		-Currently the game doesn't compile: finish making shell
		 functions for all the opcodes.  (Duplicate PV -> PVD)

12-11-2000	-Began adding support for arrays.  At present only local arrays
		 are supported.. I will have to think of a way to do garbage
		 collection for globals.
		-The DOFUS fixup engine is unstable following the changes
		 needed for local array support.  Run in debug mode and check
		 the logs.

11-11-2000	-Fixed bug in ResumeSchedule where objects and NPCs didn't
		 revert to their last scheduled task.  This fixes the door
		 problem the NPCs were having, and should also prevent it from
		 being daylight if the player wakes up after sunset.
		-Added more functions to the PEscript system.

09-11-2000	-Schedules are now working properly.  Spikes and other trigger
		 objects are now functioning again.
		-The problems: NPCs don't always open doors and can often
		 be found standing foolishly in front of them.
		 If you kill someone while they're asleep it crashes.

08-11-2000	-The map editor now loads in old schedules properly using a
		 copy of the data structure from R0.65, but the schedule
		 editor is causing problems.  Not sure why yet, but when it's
		 fixed the map editor should be happy, and the NPCs should
		 start to move around again.
		 I'll need to remove the debugging messages.
		-Removed support for 0.60 maps, so if you have any you'll
		 have to load them into the map editor from 0.65 and save them
		 using that.
		-The game is still crashing when trying to do an NPC
		 schedule, though.  Find out why

07-11-2000	-The map editor works, but the Schedule information is being
		 corrupted, even when no schedules are loaded.  Need to
		 look into this further, didn't manage to fix it yet.

06-11-2000	-Rewrote the behaviour system to use the simpler, Ultima-like
		 current activity mechanism.  Obviously, with such a
		 fundamental change, the game is going to take a while to heal
		 but it's doing well so far.  It compiles, it runs.  But you
		 can't play it anymore.  The Seer script language is using
		 some wrappers around the old behaviour API which was never
		 documented (because it's a PITA).  Since the game logic relies
		 on the fact that tasks could be layered with the old API,
		 a LOT of code is going to have to be re-written.  Now might
		 be a good time to port the game logic to PEscript ;-)
		-You can now play the game, mostly.  Everything seems to work
		 except for combat and NPC behaviour.  I have disabled combat
		 myself, NPC activity is simply broken.
		-I must fix the map editor as the absolute next thing I do,
		 because the map format has changed subtly and I have to
		 re-do all the NPC schedules...

05-11-2000	-Modifications to the engine to support objects bigger than
		 128 pixels wide (they would disappear off the edge too early)
		-Made the size of the game window easier to change (replaced
		 a lot of hard-coded values with a constant.  This can be set
		 to a variable in future if need be.)
		-You can now set the Symlink flag with Scripter.
		-Fixed a problem with the speech system where it would only
		 check for symlinks in a few places.  More generalised.

04-11-2000	-Added symlinks between NPCs.  This allows you to have an
		 object that is an 'extension' of another object, for
		 conversation.  When you talk to the 'link' object, the game
		 will talk to the link's Owner instead of to the object.
		 This sounds complicated, but it's easy and useful.
		 It is used for objects such as telephones or 2-way radios,
		 where you want to have a conversation with one person through
		 the telephone.  Normally, the game stores a record of the
		 conversation you have with the object you talk to: this would
		 mean that the other guy would remember the conversation
		 differently depending on which telephone you used.  Not good.
		 If you set the 'symlink ' flag for the object, the game will
		 talk to the OWNER of the object, instead of the object itself.
		 For something like a telephone, where you could use it to talk
		 to different people, you would set the object's owner to the
		 person you're going to talk to.
		 This system can be used to make one enormous NPC who is
		 bigger than the screen and composed of several objects next
		 to each other (you will see this in TFM ;-).  It can also be
		 used to make Gestalt entities like the Wisps in U6, or the
		 Borg, where talking to any drone unit will talk to the
		 central control, or the collective as a whole.

01-11-2000	-Added two new conversation tokens, $HE and $_HE.
		 $HE is resolved to 'He' or 'She', $_HE is 'he' or 'she'.
		-Looked at some problems with the UI going strange when the
		 player boards a car.  The player's SHADOW flag is being set
		 but NOT by set_flag!  It must be a side-effect of some other
		 process.  The player is OK while he's in the car but when
		 he leaves it goes odd.  Find out where.  If the player is
		 DROPped out of the car, he stays fully visible.

30-10-2000	-Fixed very old problem with lighting where lights underneath
		 a roof light the roof as well.  Now it draws the roof in a
		 separate buffer which is later recombined with the game
		 window.  This does incur a small speed penalty since the
		 lighting is effectively done one-and-a-half times, but I
		 can't see any other way of fixing it.

29-10-2000	-A very profitable day, mostly spent map editing and creating
		 new objects.  I was able to play The False Messiah for the
		 first time instead of just in the editor.  Previously there
		 wasn't much point since it was just mountainscapes.
		-Added support for chimneys, battlements and any other objects
		 which need to be drawn above the roof, not below it.
		-Noticed some very odd things happening in the game though:
		 * The player goes Shadowy after he leaves the car 
		 * GetFar uses invisible overlay objects and the new Chimney
		   code interferes with this
		 * The roof is still illuminated by lights underneath it

28-10-2000	-Fixed several critical bugs in the do-while loop support.
		-GetNear is now working properly, having been ported to
		 PEscript.

		VB -> Visual Basic
		------------------
		IA ->  Isual  Asic
		XD -> Xkuwcn Dcuke  (Zuhcookwun Dsook)

27-10-2000	-Found some bugs in the do-while loop and fixed them, but
		 caused crashing in the process.

24-10-2000	-Added support for tiles to the parser, also tidied up some
		 of the variable and member parsing code.
		-Added support for a simple kind of do-while loop and
		 added a few more functions to help rewrite the game's UI
		 in the new script language.
		-if_flag and if_not_flag can now support Tiles.

23-10-2000	-Working on support for tiles in the compiler.
		 A lot of the structure-checking code is based around there
		 being only one type of structure, the Object.
		-I need to devise a clean way of supporting multiple structure
		 definitions, so the parser can autodetect the struct type
		 before it begins checking the structure.

22-10-2000	-Adding support for tiles to the VM.  This could be awkward,
		 since I'll need to be able to access tile data members like
		 object data members in the VM.  Looking at the code it doesn't
		 seem that there are any parts of the code in GET_MEMBER that
		 depend on the 'object' actually being of OBJECT datatype:
		 the offsets are computed by the script compiler beforehand.
		 Consider changing it to just 'char *' and be done with it.
		 Then I'd just need to add support for a 't' datatype in the 
		 parsing engine.
		-Next I'll need to make the engine call PE scripts by default
		 (and for debugging, keep a log of which 'legacy functions'
		 are being used.  Sorting by frequency would be nice..)

21-10-2000	-A moderately fruitful session.  The caldera is now 1/3
		 complete, a few more functions were added to the PE
		 script language, and some game functions were ported from
		 SeeR to PE.

11-10-2000	-The 'nice weapon' appears to be fully functional now all
		 the DOFUS debugging code has been removed.

10-10-2000	-Fixed the bug in the DOFUS system by adding a separate
		 memory area for the variable slots after the patchtable.
		 This approach wastes a few bytes of memory per function
		 but seems to be the optimal balance between speed and
		 simplicity.
		-Removed the debugging messages added while bughunting.

09-10-2000	-I *think* that the problem is a design flaw in DOFUS.
		-The local variable code works by patching the offsets to
		 point to some local variable slots.  These slots are
		 actually the memory used by the patch table, since it won't
		 be needed once the patching is completed.
		 The problem is that the patches aren't in order, so if
		 the first patch uses slot 2 it will overwrite the second
		 patch before it's been used.  There are several solutions:
		 1. Allocate a separate area for the variable slots AFTER
		    the patch table (this is a slight waste of memory)
		 2. Make the patching code allocate slots more intelligently
		    (i.e. the first patch is overwritten by patch number
		     not variable index number)
		 3. Sort the patches by variable index
		 4. Get DOFUS to allocate some scratch space and copy
		    the patch table that so it doesn't get overwritten.

08-10-2000	-Didn't have much time until now, but it seems there is
		 another problem with local variables causing the crash.
		-If the command 'get_flags was_inv = current IS_INVISIBLE'
		 is present, AND was_inv is the THIRD local variable, then
		 the DOFUS fixup code goes peculiar.  No other combination
		 triggers the fault, as far as is known.
		-When the fault takes place, DOFUS modifies the DOFUS
		 patch table, causing a crash on the next DOFUS iteration.
		-What is the change in program flow between having the
		 get_flags opcode and not having it?  Are the patch tables
		 the same in both cases?  This should be the next thing to try.

05-10-2000	-Fixed some problems with the weapon but found a major
		 problem in the PE virtual machine, causing a crash when
		 you try to use object flags.  Discovered all flags were
		 being decoded as dwords instead of Integers, skewing the
		 VM's EIP and causing it to execute data instead of code.
		 Fixed this but it is still malfunctioning..

02-10-2000	-More work on the 'nice weapon' which still doesn't quite
		 work properly.

01-10-2000	-System upgrade, visited relatives, not much done.

30-09-2000	-After a break from IRE, with a bit of sporadic art and
		 design work, I implemented a nice weapon.
		-Found and fixed a problem in the PE language parser.
		-Discovered there was no function to call a PE function from
		 within SeeR.  Added one.  Not that it matters in the long
		 run since I intend to squeeze SeeR out of the code before
		 the next release.


20-08-2000	-Demo 6.5 finally released on all platforms.

05-08-2000	-Isolated and fixed the Windows crashing bug, but discovered
		 that the source trees have diverged slightly.  Once this
		 has been fixed (the Linux code is probably the best starting
		 point) I can get the release together, hopefully by next
		 week at the latest.  The Windows binaries might be delayed.

02-08-2000	-Managed to compile and run ED under Windows NT 4.
		 It did not crash.
		 Ran same executable on Windows 95 machine, and it died badly.
		 Perhaps I should release it anyway, since most '95 users can
		 run the DOS version.

29-07-2000	-Not much done.  Sequenced a score for TFM where Randolf
		 gets it in the neck. Thought I'd have to try and wangle
		 (or steal) some Mellotron samples, but tried it anyway
		 just using a combination of the two wavetable synths.
		 The 3D choir effect surpassed what I had hoped for.
		-Also went to Farnborough to take photos for research,
		 not yet developed but should help the portraits greatly.
		-Martyn compiled for Win32 but it destroyed his Windows
		 too.  How the **** am I going to make it work in Windows?

25-07-2000	-A black day for supersonic airliners everywhere.
		-Updated the project's web page about R6.5.
		-Added 4 functions and depreciated 3, now 38 remaining.

24-07-2000	-Mainly been doing landscape work, when I have time.
		 A scarce resource nowadays.
		-Also more work to try and get the Win32 port workable.
		-Today I tried some experiments with support for Complex
		 expressions in the parsers, although it probably won't be
		 operational in time for the very, very delayed release 6.5.
		-Added 7 more PEVM functions, now 45 remaining.  This is
		 optional, mind, since the PE language is intended to debut
		 officially in Release 7, not 6.5

30-06-2000	-More upgrades to the editor.
		-Rewrote the tile randomiser to try and prevent adjecent
		 tiles from being the same, which looks bad when the map
		 scrolls.
		-Moved mouse hotspot position to make it more natural in the
		 'big map' painting mode.
		-Updated resize to work with the new map loader and also
		 to resize the new lightmap component which was not supported
		 in prior versions.

29-06-2000	-Fixed more cases where the map loader still used printf
		-Added a large-scale editor into the 'Big Map' mode.  You
		 can now paint 8x8 blocks of the map with a tile, typically
		 the 'Random' tile.  There is also an ultra-large scale map
		 in the corner of the screen, a 64x64 thumbnail of the entire
		 map.
		-Optimised the new 'paint' mode to only draw new tiles.
		-Added a 'safety catch' to help prevent accidental damage
		 to large swathes of the map if you accidentally click on it
		 while just browsing the world.

27-06-2000	-Made some 'fairly good' mountains.
		-Fixed a problem where the map loader would write things to
		 the console with printf instead of the graphical console
		 when it found invalid map tiles.

26-06-2000	-Tried to design some convincing mountains.
		 What I have is probably usable as a rock texture to make
		 caves and the like at the player's own scale, a'la Javelin.
		-LL_kill now makes sure that a given pointer is valid before
		 trying to free it (object->schedule could legitimately be 0)

24-06-2000	-Fixed bugs in the WORLD writer and some latent problems
		 caused by moving away from block reads.
		-Rewrote the MZ1 file format to use a .WAD structure specially
		 adapted to work around the 40-byte header in all IRE
		 datafiles.  It really is a .WAD.. if you trim the first 40
		 bytes from the start of the file, DEU or Yadex can read it
		 and manipulate the file.  Not that it will do much good,
		 because they won't understand the data, but handy for
		 debugging, and it makes recovering broken maps possible now.
		-Modified load_z1 to check the signature and call load_z1_old
		 when appropriate for compatability purposes.
		-Found bugs in the Motorola-format writer (iputl_m) that
		 caused them not to work and fixed them.
		-48 of 100 functions are now implemented (52 to go)

23-06-2000	-Rewrote the object loader so that it uses special functions
		 to load the object, funcs and stats structures instead of
		 using block reads. This should help future porting greatly.
		-The ActiveArea and semi-solid object structures are now
		 arrays of 4 unsigned chars, instead of bit-packed integers.
		-In the OBJECT structure definition, curdir and light
		 are now 32-bits wide instead of 8.. before this was accidental
		 due to compiler padding, now it's official.
		-Similarly STATS->tick and STATS->prob are now 16-bits,
		 but FUNCS->contents and FUNCS->dirty are not, owing to some
		 particularly unpleasant arrangement of the structure by the
		 compiler, which I had to figure out by trial and error.
		-Ah well.  Eventually I will write a completely new data format
		 for the mapfiles from scratch.. this time there will be a map
		 convertor out of necessity.  Probably I'll keep the current
		 loader in the editor to read old maps, but make it write all
		 maps in the new format.
		-Still 63 functions to go, mind.

22-06-2000	-63 to go

21-06-2000	-After some excitement and demonic experiments with my
		 system's PSU, I added a few more functions.
		-Now 65 to go..

18-06-2000	-Made a list of functions to be implemented from the list
		 in seer.cpp, a good 82 still need to be done.
		-Starting to implement the most critical ones..
		-Now 73 to go..

17-06-2000	-Fixed bugs in the new string data type, added bestname
		 and made it all work.
		-Found a problem where local variable corruption would result
		 if you declared local variables and never used them
		 (this would cause too little space to be allocated and cause
		  overruns to occur, crashing the VM at best)
		-The parser now counts each time a local variable is referenced
		 and aborts compilation with an error if it finds 'orphaned'
		 local variables.

16-06-2000	-Fixed a problem in the Sequence code generator where it
		 would try to take the sequence string from the wrong word in
		 the line of code.
		-Added some support for an 'empty string' data type (char *)
		 called 'string' that is used to store strings returned by
		 game api functions, such as bestname which gets the most
		 appropriate name for an object.

15-06-2000	-The language description in pe_lang.cpp has traditionally
		 had one code generator function for each possible combination
		 of parameter types.  This has recently got somewhat messy so
		 I have now written a new helper called 'generic' which
		 automatically does the work needed by most of the script
		 commands by analysing the parameter string.
		 There are also two more generic ones for IF and FOR
		 statements, which need more information, but of course the
		 very specialised generators will have to stay as they are.
		-The status-bar module is now ported to PE script except for
		 the object display and the Karma halo which will take a
		 little more effort.

14-06-2000	-One of the great things about having compiled-on-the-fly
		 scripts is that I can change the binary format on a whim
		 and it won't affect compatability at all.  This is a good
		 thing because over the last few days the PE script code
		 has changed almost beyond recognition.
		-The 'overloading' method of providing parameter support
		 sucked, so I decided to do an experimental rewrite with
		 support for 'addressing modes', reducing the number of
		 opcodes used dramatically, also reducing the size of the
		 VM module by a third, and reducing the complexity and tedium
		 of adding new functions.  The performance penalty is not
		 noticable.
		-In theory you can now do really BAD shit like 'let 1 = 2'
		 (and it WILL..!) but the way the parser works should prevent
		 code like this from being generated.
		 (For the curious, it would actually poke 2 over 1, changing
		 the expression in memory to 'let 2 = 2 '.. self-modifying)

13-06-2000	-Fixed problem in structure syntax checking where it would
		 ignore mis-typed or otherwise unknown member variables and 
		 then get in a tizzy later on.
		-OBJECTs can now be member variables as well as integers
		-Fixed a problem with if_exists where it would abort, leave IP
		 dangling and execute data instead of code, crashing the VM
		-Various corrections and modifications to the syntax checker.
		-Fixed overzealous crash protection that didn't let you have
		 variables containing '0' (in case you dereferenced them ;-)
		-You can now do funky stuff like setting the player's enemy
		 to point to another object.

12-06-2000	-Fixed a bug in the variable system where globals would be
		 treated as some kind of demented local variable causing
		 mayhem when a real local variable was used.
		 It really should have crashed before now if it was doing that.
		-Variable scope is now proven to work as intended.
		-Overhauled math and conditional branching system so that
		 it uses a table of operations.  This was a lot of work and
		 some things may now be broken but it seems to work so far.
		 To be sure, it's worth the effort, as it simplified the task
		 of adding support for member variables to IF and LET.
		-A side-effect is that you can now mix math and conditionals
		 and do weird shit like 'LET A = B >= C' which can at times
		 be useful in C, and it came at no extra cost..
		-Using the operations table I was able to quickly implement
		 divide and multiply.  A division by 0 will return 0, which
		 isn't mathematically correct but saves your bacon.
		-The expression parser still doesn't support multiple
		 expressions like 'LET A = B * ( C + D )' and it won't for
		 the forseeable future.

11-06-2000	-After a sudden inspiration followed by a frenzy of crazed
		 development, I worked out how to add support for accessing
		 structure members in the PE system.
		 Since it is intended to interface with the game engine
		 it does not allow user-defined structures, although this
		 could concievably be added, and currently it is limited to
		 accessing integer datatypes.
		 Nonetheless it is a huge step towards mmaking it practical
		 to remove SEER completely, something I had not originally
		 envisioned.
		-Fixed a bug where putting
			let i = player.stats 
		 instead of
			let i = player.stats.hp
		 ..would crash the parser.  Now this is allowed, so you can
		 make sure stats is a valid pointer and other things

07-06-2000	-Added more interface tweaks to the light editor, including
		 3 settings for lightmap drawing, (none, full and translucent)
		 and also a preview mode which renders the static lighting as
		 it is done in the game.

06-06-2000	-Editor now draws lightmap tiles with translucency
		-In the demo's combat system, most people now run away if you
		 attacked them and then talk to them afterwards.
		 Others may attack you instead.

05-06-2000	-Local flags in the conversation system can now be accessed
		 from VRM-space with the functions get_local and set_local

03-06-2000	-Found minor overrun in the editor gui system

02-06-2000	-Designed a simpler way of editing lights in the demo game.
		-Fixed a bug in scripter where it corrupted the lightmap list
		-Editor GFX (from DEU) module back-ported to C again
		-BGui file selector now works properly under Linux

31-05-2000	-I tried to find out why the DOS version crashed while
		 loading the map, only to discover that the map file was
		 actually corrupted on disk and there was no bug.
		-The editor doesn't stop you from stacking solid objects
		 anymore.
		-Rearranged the Allegro initialisation, should stop sporadic
		 crashes in DOS version of the editors.

30-05-2000	-After two years, I suddenly thought of the perfect way to
		 implement static lighting.  So I implemented it.
		-Static lights (for rooms) have been added to the engine,
		 the editor and Scripter (to define the lighting tiles).
		-All the obvious bugs have been squashed in the new code.
		-Scripter and Editor are less stable than the game.  Why?

27-05-2000	-Fixed a bug in the keyboard buffer code that caused the player
		 to sometimes execute the keypresses out of order

26-05-2000	-The conversation engine now has flags local to a conversation
		 between two people, e.g. the player and Gordon.  This means
		 that for example, the player can upset Gordon and Gordon will
		 only be angry if the player talks to him again.  If another
		 party member talks to Gordon he won't be angry with THEM.
		 Likewise, if you make multiple copies of Gordon only the
		 particular ones that you have annoyed will be annoyed when
		 you talk to them.
		-The game now stores the data for these new conversation
		 features in the savegames.
		-The garbage collection now checks the new data structures too.
		-Sound and music now work in BeOS.

25-05-2000	-The conversation engine now records what has been said by
		 the current player who was talking, so everyone in the party
		 can have a different conversation context.

24-05-2000	-There is a memory overrun in the Editor which I haven't yet
		 been able to trace.

16-05-2000	-Discovered that PE global Objects weren't being processed by
		 check_depend() in the garbage collection system.  Bridging
		 the garbage collector and the compiler was not easy since I
		 am trying to keep the compiler engine fairly standalone.
		 But it's done now and it seems to work perfectly.
		-Theoretically the DOS/Linux/Be code changes should be merged
		 once more.

15-05-2000	-IRE now runs in BeOS 5, apart from the fact that it has no
		 sound and everything is blue.
		-Scripter and Editor now work properly in BeOS, for the first
		 time ever.  But blue.

14-05-2000	-Lighting system uses PE globals
		-Screwed around with BeOS 5 to try and make it work

13-05-2000	-Replaced all use of objectstore[] with globals defined
		 by PE scripts.  This showed up some bugs in the PE system
		 which were duly fixed.
		-Implemented a 3-stage keyboard buffer over the Allegro
		 keyboard input system to prevent the player going off on
		 crazy dances if you held the keys down too long.
		 There are still some bugs..

12-05-2000	-A whole raft of improvements to the PE scripting engine.
		 Lots of bugfixes, new operations, and most importantly,
		 global variables defined in PE can be used in SeeR.
		-At last I can finally retire that awful objstore kludge.

10-05-2000	-Audlib 0.8 is released on www.psynet.net/tjaden/
		 This is needed for compiling IRE (previously
		 I used a modified version)

08-05-2000	-Found and fixed a bounds overrun in the pathfinding code

30-04-2000	-Bugfixes to audlib

26-04-2000	-I've now been testing the game with no further changes
		 over the past few days and it seems to be pretty stable.
		-Scripter needs some work in Linux, there are a few cosmetic
		 problems to take care of, but otherwise it seems to be almost
		 ready for porting to windows.

23-04-2000	-Fixed another bug in the goal-seeking code which would
		 sometimes result in a NULL dereference.

20-04-2000	-The bug appears to be fixed.  It looks like there's a
		 problem with the Intel call gate inside seer.  Recompiling
		 seer to use the generic (portable) call gate in callasm.c
		 allows the game to run continuously, it hasn't crashed yet.
		-Added support for streamed compressed audio, using audlib.
		 Taken out all the MIDI-related code.

12-04-2000	-Major bug-hunt, added new seer function check_object which
		 causes a quit and logs debug info if the given object is
		 invalid.
		-Added macro CHECK_OBJECT to all functions in seer.cpp that
		 take an object as input, for production code it compiles
		 away to nothing.
		-Character template objects (the CHlist array) no longer get
		 added to the ActiveList in the main loop.
		-Sometimes the VICTIM pointer spontaneously transmutes into
		 something else which contains 0xdeadbeef as the name pointer
		 from the DJGPP sbrk fill.  But I don't know how it does this.

11-04-2000	-Fixed get_first_object so that it finds the next object in
		 the queue if the first one is pending-delete.
		 Bombs now damage objects on top of them.

10-04-2000	-Thought I'd tracked down the DOS instabilities but was wrong.
		-Rewritten .RARfile support added, performance in pure DOS not
		 too good though, but ok in Windows and Linux.  The rewrite
		 should avoid the ugly problems caused by loading structs
		 with fread across different compilers.
		-Linux version now uses local libjpeg instead of the 'bottled'
		 version I supplied for DOS.
		-You can now choose the last option of a long menu again
		 (key 0 moved from after key 9 to before key 1, fixed
		 assumptions about this)

08-04-2000	-Volume control now works again, sound up to R6 spec
		-Jpeg support re-enabled, now everything in R6 is implemented
		 except datafiles, but some bug-tracing work needs to be done.

07-04-2000	-Basic support for sound added.

05-04-2000	-Compiled in Linux to make sure it works and also to
		 try and track down a memory overrun.
		-Pathfinder re-enabled
		-GetNumber updated for Allegro
		-Lightning works again
		-'Shadow'/Underwater effect works again

04-04-2000	-Support for scrolling tiles re-implemented

03-04-2000	-Lighting system now fully functional as per R6
		-PE IF statements now support <,>,<=,>= and != or <>
		-8bpp mode works again (but not very well)

02-04-2000	-Lighting system nearly up to scratch, but some serious
		 issues remain with Allegro's translucency system.
		-A long-standing problem with the PE compiler and local
		 variables is now fixed.

30-03-2000	-After a week of screwing around, I discovered that the
		 reason the light system wasn't working in an additive way
		 was because I had designed it not to.
		-Game now uses curmap as a pointer rather than a direct
		 structure, so multiple worlds can be held in memory, which
		 will be useful in the future.

23-03-2000	-The basic lighting engine now works, and pretty fast too.
		 Currently it only does the bare shading, there are no light
		 sources yet.  Also it will only work in 15 or 16 bpp until
		 I write specific code for other bit depths, or if you have
		 enough CPU power to use the very slow, generic shader
		-Wrote 32bpp support using MMX assembler, with C fallback.
		 Also wrote assembler version of the hicolor shader.

21-03-2000	-Discovered cause of bug in Editor that caused the system
		 to lock up in DOS, despite the fact that the other two
		 programs are built from exactly the same code base.
		-Not sure why the others worked at all..
		-Began to re-implement lighting system for Allegro

19-03-2000	-Spent some time hunting bugs which were not actually mine,
		 but caused by an MMX bug in Allegro 3.9.31.
		 Upgrading to 3.9.32 fixed the problem.

17-03-2000	-Scripter mostly working now.
		-The game runs at 18fps with hardware acceleration in DOS,
		 which is as fast as the ITG version ran (without accel.)
		 so the performance gap is closing.

16-03-2000	-Optimised the .CEL loader somewhat, and did speed tests
		 on various string routines to try and streamline the
		 startup

14-03-2000	-Discovered that character processing in the script loader
		 took too long for something that didn't do much.
		 Investigating, found that ustricmp from Allegro is a real
		 CPU hog, and wrote my own stricmp function optimised for
		 the sort of data it's most likely to encounter (i.e. only
		 a few case changes, mostly same)
		-Optimised loadfile to make it only try '\' filenames only
		 in Windows.

11-03-2000	-After a break to clear my mind, I've got the game working
		 again, loading files straight from disk.  At present there
		 is no datafile or .rar support, although that can be added
		 fairly easily, when I decide which approach is best.

06-03-2000	-The cache system is actually slower than loading things
		 directly from disk.  Time for another re-think.

04-03-2000	-After several false starts, I finally made a combination
		 of utilities and game functions that would load files from
		 an allegro datafile in the same manner as the RVFS system.
		 Performance was absolutely terrible.
		-Loading the whole datafile at the start, however is
		 tantalisingly fast, so I will design a new loader
		 architecture based on a RAM cache that loads everything at
		 the start if possible, and copies everything else from RAM
		 later.  The difficulty is the fact that multiple datafiles
		 can override each other.
		 But I have a pretty good idea how to deal with that.

29-02-2000	-The game now has the beginnings of a new datafile system,
		 using Allegro's .DAT files instead of uncompressed RAR
		 archives.  At present everything is loaded from disk
		 because I haven't yet created a .DAT file, but it should
		 work as soon as I do.
		-Converting the .CEL loader to work with Allegro's IO
		 primitives created a bug that caused the player to be
		 decapitated, along with all the other people in the game.

28-02-2000	-The mouse-droppings are fixed in the editor, but the file
		 selection menu has an invisible mouse for some reason

27-02-2000	-The map editor is now working, but there are some
		 'mouse dropping' problems that need to be fixed.

26-02-2000	-After a few allegro lighting experiments I re-implemented
		 the master fader (for death, sleeping and the like), but
		 I haven't yet decided how to do the actual lighting system.

24-02-2000	-Most of the bugs in the game have now been ironed out,
		 except for the keyboard routines which sometimes require
		 multiple keypresses in order to register.
		-This was caused by a blocking call in RedrawMap put in by
		 mistake when the keyboard API was being changed.
		-Pathfinding code now fully integrated.
		-Conversation support reactivated.  Some minor issues
		 involving font colour need to be resolved.
		-Intermittent crashes, apparently at quite low level,
		 probably related to the timer code.  I have disabled this
		 for now, and I will see if the game still crashes.

22-02-2000	-Compiled the engine under DOS again, but discovered that
		 the game runs at 4.6 fps instead of 14.6 fps.
		-I'm wondering what to do.  I suppose I shall have to make
		 it use the ITG again, if no-one in the Allegro list can
		 explain why it is so horribly slow.
		-Strange.. the slowdown was caused by the sound system, not
		 the graphics routines at all.  Might be my strange DOS
		 driver playing up again.

21-02-2000	-Engine now running under Linux with Allegro, but tried to
		 upgrade Linux to a downloaded (and thus corrupt) Mandrake 7
		 installation.  It broke and I had to reinstall Redhat 6,
		 after a brief flirtation with Corel which I found rather
		 unsatisfying.

20-02-2000	-Engine port progressing nicely.  Made a lot of changes to
		 the program structure, converted a lot of the program into
		 C from the C/C++ hybrid I was using before.

19-02-2000	-Decided to try and port the engine to Allegro as an
		 experiment

14-02-2000	-Changing the way the game starts up to try and make it
		 quicker, and to help the compiler validate keywords before
		 the data is all loaded (so you know quickly if your script
		 will compile instead of having to wait 30-60 seconds)

08-02-2000	-After several days of working on a disassembler, I found out
		 why FOR loops and GOTOs would malfunction if using local
		 variables instead of globals.  Fixed.
		-Added switch -debugvm which writes a disassembly of the VM
		 code when a VM function is called, and also enables the
		 debugging keys ',' and '.' in the microkernel.
		 ',' will stop the VM in it's tracks and exit the current
		 function (handy for endless loops), and '.' will log a
		 disassembly, including the current IP marked with ->
		-Went through the code to try and work out why the sprite
		 loader had slowed down so much.  Some minor speedups, but
		 not very much the wiser.

04-02-2000	-FOR/NEXT Loops now work correctly.  Again, currently only one
		 type is implemented (FOR <var> = <num> TO <num>) but this is
		 easy to fix.

03-02-2000	-Labels and IF statements can now co-exist, thanks to a quick
		 hack involving the NOP instruction.
		
		 MEMO: Add FOR/NEXT LOOP

			FOR <v> = <n> TO <n>
			FOR <v> = <n> TO <v>
			FOR <v> = <v> TO <n>
			FOR <v> = <v> TO <v>
			NEXT <v>

02-02-2000	-Added advanced flow control.  Currently only IF <var> = <num>
		 but it works superbly, with support for nested IF statements
		 such as:

			IF yowsah = 100
			   print "Yowsah is 100"
			ELSE
				IF yowsah = 200
				  print "Yowsah is 200"
				ELSE
				  print "Yowsah is neither 100 nor 200"
				ENDIF
			ENDIF
		

30-01-2000	-Added a goto statement and labels as the start of flow
		 control.  It works, so next I can add PROPER flow control
		 such as if and else.

		 MEMO:  How about, if we have

		 IF (condition)
			<code>
		 ELSE
			<code>
		 ENDIF

		 ..the code for ELSE and ENDIF insert dummy labels
		 (probably numbered), and ELSE inserts a goto just before
		 so that the IF code gotos to the ENDIF (instead of running
		 the ELSE code too)


27-01-2000	-Found bugs and incomplete parts of the local variable
		 support, fixed, debugged the day away.
		-Local variable support now appears to work correctly,
		 with no GPF or pagefault.  Fortify cannot find any memory
		 overruns or leaks, present earlier in the day and caused by
		 the somewhat dangerous i-code patching in the runtime linker
		 now apparently bug-free.
		-Next, I think is conditional branching, and then I need to
		 decide on a syntax for manipulating objects.

26-01-2000	-It works.  The game now loads in .PE scripts, compiles them
		 and runs them inside the virtual machine.  It now allocates
		 space for global variables and it can do simple math
		 (add and subtract) on variables or numbers.
		-Need to add local variable allocation next, and then
		 conditional branching support, which I somehow forgot until
		 I needed it, and a way to look at game objects.
		-Experimental support for local variable allocation, using
		 a special opcode to do the local variable fixups.
		 Needless to say, it did some hideous things involving no
		 less than three pagefaults, and then expired.

21-01-2000	-The PE compiler is now integrated into the game, and there
		 is a virtual machine to run the scripts on, but all this
		 is just implemented.. it compiles but I haven't yet tried
		 to use it.
		-Variable allocation and fixing up is the next stage, after
		 that I can try making it run a simple program :-)

16-01-2000	-IRE has been ported to the DEC Alpha!
		 Binaries are now available for Windows NT.
		-Almost completed System Shock 2, productivity should
		 increase after that..

15-01-2000	-Tried to convert the new 32-bpp ITG to C, but ran into
		 difficulties.

14-01-2000	-Modified IRE program to accomodate the PE compiler.
		-Had to overhaul the script reader to use the generic string
		 library from the new compiler

12-01-2000	-Compiler made into three files (parser, language def and
		 generic string library).
		-Compiler API fully developed, can now compile multiple
		 functions correctly through the API, and support for
		 multiple source files added.
		-The next step is to move the compiler into the program,
		 then the VM itself can be developed.

11-01-2000	-Started to prepare the compiler for integration into the
		 main program.

08-01-2000	-Compiler now handles unknown symbols gracefully instead of 
		 crashing.

06-01-2000	-Rewrote large chunks of the parser.  Now it can support
		 multiple reserved words with the same name but different
		 parameters, ie 'overloaded' reserved words, and it can
		 have a different byte-code for each one.
		-Fixed bugs in the syntax checker for reserved words with
		 more than 2 parameters
		-With the above implemented, partial support for variables
		 was added.  Variables can be declared and 'used' but the
		 compiler doesn't really know what to do and outputs bad
		 code.  Compiler doesn't yet allocate space for variables.
		-Note: We should store in the function if it has local
		 variables, and add a system opcode that calls a function to
		 fix up the local variable pointers.

05-01-2000	-You can now define and use constants in the compiler
		-Local constants (and theoretically ALL symbols) now take
		 precedence over their global counterparts

04-01-2000	-System upgrade, total chaos

03-01-2000	-Rewrote the compiler's token generation system, now it
		 pre-parses the code (theoretically in ALL the files to be
		 compiled) before it does any code generation.
		-Stores ID for tokens in a linked-list, now generates
		 correct code for when a function references another function
		 that hasn't been compiled yet

01-01-2000	-More work on the PE compiler, now generates simple code

31-12-1999	-Started work on the Pee-Easy compiler, with a much nicer
		 more modular approach to the system than the horrid mess
		 of the ISC v3

30-12-1999	-32 bpp colour is now fully working

27-12-1999	-Come and get it!
		 Release 6 officially, er, released

23-12-1999	-Split off the Release 7 source tree, began to add 32bpp
		 colour
		-The ITG library has undergone extensive restructuring
		 including changes to the function names: public functions
		 now start with 'itg_'

17-12-1999	-Waiting on the Windows version.

16-12-1999	-Everything is ready for release except the Windows version.
		-Made source code snapshot ready for Mike, and let him know

15-12-1999	-Repeated yesterday's fixes

14-12-1999	-Did some more fixes but promptly managed to erase them all.

13-12-1999	-Fixed some more demo bugs

12-12-1999	-Fixed various minor bugs in the demo environment
		-Fixed bug to do with video-related problems where the
		 screen was cleared erasing the error message.

11-12-1999	-Fixed crashing bugs in editor caused by the collision logic
		 changes two days ago
		-Added new npc flag NOT_CLOSE_DOORS which prevents people
		 from closing doors (when after someone's hide, or fleeing)
		-Added support for it into main.txt, scripter et al so you
		 can have it as the default, for example cats and dogs should
		 not carefully close the doors behind them if they move.
		-Added a new function default_flag() to the VRM script.
		 This resets the specified flag for that object back to the
		 default specified in the MAIN.TXT file.
		-If an unknown object type is detected when the editor starts
		 you can now specify the name of an object to replace it.
		-I think I've finally fixed the undead taxman problem once
		 and for all		 
		-Fixed bug in get_far that forced the player to shoot
		 something even if they wanted to abort the firing.
		-If you reloaded, the weapon you were wielding was destroyed.
		 Savegames now store this information too.
		-The effect of any drugs the player consumed does not survive
		 the death of the player anymore

10-12-1999	-Much improved model for leaving the car, as opposed to the
		 bodge in previous versions.
		-NPCs now silently teleport to their next schedule position
		 if prevented from getting there any other way, as is done
		 in Ultima 6
		-Dr. Phalk, on finding that I had left a broken plate on
		 his chair, ran outside, hit me once and then went back
		 indoors.

09-12-1999	-Fixed that final loophole in the collision logic that
		 allowed the car to poke its nose through solid walls.
		-The 'deactivated player' problem could not be reproduced.
		-Fixed bug where smashing a plate would intermittently crash
		 the game, caused by case statement default apparently
		 crashing in SeeR.  Took default case away.

08-12-1999	-Added a new pathfinder, move_thick() which uses the crude
		 algorithm from earlier versions of the game.
		-Now enemies can attack using the Thick tracker if you're
		 invisible and the a-star pathfinder if you are visible.
		-The object dropping code is now in a separate module.
		 Damage caused by throwing things is now clipped to 90 points
		 so you can't smash everything by lobbing someone around.
		-If all the party members die inside the car, the game treats
		 all the players as deceased instead of the car coming to life

07-12-1999	-Added a new cashier.

06-12-1999	-Found+fixed bug in conversation engine which slowed down
		 conversations that had backing images (like the ATM)
		-Added new command to the conversation engine, [esc=].
		 This lets you control what the ESC key does.  By default
		 it exits, but you can have [esc="disabled"] to make it do
		 nothing, or [esc="<some page>"] to link to a page of your
		 choice ("Come back here!!").  [esc="exit"] will make it
		 behave as it did before.
		-Completely rewrote the door-closing system, works much
		 better now.  NPCs do not thrash in a confused fashion or
		 get jammed in the doorway.
		-Triggers are now set off for every square of a Large Object.
		-Implemented a cashier so now you can deposit money too.
		-Panic button for the cashier.  Try holding up the bank :-)
		-Objects now only do 1/1000th of their weight in damage if
		 you throw them, so lobbing TVs at people does not boil
		 their corpses away to vapour
		-Fixed bug where Gordon would crash the game instead of
		 going critical if you tried to kill him by throwing TVs
		 at him
		-Added new flag IS_CRITICAL set if an NPC goes critical.
		 Currently the only thing that resets it is killing them
		 and resurrecting them.

05-12-1999	-Hit on a simple way to make people close doors behind them.
		 Implemented.  Goes badly wrong if they move diagonally.
		-Scripter now compiles again, added support for more new flags
		-Rewrote the ATM code for the bank, so that all transactions
		 take place inside the bank's computer, not in the credit
		 card.
		-This also means you can have a duplicate credit card created
		 if you lose yours.
		-You can open and close accounts, the banker does not give you
		 a pile of 0 gold coins anymore if you close an empty account

04-12-1999	-Lots of work on the Automated Teller Machine, now complete.
		-Added new features to the conversation engine to let you
		 change the way the conversation menu options are presented
		-[link_color="#xxxxxx"] lets you set the colour of the
		 menu hyperlinks.
		-[link_offset="nnn"] lets you specify the X offset for the
		 menu links, so you can make them appear in a special place,
		 for example on the screen of the cash machine

03-12-1999	-VRM Code and artwork for the Madland Bank
		-Bugfix in conversation engine: rewrote [backings=] 

02-12-1999	-Worked on the demo mostly.  Added more NPC schedules.
		-Fixed a 'cosmetic' bug in the Editor (string array overflow)
		-Added new NPC flag 'cant_eat' for robots and the like which
		 are technically people but cannot eat or drink things.
		-Added support in the script and scripter for this flag and
		 a few others I forgot to add to the script system before.
		-Improved combat (people go critical much better now)
		-NPCs can now wield guns and fire them again.
		-NPC will return to whatever they were doing before after
		 they have defeated or killed their opponent.
		-Women can now sit down, previously they could only stand.
		-In the editor, you can now set the amount of Karma for
		 people (and other objects)

01-12-1999	-Improved the car a little more
		-People in bed are now solid (which means you can throw
		 things at them too)
		-Updated combat\bed.cpp (hurt bed occupant) so it works with
		 damage from things other than physical combat
		-replace_object now resets flags correctly and also rebuilds
		 the solid objects cache.  People don't disappear if you
		 punch them while they're asleep now.
		-You can now have the whole party go up/down stairs or just
		 the current person, depending if you're in party/solo mode
		-If you resurrect a dead party member they are still in your
		 party when they come back to life, not semi-detached.
		-You can now wield a chair as a weapon.
		-Objects people are carrying can now make sounds.
		 If the player holds them, they're full-volume, otherwise
		 it fades with distance.

30-11-1999	-Fixed bug where the editor would sometimes destroy the
		 .map file if you saved your work under a new name.
		-MoveQuantity now takes only the amount of objects requested
		 not the whole lot, so the Arms Dealer doesn't rip you off
		 anymore.
		-Tidied up user interface for Schedule editing a bit more
		-Fixed bug where you couldn't set character's conversation
		 file
		-Fixed mouse timing bugs in DJGPP version, check in Linux
		-Wielding a candle if you have a knife already does not
		 squash the knife anymore (it was looking at the wrong slot).
		-If another party members attacks the player, they player
		 now gets hit instead of the current character.
		-If the player's corpse is put inside a container by a
		 psychopathic follower the game doesn't crash anymore.

29-11-1999	-Added NPC activities for a few more characters
		-Fixed bug where attacking a person in bed crippled the
		 player instead of waking the sleeper
		-Gun firing code now says 'Missed!' if you miss
		-People now turn to face the target object in seek_target
		-Added new function Move_Quantity() which actually transfers
		 objects instead of creating/destroying them, so if the
		 object was activated (e.g. a live grenade) it still works
		-Enhancements to the Schedule part of the Map Editor
		-The Gods now give you 3 chances before the game restarts

28-11-1999	-Began documenting the changes in 0.06.  Not nice.
		-Added new gender-tokens $MR $LORD $MASTER

25-11-1999	-Saving the game now stores which parts of each conversation
		 you've said.  This was quick to add, but took the whole day
		 to debug.  As usual, something very simple caused the crash.

24-11-1999	-More feature-creep.  Added support for conversation engine
		 entries that change after they've been chosen by the user.
		-New commands [alt_link] and [alt_linkto] provide alternative
		 prompts and/or destinations.
		-Conversation topics can now disappear after they've been
		 used once.  Add the command [once] after linkto or altlinkto

18-11-1999	-Did some work on Scripter, now it can edit the new animation
		 extensions added a few months ago.
		-Scripter can now edit the NPC-flags (male, know name, hero)
		-Fixed bug in the wait-for-mouse-release code, should cure
		 problems in the Linux version too.
		-Fixed bug in the tile composer where it crashed if you
		 deleted lots of tiles and there were less than 17
		 (17*32 is the width of the tile browser window)

14-11-1999	-Michael Rich has done a Visual-C version of the editor and
		 suggested some changes for the code, which I'll apply soon.
		-Added support for a wield-function in objects, which
		 simplifies the positioning of objects you equip, and allows
		 for effects when you wield things, like the invisibility
		 ring.

9-11-1999	-Made a prototype version of the editor under Windows 95, but
		 it unfortunately sucks pretty badly.
		-In it's current state the editor has all the virtues of a
		 typical Windows program, being unbearably slow, requiring 4MB
		 of DLLs to be trundled around with it just to make it go, and
		 also crashing with little or no provocation.
		-Most of this is caused by using GTK+ for Windows as a quick
		 way of getting a GUI.  I guess I'll have to find another way.

8-11-1999	-The 'World View' mode in the editor can now scroll.
		-Wrote a utility to non-destructively change the size of maps
		-Added new conversation commands [if_player_male] and
		 [if_player_female] to branch depending on the player's sex
		-Added new conversation command [if_player_hero] to branch
		 if the character you're controlling is the actual hero of
		 the game and not just one of their followers.
		-Game doesn't crash anymore if you reach the bottom or right
		 hand edges of the map
		-Lighting now works properly at map boundaries

7-11-1999	-Checked to see if the game would still compile in linux.
		-Updated makefiles and made some changes, now it works again.
		-Broke Linux installation by trying to install glibc-2.1..

6-11-1999	-Bodged a sound system for windows into place but really
		 need to fix it before release.
		-Updated the makefile for the DOS version and made sure it
		 still compiles.

5-11-1999	-Added a bunch of new objects to the world.
		-Added new function get_object_below
		-Fixed bug where screenshots came out wrong in 16bpp mode
		-Successfully ran IRE under windows 95 using the MingW32
		 compiler.  Sound is not yet supported, however.
		 Problems before were caused by a combination of oddities in
		 both SDL and the way the buggy compiler tools (mis)behave.

4-11-1999	-Added provision to support bulky objects like U7 later on
		 (This is optional, if like me, you find it frustrating)
		-Attempted to make a gcc-based Windows 95 version (because
		 I don't have Visual C).
		 Compiled, after a huge quarrel but crashed when calling
		 SDL functions.	 Man, Windows is crazy..

3-11-1999	-Fixed memory corruption problems with the console printing
		 system.
		-Conversations can now change depending on the time of day.
		-Added support for Male or Female characters.
		-Found head-breaking problem where the alignment of the
		 new flags structure containg the sex, changes between two
		 source files.  Fixed, but not understood.
		-The token $SIR in conversations is changed to 'Sir' or
		 'Madam' depending on the player's gender.
		-Scripter does nicer formatting in the generated output
		-Fixed 'weak spot' in DOS version where you could press ESC
		 to abort just as the video mode changes and catch the game
		 with its pants down
		-best_name will now only use the personal name of a character
		 if you've been introduced to them.
		-Sprites can be JPEG files as well now, although this may
		 cause banding around the edges because JPEG is imprecise

2-11-1999	-Fixed problems wielding a light source and extinguishing it
		-You will now attack with your hands when wielding just a
		 candle or other non-weapon
		-Inanimate objects are no longer damaged by broken china
		 or glass
		-Preparing a small private demo release.  Looks like this
		 one is going to be a larger download than last version.
		-Setup program now offers the failsafe B/W drivers if the
 		 detection fails.
		-Found that IRE and setup program can run inside Windows 3.1

27-10-1999	-Added day and night.
		-If you sleep, objects will try to compensate for the break
		 in the schedule, and force light or darkness if you miss
		 the dawn or dusk.
		-Added more sound effects.

25-10-1999	-Fixed some more problems with Scripter involving additions
		 to the animation sequencer.
		-Removed some debug messages
		-The tax-in-a-box trap works again after fixes to startattack
		-Improved the generic healer script, now several messages for
		 resurrection to cope with different types of user error
		-In the conversation engine, you can now have [goto="exit"]
		 to quit immediately (after setting up a VRM etc).
		 Previously this didn't work because exit is not a real page.
		-Jason Summers now boards the boat properly when rescued

21-10-1999	-Fixed some of scripter's problems with the changes to script
		 format.
		-Made the conversation engine more robust.
		-Found strange stuff in the punctuation manager, rewrote
		 that, now need to make sure it still works.  Seems to.
		-Token preprocessor now applied to line always, not just
		 if there are no commands
		-You can put " quotes in speech using character '', so
		 now quotes can now be used in commands which have quotes:
		 for example [link="What do you mean, No?"] 

20-10-1999	-Scripter fixed under linux.  Changed 'OK' and 'Cancel'
		 to 'Yes' and 'No' in the GTK+ code.
		-Synchronised linux code base with the DJGPP one.
		-Updated BUILD so that it has the compiler built-in instead
		 of shelling out to one.
		-Discovered SEER leaks file handles and broke the new BUILD.
		-Fixed the problem in SEER, must tell author.
		-Scripter strips off some new script functions it doesn't
		 know about yet.  Must fix this.

18-10-1999	-Fixed some problems with makefiles in Linux after
		 reinstalling it.  Scripter broken again.

15-10-1999	-Scripter now works under Linux.
		-Removed most of Scripter's DOS-dependent stuff
		-Switched to SDL 0.11.2, which seems to be more stable in
		 the mouse department.

11-10-1999	-Rewrote the Head of Finance.
		-Added a new command token $DECODE [coded message] to the
		 conversation system and wrote a small utility to encode
		 messages.

09-10-1999	-Fixed the suicidal tendencies of the Taxman again
		-Added another new driver, 320x200 (yes it looks awful)
		 added a new clearer font especially for this mode and code
		 to decide which font to use
		-Tried to detect nested objects, with partial success.
		 If you try and make a 3-stage loop of objects the game still
		 crashes very badly, but it now detects a 2-stage loop.
		-Drew an inflatable dinghy, mostly working now
		-You can now get in and out of the dinghy.  Switching
		 player while one of the characters is in the dinghy works,
		 and it prevents a switch to party-mode until they leave it.
		-You can now select yourself in get-near, by pressing enter,
		 so you can leave the boat.
		-The boat is now fully working.  It can travel through
		 doorways and archways but not tables.

07-10-1999	-Fixed the save and reload problems.  Total garbage in the
		 savegame code, probably interrupted while writing it and
		 so added some nonsense to trip up the compiler and remind
		 me where I was.  Unfortunately the nonsense was valid C.

05-10-1999	-Fixed the bug in the console printing system that caused the
		 text to wrap around if it was made of many small print
		 statements instead of one long one.
		-Trying to fix problems in the savegame/loadgame code.

01-10-1999	-Made an 8-bit black-and-white video driver for Riva TNT
		 cards that don't support 15 or 16 bits per pixel.
		 Of course it's slower, but at least it should work.
		-Tried to compile the editor in Linux, but found it has
		 broken, the mouse code crashes it.  Wonder why.

30-09-1999	-Modified NPC tasking system to avoid stack-ups and other
		 things.
		-NPCs now go back to the last thing they were doing before
		 they joined your party if they leave.

27-09-1999	-Large objects such as the car now work considerably better
		 They are correctly centered and cannot go through other
		 objects as they did before
		 The cursor problem is fixed for large objects
		-Objects in microwaves etc play sounds slightly quieter
		 than objects outside
		-Began to re-write the NPC tasking system

20-09-1999	-Everything the grocer sells now works.

18-09-1999	-Added support for sound-range.  If you use object_sound
		 instead of play_sound, the sound effect's volume will depend
		 on distance to the player.
		-Unfortunately it only affects the starting volume of the
		 sound.  It'll need significant rewrite of the sound-system
		 to vary the volume continuously.
		-There is an override variable called SoundFixed.
		 If this is set to 1, object_sound will behave like
		 play_sound, for cinematic mega-events like opening the
		 Ark of Testimony, where you want to hear -all- the
		 destruction sounds regardless of realism.

14-09-1999	-Partial invisibility (See 25/7/99) now works in 16bpp mode.
		-Added C versions of the partial invisibility to the ITG,
		 now the library prints whether it is using the C or ASM
		 version to assist in debugging.
		-Support added for JPEG files for backings.
		 Calls to Display_PCX now changed to display_backing(), which
		 decides the format and displays the image.
		-When an object is destroyed by vast amounts of damage, a
		 system VRM called 'erase' is now called so you can decide
		 what happens.  (turns to ash, just removed, not removed etc)

13-09-1999	-Rewrote trap-checking system, now it is a very-high priority
		 goal for each object, and CheckTraps is redundant.
		-Unfortunately this broke the taxman who attacks you if you
		 enter his home.
		-Laid foundations for the goal-bypass system, but not
		 implemented it yet.

08-09-1999	-Added new time-saving function, best_name() which when given
		 an object, returns the most fitting description for it.
		 Basically it returns the name of a person, or the short
		 description of anything else, or "Nothing" if passed NULL.
		-spill_contents now makes all wielded objects visible so you
		 can pick up the weapons of fallen foes, not just their ammo

07-09-1999	-Added new VRM function find_nearest() which returns the
		 nearest instance of that object to the specified character.
		 It is used in the AI VRMs for tasks such as sleeping, where
		 it finds the nearest bed, using various criteria.
		-It will always use the closest object that belongs to them.
		 If there isn't one within range then it uses a public object,
		 failing that it uses someone else's, or returns NULL and they
		 sleep on the floor.

05-09-1999	-Added support for fading the game window with a second layer
		 of darkness that also takes out light sources.
		-Added variable Fader which ranges 0-255, and controls this.
		 0 means no fading takes place (for speed reasons) and 255
		 makes the whole thing completely black.
		-Added functions fade_out and fade_in to handle the (simple)
		 job of fading.  Just to make things even easier.
		-Added new function check_time, which resets the clock if you
		 change the time.  For example, if you add 2 hours, it will
		 make sure that the number of hours does not exceed 23, and
		 if it does, change the date accordingly.
		-Fixed bug that the calendar had 13 months instead of 12.
		-Totally re-wrote calendar system.  Calendar model is now
		 specified in the project's .gam file so you can define the
		 number of minutes, hours, days and months that the calendar
		 can have.  check_time enforces this and it is now used
		 internally as well as in VRM code.
		-Invisibility potion now prevents people seeing your thefts

04-09-1999	-Improved support for doors out-of-shot in the pathfinder
		-Fixed bugs in the drive-an-enemy-away code

03-09-1999	-Fixed some cosmetic problems with the speech engine,
		 now files a bug report if too many links are added.
		-Added frame linking support to the sequence engine.
		 If you add the command JUMP_TO <sequence> to an entry
		 in section: sequences in the script file, it will jump
		 to the specified animation sequence when the current one
		 ends!
		-Thus, you can now have an animation that leads-in to a
		 looped one when it ends.
		-Attempted to add support for storing the animation position
		 in the savegame files.  Crashes.
		-Added a new animation type (looped, pingpong etc): RANDOM.
		 This displays a random frame from the list each cycle.
		 It is guaranteed not to display the same frame twice in
		 succession.
		-If you buy healing, it doesn't screw up the damage reporting.

02-09-1999	-Fixed a bug in the speech engine where a page could not be
		 linked to if it was the fisrt line of the file (line 0).
		-Optimised find_id in the map and savegame loader.
		 Much quicker now.

30-08-1999	-Text colour can now be changed from VRMs, and poison is now
		 fully operational, using a dummy VRM called Nothing that
		 does nothing if the subject is alive, and deactivates itself
		 if the victim is dead.
		 It's purpose is to ensure that the poison victim is active
		 and subject to VRM calls.

28-08-1999	-Removed the 10 user variables object->user[x].
		-Added instead a new substructure to OBJECT called ->user,
		 which contains 20 user variables object->user->user[x]
		 along with a few other things, for potions and poisoning.
		-Added a new system function UPDATER which is called for
		 every active object.  Currently it makes the poison work,
		 but it can be used for other effects too.

27-08-1999	-Found dead people wandering about the game *again*. 
		-This time it was caused by the new scheduling system.
		 How many more times is that going to happen?
		-Two party members don't share the same trip anymore.
		 Yes, it had to be fixed again after various large overhauls
		 of related code.

26-08-1999	-Work on the savegame mechanism:
		-Now saves time and date.
		-Now saves the goal list of all objects in the game, so the
		 game doesn't fall over with the player paralysed when
		 reloading.
		-Now prints 'please wait...'  when reloading.

		-Pathfinder understands doors again.  Wonder why I broke it?
		-NPCs can now use ranged weapons, added new flag rangedweapon
		 (IS_RANGED) to the engine to aid this.

25-08-1999	-Added safety checks for dealing with fresh, unformed objects
		 in the editor: creating a new object would sometimes crash
		 the program owing to minor design changes.
		-With regard to above, getnum4char checks to make sure the
		 given object name is not NULL.
		-Added a new system variable, 'person', which always points
		 to the current character being moved by the program, for
		 example the player, or a follower.  Used in VRMs that move
		 characters.  Previously 'current_object' was used for this.
		-New .GAM file settings to set the default date in the game.
		-People can get into bed, but currently the only way they can
		 get out again is either by being murdered, or having the bed
		 destroyed.

24-08-1999	-If an object in someone's schedule is deleted, the game
		 does not crash anymore.
		-If an object is programmed to attack something at a certain
		 time, it actually does attack it instead of pulling punches.

22-08-1999	-Console printing functions can now print in colour,
		 mostly for debugging.  Added VRM access to function Bug
		 which reports a non-fatal error.
		-Added a new function to the conversation enegine which
		 displays a list of the entire party (and 0 for none), and
		 then sets system variable VICTIM to the party member chosen.
		 It also branches to another page if the user didn't chose 0.
		-Added support for maximum levels of Health, Strength,
		 Intelligence and Dexterity.  These are not checked
		 automatically by the engine, since you may want to override
		 them, but now they can be specified and the engine will use
		 the initial values as defaults if they are 0.
		 (Otherwise the player would die :-)

16-08-1999	-Console printing functions don't crash anymore if the game
		 isn't in graphics mode.
		-Bug() now calls C_printf() automatically.
		-Working on the Scheduling code.  Work held up by a
		 fascinating bug that caused schedules to be saved to
		 adjacent sprites for no obvious reason.  Fixed.
		-Gordon Harris now spontaneously combusts at 1:00am.

15-08-1999	-Moved map drawing code into project.cpp and renamed all
		 the projection functions so they aren't prefixed with 'E'
		 anymore (this was from the Avios editor)
		-Tile animation is now synced with the animation timer
		-Added support for tiles that scroll in the background.
		-Scrolling in any direction is supported, and it can be
		 reprogrammed at any time during the game.
		 The new acid trip utterly defies description, especially
		 the sand.  Please do not stare at the screen for too long..
		-Added a function that returns TRUE if a particular object
		 (usually an NPC) is onscreen, using the personal name as the
		 search key.  Added it to the speech script.
		-You can now have bridges over water, and boats that you
		 can stand upon without sinking under the water.
		-Upper-ASCII characters are now drawn correctly in books

12-08-1999	-Worked on improving The Flat a lot, weapons don't crash
		 the game if used manually instead of being wielded.
		-Editor crashes after a few minutes, find out why.
		-If you press F2 in the editor, it lets you save the level
		 without quitting.
		-Optimised the pathfinder engine (at expense of modularity)
		-Pathfinder now uses it's own internal map of large objects
		 and solid objects.
		-Fixed bugs with locked doors and people (it would wait for
		 them to move out of it's way, leaving them standing there)
		-Pathfinder sliding window is now oriented around the object
		 which is doing the path-find, not the player.
		-Does not crash if player goes out of range anymore.

11-08-1999	-95% solar eclipse.
		-Switched to gcc 2.95, now using -O6 and -mpentium
		-Party code reactivated after control system rewrite
		-Game doesn't crash anymore if a creature murders themself.
		-Bug fixes and things in Scripter.
		-Added support for ranged weapons, guns and things.
		-DOCUMENTATION ERROR FOR take_quantity and add_quantity!
		 THE LAST TWO PARAMETERS ARE THE WRONG WAY AROUND!

10-08-1999	-Object control system completely revamped, to allow for
		 nested tasks and task priorities of -128 to 127.
		-Each object has a list of goals, which are in order of
		 priority.  They will keep doing the highest priority
		 activity until either the goal is finished and deleted from
		 the list, or another higher or equal priority goal is
		 placed on the list.
		-Now, if you upset someone who is already doing something,
		 when you are dead, they will return to whatever they were
		 doing before they were distracted.  The number of nested
		 tasks is limited only by memory.
		-Added new functions add_goal, end_goal, wipe_goals and
		 kill_goals, which replace set_object_behaviour().
		-Re-writing combat code to use the new behaviour API,
		 party support currently disabled.
		-Re-wrote system.hpp to define the structures in a perverse
		 manner as a workaround for a bug in SeeR.

09-08-1999	-The game now uses a weight of -1 to denote that an object
		 cannot be picked up.  This would have been a simple VRM
		 change, except for the vast number of objects which needed
		 to be changed, so I modified loadsave.cpp, described below.
		-The editor now only saves the stats of objects that differ
		 from the description in the main.txt file.
		 This required a minor format change, (to skip unused parts)
		 which means that 0.05 will not read 0.06 maps without a
		 source code patch (use the load_mz1 and save_mz1 files from
		 0.06 and add the has_changed() function).
		-0.06 will still read 0.05 maps unchanged.
		-Added support for Karma (a new entry in object->stats)

07-08-1999	-Spilt liquid now goes to the floor (or lowest FIXED object)
		-A-Star tracking system now calls a vrm called TRACKSTOP
		 when an object hits an obstruction
		-Followers are now happier with doors.

06-08-1999	-Fixed long-standing problem where exploding things sometimes
		 crashed the game

05-08-1999	-The Linux-GTK editor appears to be fully-working now.

		-Party members are now under A-Star control, although
		 they seem to have some real problems understanding doors.
		-Enemies are also under A-Star control and some problems
		 are fixed deciding on who their enemy is.
		 An angry taxman smashed a plant pot before turning his
		 rage against me.  I suppose it's an improvement.
		-PCX-24 loader no longer skips 768 bytes of palette data
		 (which made 16x16 images completely blank :-)
		-Mouse support integrated into ITG for all platforms.
		 Bumped ITG version number to 7.5 as a major feature change
		-You can flush things down the toilet.
		-Fixed many problems with combat-related code.
		 Previously all characters would assume the player had
		 attacked them if they were hurt, now they don't so if you
		 can persuade a taxman to attack another one they will lock
		 themselves into mortal combat. (And continue to kill even
		 after the victim is dead.  gah.)

04-08-1999	-All the GTK editor functions are working now except for
		 the list menu which looks like it will be tricky.

03-08-1999	-Porting editor to Linux using GTK+ 1.2.3.  Lookin' good.

02-08-1999	-Rewrote large sections of party-handling code.
		-Car is now completely stable and will not follow you like
		 a dog when you get out of it.
		-Whole party now goes down stairs.
		-Does not take party mode/single player into account and
		 so everyone goes downstairs instead of just one man.
		-Rewrote BUILD so that it will now compile on POSIX systems
		 instead of just DOS.  Won't compile for Windows though, so
		 windows users will have to use the DOS version.  Big deal.

01-08-1999	-A* Pathfinding algorithm installed and mostly working.
		 By pressing X the player will move one step to the second
		 party member.
		-There are some bugs: the player sometimes goes somewhere
		 totally unexpected before recovering.
		-The person being driven by the pathfinder now opens doors
		 and goes through them instead of standing idiotically in
		 front of them.  They don't close them though.
		-Owing to the above glitch they sometimes open a door not on
		 their route for no obvious reason and then carry on.

28-07-1999	-Found another implementation of A* - add it to the game

		-Major change to Conversation engine concerning images.
		-Images are now loaded DIRECTLY, that is, you specify
		 a filename instead of an entry in section: sprites.
		-Images MUST reside in a subdirectory called PICS from
		 the directory where the conversation is stored, the game
		 will add this automatically.
		-For example, if the file containing the book is:
		 flat/books/bible.txt
		 ..then [image="biblcovr.pcx"] will make it look for:
		 flat/books/pics/biblcovr.pcx

26-07-1999	-Added new VRM callback to the water engine.
		 When an object enters the water, the VRM 'SPLASH' is called.
		 You can use it to make a splashing sound, extinguish a lamp
		 or destroy ammo.

		-Created a book using the conversation engine

25-07-1999	-Added kernel support for water: new flag 'watery' is
		 accessable in both tiles and objects.
		-Added new member function shadow_sprite to the SPRITE
		 class, which draws a sprite as a dark shape instead of a
		 full-colour or translucent object.
		-Added new flag 'shadow' to allow this type of drawing and
		 modified sprite projector loop to use it.
		-Modified move_object and move_from_pocket to allow objects
		 that are non-living to be put in the water.
		-Now you can murder someone, and dump the body in a river.
		-SPRITE::shadow_sprite() also drives invisibility potions.
		-New function is_tile_water

23-07-1999	-Added new [goto=] command, to conversation engine, which
		 instantly switches page without waiting for input.
		-Added new [setbehaviour=] command, which is equivalent to
		 set_object_behaviour in the VRM library.

22-07-1999	-Tiles can now animate (but only in a simple loop)
		-You can't grab things through walls any more
		-Added new function is_tile_solid

17-07-1999	-World editor can now have variable-sized worlds.
		 It asks you to confirm the world size when you create a new
		 map, and reports the memory requirement of the new world,
		 before creating it.

13-07-1999	-My brother re-assigned all the Health and Damage values
		 to make them properly balanced.
		-Amount of damage to destroy an object is now defined in
		 the flat.gam file instead of being hard-coded.

12-07-1999	-Upgraded SeeR to 0.93.  No great improvements and the
		 binary format has changed so all the VRMs had to be
		 recompiled.

10-07-1999	-My brother re-assigned all the weight values to make them
		 properly balanced.

04-07-1999	-IRE Editor now runs under BeOS, but only experimentally.
		 Still, this is a big step forward.
		 Linux and Windows work can begin soon...

30-06-1999	-Released source code.
		-I now declare 0.05 officially released!

28-06-1999	-Fixed bug in non-DOS versions.  Released them.
		-Report of problems with SETUP.EXE being too strict.
		-Modified code, releasing new build of the DOS release.

27-06-1999	-Full test of game logic.
		-Updated site, built release versions.
		-Discovered bug in Linux, Win32 and possibly BeOS
                 versions.  Damndamndamn.
		-Got snapshot from Mike, will merge code..

26-06-1999	-The DOS setup program can now autodetect the video driver.
		 Useful if you have a buggy Cirrus Logic card.

24-06-1999	-Got latest beta of Windows version.
		-The machine I use for benchmarking doesn't have Windows
		 but if it did, it would run at approximately 20fps.
		 (I found the speed difference between DOS and Windows and
		  used it as a percentage on the speed of the DOS version
		  on the benchmarking machine.)

23-06-1999	-No more undead taxmen.
		-Merged in changes from Mike.  It's nice to have someone else
		 go over the code and find your mistakes.

22-06-1999	-Found a fatal bug in the garbage collection code.  Fixed.

21-06-1999	-Tried BeOS version under R4.5.  It broke.
		-Found problem and fixed it.  Should be more stable now.
		-Runs well under BeOS 4.5, better than R4.
		-Fixed keyboard bugs in BeOS version.
		-Put timer back into BeOS version after mysterious removal.
		-Re-wrote the ANSI display routines to translate IBM extended
		 characters into ASCII characters much more intelligently in
		 BeOS and Linux.

20-06-1999	-Tidied up NASM source code in the graphics system.
		 Functions are now defined with 'proc' at their beginning,
		 this makes them global and automatically takes care of the
		 underscores.

19-06-1999	-Synced DOS, Linux and BeOS versions.
		-BeOS now uses SDL.
		-SDL split into four files (was two):
		 sdl15_w sdl15_d sdl16_w and sdl16_d.
		 (The _w files are window-mode and the _d are fullscreen.)
		-16bpp fullscreen is now the default for Linux and BeOS.
		-RFS loader now opens files in original order (was reversed)
		 so that the last RARfile in the list has greatest priority.
		 (Now I can type ire -file scamel.rar to change the music)

18-06-1999	-In the demo, added a vehicle you can steal, uh, board.
		 Experimental and has some cosmetic bugs but I think I'll
		 keep it in the release because it's so great.
		-Added more fun stuff to the demo.
		-Toilets don't explode and kill you if you use them anymore.
		-Fixed bug where objects placed in bags could become fixed
		 by mistake.

17-06-1999	-C implementation of the ITG assembler routines now working.
		-Improved support for large objects.
		-Large Objects can now move without bumping into themselves.
		-The player can now be a large object too and the screen
		 is correctly centred on them.

16-06-1999	-Started a C implementation of ITG assembler routines.

15-06-1999	-Divergent Linux source code moved back to main source tree.

14-06-1999	-Taking drugs and then committing suicide twice no longer
		 crashes the game.
		 There was a bug in wipe_tflags() which freed memory but
		 didn't set it NULL afterwards (to mark it as being free)
		-New button in scripter to set all animation frames to
		 be the same as the UP direction (saves time)
		-weigh_object() now operates recursively and generates the
		 correct result for a container full of things.
		-User interface tweaks.  Game behaves even more like U6 now.
		-You cannot Look at, Move or Get invisible objects like
		 the teleport targets and tripwires anymore.
		-You cannot push doorways and benches around anymore,
		 caused sideffect of by 09-06 optimisations being more severe
		 than originally expected.  Fixed.

13-06-1999	-Script editor now fully supports tile editing.
		-Script editor now fully supports Roofing tiles too.
		-Added function get_number which returns a number input
		 by the user.  Complete strings will be more difficult and
		 will appear in the next release (0.051 or whatever).
		-move_to_pocket() now handles quantity objects (coins etc)
		 properly.
		-You can't pick up people anymore.
		-Objects don't get lost if dropped on the player's head.

12-06-1999	-Script editor now supports editing tiles, but cannot yet
		 create new ones.
		-Got a screenshot of the win32 port.
		-It's decoded the map now, but has problems displaying the
		 images, with what looks like a signing problem with the
		 colours (i.e. everything is green and yellow).

11-06-1999	-Documented new features of the world editor. (Aaah!)
		-Set kernel version to 0.05
		-Went through source code, compiled with -Wall to try and
		 find all warnings and screwed-up typecasts, to make code
		 compile more cleanly.
		-Changed member ->VRM in structure VRM to ->vrm, as a
		 workaround for a bug in Visual C, on advice from
		 Michael Rich, who is porting to win32.
		-Discovered I damaged fs.cc while trying to fix BeOS bug
		 caused by memory overrun (later found by FORTIFY)
		 underneath the call to Traverse reads
		 if(!Rnum)
                    return;
		 should be
		 if(!_Rfiles)
		    return;
		 if(!_Rfiles).

10-06-1999	-The game is now almost as fast as Ultima 6 on my P-200!
		 It IS as fast if you choose NO SOUND (so the mixer is off)
		 But of course I do have a fast graphics card, so it won't
		 be as quick on a 486, if it works at all.  I don't know..
		-Discovered the cost of the SeeR optimisation: you can't
		 do recursive calls anymore.  Not a huge problem.
		-Re-wrote the explosives to be non-recursive, by deferring
		 chain explosions until the next update.
		 Since the second bomb is next to the first, it is often
		 the very next object processed by the update manager, so
		 most of the chain is detonated in a single turn, with the
		 rest coming afterwards.
		-Documented all new API calls.  Grooh.
		-Modified behaviour of some of the new API functions, after
		 deciding to change them while writing docs.
		-If you throw something at a party member they no longer
		 teleport on top of you and swap places in a bizarre way.
		-Members who leave the party now have their membership flag
		 reset.
		-Party members don't mind being pushed around by the player.
		-Party members can now leave the party.

09-06-1999	-Objects in pockets (and containers) are now processed by
		 the game, so if you pull the ring on a grenade and stuff
		 it into a chest of drawers (or in your pocket!) it will
		 explode, not be frozen until it comes out of the container.
		-Compiled the game with FORTIFY, a memory-checking library
		 to see if there were any problems with the code other than
		 the ones in SeeR (which I'll look at later).
		-Discovered two problems in FS.CC (0 length callocs before
		 M_get comes up, and typo in call to malloc causing overrun)
		 Both fixed now, and my code gets a clean bill of health.
		-Did some testing with SeeR.  Recompiled example2.c to call
		 the function repeatedly, and watches as free memory dwindled.
		-Examined tried something with example2 and discovered that
		 you don't have to continuously create and destroy VRMs,
		 they can be created once and reused again and again without
		 ill-effect.  It had me fooled for more than 5 months.
		-Crucially, SeeR only leaks when you create/free/create/free
		 so now it only leaks ONCE, and then not again.
		 This I can live with and I'll prepare for the next release.
		-WOW!  With the VRM instances being reused, the game has
		 nearly -doubled- in speed!

08-06-1999	-Found memory leaks in the game!
		 It leaks core at the rate of 64k every 13 turns.
		-Fixed several small ones, va_start not followed by va_end,
		 C_printf fragmenting memory and little things.
		-But the big memory leak is not happening in my code,
		 because all memory allocations in the main source code go
		 through M_get and M_free, which can be made to log activity.
		-Reduced VRM usage and leaks became less.
		 Disabled all VRM calls and leakage stopped.  SeeR....
		-Fixed bug in Linux and BeOS timer code, where the child
		 would sometimes hit the parent with the signal before the
		 parent was ready for it, killing both.

07-06-1999	-Fixed problem in editor where it gets the bounding-box of
		 objects wrong while dragging or moving them.
		-Stealing grouped objects (e.g. money) now counts as a crime,
		 before it only worked with single objects.
		-Made dummy driver files for Win32, to assist planned port.
		 It will probably not make 0.05.
		-Fixed a problem with the lightning flash in Linux and BeOS.
		 It should have happened in DOS too, but mysteriously did not.
		 (Overflow shifting AX register to double light intensity)
		-The corpses of people do not crawl towards the player if you
		 murder them and then steal their things anymore.
		-Fixed problems at edge of the map, where invisible solid
		 obstructions appeared (caused by clipping in gen_largemap)

06-06-1999	-More work on BeOS and Linux versions.
		-BeOS version now supports timer correctly but the windowed
		 version has problems shutting down.
		-Linux version altered.
		 Makefile updated so it builds again.
		 GGI and SVGALIB are decoupled using #ifdef statements, so
		 you can put them back in if you want, but I won't.
		 SDL version modified to try and make fullscreen mode work
		 properly.  15bpp mode works, but 16bpp doesn't.  May be a
		 bug in SDL itself.
		-Added a new flag to determine whether an object is always
		 a single unit or whether it can be grouped like money.
		-Modified the conversation system to take this into account,
		 previously it was arbitrary how this was handled.
		-Conversation system detects dead-ends (no links) and prints
		 an error message, filing a report in bootlog.txt.
		-People now complain if you push them around.
		-The corpses of party members killed in action do not crawl
		 towards the player anymore.
		-The level loader is much more robust and will not crop the
		 level's extended data if an invalid object type is detected.

05-06-1999	-Misc bugfixes.
		-Fully documented the new conversation engine.

01-06-1999	-Player is now moved before all other objects.
		 Up until now everything has been generalised.
		-You can now see the player in the mirror, because the player
		 is now moved before the mirror does it's thing.
		-Re-wrote the object scanning routines again using some of
		 the new pending-delete list management code.
		-Now the game maintains a separate table of all ACTIVE
		 objects and uses this to move things instead of scanning
		 the entire world.
		-The game has speeded up a lot and is now faster than I've
		 ever seen it in about 6-9 months!
		-It works much better on the P75, but the graphics card
		 on that machine is a bottleneck.

31-05-1999	-Hard-deleting objects left dangling pointers which were very
		 dangerous and made the gunpowder routine highly unstable.
		-It also caused the poison-the-poison-bottle crashing bug.
		-I have completely rewritten the object deletion code.
		 Objects are now marked as pending-delete and are removed
		 later on in batches by the object management routines.
		-The flag IS_ON (object->flags.on in the program) is now
		 used to mark an object for deletion when set to 0.
		 Previously it did very little
		-Any attempt to set the flag to 0 in a VRM will now inform
		 the object manager and it will be deleted next turn!
		-The object manager now maintains a list of ALL objects
		 and it is updated as they are allocated and freed.
		-Certain object search routines can now be optimised to use
		 this list instead of recursion, making them orders of
		 magnitude faster!
		-Checking internal object consistency is now virtually instant
		 instead of taking 2-3 seconds on my P200. (See 26-05-1999)
		-My brother paid a quick visit and was impressed by the
		 current state of the game.  He also found lots of bugs.

30-05-1999	-Dead bodies are now deallocated by the game when destroyed.
		-Added gunpowder kegs which explode and destroy things.
		 This is unstable and often crashes the game but it's fun
		 to watch as the player's flat is completely leveled!!!!
		-Added potions which do a couple of things.
		 You can ram them down anyone's throat a'la Ultima 7, and
		 poison the Taxman.  No checking yet about what can drink it..
		-If you poison the bottle of poison it dies and so does
		 the program.  Need to fix that.

28-05-1999	-Added function wait_for_animation(object).
		 Pauses the game until the animation of object is finished.
		-BeOS version is kind of working.
		 There is no input whatsoever, it doesn't animate and
		 sometimes it crashes.  But it's a start.
		 Unfortunately the frame rate is roughly the same as Linux,
		 but that is in the inefficient windowed mode.
		 Full-Screen mode should be faster but loses monitor sync.
		 There's also the DirectWindow method...
		-Added SYS_CORELEFT to the system-dependent modules.
		-DOS version of SYS_BANNER now automatically centres the
		 text.  BeOS and Linux versions put it in window borders.
		-Merged the BeOS changes back into the main source tree.

26-05-1999	-It's 3 am.  I'm going to bed.
		-System now checks the world when deleting an object, to
		 make sure any dangling pointers (Enemy, Owner) are removed.
		 Added a switch to disable this when deleting the entire
		 world because this does a LOT of work when deleting.
		 In the game this isn't noticable much because deletions are
		 relatively rare occurences.
		-Objects now have Owners.  If the owner is null, the object
		 is common property.  If not you could be done for theft!
		-Added support in the editor for assigning object owners.
		-Rooftops are now implemented fully, using a tile-painting
		 mechanism, not the linked-list system from before.
		-New section added to the main scriptfile: rooftiles
		 which loads in sprites directly from .cel or .pcx files.
		-Editor can now modify behaviour and speech of individual
		 objects.
		-Optimised object scanning loop.  Game feels quicker now.
		-Overhauled loadsave.cc.  Changed the format of the .MZ1
		 file, but it is backward compatible with previous format.
		-File should also end with lower-case 'q', but added bailout
		 routine (if 4 unknown ID bytes are encountered), so that
		 previous versions will work.  Or you can echo q >> file.mz1
		-Tweaked user interface, direction icon now appears when you
		 are asked for a direction (Ultima 6 style).
		 Drew a much, much better looking bag of drugs.
		 Eliminated UI bug when you're holding an object, you can't
		 look at it.  Fixed.

24-05-1999	-In editor and scripter, InputInteger (from DEU) now supports
		 numbers greater than 9999.
		-Fixed slight problem with font icons: arrows are now ascii
		 codes 20-23 inclusive.
		-Big news on the BeOS version: everything below is about it.
		-Made the BeOS version compile by humouring the broken EGCS
		 compiler.  It didn't believe in getw and putw, so I made
		 getl and putl in fs.cc instead and the compiler fell for it.
		-Completely re-wrote my buggy BeOS be16 display driver.
		-BeOS programs are supposed to instantiate a BeAPP class as
		 soon as they start up, and this starts the message loop.
		-IRE does not work this way because it's designed to be
		 portable across non-multithreaded systems (like DRDOS).
		 So unfortunately, it's mung-the-system time again.
		-I want to get my hands on the display API despite BeOS,
		 so I made a -bogus- BeAPP class that does nothing.
		-I throw this thingy at the BeOS to keep it distracted while
		 the driver -pretends- to be the BeApp and manipulates the
		 display subsystem API fraudulently, covered up by the BeAPP.
		-As far as I can tell, this ..thing.. is actually working!
		 Unfortunately it sets the screen to the wrong refresh rate
		 and I can't see what it's really displaying.
		-When I change screen mode it crashes,  but that's because I
		 haven't yet trapped the change signal (DirectConnect etc).

23-05-1999	-More conversation stuff:
		-Made a dodgy guy you can sell stolen TV sets to.
		-Redefined 'give' and 'take' so that they actually transfer
		 objects between the player and the guy you're talking to.
		-'create' and 'destroy' behave like old 'give' and 'take'.
		-Added 'am_carrying' to check whether the player is holding
		 the object they want to sell before transferring money ;-)
		-This way you can have either the standard Ultima method
		 of creating money and goods from thin air, or you can have
		 a more realistic game where money and goods can never be
		 created or destroyed; they can only change state.

22-05-1999	-Got portrait of car salesman for the slave dealer

21-05-1999	-Flags are not numeric anymore!  They are strings, which are
		 automatically created as needed and queried by name.
		-Added VRM functions to deal with these.

20-05-1999	-Redrew the mouse pointer for the editor, now white and black.
		-Spent the last few days improving the conversations.
		-Lots of neat stuff done, but I don't want to say what
		 because it would spoil the next release ;-)
		-Made a map of all finished rooms from the original Flat,
		 began to implement them in IRE.
		-Added functions to get and set local flags of an object
		 in VRM code.
		-Added new conversation code [is_in_party] which sets 65535
		 or not, depending on whether the guy you're talking to is
		 a member of your party.
		-Made the internal function "get_yn()" visible to VRM code,
		 so you can now ask Yes or No questions more easily.
		-Programmed several neat conversations.
		-You can now buy a slave into your party and command him to
		 'Destroy'.  You select the object/person and he goes off and
		 beats the cack out of it, before re-joining the party.
		 It crashes if you make him kill himself. (Like Ultima 7)
		-Stole a sound from System Shock.  Need to get a replacement.

13-05-1999	-Re-written roof code.  Now done using tiles instead of a
		 linked list of objects.  The roof file (flat.mz2) is quite
		 big though, always half the size of the map itself.
		-Added support for individual identities for objects.
		 'name' gave you the character type, 'shortdesc' gave you
		 a generic description.
		 But now 'personalname' gives you 'Gordon Harris' etc.
		-Individual names are set from within the Level Editor.
		-Conversation parser now supports token substitution.
		 If you put $PLAYER in a string, it is automatically changed
		 into the player's personal name, e.g. 'John Doe'.
		-The other supported token is $CHARNAME which expands to the
		 individual name of the current_object you are talking to.
		-Discovered a 25k overrun in the ITG function fcpy().  Fixed.
		-Added a lightning flash effect, just for the hell of it.
		-Added support in the conversation parser for flags which are
		 specific to a particular character, and not global.
		-Tidied up conversation engine source code.

11-05-1999	-Yes!  I have added engine support for objects with
		 quantities.  You can now spend money!
		-With the new financial mechanisms in place, added support
		 for automatically grouping piles of money into one large
		 heap as you pick up the coins.
		-The taxman can now be paid off using the conversation
		 scripting system, whereupon he goes away.
		-The 'sell' code in the engine sets conversation flag 65535
		 to be 1 if the transaction succeeded, or 0 if you didn't
		 have enough money.
		-Because of this, different text and VRM calls are made
		 depending on the state of the flag.  Crude, but flexible.
		-Fixed bugs in Active-Area mechanism.
		-Fixed bugs in Scripter.
		-Added support for different animation rates, so not
		 everything has to be at 35fps.

10-05-1999	-Editor now edits, loads and saves the Statistics of an
		 object.  Now you can also edit Quantity.
		-Implemented 100 gold coins.  You can't spend them yet..

05-05-1999	-Conversation system now supports flags, and thus allows
		 flow of control.
		-You can also set the colour, HTML-style.

03-05-1999	-Completely re-wrote the font code.
		-Added new assembly routine to decode the font on-the-fly
		 instead of decoding it into sprites.
		-This allows the font colour to be changed.

28-04-1999	-With the pathfinder now semi-working, I tried to find a
		 faster algorithm.  A.J. Keane suggested a novel approach
		 using routing tables between 'nodes', which are
		 pre-compiled by the map editor, like BSPing a doom level.
		 If the nodes are evenly spaced around the world, it should
		 be easy enough to use the 'droplet' algorithm to fill in
		 the route from the nearest node to the desired point.
		-The distance between nodes will be too short to cause the
		 'droplet' algorithm bug to appear.
		 
27-04-1999	-Rewrote the conversation system completely.
		 Now it uses a scripted approach, similar to HTML.
		 I toyed with the idea of using HTML, but so many extensions
		 would be needed as to make it pointless.
		 The parser is simple but tacky.   LALR(1) this is not.
		-Designing some characters using HTML and the new script.
		 Unfortunately left best character at home, 50 miles away. 

20-94-1999	-The 'only displays half the path' bug is inherent in the
		 pascal original, but only occurs with certain path
		 combinations.
		-Unfortunately it happens in a part of the code which I
		 simply don't understand enough to fix it.

15-04-1999	-A few gaps, caused by my brother wanting software to
		 generate dictionaries by assimilation over the Easter break.
		 This vast project completed successfully I return to IRE.

		-Fixed 95% of all bugs in the translated pathfinder.
		-Now finds a workable path, but only displays half of it.
		 Once this is cracked, I can use it to move things..

11-04-1999	-Translated the code from pascal to C, trying to eliminate
		 bugs.

10-04-1999	-Began to implement a dynamic pathfinding engine by
		 Josef Drexler, using a flood-fill approach in Pascal.

08-04-1999	-Added support for movement paths.
		-Added support for earth time.
		-Combined the two to make a scheduling system.
		-Sutek now sits on the loo at 2AM and gets off it at 3AM.
		 What a life!
		-Paths suck.  I want to have a dynamic path-finding system
		 so that the people just need to know where to go and find
		 their own way, instead of using movement tracks.

06-04-1999	-Added a counter to the screen redraw code so I could take
		 some performance metrics.
		-Here are the results on my K6-200.
		 Linux fans, prepare for some distress.

		 DRDOS (linear)  16bpp : 19.0 fps
		 DRDOS (banked)  16bpp : 18.9 fps
		 Linux (X11)     16bpp :  9.1 fps
		 Linux (GGI)     16bpp :  5.0 fps

		 The words 'DRDOS', 'whup', 'Linux' and 'ass' spring to mind.

05-04-1999	-Found some dumb bugs in the Linux display code.
		 The functions for V_on in the SDL drivers are supposed to
		 be of type int but are actually of type void.
		 It works, but only by chance.
		-Played around with SVGALIB and GGI, to try and make a fast
		 version of IRE for Linux.
		-SVGALIB cannot be used because it wants both user signals,
		 but that's tough cookie because it isn't having them.
		-GGI kind-of works, apart from the fact the the player
		 can't move at all because all the Arrow keys go MIA.
		-But that doesn't matter anyway because it's as slow as X.
		-My overall opinion of Linux at this stage is not flattering.

28-03-1999	-Come and get it!
		 0.041 for DOS and Linux is released.  Major site update.

27-03-1999	-Still trying to finalise before release.
		-Should be out tomorrow...

26-03-1999	-Fixed bugs found yesterday.
		-Tried to make mirrors work like in U6 with little success.
		-Fixed long-standing bug which means the player gets hit twice
		 when standing on a trigger.
		-Now having mauled the program around so much I must re-build
		 the distribution packages and make sure it still works in
		 Linux.
		-I haven't updated the documentation yet either, explaining
		 the fairly extensive API changes.

25-04-1999	-Prepared the distribution package but came across last-minute
		 bugs, mostly little problems with SeeR code.

22-03-1999	-Fixed linux port to fully working.
		-Linux bug where key was processed twice now gone.
		-Timing code now works in Linux using Signal USR2 to prod the
		 main process whenever the timing child process says it's time
		 to update the animations.
		-Linux port now converts the ending credits to ZX81 graphics
		 before displaying on primitive terminal.
		-Linux port is bloody slow compared to DOS but there is
		 nothing I can really do about that other than port it to
		 SVGALIB, and I can't because that makes linux freeze solid.
		-Ooops!  The 16bpp translucency code was broken again.. Fixed.

11-03-1999	-For the first time ever, IRE compiles and runs under Linux.
		-The linux source branch is now merged back with the DOS
		 version.
		-IRE for Linux runs about 10 times slower than the DOS
		 version, and the keyboard isn't working yet.
		-However this is my first foray into Linux and I still
		 can't believe that it actually works as well as it does!
		-Also has some problems with the animation timer.

09-03-1999	-Fixed a buffer overrun in the darkness code that caused
		 a crash when exiting the game.
		-Tried out SeeR 0.92.  Very impressive.
		 Only 1 bug left to fix, and it will be completely usable.
		-And I've FIXED IT!
		 It wasn't really a problem with SeeR, there was a mismatch
		 in the sizes of the datatypes of STATS between the game and
		 SeeR-space.
		-Now I can finally switch to SeeR instead of DLX...

08-03-1999	-Scripter now edits Vrms, Wavs, Mods.
		 Tiles are partly done, but not yet on the toolbar.	
		-Removed debug message from BUILD.
		-Fixed bugs caused by yesterday's fix.
		-Added a new flag, PERSON.
		 You can't put a PERSON into a container etc.
		 This allows the player to walk on chests without trying
		 to disappear into them.  Ultimately it will also stop
		 NPCs from walking on tabletops when they are able to move.
		-Other things I forget.  It's late.

07-03-1999	-Upgraded DJGPP core to EGCS 1.01.  Now I can optimise -O6.
		-Updated BUILD so that it checks GCC to see if it can do
		 '-fno-exceptions' before compiling anything.
		-Damn.  I Found a really stupid bug in the game.
		 You can't drop objects into chests because they will only
		 go into objects which are solid.  Fixed.
		-Tidied up the source code to minimise the number of warnings
		 that appear in the program when it is compiled.
		-I'll try to make an update 0.04a available.
		-Script editor now saves changes to 'MAIN.TXT' in the
		 resources directory instead of just to 'OUT' in the root.
		 I'll include it in the update, since the engine needs a
		 slight change to make it work properly.

03-03-1999	-IRE has three independent source trees:  Main, Seer & Linux.
		-Eventually I will kill off Seer and Linux, and merge them
		 back into the main tree.
		-Updated main source tree to counteract some problems
		 involving sundry library functions which are present in all
		 DOS compilers (but not linux).
		-Created a file called doslib.cc which emulates these in
		 linux but compiles down to nothing in DOS.
		-Updating sys_lin.cc to add new functions in sys_dos.
		 Currently these are not yet supported, i.e. dummy functions.
		-The Linux port does not recognise any of the libraries and
		 consequently does not link.  It is mostly based on the Seer
		 tree.
		-Split timer code into timer_d and timer_l for dos and linux
		 respectively.
		-Wrote Linux timer code and keyboard handler.  Not tested.

02-03-1999	-The IRE project is now one year old!
		 I've reversed the order of the log because it's getting long.
		 This way, you don't have to download the whole thing
		 just to see the latest news.

01-03-1999	-Did more research on the major bug in SeeR.
		 Discovered some interesting things.
		 If you try to do something like:
		     if(pointer && var>0)
		 It breaks.  However, because Example1.c of SeeR didn't have
		 any error checking, neither did IRE ;-)
		 Now it seems there's a problem with SeerC generating bad
		 code when this happens.
		-I also discovered that if you rewrote the above expressions
		 so that they read:
		     if((pointer != NULL) && var>0)
		 ..(which should be equivalent code), it works!
		-Applied this workaround to all of the VRM code, and added
		 error checking to the SeeR interface.
		-The thing is now working almost entirely.
		-The player doesn't come down from the drug trips properly,
		 and sometimes SeeR freezes up.
		-Found a new bug involving += and char datatypes in some
		 situations.

11-02-1999	-Rewrote the keyboard handler to use a FIFO buffer.
		-Now the game has that slick feel from 0.03 once again.
		 I haven't been able to crash the keyboard handler like
		 all the others (including Allegro's own) but my Brother
		 is really the master for doing that..

		<Linux port: Crystalspace manages Shared Libraries by
		 using dlopen() dlclose() and dlsym() in #include <dlfcn.h>
		 But this is no good: it won't work with the RARfile loader>

09-02-1999	-Fixed a problem where you could push small objects under
		 large ones (like doorways) and they would get stuck.
		 Nasty, It was in the demo too..
		-Anyway, I rewrote GetObject to fix that.
		 Shame the Large Objects code is such a bodge.

08-02-1999	-Fixed some variable overruns in the Script editor.
		-Added support for Default Contents, bringing the character
		 editor to about 97% complete.
		-Added a hideous monster to The Flat (the tax inspector)
		
04-02-1999      -Theur replies, suggesting a fix sometime after the 15th

03-02-1999      -No news from Theur.  One of three things must have happened:
		 1. It pissed him off and he isn't replying
		 2. He replied with some magical answer to everything and
		    the university deleted it when their crappy new mail
		    software blew up over the weekend.
		 3. He's working frantically to find a solution and won't
		    reply until it's done..
		-With the engine basically incapacitated by the SeeR problems
		 I decided to work on the script editor some more.
		-You could already add and remove sprites.
		-You can now edit animation sequences completely
		-You can now edit 95% of the character.  This is great, since
		 characters are the most complex part of the script.
		-You cannot yet edit default contents or the Active Area.
		-You can however edit the region for partially-solid objects.
		-Made some structural alterations to the DLX-based engine
		 from the SeeR codebase.  Added the SeeR flag workaround.

27-01-1999      -More tinkering and the loss of two more Tornados brings
		 the SEER-powered engine as far as I can, without major
		 bugfixes to SEER itself.  I'll have to ask Theur again.
		-Basically SEER breaks if:
		    *you try to access an externally-defined CHAR variable
		    *you don't use the debug version and access disk often(?)
		    *you try to call VRMs inside other VRMs (essential!)
		    *you try certain complex struct accesses in IF statements
		    *you try to initialise a multidimensional array
		    *you try to initialise a struct consisting of 4 strings
		-Sigh.

26-01-1999      -Modified a copy of IRE from the 21-01-1999 source base
		 to use the SeeR C scripting engine instead of DLX.
		 This will make it slower but more portable.
		-Having trouble, but slowly progressing.
		-SeeR doesn't know about bitfields and has other oddnesses.
		-SeeR thinks the size of OBJECT is 215 bytes, not 220.
		 since the VRMS work by directly accessing this it is a
		 recipe for calamity.
		-Aha!  Now it works, until you press a key, then dies.
		-Remarkable, since OBJECT is still 215 bytes long.
		-Changed some of the definitions in OBJECT to int.
		-OBJECT is now 220 bytes long, and the members are
		 at the right offsets.
		-Changed 'key' to int to prevent crashes.
		-Now it works properly, albiet with some things disabled,
		 notably anything involving flags or predefined tables.

24-01-1999      -Upgraded sound kernel to MIDAS 1.1.2
		 Had some initial difficulties but soon got over them.

21-01-1999      -Tornado down.

		-- post release 0.04 --

20-01-1999      -Come and get it!
		 Release 0.04

19-01-1999      -Last minute fixes for bugs causing run-away in moving
		 objects.
		-Made ready for release.
		-Found another last minute bug in loadsave.cc. Fixed.
		-Prepared source code with WORKING makefiles.

18-01-1999      -Fixed the problems with Large Objects.
		-Now you don't pick yourself up if you're standing on
		 the core portion of the bed and trying to pick up the
		 other bit.
		-You cannot use the bed to break through the walls anymore.
		-Update lags (which affected lights) do not happen anymore.
		-The only known remaining bugs are:
		 1. All roof-rendering code has been disabled.
		 2. Status-bar objects are dealt with in a kludgy manner.
		-The last seaharrier to be built flew over my house.

14-01-1999      -Updated the editor, to add support for containers:
		-You can see a list objects inside containers.
		-You can remove any objects from the list.
		-You can create a new item at the start of the list.
		-You can move things in and out of the container.
		-You cannot move objects around the list, or edit the
		 properties of an object while it is in the pocket.
		-These I consider minor issues, and I probably won't
		 address them unless someone specifically asks.

12-01-1999      -IMPORTANT.  Owing to continuing problems with the bleeding
		 chairs, the game will no longer automatically check for
		 damage at each turn.
		 It is now up to the VRM to call check_hurt(OBJECT) for an
		 object which may have been damaged.
		 This is already done in attack.vrm.
		 I'll probably make a macro to do this for you.

11-01-1999      -Rewrote text formatting code so it supports word-wrapping
		 AND | carriage-returns (before it could only support one
		 of these).

10-01-1999      -Modifed more object processing routines, increasing
		 flexibility throughout.
		-Added function move_to_top which allows you to change
		 the position of an object from within VRMs easily.
		-Fixed bugs involving dropping things, combat with bottles
		 and added more safeguards for wielded objects.
		-Fixed bug in editor where default contents would not appear
		 if using INS to copy existing objects.
		-Fixed bugs where two object cursors should appear at once.
		-Removed DROP from the generic VRM function and made it
		 specific to the player's action code.
		-Fixed most of the bugs in the lighting system involving
		 precedence based on matrix position.
		-Lighting is now done in a two-pass manner, with 
		 darksources (e.g. the anti-candle) processed first and the
		 conventional lightsources afterwards.

09-01-1999      -Produced a set of generalised linked-list routines
		 and use these in the code wherever possible.
		-Objects other that the one on top of the pile can move now.
		-Saving and loading now works properly in all known cases,
		 even when objects are nested.
		-Fixed latent tail-recursion bugs in similar cases.
		-Objects in pockets now appear in reverse order when
		 reloading, this fixes a problem with the beer bottle.
		-Completely re-wrote DESTROY_OBJECT so it now searches the
		 entire universe for the target object, even the temporary
		 buffer where the object should not be in normal conditions.
		-Default contents of objects are now created by the editor
		 automatically (for beer bottles etc).
		-Miscellaneous cleanups involving the general linked-list
		 routines, resulting in added flexibility of object
		 processing routines.
		-Fixed problem where objects in your pocket don't break
		 until they are dropped.
		-Bugs that still need fixing:

		 1. Large objects
		 2. Lighting problems (partly related to Large Objects)
		 3. Status bar objects (probably not until after 0.40)
		 4. No roof            (After 0.04?)

08-01-1999      -Completely re-wrote the VRM code for dropping objects.
		 Objects now fly when they're dropped, and stop if they
		 hit an obstruction.
		 If they're fragile, they break if thrown too far, or
		 if they hit an obstruction.  If this happens they damage
		 the obstruction.
		 So now you can attack people by throwing plates at them.
		-If the obstruction is just in front of you the player
		 no longer just smashes plates against the wall.
		-Added support for pitch variation when playing sound effects.

07-01-1999      -Tried again to remove the pops and clicks from the sound
		 system, which had mysteriously come back.
		-Found a bug caused by generalising the patch in MIDAS.
		-Now the pops and clicks have gone away again.
		-Discovered small problem with 16-bit samples and fixed it.
		-At my brother's insistence added a lot of 'debugging' keys.
		 F5 -  Aquire distant object
		 F6 -  Duplicate existing object
		 F7 -  Destroy object
		 F8 -  Appraise an object and get it's status data
		 F9 -  not used
		 F10 - screendump
		 F11 - View matrix info for a square
		 F12 - General System Status
		-Then I had to cope with my brother's insane desires wreaking
		 havoc, as he tried to F7_destroy the player etc and crashed.
		-Attempted to produce a stand-alone demo to test on my
		 brother's machine, thus exposing many bugs.
		-Now prints a sensible number of dots in init_filesystem
		-Idiotic bugs in the MIDAS patch now fixed.
		-Now converts \ to / internally in some parts of FS.CC
		-There are still some serious bugs which need fixing before
		 the next release:

		 1. Only the object on the top of a pile can move
		 2. Large objects are still very buggy and can cause mayhem.
		    I'm going to re-write the large object support.
		 3. Objects inside other objects do not get saved properly.
		 4. Lighting has some subtle bugs involving priorities when
		    lightsources and dark sources collide.
		 5. You can drop objects through walls.
		 6. Objects in your pocket don't break until dropped
		 7. The status bar objects are a kludge.
		    Make a special system to allow for these.
		 8. Roofs are not supported.

06-01-1999      -Discovered the lighting engine didn't work anymore.
		 It had always been broken since 3/11/98.
		-Fixed the lighting engine to use matrices instead.
		 Added support for anti-light, which while theoretically
		 possible was not actually available due to the 23/8/98
		 re-write of the lighting code.
		-Made it work.
		-Added several new sound effects to the demo.

02-01-1999      -Rewrote keyboard handling code.
		-Fixed remaining DJGPP 2.02 problems.
		-Dog dies at 13.

29-12-1998      -Script editor can actually be used now, to edit sprites
		 and to a lesser degree, Sequences.
		-Added plates, jugs and mugs.
		-Items heavier than 100 weight units will smash a plate
		 if they are on top of it and you get lots of nasty sharp
		 bits which hurt you.  This engine is kind of neat.
		-Bugs: when you dropped a chair on the plate, the plate
		 smashed the chair instead of vice versa.  Fixed.
		 When you stood on the broken glass a nearby chair began
		 to bleed instead of the player.  That took a lot of work to 
		 fix ;-)
		 Broken plates will smash whole ones.  Oh dear..
		-Found solution to DJGPP202 problems.
		-Have continuous keyboard problems, will need to work at this.
		-Now you can use | to cause newline characters in text 
		 descriptions of objects in main.txt

26-12-1998      -Built with DJGPP 202 instead of 201.  Bugs came out of the
		 woodwork.  DLX and Exception handling both fall over.
		 DLX workaround, to use DJGPP 2.01 to compile them instead of
		 2.02.  Not nice.  Should I use interpreted SEERC instead
		 of natively-executed DLX?  Email me with your opinion..

24-12-1998      -Fixed the editor up properly, added new error checking.
		-Did a lot of tweaking to the engine, especially
		 involving the keyboard control.
		-At my brother's insistence added a good simulation of
		 bottles to the demo.
		-You can now specifiy objects that contain objects in them
		 by default when they are created.
		-Working on the script editor again...

15-12-1998      -Had a free evening, decided to do some stuff.
		-Began work to convert the editor to use matrix format
		 instead of linked lists.
		-You can now move objects around the editor, although
		 large objects can only be selected by their corners
		 at present.

1-12-1998       -More work on Large Objects, now they can have 'active
		 areas'.  Outside this area they don't register.
		 This is useful for perspective stuff.

		-Changed all \ file references to /, since DJGPP can take
		 either one.

29-11-1998      -Split some of the obvious OS dependencies out to a source
		 file called SYS_DOS.CC
		-I'll do this in force for 0.5 (or 0.41) when I port to
		 linux.
		-Fixed some bugs with the objects larger than one square.
		-Large objects on the edge of the screen didn't appear
		 until the top-left edge was visible.  Fixed now.
		-Increased large objects buffer so it is now 3 viewports
		 wide.

26-11-98        -Implemented a solution for the problem of Objects bigger than
		 one square!
		 At present it will not work for objects that are offscreen.
		 This may become an issue later on, but it is not relevant yet.
		-The editor will need a lot of work to be adapted for the
		 new matrix-based system.
		-So the TO-DO list is now:
		 1. Loading/Saving/Restarting
		 2. Status bar objects
		 3. Fix the editor.

		 Check out: http://ire.netpedia.net
		 The new web page.  I'll point fly.to/ire to it soon.

12-11-98        -Fixed problem with containers.
		 (The chest of drawers disappeared into it's own pocket)
		-Fixed problem with party members, caused by renaming some
		 system VRM functions.
		-Added checks to prevent this going undetected again.
		-This is the functionality still missing:
		 1. Objects bigger than 1 square
		 2. Loading/Saving/Restarting
		 3. The status-bar objects don't work properly anymore,
		    this is a deep-rooted problem which will take some thought
		    and reworking.

10-11-98        -IRE now has around 90% of the functionality of the linked
		 list version, but it now replicates perfectly the behaviour
		 of objects in ultima 6.
		-There are problems with objects larger than one square
		 and load/save is disabled.
		-There is also a problem with containers which I am
		 investigating.
		-Fixed a problem with the .WAV loader that caused pops on
		 certain sounds (it was playing the WAV editor's copyright
		 message at the end of the file)

4-11-98         -IRE is now 75% functional using the new matrix algorithm.
		-I've cured some bad bugs, but there is still one major one
		 that causes runaway if the player moves down or right.
		-I will also need to rewrite much of the VRM routines, but
		 since they are so buggy this is an ideal oportunity.
		-One of the reasons I did this is to simplify the task of
		 making the VRM rewrite stable. 

3-11-98         -Began some extensive re-engineering of the game engine.
		 I've decided that the linked-list approach is more trouble
		 than it is worth, because it will slow the game down
		 exponentially the larger the world becomes.
		-Instead I am using a matrix of small linked-lists.
		 This does mean that each world will take up four times the
		 size of the map, for example, a 1024x1024 world will be 4MB.
		-It will improve the overall speed of the engine.
		-However, the world format won't need to change!

2-11-98         -Added bottles which you can smash and then wield as weapons.

28-10-98        -Added new API hooks to the conversation engine.
		-Added support for dynamic conversation threads which can be
		 switched on or off with VRM code.
		-Unfortunately I had to violate the encapsulation of the
		 conversation engine's class to make this work.
		-Fixed a bug which caused lockups, for the same reason as
		 the 21-9-98 bug, but with a different cause.
		-Now I need to rewrite the getbestplace functions to use layers
		 instead of deduction.

26-10-98        -Conversation engine is working (without the new API hooks)
		 it works great, and I'm really pleased with it.
		-Portraits can appear in one of two styles, 'verge' style,
		 where the screen is blank except for the conversation,
		 or U7 style, where the portrait is overlayed upon the game
		 screen, for example the Dark Lord's eye in the screenshot.
		-Screenshots are at http://fly.to/ire (but ignore the bomber).
		-Implemented the VRM binding with the conversation system.
		 Two test harnesses for this:
		 1.  The One Ring.  If you talk to it, Lord Sauron appears
		     and you have three conversation options, which may lead
		     to death by KILLPLYR.VRM (See screenshot)
		 2.  Sutek.  A complete transscript from U6, but I also added
		     a new phrase, 'Join my crime gang'.  And he does.
		-At last I can get rid of that nasty 'J' join-party kludge.

21-10-98        -Added portrait support to the conversation engine, revised
		 file format.  Sutek is now 2.8k instead of 68.
		-Began to work the conversation engine into the game.
		 Of course as soon as I did this I found that the API had to
		 be reworked...

20-10-98        -Very tidy now, needs the file format modified, because each
		 file has a 64k header.  Ugly stuff.
		-Added new features to the conversation editor, fixed bugs.

19-10-98        -Worked to tidy up the conversation engine so it can be worked
		 into the game more easily.

14-10-98        -Discovered a bug that prevented things from being dropped.
		 This is caused by the fix on 21-9-98..

		-Added support for Tabletops.  These are solid objects
		 which you cannot walk on, but it is possible to drop objects
		 on.

		-SetSolid and Tabletop automatically assume the SOLID flag.

		-Added 'serial number' support to the objects.
		 Each object has a unique ID which is used to determine it's
		 position (in rendering order).

		 Using this new feature, I was able to make traps only trigger
		 for things that appear above them, not below.
		 Now 'the death' doesn't eat through the table it is resting
		 on anymore.

		-In The Flat, the chairs can now be broken, and turn into
		 bits of wood, with the crate sound from System Shock.

		 Oh dear.. there seems to be a dangling pointer somewhere in
		 the VRM code.  Sometimes it causes the player to turn into
		 the pieces of broken chair instead of the chair.
		 I need to rewrite large parts of it anyway..

12-10-98        -A series of hitches and tribulations occur...

		 1 I read The Reality Dysfunction and The Neutronium Alchemist
		   by Peter F Hamilton, and I am unable to put them down for
		   about two weeks.  

		 2 I go back to university (under protest).

		 3 I try to write a WSS driver for the Allegro games library

		 4 I install a linux application, A critical filesystem crash
		   occurs corrupting the FAT on drive C and I lose much of the
		   artwork for The Flat.

		   Try saying 'Filesystem flattens FAT and flat' quickly...

		 5 I enter a state of depression over the Group Project at
		   university, since we will be using Microsoft Excess'97,
		   and that means I shall have to install Windows 95,
		   thus desecrating the temple that is my computer...

		 6 I keep recompiling Linux kernel in futile bid to make
		   sound work.  Then I discover that I've been using the
		   wrong IRQ on my WSS card for the last two years
		   (and never noticed since most WSS software autoinits)

		-I pluck up courage and return to IRE, adding support for
		 automatic word wrapping on long strings.

		-The game engine should now be 640x480 pure.
		 Previously it would truncate to 640x400, due to paranoia
		 on my part concerning the size of the framebuffer and
		 certain AVIOS optimisations that assumed it was 640x400.

		-Added #defines BUFFERSIZE and HALFBUFFERSIZE which contain
		 the size of the screen buffer in bytes.

		-Script compiler ate commas as whitespace (AVIOS needed this)
		 Now you can use the comma in your text descriptions...

24-9-98         -You can specify the 'shape' of the collision matrix for objects
		 (in vertical and horizontal axis).
		 I did this for doors, which need to be HALF solid.
		 Because doors are different shapes when horizontal and vertical,
		 I allow you to set up two collision shapes.
		-They're set up in the script file, as part of the character
		 using the keyword SETSOLID.
		-If SETSOLID is not there, the system assumes the whole thing
		 is solid for compatability (and less effort).

21-9-98         -Added a new VRM function, spill_contents.
		-This empties the things in a container into the current area.
		 I was using it for the cupboard, but there was a problem.
		 When each object is moved out of the cupboard, it then sees
		 that there is a container underneath, and moves it back in.
		 The program gets stuck in an endless loop, continually moving
		 the first object in and out of the cupboard.

19-9-98         -A few days ago I decided to put the system through it's paces
		 by converting an old DCWORLD adventure I made in 1991 to an
		 IRE game.
		-It's currently in the art phase, drawing furnishings for a
		 modern-day flat/hotel which is where much the adventure
		 takes place.

12-9-98         -Got a rudimentary conversation system working.
		-Transcribed the converstions of Sutek from ultima 6 into the
		 system to test it out.

6-9-98          -The much-delayed release 0.0.3 is uploaded.
		-Supports everything I added since 15/6/98.

4-9-98          -After many distractions got back to work on IRE.
		-Roofing tiles are 'acceptable' but not brilliant.
		-Roofing system needs to be rethought since it is too boring
		 to draw the roof, and it is really going to slow the game down
		 on large maps.  Perhaps an 8-bit tilemap instead?
		-Fixed the player's drug trip, so he eventually snaps out of
		 it and everything goes back to normal afterwards.
		-Two members of the party do not share the same trip anymore.
		 (This does happen in Ultima 6 with the ale)
		-Candles can be switched on and off like torches.
		-Wrote a small program called 'build' which automatically
		 checks dependencies of the VRM source files and compiles
		 obsolete files.  Great stuff.

23-8-98         -Lighting system fully optimised and working.
		-Optimised to high heaven but still slow on 486-33
		-ITG blit and sprite ops now work 2 pixels at a time for more
		 speed.
		-RLE sprite systems are removed to save memory (since both
		 RLE and raw sprites had to be present)
		-Fixed the mouse bug in the editor.
		-Added search/replace functionality to the tile editor
		-Added randomiser to the tile editor (for nice grass,mud)
		-Added cut and paste to tile editor.
		-Drew lots (50) of mud/grass border tiles
		-Redrew grass.
		-Redrew mud.  The graphics are looking really hot now.
		-Added 'whole world' view to the editor.
		 Really only 2/3 at present.

18-8-98         -Since I last wrote, my contract with Caldera UK expired,
		 so I lost my decent internet connnection.
		-Took a small holiday off IRE, before returning to it a week
		 later.
		-Tried to make a 0.03 release package. Found bad bugs.
		-Glowered at the slow lighting engine for a few days.
		-Rewrote the lighting engine completely from scratch using
		 different principles.  This is gonna consume an extra 2MB
		 on 15bpp, and 4MB for 16bpp, but the speed improvement
		 will be worth it. (huge lookup tables)
		-It will also remove the ability to do coloured lighting.
		-I've got some idea how to claw back the memory consumption
		 of the game generally as an aside.
		-Tried to do a full-scale implementation of the new light
		 engine.
		-Went crazy all over the place, coloured lighting (!)
		 and all kinds of impossible things happened.
		-Spent most of the day trying to find a bug in the asm code
		 cause by DX overflowing.
		-It compiles, it works but it's just BLACK....

30-7-98         -Fought with MIDAS for control of the clock interrupt.
		 Won.

29-7-98         -Fought with MIDAS for control of the clock interrupt.
		 Lost.

28-7-98         -Fixed a long-standing bug where the lights would be clipped
		 prematurely.
		-Apart from the appalling speed on 486s and the fact that the
		 bugger now requires 16MB of memory, it's nearly ready for 0.03
		-Also I must update the documentation and do more work on the
		 demo.

27-7-98         -Editor now supports the new video driver interface.
		-Doors now turn into bare archways when they are destroyed.
		-Added new solid floor tiles for the demo.
		-'Victim' variable is correctly updated by the attack VRM
		-People can't attack you when they're dead anymore.
		-Other general tidyups of the demo game.

26-7-98         -Not in a position to do anything

23-7-98         -Fixed the problem where the music level was not restored
		 correctly.  I still only have a vague idea of why it wasn't
		 working, but it works now, anyway.
		-Changed the light engine a bit so that solid objects don't
		 block light any more.
		-Added a new flag to do this independent of the Solid flag,
		 called BlockLight.
		-Made the player solid again, which prevents the catch moving
		 objects problem.
		-Restructured the video code a bit, all the video drivers
		 are referenced -directly- from a single module, vidmodes.cc
		 Will make it easier to add new modes.
		-Also prevents the RGB format being screwed when using
		 '-log full' (which switches mode later than graphical log)
		-Created a small V_mode api to do allow manipulation of video
		 modes and RGB formats.
		-Added ability to view all video modes using -showmodes
		-Fixed the general attacking bug of 21-6-98

22-7-98         -Cleaned up the source code for sound.cc and darkness.cc
		-Tried to fix a bug where the previous music level is not
		 reloaded properly from disk when the game next starts.
		-Failed miserably.  Something is going very wrong here..
		-Added a function to the VRM library to allow you to set the
		 current light level, using rgb levels (for special effects)
		-Put this to good use in the demo ;-)
		-Found that the Scheduler wasn't being called each turn like
		 it should be.  Fixed.
		-MIDASerror should now display all of the message, not just
		 the last few lines.
		-Noticed a problem where any action (Get, Drop, Look etc)
		 counted as a full turn.  More realistic, but makes it
		 impossible to catch moving objects etc.

21-7-98         -Aha! The sound effects were playing at 0Hz instead of 11025Hz
		 owing to a bug in the SOUND section of the script file.
		 This feature has now been removed.
		-Converted the mikmod .WAV loader to allow MIDAS to read .wav
		 files correctly, and get the sample rate directly.
		 This supercedes the feature in the script loader I removed.

20-7-98         -Modified the sound code, to make sure it shuts down cleanly
		 even if a GPF occurs inside the code.
		-Volume controls now work again for music, and theoretically
		 for sound as well.
		-Sound effects are still not playing correctly, but it doesn't
		 crash anymore, there is just a brief -pop- instead of the
		 sample that should be playing.

19-7-98         -Following a series of experiments on the 486 I found that the
		 dreaded RMCB problem is still present.
		-I spent a lot of time trying to track it down, but it proved
		 futile, so the ghastly re-stubbing code will still be in 0.03.
		-With the lighting it's horribly slow on a 486, which does not
		 please me either.

16-7-98         -Unloaded MIDAS in the right order.
		-Began to re-implement sound effects but had problems.
		-MIDAS supports automatic channel allocatation for effects
		-It works, but runs into trouble shutting down, if sound
		 effects were played.
		-It's getting better...

15-7-98         -I discovered that my change to make it work on my Jazz card
		 broke the package on SB16s.

		-Removed the Jazz-card 'fix' to make it work on SB16s again.
		-Rewrote the sound.cc file to use MIDAS calls instead of Mikmod.
		-Made a MIDAS-based IRE.
		-Wrote a MIDAS sound setup program.
		-The new IRE soundsystem is still buggy and only plays music so
		 far, but I should have a stable version soon.
		-I think the RMCB GPF I get on exit is caused by me unloading
		 parts of the soundsystem in the wrong order.
		 I think I'll have to use the runlevel cleanup system again. yuk.

14-7-98         -Recompiled MIDAS 0.7.0 beta 1.
		 This is a bit like compiling the Linux kernel, and it took
		 all night to learn how it was done.
		-I could only do it using an experimental alpha of VLADIVAR's
		 DPMI server which will be included in the next release of
		 Caldera DRDOS.
		-Modified rawfile.c in MIDAS to allow for file offsets, using
		 a new function called MRF_set_initialoffset().
		-Recompiled it and it worked!
		-Modified SB.ASM and WSS.ASM to use correct default values.
		-Recompiled and set version to '0.7i'
		-I did not have time to merge it into IRE

13-7-98         -Worked on the sound engine.
		-Made some interesting discoveries and observations,
		 but could not find the cause of the problem.
		-Tried SEAL again, then remembered why I stopped using it.
		 It has more sound cards, but is less stable when errors
		 occur and difficult to configure.

12-7-98         -After a weekend of research on my Cirrus Logic machine, I
		 was able to get enough info to fix the problem.
		-Wrote CL-specific video drivers.
		 If you use these on a non-CL machine, you'll see what the
		 CL people see using VESA..
		-Made linear 16bpp driver and reorganised the ITG sources
		-Now there are 6 video modes to choose:
		   Banked (15/16bpp)
		   Linear (15/16bpp)
		   Cirrus (15/16bpp)
		-Found that the sound engine causes rentrancy on slower
		 machines.
		-Added a mutex around the mixer code, which should prevent
		 it locking in S_Init(), and may prevent the RMCB problem.
		-Made the darkness (almost) work on 16bpp modes.
		-I'm still working on that.

9-7-98          -Tidied up the light code.
		-Not happy with the performance, decided to remove support
		 for variable-sized lights.
		-Made optimisations based on this
		-Optimised the dark sprite drawing assembler code
		-Got a small performance increase.

8-7-98          -Reimplemented the forked-pattern approach.
		-Rewrote the fork lookuptable from scratch
		-Bugfixed it
		-Implemented a simple map to tell if it's trying to light
		 the same square twice
		-It works!  I have a light engine that stops at walls, looks
		 nice and has a minimal number of artifacts.

		-Next immediate steps are:
		    1. Tidy up the light code
		    2. Make it more general
		       (different levels, colours, wavering lights etc)
		    3. Optimise the lighting code
		-And for beta 0.03:
		    4. Try and fix the CL problem (tricky)
		    5. Sort out the little annoyances in the interface

7-7-98          -Darkness now splits lightmap into tiles.
		-Tiles are projected if there is nothing in the way.
		-Now I need to find a suitable way to place the tiles on
		 the -first- solid walls only, so you can actually see the
		 walls.
		-Implemented spiral-scanning lightsource projection
		 but it won't work!  It cuts out too soon, an inherent problem
		 with the use of a spiral.
		-Implemented a forked-pattern approach, but it tends to
		 illuminate certain areas twice, which is a Bad Thing.
		-Implemented a rotary pattern, which looks like the way to go.
		-Buggy yet, but I think I'm on the way there now...

6-7-98          -Internal map drawing and projection is now offset from the
		 centre of the screen, instead of the edge.
		-Map drawing is controlled by the #define STARTX
		-How to stop the light going through walls?
		 This is holding me up.....

5-7-98          -Reproduced a problem with bankswitching in the VESA code,
		 which affects certain Cirrus Logic cards.
		-Trying to find a more reliable way to switch banks...

2-7-98          -Split the lighting code into darkness.cc for clarity.
		-Optimised the lighting code, the game is much more
		 responsive.
		-It could be a faster through, so I'll keep at it.
		-Made a candle.
		-Added VRM code so the player becomes a lightsource if the
		 candle is held.
		-Now switches back to text mode when reporting an error in
		 the script file.

1-7-98          -Tried to optimise the light system.
		-Thought of a much better way to do it, and restored to
		 previous backup, thus wasting a day's work.

30-6-98         -Implemented full subtractive darkening support.
		-Wrote a function to fill memory blocks 4 bytes at a time,
		 an optimised memset for the darkmap, and also for the
		 solid and trigger maps.
		-Put a screenshot of the new circular lightmap engine on the
		 web page.

29-6-98         -Got Shawn Hargreaves' Realtime Lighting demo.
		-Gonna try and use that for my lighting systems, which will
		 look so wonderful if it works correctly...

		-A close inspection of RTL shows that the light does not
		 diminish with distance, so it's not too suitable for the job.
		-Split all colour-format dependencies into a file called
		 rgb_conv.cc.  The function To15bit() is replaced with
		 ConvertRGB(). Last parameter now 6 or 8, instead of 1 or 3.
		-Support for 16bpp with native 5-6-5 colour levels is working.
		-Made a test lighting system using a lightmap image.
		-Looks excellent, but is always circular, so light goes
		 through walls.  At present it adds light instead of
		 subtracting darkness, so 'foggy' clipping effects happen.

28-6-98         -Implemented 16bpp driver, tidied up video sources.
		-This driver is just expanded 5-5-5 at the moment, so it
		 looks just like the 15bpp driver, but is useful if 15bpp
		 is not available.  Until Native 5-6-5 is implemented it will
		 also be slower.

27-6-98         -Tried to reproduce a problem found by Novan Dragon, where the
		 display would flicker.
		-I suspect it is a problem with bank switching on a Cirrus
		 Logic card, so I set up by old 486 with a CL5429.
		-It didn't like 15 bpp mode, and switched off the monitor.

24-6-98         -Tried out a few more lighting algorithms.
		 need a solid approach before I can go further.

23-6-98         -Worked on the light map, implementing the system described
		 above.
		-Added 'light' parameter to script.cc, and added a new char
		 to core.hpp.
		-Had difficulty with the circular light projection.
		 Used additive Frith circle algorithm to project a gradient
		 of light, but it malfunctioned, producing spectacular
		 effects, if not what I wanted.

22-6-98         -Found bugs in the translucency code, fixed them.
		-Changed the way the translucency works, before it added the
		 two light levels straight away, a 50/50 split.
		-Now it splits the light 25/75, which means that the
		 translucent objects are paler than the floor, giving a nice
		 effect.
		-I begin work on the lighting code
		-Wrote a new ITG function called I32dark()
		 It darkens a 32x32 block to any one of 32 darkness levels.

		-I can now make candles that do not shine
		 candles that do not give light
		 but take it
		 and bring forth darkness upon the face of the world

		-Hmm, let's put that rationally.
		 The new lighting system works by subtracting light, not by
		 adding it.
		-There is a darkmap (just the size of the visible area)
		 which contains the amount of darkness in the visible squares.
		-In daytime, the darkmap is all 0, so no light is subtracted.
		-At dusk, the darkmap is set to 15, that is halflight.
		-At night, the darkmap is set to 24 or so, for darkness.
		 (It should be 31, but that would be pitch dark. Not good.)
		-Where a candle or torch is placed, it will subtract from
		 the darkmap, making it's surrounding squares lighter.

21-6-98         -Wrote a generic attack VRM that allows you to use two weapons
		 instead of just one (one for each hand), and also works for
		 monsters.                                                           -Unfortunately there is a bug which means that if you
		-Now if you hit innocent victims, they hit back!
		-Unfortunately this means that torches, doors and the like
		 will detach themselves and chase you around.

19-6-98         -Found a bug which meant that prevented using multiple rar files.
		-Uploaded a 144k patch with the above changes.

18-6-98         -You can now go into the left hand side of the status bar.
		-You can now un-wield weapons.
		-It doesn't sound much, but it took most of the night..

17-6-98         -Tired.  Just modified the demo so that weapons vanish
		 after they've been wielded.
		 Done by using the invisible flag, on the assumption that you
		 will never pick up an invisible object.
		 Modified wield.cpp and  objstats.cpp in the demo to make this
		 happen.

16-6-98         -Whoops, it looks like the kernel version was actually 0.027
		 not 0.028.  I was a bit confused because the documentation
		 version is 0.2.8
		-Added a minor change to the OBJECT structure in core.hpp,
		 which can be used for attacking code.
		-Implemented the graphical bootlogger from Avios.
		 It has 3 modes:

		     ire -log full                 - Default, text mode
		     ire -log partial <image.pcx>  - Display text and image
		     ire -log none <image.pcx>     - Just the image, no text
		 
		-Added new -logxy parameter to set size of the boot console.

		     ire -logxy <x> <y> <lines>

		-They are designed to be used together, and put in the IRE
		 init files, ('test.' 'game.ini' '!autorun.ini')
		 which so far I have forgotten to document.


15-6-98         -Come and get it!
		-Released latest version of the source and binaries.
		 Kernel version is 0.028, which is an 'almost' 0.3 release.
		-Includes all the changes since 25/5/98

14-6-98         -The dreaded RMTB problem seems to have gone away.
		 I suspect it was fixed on 9-5-98 when I re-wrote the sound
		 init code to calculate the DMA size by the latency value.
		-Changed stop_module() to zero the music volume instead of
		 killing the mixing engine and taking the sound effects too.
		-Added start_module() to set the volume back to previous
		 level.
		-Added access to the dos function delay.
		-Modified all-dead to play game-over music from on old C64
		 game.  Methinks Ultima|Ascencion may be similar ;-)

11-6-98         -Added system VRM All_Dead which is called when the whole
		 party has been killed.  all_dead must be present!
		-Added safety code to sync_map
		-Fixed a bug that meant the player could only look through
		 windows once.
		-Fixed a bug which caused the player to stay sitting down
		 when they got out of a chair in the same direction that
		 they were facing when sat down.
		-Fixed bugs in the VRM fixup code which appeared when the VRM
		 could not be found in the list.
		-Added warnings that appear in the bootlog when the VRM is
		 missing.
		-Added a new function restart(); to the VRM library.
		 It reloads the level and restarts.
		-Added rnd(x), which returns a random number up to x-1
		-Fixed a bug in the stepped animation code which prevented
		 animation from stepping if it was shared between two objects.
		-Improved the makevrm batch file to allow compilation in
		 subdirectories, and split the vrm sources.
		-Looked out the window and saw 5 small red aircraft practicing
		 for Middle Wallop (on the 12th/13th)

10-6-98         -Brain lapse meant that the last 3 dates were wrong..
		-Added various improvements to the demo's interface.
		-Added new 'ifHurt' directive, that calls a VRM when an
		 object gets damaged.
		-Now the characters in the demo make sounds when they're
		 in combat.
		-Prevented ifHurt from responding if the blow killed it.
		 (stops the hurt and killed sounds playing together)
		-Rewrote the translucency code to do proper algorithm
		 instead of ORing.  It's so beautiful now..

9-6-98          -Fixed overlay problems, added support for special overlays
		 that are drawn above all other objects.
		-If containers are smashed, the contents all spill out.
		-Music and sounds now have their own sections in the script
		 instead of being numbered.
		-Changed play_sound and play_song to reflect this change.
		-Many modifications to the demo game, including new sounds
		 and improvements of the enemy dying.
		-Added printxy function to the system, writes direct to
		 screen not via the console.
		-Wrote VRM support for a player stats screen.
		-Redrew the Equipment window in the demo.
		-Documented the recent system changes until 1am..

8-6-98          -Implemented OVERLAYS.  Still needs some work though.
		-Added new function set_object_sequence() which is used to
		 transform an object into something else temporarily.
		-It's used to make the player sit down when he's on a chair.

7-6-98          -Design work, drew some stuff for the Church.
		-New algorithm for OVERLAY support, which will be used in Chairs.

3-6-98          -Fixed bugs where translucency flags got trashed when the
		 player died.

2-6-98          -Once more, I'll be a bit busy, so worklog entries will be
		 erratic until the end of the week.

1-6-98          -Fixed more bugs when the player dies.
		-Now the game restarts properly when the whole party is dead.
		-You can now switch the torches on or off.
		-Upgraded system to 64MB.
		 Now I have tons of memory that will never get used.
		 It did fix certain EMM386 problems though.

28-5-98         -Finished the Organ.
		-Extended HP to 32 bits instead of 16
		-Added new flag, WIELD, for the weapons VRMs.
		-Added new pointer to OBJECT, for weapon wielding.
		-Wrote VRM code to allow the player to wield weapons.
		-Added DAMAGE field to stats for weapon damage.
		-In VRM code, player can now attack with different weapons
		 that do different damage points, or with fists.
		-Created Death-on-a-stick, a nasty weapon that kills anything.
		-Modified Trigger system, added VICTIM variable, the player
		 who trod on the Trigger, so that current_object is the trigger.
		-Fixed some bugs when the whole party is dead.

27-5-98         -Didn't have much time, but started drawing a pipe organ for
		 the Church.

26-5-98         -Fixed an annoying bug where the player could pick up things
		 which were too heavy.  Caused by an obsolete .hpp file.
		-Re-drew the blood that appears when the player/follower dies.
		-Need to split fixed into pushable and gettable object flags.
		-Need textures to make a passable church for the demo >;-)

25-5-98         -Rewrote the rooftops code to be automatic, depending on the
		 current player's position.
		-Open Roof objects are still available for manual override.
		 You can put them next to windows and windowed doors.
		-Added support for death and destruction.
		-The player can now kill the follower, smash torches etc.

22-5-98         -Come and get it!
		-Released demo version 0.02, at http://fly.to/ire
		-Tested it with NT 3.51 and was amazed at how well it worked
		-Some keyboard bugs, but that's NT for you.

21-5-98         -Animation happens in the background (most of the time)
		-Animation is locked to the timer
		-Saving and loading are now fully supported
		-Party support
		-Container support
		-The game runner can now be used to edit containers.
		 (Use ire -mapedit)
		-Editor has more features and bugfixes
		-Automatic sprite ordering in the editor
		 (No move backwards/forwards crap)

18-5-98         -HA!!  You can reload your position in the game!
		-You can't SAVE though, so it just returns to the initial
		 state when you first ran the game.

17-5-98         -I was not able to do anything owing to time constraints.
		-This week will be a bit erratic, so updates will be fewer,
		 but hopefully larger when they do arrive.
		-I'll try to put out new documentation, the latest files
		 and a converter to the new map format during the week.

14-5-98         -Tore the whole engine apart looking for a ****ing big bug
		 which prevented the player from moving southwards.
		-In fact, the player's sprite was >32 pixels high, and the
		 game decided he was two squares tall.  Being solid, he
		 actually tripped up on the end of his own shoes.  Really.
		-This reveals a bug for moving objects more than one square
		 in size.  This bug has not yet been fixed, I just made the
		 player shorter.
		-Revised the z1 layer of the map file structure, ie the
		 .mz1 file format.  (This contains the Sprites section)
		-I'll write a converter between the old and new map format.
		-I've added plenty of reserved space so this should not
		 be necessary again.
		-Made more progress on containers within containers.
		-The game will probably use the editor's new level format
		 for savegames.  Try my U6 utilities out and you will see
		 the significance of this statement.  In a nutshell, the
		 editor will not allow you to put things inside containers,
		 but you use the game to do this, and your savegame will
		 be the finished level.
                 (This is not true anymore!)

13-5-98         -Added experimental support for translucency.
		 Quality of the effect is compromised in favour of speed.
		 A translucent flag is added to the system and script.cc
		-Experimental routines to store the state of containers
		 (for savegames and level editor) are being designed.
		-Added objectstore, an array similar to storage[], but for
		 objects instead of integers.
		-Updated object.vrm to allow the user to enter bags and
		 other containers, like U6.

12-5-98         -Drew a chest, and added it to the demo game.
		-Added support for containers in the game runner.
		-Added new flag to mark objects as containers
		 and modified script.cc to support the new flag.
		-Modified move_from_pocket to allow you to drop things
		 into bags and chests, using the container flag.
		-You can't drop things onto walls anymore.
		-You can't push things through walls anymore.

11-5-98         -Come and get it!
		-The public demo release can be found at:  http://fly.to/ire

10-5-98         -Setup works, other bugs fixed.
		-Updated documentation.
		-Packaged for release.

9-5-98          -Found problems in the sound setup on cards with an IRQ other
		 than 5, on the Soundblaster driver.  Fixed.
		-Fixed problems with drop.
		-You can now drop any object in your backpack, not just the
		 first one.
		-You can't walk off the map anymore.

7-5-98          -Fixed bugs in VFS_Open that prevented the .RAR loader from
		 working correctly.
		-Fixed bugs in soundsystem .wav loader that prevented it from
		 being able to load WAVs from a .RAR file.
		-Drew my own guy to replace the Avatar.  Looks like the guys
		 in Colin Day's Insurrection.
		-Changed compile("res\\main.txt") to compile("main.txt")
		-redraw() now prints text on the console as well
		-Console now prints half-completed strings instead of the
		 finished strings only, used for prompting in the demo.
		-Added short object descriptions for GET, LOOK, USE prompts.
		-Recompiled editor for new data structures.
		-Added a banner to appear on exit, for copyright purposes.
		 (I.e. to credit the authors of DJGPP,DLX,Allegro etc)

6-5-98          -Finished the documentation of the engine at present.
		-Removed the function get_near_direction from the engine
		-Reimplemented it in VRM code.
		-Added get_tile to the VRM library
		-Game exits if a non-existent VRM is called, instead of just
		 putting a warning in the bootlog.txt file.

5-5-98          -No work to the engine at all today.
		-Documentation is 4/5 complete, though.
		-Gearing up to make a very very early pre-alpha release by
		 next week, if all goes well.
		-Had some killer ideas for the plot in the demo game, which
		 of course will not be ready for the prealpha release.

4-5-98          -Modified the script parsing routines to compile each section
		 in a specific order, regardless of the position of the section
		 in the actual file.
		-Removed some bugs from the setup program, and added features.
		-The setup program source code is abysmal, since it predates
		 the IRE's structural rewrite.  It uses antiquanted library
		 calls, so I have put the source for these old libraries in
		 the setup source directory.
		-One day I'll rewrite setup..

3-5-98          -Slight gap, owing to May Day, where we celebrate the rise
		 of the USSR, or was it something else..?
		-I spend the entire weekend and mayday documenting the system
		-3/4 of the system is documented, I think, but the last bit
		 is a bastard.

30-4-98         -Simplified keyboard logic
		-Added get_input function to get current keypress in a VRM
		-Added redraw function to update the display in a VRM
		-You can now scroll around the objects in your backpack
		-Added more items for the demo game
		-Fixed bug that meant all objects had a behaviour call even
		 if there was no behaviour defined.  Should speed up game.

29-4-98         -Added TAG support in the editor.
		-Added sound volume support in sound, music
		-If you press F4, a dialog box pops up allowing you to change
		 the volume levels.
		-To allow customisation, the volume bar is made of three images:
		 (The volume bar itself;Slider in focus;Slider out of focus)
		-Added keys using the VRM system, with tags.
		-Added a query function to check the name of an object
		-Fixed cosmetic bugs in compiler
		-Added hotkeys in the editor to change editing mode

28-4-98         -Crossed logic boards from two disk drives and fixed the
		 problem with my FDD.
		-Implemented Get and Drop in player.vrm
		-Added more functions to the VRM library
		-Modified the main loop for party support
		-Party support is now more-or less working again.
		-Added party flag to objects so members are not solid, and
		 you can walk over them, like in U6.
		-Join works, but there are bugs involving the above flag.
		-Added Move, so you can push the party members out of the way
		-Added Fixed flag, to prevent windows and doors being moved
		 around, picked up or added to your party.
		-Extended flags data structure to 32 bits instead of 16

27-4-98         -Dismantled my machine to try and cure FDD problems.

26-4-98         -Changed the keyboard input routines.
		-Created keys.hpp with mnemonics for all key scancodes.
		-Copied keys.hpp into the VRM header file.
		-Added lots of useful internal functions to the VRM security
		 gateway so they can be called in VRM code.
		-Re-implementing Look, Use, Get, Drop in player.vrm
		-Look works (except for tiles, fix that later)
		-Use works in all cases.

23-4-98         -Rewrote the main loop to be much simpler, by making more
		 use of VRMs.
		-Each character now has a behaviour VRM which controls it's
		 actions or does nothing if no behaviour is assigned.
		 E.G. The player's behaviour uses the key input to move them
		-The main loop now just calls these VRMs, calls the Status VRM
		 and administrates behaviour.
		-Took out the new keyboard routines, now using BIOSKEY
		 instead.
		-Added new unused variables into the character data, for the
		 user to play with :-)
		-Added a TAG to the character data for event triggers.
		-In a few days, the engine will become self-sustaining, when
		 ANYTHING can be done using VRMs.  Of course, I'll add new
		 features to make it _easier_ to do anything.  :-)
		-Entered into single combat with a vicious bug that GPFs in
		 the RMCB (worst it gets) if the RMTB is too small.
		 If I double the size of the RMTB it works fine, but is it
		 fixing the problem or hiding it?

22-4-98         -Changed 'top-layer-objects' to 'Rooftops' in the editor.
		-Made rooftops not appear by default, in the editor.
		-Briefly disabled protection against player picking himself up
		 and watched the avatar disappear up his own arse.
		 The engine took it better than I had expected.
		-Implemented a simple weight system for GET to prevent the
		 user picking up objects that are too heavy.
		-Started to implement party-mode, using a chase system to
		 get the other members to follow you.
		-You can currently get anything to join you, knives, doors
		 windows etc..
		-I'm going to redesign the main loop again..

21-4-98         -Added new 'drop_under' flag to the engine and the script,
		 it makes sure that any object dropped on this square appears
		 underneath the object with the flag set.
		-Modified drop routine to take account of the new flag.
		-Rewrote the entire keyboard system and main game loop.
		-Now supports multiple keypresses.
		-Fixed script parser that it printed the correct line if it
		 came across a command it did not understand.
		-Rewrote the direction-get routine used by Look,Use,Get+Drop
		 so that it can be used by VRM routines.
		-Also wrote a new 'far' direction get routine, for extended
		 drop (throw), spellcasting etc.
		-Made a to-do list with 12 points on it, ranging from easy
		 (change a message in editor) to hard things (do conversation)

20-4-98         -Renamed 'top-layer' to Roof, since it will be used for the
		 roofs of buildings (Roof is more self-explanatory)
		-Added support for switching roof objects on or off in the
		 map rendering
		-Added new variable for VRMs to use to control the roof
		-Implemented trigger objects that call a VRM if stood on
		-Modified the editor to allow recovery from objects in a
		 saved file that do not exist in the character section.
		-Removed surplus VRM code from the editor, added a variable
		 to skip some processes in the editor.
		-Added support for objects that are only visible in editor.

19-4-98         -Sound effects are now officially supported!
		-The bug was caused by the presence of two different sizes
		 of data structure at different points in the program.
		-The name collisions between mikmod and the other modules
		 has been resolved.

18-4-98         -I took a week off for easter, hence the gap.
		 Although I have spent most of easter in Ultima 7, I did do
		 some work.
		-The status area is now controlled by a VRM module called
		 status, which displays the object browser and shows the
		 objects in your pockets as they are picked up.
		-The player can drop objects.
		-Music is supported via MiGmod, a bizarre hybrid of mikmod
		 2.09, 2.10, and 3.01 with my own API extensions thrown in.
		-Sound effects are being added, but there is a horrible bug
		 causing the .wav data to assume a length of 2^24.

8-4-98          -Managed to burn a bootable DRDOS install CD using linux 8-)
		-Added new source file, objects.cc which contains the
		 linked list functions for performing object searches and
		 list manipulation.
		-Added function move_to_pocket() which removes an object from
		 the master list and puts it into the pocket of a container.
		-Now the player can pick up objects!
		-The player is able to rip doors off their hinges :(
		-The player can't drop objects yet, but I'm working on it.
		-Drew screen for the player's body and worn objects, and the
		 object browser.

7-4-98          -I recompiled my linux kernel in a 5-hour ordeal by fire.
		 My CD recorder should now be able to CD record without win95.
		 After this I had little time (or sanity) for anything else.
		-Moved the direction-getting code for the LOOK and USE into
		 a function of its own.
		-Began to implement pockets in the characters.
		 Basically, everything has the ability to be a container,
		 so the same code is used for get and drop as for things like
		 bags and chests.

6-4-98          -Modified the scripting to take default actions in VRM into
		 account.
		-Lots of work to support VRMs.. updating vrm.hpp and
		 script.hpp, adding callable functions to the VRM unit etc.
		-Got the doors to work using VRMs!!!
		 I have done it!  VRMS work!  This is a MAJOR break for the
		 engine, as VRM underlies the whole system.  Yeah!
		-Got a first shot of the game engine doing its stuff.
		-Go and see it, now!

5-4-98          -Rewrote the looking code to support objects as well.
		-Now you can look at large objects and get a description.
		-Added animation code to the system.  Objects now animate,
		 but too quickly.
		-Updated bitmap_a.asm to use BT and SALC instead of bitmasks

2-4-98          -Rewrote object collision detection to use a collision matrix
		 which is stored as a bitmap the size of the whole map.
		 Wrote routines to do the bit-level modification
		-split the bitmap routines into two files, bitmap_c.c
		 bitmap_a.asm, which is assembled with NASM.
		 The two routines are independent, and a conditional define
		 in bitmap.h determines if the C or 386 version is used.
		-Now it supports objects larger than 1x1 grid square.

1-4-98          -I don't go in for April Fools, so there is nothing daft here
		-Collision detection is now supported in objects, but this
		 is a bit of a kludge, and it doesn't work for objects
		 larger than one square yet.
		-In the long run this kludge will not work, so I'm going to
		 use a new algorithm tonight which will be quicker.

31-3-98         -Hopefully the io destructor problem should not happen again.
		-Fixed mode bugs in the console, that prevented display
		 outside the game window.
		-Added support for changing console size and position
		-Added support for tile descriptions in the script.
		-Fixed major bugs in the script tidying code.
		-Took out the toupper() in the script preprocessor and made
		 sure all the system was case-insensitive.
		-You can now look at tiles and it describes them!

30-3-98         In the game runner...

		-Fixed bugs in graphical console code that prevented display
		-Began to add support for VRMs into the game runner...
		 * Added code compiler in script.cc
		 * Added Init_VRM to init.cc
		-Screwed up and the io destructors kept calling themselves
		 over and over again.. reboot time.
		-Fixed the current problem, but the underlying cause still
		 needs attention.
		-Restructuring the control elements of the main loop, as
		 they were only experimental anyway.

29-3-98         -Repositioned some controls in the editor
		-Game runner loads in a status panel
		-Game runner is now player-oriented, instead of a map viewer
		 Now it hunts for a character called 'player' and makes that
		 the focus of the game.
		-Added collision detection into the game engine (for tiles)
		 so the game now is a game..

26-3-98         -Fixed bug in the editor that prevented you choosing the video
		 mode you want.  (I.e. you needed LFB)
		-Added support for optional user .ini files, like !avios.ini
		-Removed old code for loading tiles.
		-Tidied up the INIT module which is now a lot shorter.
		-Game runner now loads in the map and allows you to pan it.
		-Began documenting the scriptfile.
		-Added checks to make sure that there are more than 0 tiles.
		-Added checks in the game runner to see if a map was loaded.

25-3-98         -Added routines to linklist.cc for moving layer objects back
		 and forward within the list.
		-Added buttons to change the priority of layer objects in the
		 list.
		-Added counter to show the position of the current layer
		 object in the list.
		-Added new QuickName directive to the sequences compiler in
		 the script parser, to speed up adding single-frame objects.
		-Completely rearranged the tile-drawing mechanisms so that
		 tiles can be solid, in preparation for making the game runner
		 actually able to play the game.

24-3-98         -In a major change, I added support for top-layer objects,
		 which float above the real objects for decoration, but do not
		 interact with any other objects at all.  Can be used for
		 adding roofs.
		-Save and load for top-layer objects is supported as well.

23-3-98         -Added new routines to linklist.cc for moving objects back and
		 forward within the list.
		-Added buttons to change the priority of an object in the list.
		-Added counter to show the position of the current object in
		 the list.
		-Fixed bug in removal of existing menu screens.
		-Made nice brickwork and doors tiles to test the system.
		 I am really happy with the editor now.

22-3-98         -Split init.cc into init.cc and linklist.cc.
		-Init.cc is mostly tidied now, linklist.cc contains the alloc
		 and free routines for the linked-list data structures.
		-Added support in the editor for traversing the object list.

21-3-98         -Took the code home to make up for tues and wed.
		-Added support for descriptions in the script compiler.
		-Began to comment the RLE compressor in init.cc

19-3-98         -Crawled into work, with a screenshot of the editor at the
		 moment.

		-Now you can change the direction that the object is facing
		 using some direction buttons.
		-The object saving code was storing too much information and
		 the reload function was ignoring the data in the script file
		 as a result.  Fixed.
		-Fixed bugs in 6->5 bit colourmap converter, that cause the
		 character's face to appear bright purple.

16-3-98         -Did a lot of work to the editor.  Then I came down with
		 a short but violent flu.  Now I can't remember what I
		 did.  I made some working code to save the objects on
		 the map.
		 
15-3-98         -Fixed stability problems in object display code
		-Added new GUI call for clipped, hollow box.

12-3-98         -Fixed stack bug that caused crashes on exit.
		-You can now pan around the map and edit it fully.
		-Save and Load of the map is now fully functional.
		-You can now add objects but that is not very stable yet.

11-3-98         -Added intelligent toggle buttons that toggle your variable.
		-Editor now has the ability to load, save and edit the map
		 at tile level.
		-Unfortunately it crashes on exit and I haven't worked out
		 why yet.  The stack trace points to a line that has no code.
		-Editor doesn't go direct to the graphics engine anymore,
		 except for when the map tiles are being drawn.

10-3-98         -Restructuring GUI used by the editor.
		-Rewriting the editor in a more structured format.

9-3-98          -Compiler now compiles CHARACTERS properly and is tidy
		-Loaders optimised and tidied further
		-Only the INIT module still needs attention.
		 In addition the editor must be re-engineered to make
		 use of the new data structures.

5-3-98          -Compiler now compiles SPRITES and SEQUENCES properly
		-Optimised Sprites/Sequences data structures
		-Fixed some string parsing routines

4-3-98          -Tidying init functions
		-Adding on-the-fly compilation instead of ISC
		-Merging data structures to limit redundancy owing to above
		-Isolated magic cookies

3-3-98          Source code was yucky.  I intend to make this a more open
		project than AViOS, so I am cleaning up the source code.

		Writing game runner from scratch, using modules from AVIOS
		and the editor.  Insulating the code in the modules so that
		the game can be built up piece by piece.

		-OSCLI functions isolated and tidied
		-FS functions isolated and tidied
		-Loaders isolated and tidied
		-Console and logger isolated and tidied

2-3-98          Got editor in a reasonable state.
		Fixed bug in RLE encoding routines.



Things that have been done but not documented fully:
----------------------------------------------------

	 *  Sub-class of object for decoratives (e.g. trees) to reduce the
	    load on the game for detailed maps.  Add a flag (DECOR).
	    If DECOR is set, there is only ONE instance of this object and
	    it is shared over the map.  This will require that the consistency
	    checks be disabled for all DECOR objects, and that DECOR objects
	    are only removed from the list when destroyed, NOT deallocated!.

	 *  Symlinks for NPCs: a new flag for NPCs.  If set, always refer
	    to the owner of the NPC, not the NPC itself, for conversation
	    and other stuff.  This will allow radios and other such things
	    where you talk to an NPC via a proxy: we will need to record the
	    outcome of the conversation for the actual NPC, NOT the telephone.
	    This will also allow one NPC to be in two different places at once,
	    and also helps A LOT if you have a large, stationary NPC such as
	    an airliner in a hangar, which would have to be assembled from
	    several different objects.







Hello!

The IRE history and work log is now in descending order!
The most recent updates are at the top of the file.

If you want to read the entire log, it's best to start from this end and
work your way upwards, because it will make more sense that way.

