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

To Do
-----

	SAVEGAME: STORE THE STATE OF THE STATIC LIGHTS IN THE MISC.STATE FILE

	Port Seer-coded functions to PE script

	You can now abort Add Character, do this also for sprites,
	sequences etc in Resedit

	 * 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.


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


Future
------
	 *  OPTIMISE THE SCRIPT COMPILER.  Keywords should be indexed
	    alphabetically to speed up searches.

	 *  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.

	 *  Path finding between distinctly separate areas of the map.
	    Use the idea of waypoints expounded by Ian and Alan, placed by
	    the user into a 4th layer of the map.
	    This should be done using the U6 'points' model and A-star,
	    with some method of specifying that doors should be opened or
	    stairways ascended/descended.

	 *  SCRIPT: People who are attacking you when you are invisible should 
	    break off combat if you are wearing slippers.
	 *  Start work on a new 'virtual life' behaviour engine where
	    behaviour is based on individual urges to do things rather
	    than the "God's Plan" methodology used at the moment.
	 *  'contraband' Objects that trigger a signal if a person with
	    high karma sees them (drugs, corpses, blood-soaked beds etc)
	    This fits naturally into the 'urge' model, see previous entry
	 *  Allow user to enter a whole string, not just numbers
	 *  Allow user to go out of a bag (object BACK_ICON in main.txt)
	    (but how?)
	 *  Mouse support
	 *  PEscript - rework the code generator and VM to use Unions to ensure
	    the right amount of space is allocated instead of hoping.
	    This should cure a lot of the 64-bit impurity..


Work Log
--------

Date (DD/MM/YYYY)

	TO DO...........

		Better sound for breaking gravestones

		Metaxas has a few holes (body section too big, missing 1
		pixel row of his tail)

		Fix Metaxas' test speech.

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.

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.

