IRE - IT-HE Role-playing-game Engine 0.92 ========================================= Latest Version -------------- Release 0.93 - 08/01/2006 Reign of the Just Demo 2 - 9/8/2004 Priority list for 0.94 ---------------------- * Fix the savegame bug for good and all * Music isn't always working (why?) * Find out why [is_onscreen] doesn't always work & fix it * Remove deprecated allegro function calls (4.2.0)? * Try to get the game to yield more CPU when idling * Custom conversation entrypoints.. e.g. if 'guardpage' is set in the player's user data, conversations should look for this page in preference to 'startname', 'start' etc. There should be several such labels. To Do ----- * Allow multiple lightmasks, or at least user-specified lightmask file * PAthfinder doesn't handle large objects very well (dragon turning) * Using a global array for polygons in FX is bad (null pointers) * If a large object moves under an arch, the movement engine detects an obstruction that isn't the object (it's the arch!) and blocks it. This may be the cause of the 'bocked' error message * Editor should have a universal Allegro dialog with all funcs instead of the pages used at the moment * Make the world-tool 'Mover' work again * Make object structure use dynamic strings Documentation ------------- There isn't much. Finish the PEscript and Converse docs. *Document that stats.oldhp must also be changed if .hp increases. *Document system-critical VRMs (playervrm, trackstop etc) in a new chapter about writing games *New SPEECH functions are_there and choose_party_member *New script stuff for scrolling tiles, animation splicing and random animation *Document that global object pointers are only preserved in save/load if they point to objects in the current world. Objects that don't exist in the map (e.g. the cursor) don't get saved. Maybe ----- * 'virtual life' behaviour engine for NPCs where behaviour is based on individual urges to do things rather than the "God's Plan" methodology used at the moment. * strcpy and associated capabilities such as making your own strings. I'll need a way to work out how long a piece of string is (to prevent bounds overrun). I think I should re-write the string handling system so that strings are ALWAYS copies of strings and never pointers this simplifies everything (after the initial effort) and doesn't have the problem where a pointer to the name of a destroyed object isn't picked up by the G.C. * Allow user to enter a whole string, not just numbers (needs previous enhancement) * New resource editor? Work Log -------- Date (DD/MM/YYYY) 28-05-06 -You can now use the shift key in the map editor to move around 8 tiles at a time instead of just 1. This is handy for bulk replication. 21-04-06 -I believe the main corruption problem is now solved. In the process I also tried to remove all the Allegro 4.2 deprecated functions, which caused a different problem with savegames. This too is now fixed, but I'm going to test it very, very thoroughly before making another release. 20-04-06 -Urgh, other projects have got in the way of IRE/RoTJ. However I have now confirmed that the god-damn savegame corruption bug is still happening. I have devised a strategy to cope with it but this will break savegame compatability. Sigh. 26-03-06 -If running in 15/16bpp mode, [image=""] will look in 'pics16' instead of 'pics' by preference. It will fallback to 'pics' if 'pics16' does not exist. 08-01-06 -IRE 0.93 released to sourceforge. Homepage not yet updated as waiting for mirrors to sync. 07-01-06 -Fixed last-minute bug, not easy to describe. If you have a large object such as a bed stretching over two squares with the player standing on one, and a hidden object (such as the resurrection target in the The Flat) on the other square, attempting to use the bed (or pick up the bed.. whatever) would result in you trying to use (or get) the player instead of the bed. 28-12-05 -Fixed bug where jaguars and other large characters could not cross large bridges over water. I think the engine is now clear for a new release. 04-12-05 -FMOD 3.71 was not playing music. I still say it should have worked.. did a workaround anyway. 06-11-05 -Reverted to FMOD 3.71. 4.02 seems better than 4.0, but it still doesn't seem quite right. 02-11-05 -Fixed bug where jaguars could walk through trees. -You can now use '-window' or '-windowed' to make the game start in a window, rather than the unintuitive '-vx'. -There should also be an improvement in performance when the game is idling.. it should now yield CPU to the OS. 31-10-05 -Fixed several serious bugs when loading maps, where the old map was not freed properly. This would cause crashes and general mayhem when changing maps, and may also be the cause of the elusive 'could not find xxx' bug which has been plaguing me for years. 19-09-05 -Added parameter 'startingtag' to allow the player to start at a given tag instead of the default player location. This is handy for map development. 29-08-05 -Music volume works in FMOD4 22-08-05 -Got it all to compile under Windows again, including with FMOD. FMOD 4 seems to have a lot of really weird issues, some of which are worked around, others of which only appear to happen in Windows. I guess I'll have to spend more time trying to debug the Windows build again. 07-08-05 -Converted FMOD driver to use FMOD v4.0, which has a new API. 06-08-05 -IRE has been kind of de-prioritised, owing to the DMFA Radio project. However I'm intending to do a new rev of the engine soon. I'm still debating whether to wait for Allegro 4.2.0-final or not. 18-06-05 -After installing Kubuntu, I discovered that Allegro 4.0.3 wouldn't work anymore. I've upgraded to 4.2.0-b3, but that has some bugs in the timer code which cause the game to lock up periodically. I've now isolated those and fixed them on my system, but IRE is going to need Allegro 4.2.0b4 or higher to work properly. 14-05-05 -Editor now supports tile cycling on roof tiles 19-03-05 -Not much happened lately.. mostly worldbuilding. -Added 'alignment' attribute to characters. This is a number. zero = neutral, positive = good, negative = evil. This is chiefly currently being used in RoTJ as a helper for the city guards.. if rampaging monsters are marked as 'evil', the guards can easily be programmed to fight them spontaneously. 24-01-05 -You can now declare script constants in .ini files. Syntax is: -set CONSTNAME = 1 02-01-05 -Tried to speed up the script compiler. I think I've made a decent improvement, although it's not as fast as it could be, and some of the internals have changed so much that profiling has become impossible. 01-01-05 -Added a new command to the conversation system, 'is_npc_carrying' which behaves like 'is_carrying' except that it looks for the given object inside the NPC you're talking to, rather than the player. 30-12-04 -Fixed a crash when creating objects in an OnInit script. -Added the ability to set the colour used in room blanking. Details are in tfm/gamedata.ini 18-12-04 -Editor now has a 'roof display' mode on the world map. It shows all rooftops as red. This is useful for things like mountains with caves inside since the roof will disappear if there are any gaps in it. It also allows you to locate lost rooftops from buildings, if you moved the building and forgot about the roof (as I have sometimes done). Additionally, there are two new draw options: roof 8x8 and roof 32x32, which allow you to do bulk painting of roofs for the mountaintops. 09-12-04 -Rewrote the party 'death management'. Previously, the game would continue if the hero died, using the other party members until the entire party was dead. Since only the hero could talk (in RoTJ) this was bad, so I decided to copy the Ultima 6 (and 7) system, where the game stops immediately if the player dies. -Fixed numerous problems that this change exposed, in particular where followers could be 'exiled' from the party when the player died. This has been sorted. -The game defaults to it's original 'Ultima 4' behaviour. Add the line '-u6party' or '-u6partymode' to the gamedata.ini file to enable the new behaviour. 07-12-04 -Fixed a problem where TransferObject was not preserving the VM state properly. This would cause very interesting things to happen, especially when dropping objects while standing in the doorway (the door would disappear!) 30-11-04 -Moved to Cwmbran in South Wales. This has taken me offline until I can get the phone line sorted out, which will most likely be _next year_. I can still read mail via work, but replying is difficult. 30-10-04 -Belated memorial to John Peel, who introduced me to the music of Bal-Sagoth in late 2000, thereby influencing the development of Reign of the Just in a massive way. 28-10-04 -Michael Lefebvre, besides contibuting various patches an enhancements to IRE, has now contributed a load of people for Reign of the Just. I'll try to put up some screenshots soon. THIEF GAP 22-08-04 -Book update for RotJ-2. Replaces a sketch with the artwork I had intended to use, but wasn't available in time for release. Does not affect gameplay at all. 09-08-04 -Reign of the Just Demo 2 is released for both platforms, following the installation of broadband in my work's new premises. Here is the blurb: This is Demo 2. The core engine has a number of additional features over the version used in Demo 1. It contains a number of bugfixes (esp. involving the multi-map support). There are now four maps in various states of completion, nineteen minutes of original incidental music and tons of new graphics. You can now buy spells, meet at least four different races, not meet a few more, name your character, and do more things. You can't bake bread, but you can make butter, mix drinks and fence off stolen gold and jewels. 07-07-04 -IRE 0.92-final is released. 20-06-04 -Arrgh! Found another problem with 0.92. Fortunately I forgot to release it ;-) 05-06-04 -Found a bug when going between two maps. This just after the release of 0.91, and it is a showstopper for RotJ. Damn. 31-05-04 -Released 0.91 21-05-04 -Triggers should now work correctly on large objects. And hopefully that's the last showstopper before 0.91. 15-05-04 -Found a crashing bug in the editor where the object browsers at the bottom of the screen would go wrong if there were less than 17 tiles/rooftiles/lightmap tiles. 14-05-04 -Fixed more wielding problems, and also a bug in the conversation system involving buffer reuse which would cause Holm to say strange things like '1800-2000 [link=' -You cannot now sell the sword in your hand TWICE (this was another wielding bug) 13-05-04 -When a character dies, the objects they are wielding are now unwielded properly. Before they were left invisible and all kinds of bad stuff happened. -You can now set the default conversation and hyperlink text colours. 12-05-04 -While building test packages with MSVC 2003, I discovered a very nasty problem in the file library, where the result depended on the order of the instructions, which was essentially being left to the compiler to decide. GCC and MSVC 6 compiled them how I'd intended, the new optimiser did something clever and broke the map reader. I have now fixed it so the operations is well-defined and not vague. 12-04-04 -Added a new script command 'copy_speech', which is like 'copy_schedule' but copies the conversation file. I'm using this for the guards, who are all spawned from templates. It wasn't copying their conversations, so the guards guarding the Pope's chamber were saying exactly the same stuff as all the other guards. Now I'm using this new command, it it all works properly. 09-04-04 -Added support for roof tiles that prevent a map from being drawn (e.g. underground, 'swap' areas inside mountains, etc.) 02-03-04 -Fixed bug where schedules defined in the resource file weren't being used properly (only the first one was) 29-02-04 -Fixed a bug with the editor where it would sometimes be unable to save schedules for newly-created objects. This was caused by the Boxing-day fix.. ARX FATALIS GAP 24-12-03 -I think I've fixed a problem where special effects (and probably conversations!) are stripped away when the player moves between maps. Not yet tested it though. 20-12-03 -Fixed a problem with the timing system that was actually causing the slowdown. Of course, having the new optimisations is always helpful. -Redesigned timing system causes a few problems, especially with the mouse, which doesn't seem to be de-bounced properly. Added a delay after reading the mouse buttons. This is currently 60ms but can be configured using the '-mousewait' switch. 17-12-03 -Found the game was starting to chug on my 1GHz machine.. panicked and did some extra optimisation. Creatures inside eggs are no longer Active, which reduces the load on the engine. Similarly, objects which can be stepped upon are now only triggered when something is moved onto them instead of continuously checking. Every chair and every plate was doing this which added several hundred objects to the scanning list. 07-12-03 -Map resizer works again and also supports negative offsets (for moving large areas of the map) 11-11-03 -More improvements to pathfinding of large objects 09-11-03 -Added simple support for user-definable strings. The scriptwriter must specify the maximum length of the string, and it can't be changed afterwards unfortunately. If you try to copy more than the string can hold it is trimmed to the appropriate length. You can also examine and change single characters within the string. -The parsing engine now recognises a character in single quotes as an ASCII value, in C-style. So "let i = 'C'" will set the variable 'i' to 65, the ASCII code for C. -Now we should be able to have the user enter their name.. 02-11-03 -Fixed a problem with the 0.90 framelocking and mice. Grrr. 25-10-03 -Light spells now work inside caves. This was achieved by modifying the way cave darkness is handled. Previously, rooftiles had a 'darkness' flag, which made them add 64 points of darkness to the mixer. This has been upgraded to support variable darkness levels. In addition, the variable 'darkmix' is now exposed to the script language, so that magic lights can affect that as well as the master darkness level. -Not related to the engine, but it seems that the player has been able to push the wire fencing aside for the last three years at least. Fixed now (at last!) 19-10-03 -Re-recorded all the music for Reign Of The Just, filling most of a 10.5" tape reel. 18-10-03 -Editor handles bad objects intelligently again, asking the user what to do instead of panicking. It used to do this but was removed at some point owing to various internal changes. (See 11-12-1999) -Fixed problems in the game when dying on another map. It used to keep the original roof set which was bad.. you ended up with rooftops from the other world. 12-10-03 -Added new flag NO_SCHEDULE, which stops NPCs from obeying the scheduler. This can be used in plot devices, where an NPC has to go and do something. Turning off their schedule temporarily will stop them getting distracted by their everyday chores. 06-10-03 -Active Tiles (e.g. swamps) no longer affect people if they are standing on a bridge over it. Spikeproof objects are not affected either. 28-09-03 -Fixed a crashing bug involving changing directions. This affected The Cow. -Moved sound systems to a directory called 'audio', and wrote an audio driver for SDLmixer. This will probably replace FMOD as the default audio system. 09-09-03 -In 0.91, improved editing on the world-view. 31-08-03 -Released 0.90. Available now on http://ire.sf.net 29-08-03 -Found a last-minute bug with savegames during testing. -Fixed. 09-08-03 -I had been preparing for a 0.82 release. However, this has been put on hold, as the tangle of config files and platforms becomes more complicated to resolve. -Instead, I have redesigned the way the game handles files, and because it breaks compatibility with 0.81, it will most likely be 0.90 instead. -The '-game' option now specifies a path, where the game data will be found. In the data directory, the gamedata.ini file contains the configuration for that project. -The game will look for a game.ini file, which contains the user's own settings, such as the video mode. This will be found in their home directory, or failing that it will look in the current directory instead. -The editor will also look for an editor.ini file, which allows editor-specific customisation. This can be in the user's home directory, so you can make the editor always launch a certain project if desired. -I am contemplating dropping support for .RAR files and having the data just sit in a directory. Removing this will speed up file operations, but I will have to repackage the demo game (and ROTJ). 21-07-03 -Fixed an obscure bug involving structures, which may have been brought to prominence by the savegame stuff 12-07-03 -Savegames now store global variables, both integers and also pointers to objects. 29-06-03 -Moved house.. this kind of upset the development schedule. Not there there was a great deal to do lately. -Added SHL/SHR (or << >>) operators to the script language. Does a bit-shift. -Fixed problem where objects with 'oninit' function didn't work properly if created in-game. (The 'current' variable wasn't being set.. nasty!) 10-05-03 -Fixed some glitches involving special effects. ALPHA_SOLID now sets the transparency level for sprites to 255 (solid). -Added new command fx_animsprite, which, like fx_sprite, projects a sprite onto the screen, but with animation. It is transparency-aware. -show_roof (in the script) now works again, but differently. It now overrides the game's decision. Instead of true and false, it is now a tri-state. Set to 1, the roof is always shown, even when the player is beneath it. Set to -1, the roof is never show. Set to 0, the game decides whether the roof should be drawn, as usual. It is reset to 0 after each turn. 04-05-03 -Code now compiles cleanly with -Wall, a few ambiguities should now be resolved correctly 03-05-03 -Various code cleanups -User1 and User2 are now preserved when using 'change' 02-05-03 -Fixed a bug that caused Allegro to crash during shutdown under some very specific and odd circumstances. It should work in DOS now. 22-04-03 -Added a new Status request to display zoomed maps. The debug keys 'W' and 'E' have been removed, but their functionality now can be emulated in the script. -Added key 'KEY_PLUS_PAD' to the script language. Oops. -Zoomed maps can now show rooftops, which will be more suitable for satellite views, peer spells etc. 21-04-03 -Fixed a number of problems involving pathfinding for large, rectangular objects. They now turn around corners and do various things to try and manuver in the given space. -Fixed a problem caused by earlier experiments with this that caused NPCs to walk backwards sometimes. 03-04-03 -The IRE censorware engine does not now censor embedded swearwords, such as 'scrap'. Hopefully it will still censor all genuine cases. -Alexandre Pineau tells me that his (slightly modified) package of IRE has now been submitted to Debian and will appear in Unstable over the next week or so. -Elsewhere, the disagreeable events which have cost the existences of many people and sub-sentients for a hazy and questionable goal, continue unabated. 20-03-03 -Some quite disagreeable things have occurred regarding one insane president attempting to kill another. 09-03-03 -Editor now saves user1 and user2 strings for objects -Added support for function calls from an animation seq. 'me' contains the object associated with the function. -Special FX functions are now based around 'me' instead of 'current'. For now, both work but this may change. 02-03-03 -Editor doesn't compile scripts fully anymore, this helps when using memory checker tools like 'Fortify' and should speed the editor startup in general. -Editor now uses a list of statistics for editing objects. Not quite as pretty but far more maintainable. -Objects now have a 'Quantity Change' function, which is called when an object's quantity has been modified. You can use this for money, to show different sprites depending on how many coins it is. There is also an 'update_quantity' command in the script for when you change the quantity by hand. 23-02-03 -Fixed BeOS zipfile now available (old one was truncated) -Fixed a bug involving object arrays (CHANGE wouldn't work) -Added two new effects, fx_poly and fx_rect, which draw a polygon and a rectangle respectively. 13-02-03 -There is an updated datafile on the IRE web page that fixes an issue with The Flat where the command console didn't appear. This appears to have been overlooked in the hurry to get Reign of the Just out of the door. 09-02-03 -The game and editor are now frame-locked. While you wouldn't normally notice it in Reign of the Just, on empty worlds the game and editor run way too fast on modern hardware (or even older hardware!). The problem is most apparent when playing woth the mouse because the keyboard has its own internal limiters. Both game and world editor are by default locked so that each turn will always take at least 2/35 of a second. (This rate is adjustable with -framerate). It does not slow down the game any further if your machine is already struggling. 26-01-03 -In the new 0.82 branch, edit-area in the editor now outputs the size directives in the same order as they are in the resource file (oops!) -Play_Music now does nothing if it is trying to play the same song that's already playing. It should also stop the current song so you won't get two songs playing at once under Alogg anymore. 23-01-03 -Alexandre Pineau has kindly made Debian binaries for IRE 0.81 and Reign of the Just. 12-01-03 -Thanks to the help of Michael Lefebvre, a new version of the Linux binary has been made which links statically to libXxf86dga.a instead of the shared object version. Because the shared object version was peculiar to Mandrake the resulting program only worked on Mandrake! -A fixed version of the binary has been uploaded. 10-01-03 -Found a problem when compiling IRE 0.81 with Alogg instead of FMOD. It seems that Alogg 1.30 has had a few changes since the beta I developed with, but they both have the same version number. I'm sure I checked the new version but obviously not. -A source patch has been made available at http://ire.sf.net This doesn't affect any binaries, or people compiling with FMOD, but it has affected the Debian version ;-) 31-12-02 -Released the Reign of the Just demo! It (and info about it) can be found at http://rotj.it-he.org Downloads are available for Windows and Linux, 10MB each. 29-12-02 -Released IRE 0.81. This is the version of the game engine that the Reign of the Just demo will use when it is released, hopefully tomorrow. 22-12-02 -Found a last-minute problem with reloading from the game menu (instead of starting a new game then loading) There are still a few glitches with this new feature but they seem only to visual bugs which don't harm the game. 10-12-02 -Fixed a problem with set_local in the conversation system where it wouldn't add a flag properly if you cleared one. 08-12-02 -Fixed the problem where you see through doors into blanked rooms if you place the cursor over part of the door. 30-11-02 -Engine now calls a script called 'initproc' before the game engine is initialised. You can use this for menus. -Added 'secret' API calls to allow script to do various magical things like loading, saving and volume controls -Lots of internal modifications for starting the game with a savegame instead of loading back after the game has begun -Rewrote the volume slider to use allegro -New script command like 'all_onscreen' but with user radius -Various other enhancements but it's 3am and I'm going to bed 25-11-02 -Released a fixed version of the Flat datafile. 23-11-02 -In The Flat in IRE 0.80, a few gameplay bugs have been uncovered. I have a fix for some of them but it has not yet been released. -There is a bug in the RAR file handler involving multiple RAR files. This has been fixed in 0.81 but not yet in any released version. 21-11-02 -A Debian package of IRE 0.80 and The Flat has been released. See the download page for details. 15-11-02 -Fixed a crashing bug in the editor 02-11-02 -Added new label attribute 'party', which allows for parties of NPCs other than the player's party. NPCs of the same party will get out of each other's way. -Added new script keyword 'stopsearch' which stops function-based searches like 'search_inside'. -Added access to a few more internal variables in usedata 26-10-02 -Fixed a 'creative accounting' problem with SumObjects where it reported more money than you really had. This could lead to crashes when you tried to pay someone.. -Improved detection of changed data in savegames after finding that it would routinely store temporary data for all the objects in the world. One of my savegames is now 46 times smaller as a result. 25-10-02 -Savegame format has been changed and is incompatible. New format should offer a degree of future-proofing though. 24-10-02 -Improvements to the makefiles, courtesy Alexandre Pineau 20-10-02 -Whether a creature could open and close doors was being determined by their intelligence level. This was, at best, a hack. This aspect of the pathfinder is now controlled by two flags, WONT_OPEN_DOORS and WONT_SHUT_DOORS which are defined in the CHARACTER section of the resource file. By default, all objects with the pathfinder can open and close doors. Set this for the ones that can't. 18-10-02 -Removed the start_music command from the script language. It did nothing anyway. -The stop_music command now works and halts the current song. Previously it was intended to pause music so it could later be restarted with start_music but this idea has been abandoned. -The lightmap reader now properly handles zero, so the faint square borders around candles etc. are gone. 16-10-02 -Added experimental support for the ALOGG library, which can stream Ogg Vorbis files under Allegro. -The Linux makefile now has options to choose between the FMOD and ALLEGRO/ALOGG audio libraries. 13-10-02 -The game data can now be read from a system directory under Linux. For example, the game program can go in /usr/bin/ire and the datafiles and INI files can go in /usr/local/games/ire -You can change this default data directory with an environment variable, and you can have different variables for each game, depending on the filename of the game program. It will default to the master one if a 'local' environment variable is not set. -The editor can take some of it's resources from the data directory 12-10-02 -Create, Take, Give etc. in the conversation scripts now strips quotes from the objects, e.g [create 1 "cheese"] will create the object 'cheese' not '"cheese"'. 06-10-02 -Fixed projection problem with large objects near border of map. -Fixed problems with the random number generator in PEscript.. I had wondered why 'heal' sometimes did harm. 28-09-02 -Version 0.8 has been released on Sourceforge. 27-09-02 -Oops, looks like someone forgot to upload the worklog ;) 21-09-02 -Fixed a horrible bug when you went to another map and reloaded a saved game from another world. -Speeded up the Windows version load and save by removing some long-forgotten debug messages. 12-09-02 -Fixed the Windows memory bug. Windows doesn't support mkstemp(), the safe way to get a temporary filename. It has to use tmpnam() instead which returns a pointer. I freed the pointer when I was finished with it, and it turns out that it's statically allocated and this act drove Windows mad. -Fixed build problems in DOS, where it used the original Allegro sound driver instead of the new FMOD one (which isn't supported for DOS) 11-09-02 -As I begin the preparations for releasing 0.80, a nasty bug under Windows pops up from nowhere. It seems that under some circumstances calloc() returns the same pointer for two different memory allocations. Time to look at it with Fortify.. 28-08-02 -It has been possible to make conversations where the possible options disappear as they are used, but this has been something of a bodge. From now on, conversation links will disappear when they are used, unless they are followed by the [always] tag. The list of conversation links that have been followed is deleted when the conversation ends. Use [once] to make the effect permanent. 26-08-02 -Mouse support is now >95% functional, in TFM at least. Adding mouse support to The Flat will be a pain.. 13-08-02 -Added a corona effect and fixed a few more bugs 08-08-02 -Fixed problems with objects not becoming active when they change form. This meant that NPCs would not close doors they went through unless they were already open when the map was loaded. -Investigated a crashing bug if you shot the Cardinal. Involves objects being used after they were freed. I have a solution, but there are a few unanswered questions about the cause. 03-08-02 -Added an effects command to draw a sprite in the current effects brush. -The resource editor has not been properly maintained and is coming to the point where using it would damage the game's resource file. Fact is, I never use the thing because it's quicker for me to just use a text editor. However. The most useful feature of the resource editor was always the Active Area/Solid Region calculator. So, I have bolted that in to the map editor. -If you invoke the map editor with the -area parameter, it will bring up the Area Editor (much faster than the map editor comes up). You can then play around with the sizes and offsets. The lines to go into the resource file are constantly updated at the bottom of the screen, so you can scrawl them down. I may later add the ability to export them, perhaps even directly to the resource file. 01-08-02 -Fixed a long-standing bug in large object movement (that caused the car to be over-cautious in all previous releases!) 31-07-02 -Fixed a problem with eggs when the game is restarted. This was because the first-time init functions for the objects were not being called for a Restart, only when the game is started up from cold. -Fixed some insideous problems involving strings in the script language. Strings always work by reference at the moment. If you assign an immediate string to a variable (e.g. let mystring = "hello") it will now assign the address of the master copy of the string (not the local copy from the VM pool which will discorporate unexpectedly!). -Talking of which, the size of the VM memory pool can now be overridden by the config files. -Worked around a problem with VC being retarded where the compiler announced that the keyword 'near' is a non-standard extension and should be avoided. This is true of course, but not allowing the programmer to declare a variable called 'near' is ALSO a non-standard extension which should definitely be avoided too. -People using the pathfinder are no longer afraid of crossing bridges over water. 30-07-02 -During the course of an investigation into apparently random slowdowns under Linux, I made the VM use a static pool of memory to run the scripts in, instead of allocating and freeing memory each VM function call. This, it turns out, was the reason why the Windows version was unplayable on a GHz machine: Windows seems to use a very, very poor memory allocation strategy which takes milliseconds to allocate each block. This is BAD. With my own stack-like allocation routine, the windows version is no longer soundly thrashed by the Linux version. -At the moment the VM has a fixed 128k of memory, which is quite enough, but I'll make it configurable later on. 29-07-02 -Found and fixed some memory overruns 28-07-02 -String arrays are now closer to working and can be used for simple tasks. -Added a new alternative to find_tag, called 'fast_tag' which is a lot quicker on large worlds, but is limited to a 32x32 grid centred on an object. This is being used in activities (where an NPC goes between points or picks up a prop etc.) and gives a noticable speed increase. 27-07-02 -Added new script commands: get_key_quiet (get a key without redrawing game window) textfont (set font used by succeeding printxy commands) commands to save and restore the screen now also store the mouse ranges (and erase them for the new screen) 24-07-02 -Schedules specified in resource.txt are now ignored in the world editor to prevent them being added to the real schedule each time the world is edited. 23-07-02 -Improved VM crash debugging again -Objects with radius triggers can also have scheduled activities now -New SCHEDULE keyword in resource.txt, now you can specify default schedules. This is used by eggs for night-monsters that fade away at dawn. 21-07-2002 -Animated tiles now animate in the toolbar of the map editor 20-07-2002 -Fixed some cruft in the way 'active' objects were handled, now the code makes sense and there are a lot less hidden implications. Those which remain are at least partly-documented. -Removed the 'trigger_dummy' kludge for eggs, chairs etc. -Fixed a problem with loading and action queues -If a VM function crashes, a full debug log will always be written to the log file, not just when -debugvm is used. This will make debugging of random/obscure crashes easier without any performance impact. -Pathfinder is more intelligent and can now leave the given path if the target is en route instead of following the path to its conclusion every time. This means you can re-use a 'backbone' path for other things. 19-07-2002 -You can now assign a function to a tile, for things like swamps or desert which can eventually kill the player. -Fixed a few quirks involving trigger objects 08-07-2002 -Added support for an earthquake effect 07-07-2002 -Modified editor large map display to give more accurate display of solid areas. -Added new command to set current task without erasing queued sub-tasks 06-07-2002 -Fixed a bug in the script where you couldn't have a do/while loop immediately after endif 02-07-2002 -Support for more generalised radius-triggers. Previously this was intended solely for eggs, and the radius of the object's triggering was fixed. Now there is a new property 'radius' which is the radius of the object in squares. If the player enters this radius, the object's USE function will be called. 30-06-2002 -PEscript arrays are now 1-based, not 0-based. I'm assuming no-one has yet done any serious coding with the language. If you do go out of bounds, the program will let you know soon enough. ;-) -Fixed a few chinks where the game could be crashed by a VM failure 20-06-2002 -Fixed a bug in chknpc that caused it to miss some links to pages that didn't exist. 22-06-2002 -Editor now saves a backup copy of the .mz1 file to .bak, just in case. (This is the most important file) -Editor now Uproots large areas of objects much faster (it took many minutes before, now it takes seconds) 09-06-2002 -Switched sound system from Allegro's own routines to use FMOD, on platforms which it supports. I am still keeping the Allegro driver around for DOS, BeOS and the other platforms that FMOD won't do, and also for you Free Software puritans (FMOD is closed src) However, getting Vorbis music to work in Allegro without FMOD is left as an exercise for the reader. -Fixed a few windows-specific problems. 08-06-2002 -Various experiments with Ogg Vorbis streaming to try and replace audlib. 04-06-2002 -The conversation engine will now try to load backings from the '[project]/backings' directory if it can't find them in the pics directory off the one where the book or conversation file lives. This saves space a lot when you have lots of files that use the same backing picture (e.g. generic paper backings) -More fixes for partially-blanked large objects 03-06-2002 -Savegames now seem to work correctly again, and support multiple worlds more thoroughly. -Fixed problems where creatures given certain activities could sometimes walk through closed/locked doors. -Fixed problems with overzealous blanking code, where trees and similar objects (partly-offscreen) would vanish. 28-05-2002 -Work continues on savegames.. 26-05-2002 -In the editor, made a number of minor usability tweaks and stopped a range of cosmetic glitches, including text in buttons etc. overflowing out of the controls, and buttons staying down after they've been pressed. Also you can use ESC to exit the ownership dialog. -Savegames now save light states and have better support for multiple worlds, but still not enough for a full adventure spanning several worlds. 20-05-2002 -Fixed a problem where NPCs using the new pathfinder would overshoot by one square . -Added a new label tag 'location' which can be set in the editor to a string up to 31 characters. This is now used by the long-range pathfinder instead of the 'personal name' tag. What a hack that was. 18-05-2002 -Fuzzy container searchers now really are fuzzy 16-05-2002 -VM local variable allocation now uses VMTYPE correctly and should now be portable to other word sizes 15-05-2002 -Fixed major cosmetic problem with mouse droppings in the conversation system. 13-05-2002 -Fonts can now be loaded from RAR files. 12-05-2002 -Fixed a couple of exotic crashing bugs and stopped the editor from writing the 'oldhp' field to the map, which is pretty redundant except for savegames. -Fixed a formatting bug involving conversation fonts. 06-05-2002 -Mouse support in conversations. Works but has cosmetic issues. 04-05-2002 -Exclude option in the editor now only shows objects of the type selected, not just he one that was selected. This is more useful, for finding hidden eggs and suchlike. 02-05-2002 -Pathfinder now treats people as if they are NOT solid, but attaches a high cost to moving through them. This means that paths won't fail as impossible just because someone is blocking the doorway at the wrong moment, and yet they won't try to barge through crowds of stationary people (e.g. sitting in church) as if they weren't there. 01-05-2002 -ResumeSchedule now looks to see if the object type has a default activity set in the resource file. It will use this if there isn't any scheduled activity. This stops a problem where an animal defends itself, kills the attacker, but then stands around like a lemon because it has no task to resume to. 30-04-2002 -Fixed problem with large objects when no width and height are specified in the resource file (no 'setsolid' etc). Defaults are now properly chosen instead of bodged. -The VM system now uses unions instead of stuffing any kind of data into a pointer and hoping it will fit. In theory the game should now be portable to other architectures (with different word/pointer sizes) but I won't know for sure until I try it ;-) 29-04-2002 -Martyn improved the pathfinder heuristics and optimised the pathfinder engine to get a tenfold speed increase. -Looked into problem with map reader regarding width and height of large objects 25-04-2002 -Martyn rewrote the A-star pathfinding engine completely and it works very well. The problem where NPCs would sometimes peep into rooms on their route is cured, and I have added the ability to assign costs to map tiles so they will prefer not to walk on grass etc if there is another possible route. 24-04-2002 -Fixed map compatibility between Windows and Unix (CR/LF) 20-04-2002 -Self-coloured font support for conversations. This lets you have nice multicoloured bitmap fonts, so you can have a special antialiased font for paper, or something shaded like the Doom font. 18-04-2002 -Music now works again. 15-04-2002 -Changed the Orbit command's parameter spec. -Added support in the conversation engine for links based on the left and right arrow keys. Good for books. The new commands are [left="page"] and [right="page"] 14-04-2002 -Added a new special effect call, to calculate orbits. This allows you to make objects orbit in a circle around the player or anyone else. Good for spells. -Fixed problem with conversation where it would sometimes display the entire file on one page. 11-04-2002 -The map editor now creates the object layer correctly when building a new map from scratch. 09-04-2002 -Fixed an off-by-one bug in array support. Fixed a little-used command so it actually works and made it behave like the documentation says it should. 06-04-2002 -Began work on mouse support. You can now create buttons that can be clicked on, and script features now exist for getting the map tile that was clicked upon, or the position of a 'grid' which will be helpful for objects in the backpack. 03-04-2002 -Optimisations for startup and loading. This involves speeding up mass object deletion and has left the game somewhat unstable for the present. 02-04-2002 -p-flags support is removed from the engine. This was not used much, except in conversations. The [if_pflag=] keyword is still supported, but now uses local flags internally. 30-03-2002 -Fixed a long-standing problem with the room blanking where bits of large objects sometimes got projected when they shouldn't be. 28-03-2002 -Most string comparisons in the script language are now 'fuzzy' and support partial string wildcards. For example, 'food*' matches 'food00', 'food_portion' etc. This only works with a * at the end of the string, and '?' for a single character is not implemented at this time. 26-03-2002 -Proper UNIX support for user-specific settings and temporary files. They are now created in a subdirectory off the user's home area. For Windows and DOS they are created in a subdirectory off the current directory (normally where the game was run from) 18-03-2002 -Gender-specific tokens in the conversation system are now managed using Data Tables (MaleWords and FemaleWords) so the list of tokens (His->Hers, Mr->Miss etc) is now user-definable. 17-03-2002 -Editor can now optionally view all solid objects on the large-scale map. -Effects are now per-object, and a screenful of effected has no measurable impact on the game's frame-rate. I'm not sure I would like to try this on a 486, mind. 16-03-2002 -Broke something in the VM and spent the day trying to find out what. Eventually reverted VM to yesterday's code. -Strings are now padded to system word size, and can be more than 256 characters long. -Made a few tweaks to the effects system but nothing major. -VM Debugger now gives correct addresses, this broke when the opcode size was moved to word instead of byte. -Invisible objects can now be seen by get_object. This means that if the player examines the square, the object will be described. If you don't want this to happen, set the System flag for the object. This will be useful when per-object FX are implemented. 15-03-2002 -Added support for hexadecimal numbers to the script language. It uses C notation, e.g. 0x240a -Added some new PEscript commands for special effects on the game window. This will be used for magic and similar things which the game engine alone cannot easily do. The special effects code will be run once per animation draw, so any such code will have to be fast. -Modified the internal format for PEscript object code. Everything is now word-aligned except for strings which will be done later. Padding will be required. This will, sadly waste a lot of memory, but it should speed up the game, and it will make it possible for the script engine to be ported to dodgy processors such as MIPS and ARM which crash on unaligned data access. It has also increased the 256 opcode limit for the VM which was starting to make me nervous. The final stage will be to make it use a custom data type (union) for everything. 09-03-2002 -Removed last remnants of VRM handling from the game. -Began work on a long-range pathfinder at long last. NPCs can now walk between different parts of the starting town, which will make schedule development of that town possible! -The pathfinding is achieved with markers. Each marker has the name of the location it leads to as its name. Its owner is set to the next marker, so they form a chain. The NPC searches for a nearby marker and follows it. When they reach the end of the chain, the current task is completed. -This can be used with Action Queues e.g. for work. The first task in the queue is to go to work, the second task starts the work activity. This means that the NPC will only start working when he has actually got to work. He won't go crazy in church, or start baking bread in the street because the player stopped them from getting there on time.. 08-03-2002 -Got access to a slower machine running Windows. Profiled the engine and did lots of optimisation work on the startup time, including a major change to the guts of the PEscript compiler. 03-03-2002 -Fixed a bug with caching that meant it wasn't actually working at all! Now there is a nice big performance increase. I'll still have to check it under Windows at work, though, to see what it does on a slower machine. -Wrote a general sprite loader (using the cache) that works for both sprites and tiles. 27-02-2002 -Implemented RLE sprite caching, but saw only a disappointing performance increase. 25-02-2002 -In the editor, added support for 'tile cycling'. When enabled, you can paint tiles on the map, but the tile drawn will be one between the left and right tiles. The tile number increases until it reaches the Right tile, at which point it goes back to the left. In practice, it is useful for drawing repeating tiles, e.g. 123123123 -Rearranged the way resources are loaded internall to help optimise the startup time. I'm also planning to cache the compressed and converted graphics for each bitmap, which will make the game start faster after the first run. The trick will be to stop it from loading the old sprite from the cache if the original has been updated. 20-02-2002 -Added new RANGE member to stats structure. This is intended to be used to store the range of a weapon in tiles. -Replaced PEscript function if_line_of_sight with get_line_of_sight, which returns the number of tiles away the two objects are. If there is no line-of-sight it returns -1 12-02-2002 -Fixed the screwed-up implementation of 'Break' in PEscript that waited until the loop cycles instead of bramching immediately. -Fixed wielding problem in TFM (caused partly by Break) -Changed 'wait' command in PEscript to take a parameter, either 'BLOCKING' or 'NONBLOCKING'. NONBLOCKING continues to draw animation while waiting (fixes issue where flames stopped when player is hurt) BLOCKING stops the animation, typically used outside of the game loop (e.g. when the player's dead). -Added Dexterity support to TFM for ranged weapons. Now monsters don't spit venom at you with 100% accuracy. Also there will be a scuffle if they smite others by mistake 05-02-2002 -Init systems now return correct amount of memory used by the sprites. 04-02-2002 -Fixed a problem where the roof could be redrawn over the player if they were attacked in a house 03-02-2002 -This log mainly reports coding work, as opposed to art, worldbuilding and writing. There hasn't been much of the former for a bit, not least because Deus Ex is so damn addictive. Look out for a DE page eventually on it-he.org. -For some time, NPCs have occasionally gone into a pathfinding loop, where the shortest distance to their target is unclear. Because the path is recalculated each time, they sometimes decide (possibly owing to a subtle bug in the pathfinder logic which I don't understand) that it is quicker to go in the opposite direction, which usually has them wibbling crazily between two adjacent tiles. I have now changed the pathfinder engine to cache up to eight steps of path for each NPC. This should stop the wibbling and also speed the game up because it can use pre-calculated paths instead of recalculating everything every time. -I managed to delete a syntax highlighting file I made for PEscript and had to rewrite it. While doing that, I made one for the conversation files as well. They're for MCedit. Ask me by email if you're interested in it. 07-01-2002 -Progress will be slow for a bit, owing to Deus Ex. However, I have now implemented a special-effect feature to pan a large image across the screen in any direction. It's called from PEscript and is useful for cut-scene pictures, or similar. It's like the endings of Doom or Heretic. 23-12-2001 -RELEASE 0.7 IS NOW AVAILABLE! 17-12-2001 -0.8.. Conversation Engine now starts on page 'startname' if you know the NPC's name. This is optional.. if that page doesn't exist it will try 'start' as normal. -0.8.. Fixed bug with Eggs and similar Proximity devices introduced by the text-based map format. 11-12-2001 -0.7.. Allegro 4.0 released, checked it still builds. BeOS embraced the Left-Hand Path and had to be put down. Then I couldn't reinstall it. Eventually managed to coerce it into working. 22-11-2001 -0.8.. Added support for Horror objects. If an NPC notices one, it freaks them out really good. It calls a script which can be made to do various things. For example, a dead body can be marked as Horrific and NPCs may run away from it or shout 'Help! Murder!' and call the guards to find the killer. 19-11-2001 -0.8.. You can finally go back out of a bag. 18-11-2001 -0.7.. found a showstopping bug in BGUI requiring a library change. Also, Allegro is finally approaching version 4.0 so I'm going to stop and wait for it.. 13-11-2001 -0.8 preliminary: Added support for action queues. Up to 8 activities can be put in a queue so they are carried out in sequence. The commands are identical to the Action commands. This replaces the Goal code (removed early 2000) and allows complex tasks (e.g. sub-tasks) to be programmed more easily and without the associated problems (task stack-up) because all the sub-tasks are flushed when a new Action is set. An example would be bread-baking: queue_action baker does get_flour queue_action baker does get_water queue_action baker does mix_dough to flour queue_action baker does bake_dough to oven run_queue 08-11-2001 -0.8 preliminary: The editor now uses about the same amount of memory as the game, instead of 4 times as much. It could still take some improvement. -Roof tiles can now darken the game window, for caves etc 07-11-2001 -The binaries and source are now packaged for release. This is in a way unfortunate, because the data isn't ready. -0.80 preliminary: -New map format now does Schedules. Now switched to the new format for general use, not just savegames. 06-11-2001 -0.80 preliminary: -Fixes are made to the map format so that it actually works. Decorative support is also added to it. -Fixed a long-standing bug with -very- large objects (e.g. 747 sized) which would cause a crash. This shouldn't affect 0.70 unless someone really gets overzealous 05-11-2001 -Preliminary works begins on 0.80 -The MZ1 map format changes yet again, this time to a text-based format. This will put an end to the kludges that were necessary for a binary file format to evolve. For testing purposes the format is currently used only by the savegame engine. -Objects now have a 'parent' field which is a pointer to the container they are in. 01-11-2001 -For the Flat demo, some more debugging. Fixed some more bugs, including the bank. Now you actually can withdraw money from other users' bank accounts. 31-10-2001 -Fixed garbage collection bug that caused people to forget what they were doing when a bomb was detonated anywhere in the world. 23-10-2001 -Switched to static Allegro library 04-09-2001 -Putting the Flat back together for a release, may take a while 03-09-2001 -Win32 version now compiles as a console application, so you can see what happens during startup. 30-09-2001 -Tried to fix 8bpp mode, but it is still unusable. 22-09-2001 -Not much has changed with the code, owing to a freeze which should hopefully lead to 0.7 fairly soon. -Fixed problem (esp. in Windows) where the mode selection dialog was purple and totally unreadable. 15-09-2001 -Conversation engine supports different font sizes now. This is still experimental, and the in-game console will need a lot of re-engineering to support different fonts but this is still useful for the NPC conversations. 02-09-2001 -I believe the memory issue is now fixed. 01-09-2001 -Found a problem, some kind of memory screw-up, fortify is assisting with the debugging. 29-08-2001 -Disabled the Pathbuilder in the world editor for 0.7 because it doesn't work and requires a lot of attention to the tilesets. -Turned my attention to The Flat demo, which didn't work owing to a number of changes since 0.68, most prominently the fact that SEER has been discarded. -The Flat now starts up, but works VERY slowly owing to a stream of warnings about obsolete VRM files being called. This should soon be cleared up. 28-08-2001 -Tried to do a test build of IRE in Windows. -Visual C++ broke. Trying to decide what to do. 27-08-2001 -Tried to compile IRE for Windows. -Windows broke. -Reinstalled Windows. -IRE compiled for Windows with a handful of changes. 26-08-2001 -Redesigned the way we handle objects that are going to travel between maps (e.g. the party, stuff in their pockets) to allow the party to change maps while in a vehicle. This caused crashes before since the vehicle (which contained the party) didn't get transferred to the new world since it wasn't a true member of the party. -Fixed glitches with the roof where it would sometimes appear over you when the cursor appears. 25-08-2001 -Fixed crashes when restarting the game after changing maps. Once it no longer crashes if you change maps in a car, the engine should be stable enough for a 0.7 release. 21-08-2001 -Slight changes to the makefile for compatability with GCC 3.01 20-08-2001 -The game now bootstraps all the NPCs when the game starts and when the map changes, so they start their activities immediately instead of waiting for the next schedule change. -Fixed yet another problem with pathfinding and trees. -Tried to fix some bugs in the pathfinder, which came to light when the farmer would 'oscillate' between two possible routes. This now happens less often but needs a more permanent solution. 13-08-2001 -Went through the code to clean up a lot of bad practice. It now emits fewer warnings, but is not completely clean and won't be without some substantial changes to the way pointers are (ab)used, especially in the script system. 12-08-2001 -Fixed bug in script command table that prevented two numbers (i.e. not variables) from being added together. -Fixed a problem with pathfinding, where large objects which started on a solid square (e.g. a tree by a lake) would not be treated as solid by the pathfinder, but they were by the rest of the game so NPCs would just ran into them and stand there mindlessly. 11-08-2001 -Put a new screenshot of TFM on the web page. 06-08-2001 -Resedit now only writes stats etc that are not zero (tidier) 04-08-2001 -Editor now supports copying objects (before it was just cut and paste.. and you couldn't paste multiple times..) 02-08-2001 -The game engine now automatically wakes up an NPC and makes them get out of bed (by calling the 'WakeUp' script) when an activity is requested. This means you don't have to put WakeUp as a task in their schedules anymore. -It also stops the 'NPC stuck in bed' problems. 01-08-2001 -The Rescheduler now seems to be working properly, but unfortunately it tends to skip NPCs WakeUp events unless you are very lucky. This means that they stay in bed all day, trying to do their regular activities, but unable to do so. -Looks like I will have to add special sleep-related code to the game engine itself. 30-07-2001 -Work on the Re-schedule code (used when you sleep for a long time and the game needs to sync NPC activity) 22-07-2001 -Fixed bugs with loading and saving maps caused by npc class. -Fixed bugs where the editor tried to save the state of decors and the game grumbled because it couldn't load them back. -Bottles now ported to PEscript. 19-07-2001 -Added a new user data entry 'vigilante' which is reset automatically by the NPC activity API (do_action, stop_action) It is used by TFM to mark certain individuals as being allowed to attack the player. This is used by the Justice engine to allow acts of desecration etc to be punished. Otherwise, any witnesses see the act of revenge and attack the attacker. Then they are attacked and a melee results. (Actually this does happen in Pagan!) -Added a new field to STATS for npc class. This is a number that can represent a character class, e.g. King, Soldier, peasant etc. -Fixed bug in for_all_onscreen which made it only work sometimes. 13-07-2001 -Fixed a long-standing problem with Active Areas in objects. Now they are handled correctly, and the tacky 'crutches' placed in the doorways since around 1999 can finally be removed. -In a similar vein, some of the nasty cruft from even earlier has now been fixed: there is now an Attack function in the object.funcs structure. Previously, all attack code was shared with USE and it had to check to see if it was wielded to decide what to do. Which was a crock of shit. Now it works how it should have worked in the first place. -Most of the attack code is now in PEscript. 12-07-2001 -Fixed several crashing bugs, notably with the pathfinder at the edge of the map. -Creatures that chase you using the Pathfinder can now cross bridges made of objects. 11-07-2001 -Numerous enhancements to the world editor. -Lots of stuff for the pathbuilder.. it half works now. 10-07-2001 -Fixed a problem where bridges didn't work if they weren't solid. (Which was most of the time) -Fixed a problem with Decor objects that resulted in crashes 07-07-2001 -Began developing a path builder in the editor, which automates the process of building a path out of edge tiles. 02-07-2001 -Multiple Map support now seems to work properly. It hasn't caused a crash yet, and it also saves the state of the map you just left in savegame 9999, so things aren't reset to their original positions when you go back. 01-07-2001 -Lots more stuff works again. -Fixed a bug in the script parser so it shouldn't get confused anymore about variables local to a single module. -Fixed a bug in the tile blanking, where it considered walls adjacent to darkness to be dark as well, resulting in confusion and impossible rulesets. -Optimised the tile blanking code and documented it somewhat. -Fixed a problem where 1 pixel too much was blanked out 27-06-2001 -Death now works again. -There seems to be a problem with the blanking of the H-wall using rule LD (bottom left) visible in the King's Castle. 26-06-2001 -Fixed problem with CR/LF anullment that caused the parser to become picky. -Debugging the DROP code.. it does some awkward things. -DROP now fixed. -Desecration is now a crime. 25-06-2001 -Ported DROP to PEscript, removed some bits of InitVRM. -Then found a peculiar bug in the PEscript parser that caused it to not compile some pieces of code that it 'didn't like'. 24-06-2001 -Missed a few days owing to system backup and upgrade to Mandrake 8.0. -Seer is out. It is no longer in the program: mostly because it won't compile under gcc 3.0 owing to strange C++ errors and the fact that the source is a tangled mess. -Seer is out, but the game isn't free of VRMs yet, most notably the status area is no longer displayed because the VRM isn't being run anymore. Time to port that to PEscript. -The status area code has finally been rewritten in PEscript. -Drop is the second most important function.. 17-06-2001 -Apart from missing or incomplete rule sets for some tiles, the corrected blanking seems to be correct with no glitches. -ResEdit was trashing the Window flag for objects -ResEdit should now handle the Blanking rules properly too 16-06-2001 -Added support for correct blanking of walls. This requires that the appropriate wall tiles are set up correctly for it to work. Each wall tile that must be corrected has a set of rules that determine what shape is displayed depending on which of the adjecent tiles are blanked out. blank LU new_wall -Walls adjacent to blacked-out rooms now do not display the objects in those rooms. -There are some visual glitches at the edges of the game window that need to be sorted out. 14-06-2001 -Fixed a problem in the blanking that allowed you to see through walls with a door in under some conditions. -Fixed recent bug where the editor would always save the map even if you said no. 12-06-2001 -Fixed problems in wipe_z1 that cause crashes when changing map it's now a lot better but still not totally stable. 11-06-2001 -If various safety interlocks are disabled it is now possible to move between maps. -However, there are a number of memory or list management issues still to investigate and resolve. -CARPET2 can't be found by the garbage manager after reload. Looking at the flags it seems to have been deleted or not fully created. Need to put a log on PE delete code so I can see when/if it is marked deleted. It MIGHT be related to wipez1! 10-06-2001 -Wrote simple support for changing map in-game but now I'm debugging it. Currently it goes into an infinite loop.. 09-06-2001 -Multiple Map support has begun. -I have changed the way maps are handled by the engine. Instead of having names, they are now numbered, and the base filename is taken from the project name, which is the name of the directory where the datafiles are kept. E.G. the FLAT map is called flat0001.* and the TFM maps are called tfm0001.* tfm0002.* etc -Map filenames are automatically generated by the engine from the map number. -All this is to let me use numbers for the maps because it makes the world connection easier (takes less space in the headers) -Savegame support, being closely tied to the map saving code, has also been revised. Under Linux and other Unices, it now creates a directory in the user's home called .iresaves In that directory, it creates a subdirectory for the project, e.g. tfm or flat, and in THOSE it creates subdirectories for all the savegame slots, since we'll need a savegame file for each world, and also a 'currently running' savegame directory as used by Ultima 6 and above. Under other OSes, it creates a directory called 'savegame' in ire's own directory. -The world editor has been modified a little. The World View now contains the map connections editor, and it has been made the first item on the toolbar (and hotkey 1). This is probably for the best, since I tend to go to it first anyway, to speed up moving around the map. -The next step is to make the game use the World Connections, and work out some heuristics to decide what needs to be kept in memory (the party, their posessions) and what can be swapped to disk. 06-06-2001 -I now have a complete set of mountain tiles. 01-06-2001 -Back up after moving house, but not online yet. -Fixed problem caused in 0.68 where an object could either have a default behaviour OR a stood-upon action but not both. -Implemented new conversation commands [append=] and [random_page=] 19-05-2001 -Art, design and world work for TFM. 15-05-2001 -Fixed bug in wipe_z1 where Decoratives weren't removed properly. 13-05-2001 -Fixed bug in ChkNpc -Experimental support for video acceleration (no real gain) -..but mostly work on rivers, bridges and so forth. 10-05-2001 -One more set of tiles to add, and I will have a complete set of shores with the water flowing in 8 directions, just like Ultima 6. (Ultima 7 doesn't have this) -Currently two directions are missing, but even so the test river I made looks quite nice. 07-05-2001 -Map editor now animates tiles.. this is very useful for editing rivers etc, so you can instantly see that the flow of the water is correct. 06-05-2001 -Added a new command to PEscript to check whether a square has been blanked (isn't visible by the player). This is called after get_far in the UI code, to see if the square at new_x and new_y is visible, before doing anything. 05-05-2001 -Improved the room blanking. You now only see through windows if you are standing next to them, just like U6. -Moved post_overlay from CHARACTERS to SEQUENCES. 29-04-2001 -Fixed a bug in the pathfinder where large objects were being erased from the pathfinder's internal map, leading to invisible obstacles for the NPCs, and inevitable confusion. -The editor allows you to put several Decorative objects on the same map tile. This is not acceptable to the game and may lock the engine under certain conditions. A safeguard has been added to the map loader that deletes one of the objects when you play that map, and it logs a warning to bootlog.txt so you can fix it in the editor. -Fixed a bug in the Datatable parser, where you could have an entry with just a key and no data. -Wrote a small utility to move a collection of objects from one part of the map to another. Very crude. 28-04-2001 -Added a new resource to resource.txt, Data Tables. -You can define a list of data items, each of which has a key. You can use them for lookup tables, for example, when a creature sits on a chair. If you use the object's name as the key, it returns the name of the appropriate sequence. This is used in TFM to replace the VRM-based sit action. -Tables are accessed using: get_data from = At present there is no provision to modify or create tables from within PEscript. -Improved diagnostics for 'No Match', now it attempts to guess the meaning of what you typed. 23-04-2001 -Added a panic button (SHIFT-BREAK) that kills the VM and stops the program. Handy if you've written an endless loop in PEscript, since it will give you a dump of the function that it died in. -Panic and Safepanic now have a panic prompt using lower-ASCII characters for non-DJGPP platforms such as linux. Previously it had ANSI characters for the box. -You can set the translucency level for sequences. 22-04-2001 -Fixed bugs in MoveTag where objects on the moving thing (such as candles on a table) would get sucked underneath. -Fixed bug for Decoratives where they weren't displayed as 'always on top' when they should be. 21-04-2001 -Ironed more bugs out of Decorative objects. -You can now define the number of turns per minute for the game calendar, before it was fixed so each turn was one minute of the clock. But that was stupid. -Optimised the PEscript compiler to speed up name searches. -Added new script command to do block movements of tagged objects (VERY useful for secret passages where the whole bookshelf and all its shadows have to move) 20-04-2001 -Decorative object support added and mostly working. You can now have objects that are shared throughout the map. This improves the speed and memory usage of the game (decorative trees in TFM reduced memory load from 96M to 28M!) but there are several disadvantages: * Decorative objects can't move * They can't have anything above them * They can't have anything individual about them * They can only face in one direction * They must be taken into account when programming scripts Clearly they are useful only for circumstances where you have a very large number of identical sprites, e.g. wall sections, and trees (4 types of tree in TFM makes nice forests). -Tried to add support for decorative objects to the editor, but failed. Then I realised I don't -need- to add support.. If the editor treats them as normal, editing is just the same as regular objects, and it all becomes simpler. Only the game itself needs to treat them as shared memory. -You should be able to compare strings using the logical operators in the script language, e.g. if o.name <> "test" 19-04-2001 -Release 0.68 is out for all platforms. Come and get it! 18-04-2001 -Found a critical bug (memory leakage). Fixed. Updated source, and re-built for all platforms.. 17-04-2001 -Fixed more late script bugs, built for all platforms. 14-04-2001 -Fixed some late bugs, mostly in the scripts not the engine. 12-04-2001 -The engine is fairly stable again (apart from the Gunpowder issue, which actually seems to be just a minor issue although still not fully understood) -Began compiling for MSVC. Just a few things need to be changed to make it work. 11-04-2001 -Fixed problems with the list caching (speed up loading) 10-04-2001 -Fixed some minor bugs in the disassembler table. -Found a major bug where exploding a barrel of gunpowder stuns all attacking NPCs (they start doing 'close_container') for no apparent reason. Seems to happen when the whuptable is setup. Installing older versions tells me this bug is fairly old. 09-04-2001 -Ironed out some bugs in the room blanking code and some subtle bugs in GetObject caused by variable sized game window -The pipe character '|' is now treated as a linefeed once more. 02-04-2001 -Followers now follow you. -Pressing F1 for help doesn't crash the engine anymore. 01-04-2001 -Debugging keys are now SHIFT-function -Lots of bugs in the flat squashed, mostly related to doors and pathfinding for NPCs. -You now drink the potions, not the other way round. -Potion bottles can now be smashed. -Doors now use a new algorithm for NPCs closing them, based on what Ultima 6 can be observed to do. -Fixed problems where broken doorways were fragile as eggs 28-03-2001 -Fixed bugs in Flat. Potions now in PEscript, but buggy. -Attempted to add support for CTRL+function key for new debugging stuff and to make the existing stuff less obvious. 26-03-2001 -Vehicle entering/leaving support is now in PEscript for the Flat and it seems to work properly aside from the message 'resumeactivity not implemented' 25-03-2001 -The car now crashes the game instead of not working. It dies in leavecar.cpp - Port to pescript. 19-03-2001 -It's been a long time since last release, so I've decided to make an intermediate release 0.68. -For this, I'm fixing the Flat demo, since it has been neglected for a long time while I concentrated on the 'False Messiah'. 14-03-2001 -Windows needed rebuilding and other distractions. -Wrote a program to check the links of conversation files. -Various amounts of conversation work. 10-03-2001 -Began to look at splitting the map into smaller sections, this will help both memory and performance. -Updated Resizer to help with this, now you can specify what part of the map you want to copy from, which allows for many different kinds of cropping instead of just from the top-left. 09-03-2001 -Fixed another bug with UserFlags. -NPC's combat now works but could be improved. 08-03-2001 -Fixed the gunpowder problems, this was caused by a tweak to the VM microkernel to prevent nesting, as an optimisation. Now the microkernel is nested as before. -Discovered and fixed a very old bug in UserFlags that prevented you from being able to define more than one. Whoops. 07-03-2001 -There is a problem with the caching (19/02/01) which causes the ActiveList to become unstable, resulting in the intermittent combat and gunpowder, and probably a few other unexplained bugs. For now I have disabled it to concentrate on making the gunpowder work fully in PEscript. -When gunpowder explodes it damages surrounding objects but they do not react properly. It seems that check_hurt is getting or passing on the address of the explosive, not the object that was damaged. 06-03-2001 -The general combat system and the close-combat module are now done in PEscript, and working. So it looks like the Seer-PEscript bridge might not be working properly. Hopefully I will have removed all SEER stuff for the next release anyway. -Fixed some bugs in OR handling, in the parser tables and radically improved NULL pointer detection in the VM system. 05-03-2001 -While researching the gunpowder problen, discovered that combat doesn't work either. -Began porting combat code to PEscript, since it's much easier to monitor the interface between functions that way. 04-03-2001 -Added memory debugging system to ithelib. -Gunpowder is now using the PEscript routines so it may not work, however it doesn't seem to be actually getting to the explosion. It seems (and this happened with SEER too) that the barrel of gunpowder is being deleted from the ActiveList before it gets to explode. Why? How? 03-03-2001 -Added more leeway for large objects to prevent them vanishing when they disappear out the top of the screen. -Intermittent problem with night. Sometimes the game freezes when dusk starts. It goes into an endless loop of assigning start_dusk to an object. Try to make this happen while running -debugvm -Set time to nearly dusk to speed up testing? 02-03-2001 -Gunpowder doesn't seem to work anymore. Keep 01-03-2001 -Global arrays seem to work properly now, using the memory reserved for them, not the memory immediately afterwards. 28-02-2001 -Added partial support for C-style comments /* */ -Improved global array support, but not fixed yet. -Some bugs in local array support should be ironed out. 27-02-2001 -Set recent log entries to 2001, not 2000. :-) -Preliminary support for global arrays. However it seems to be causing very strange bugs, so it probably isn't working properly. 25-02-2001 -Fix for 24-bit JPEG colour conversion. 22-02-2001 -The keyboard buffering code used a stack, which was silly and caused a 'wobble' when the player turned a corner fast. Now uses a ring buffer. 21-02-2001 -Fixed bloody stupid problem with the INI file parser. -Conversation engine can now parse more than one token on the same line. 20-02-2001 -Added 'censorware' support. The conversation engine will automatically replace 'bad words' if this is switched on. -For some reason it doesn't want to switch on unless you put the command on the command-line, not in the ini files.. 19-02-2001 -Found that the map loader was spending forever adding objects to the linked lists, since it has to traverse the entire linked list every time it wants to add a new object, and the amount of time grows longer with each object added. -Devised a system of linked-list caching to help alleviate this problem.. each linked list that is registered with the cache system (and has appropriate support in it's add/remove code) stores the address of the last node in the list, so it can add new objects very quickly. A lot of debugging was required to make it work (and some bugs didn't really exist!) -Optimised the find_id search, used a lot in the map loader. It now does a binary search from a sorted snapshot of everything in the MasterList. Obviously it won't work well in-game as the list will keep changing. 17-02-2001 -To help automate the construction of forests, created a facility in the editor to add objects over the Random tiles. You specify a probability that the object will be created for each square, so you can do several passes, one for each kind of tree. -Created a section of forest, but quickly discovered that the large number of objects this entails put a huge strain on the map loader. Trying to profile the thing to see where the CPU is going to. 12-02-2001 -Added static light controller to pescript. -Added debugging function to pescript. -If an object tries to Resume and this gives it the current task (i.e. the one that called Resume), a warning appears and it doesn't happen. This was causing an infinite loop when people got out of bed, which put a huge strain on the engine and slowed the game to a crawl. -You can now cut and paste static lighting in the editor. 11-02-2001 -Much world design. -Fixed bug where get_user_flag was expecting different parameters to those given in the language spec. -Editor now copies more information when duplicating sprites.. PersonalName and Funcs are now copied too. This is very useful for triggers (e.g. critical plot sequence happens when player steps on a certain square) where you will have to have the trigger duplicated for a lot of squares around a door, for example, and they will all have to have the same function (and the personal name can be a parameter for a custom function). 05-02-2001 -Locking and unlocking of doors etc is now handled in PEscript. New door types added. 04-02-2001 -All sleep-related functions except 'lie_down' are now in PEscript and support has been added for various missing intrinsic functions. -The API has changed slightly for active objects.. previously the game would set 'current' to be the object being processed. Now it sets a variable called 'me' (or 'person' internally and in Seer-space) and current is set to NULL to weed out all the scripts which haven't been changed yet. -Improved NULL pointer handling in GET_MEMBER.. there were some 'holes' that let you sneak in a NULL pointer and cause a crash.. these have been fixed. -You can now be arrested and thrown in jail. 02-02-2001 -Various minor fixes. -Guards now try to arrest you, but they just print 'got you!' when they catch you since there isn't a jail yet. 01-02-2001 -Theft implemented more fully. I stole a candlestick in the Church and the congregation leapt off the pews and came after my Blood.. 29-01-2001 -Mirrors converted to PEscript. -Finish rewriting X63's dialogue. See notes in file. 28-01-2001 -The first ever monster egg is now operational. It creates guards that do a simple back-and-forth patrol. -Added support for a simple 'random' patrol, but it's a bit too random. Probably best to use for animals. -Logging support in the script replaced with 'BUG START' and 'BUG END' which prints all console output between the two in red and writes it to the logfile. -Support for INIT functions now works a lot better. -transfer_object can now move objects out of the syspocket, which is where newly-created objects live. 27-01-2001 -Updater.vrm is now changed to update_life which is a PE function. -The function and data search routines (getnum4sprite etc) now use a binary search instead of a linear one. -The PEscript parser now has (crude) support for OR conditions in IF statements. The OR part is a second line for example: if a = b or c = d print "It was so!" endif -Support for more than one OR statement per IF is flakey. -Started work on Guard eggs. 25-01-2001 -Switched Allegro to 3.9.34. Found some bugs in doing so. Unfortunately the game now crashes while loading sprites for no obvious reason unless I use the debug version of the library. -Seems to be a problem with Allegro's ASM routines. Works if they are disabled. 22-01-2001 -Noticed that the shadows were crisper and the nights were darker than they should be. Found that the projector was doing two passes of the light engine instead of one, which also slowed the game down a lot. 21-01-2001 -Optimised the 'pick from list' option so it doesn't take several seconds to appear anymore. -Forked TFM away from Flat so that it actually lives in it's own directory instead of sharing with The Flat. I was reluctant to do this before since I'm in the process of rewriting the game scripts and I didn't want to confuse myself unnecessarily. Now the scripts are bug-free enough to make it do-able. -The start church is almost complete. I wish I could say the same about the NPCs. 20-01-2001 -Moved Scheduler out of SEER and into pescript. Fixed bugs in Wield structure table (didn't have any redirections). -Caused and then wasted time hunting bug related to the way Scheduler function is called in the game loop. -You can now resize the map window with -view_w and -view_h which allows it to be set in the game's config file. -Caused and then wasted time hunting ANOTHER bug involving a new switch -nosound (for buggy OSS drivers in Linux) Fortunately the bug worked by exploiting a larger bug in the map projector, so it was actually worthwhile. 17-01-2001 -Last few days artwork and world design. Today, fixed problems with wielding and attacking. -Implemented open,close doors in PEscript, removing VRM callbacks. Still need to do autoclosing doors. This needs to be reworked completely using an algorithm based on what U6 seems to do. 14-01-2001 -Conversation engine fixes. 09-01-2001 -Fixed crashing bug in conversation engine caused when talking to the flower woman. Still not working properly, though. The $SIR tag isn't being handled correctly. 08-01-2001 -More art and design. Fixed critical bugs with Resedit and Ed, which corrupted object's behaviour function and damaged the map data respectively. 07-01-2001 -Mostly art and design. Changed SCRIPTER so it is now called RESEDIT, or Resource Editor, which is far more appropriate. 06-01-2001 -SourceForge site doesn't quite exist yet although there is now a project entry for IRE. -Started to convert user interface drawing away from SEER. Wielded objects handling is now done in PEscript. 04-01-2001 -The IRE web page has been deleted. Moving to Sourceforge. Decided to switch to BSD license, which is the closest match. 03-01-2001 -Fixed bugs with DROP and wielding/unwielding objects. -Almost all the user interface is now in PEscript. -The MOVE command isn't there. Implement it. -Implement the WIELD_xxxx functions in PEscript. Trivial. -Fix global array support. 31-12-2000 -Fixed problem where if != was compiled as if == 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 = TO ) 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 = TO FOR = TO FOR = TO FOR = TO NEXT 02-02-2000 -Added advanced flow control. Currently only IF = 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) ELSE 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=""] 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 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.. 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 - Display text and image ire -log none - Just the image, no text -Added new -logxy parameter to set size of the boot console. ire -logxy -They are designed to be used together, and put in the IRE init files, ('test.' 'game.ini' '!autorun.ini') which so far I have forgotten to document. 15-6-98 -Come and get it! -Released latest version of the source and binaries. Kernel version is 0.028, which is an 'almost' 0.3 release. -Includes all the changes since 25/5/98 14-6-98 -The dreaded RMTB problem seems to have gone away. I suspect it was fixed on 9-5-98 when I re-wrote the sound init code to calculate the DMA size by the latency value. -Changed stop_module() to zero the music volume instead of killing the mixing engine and taking the sound effects too. -Added start_module() to set the volume back to previous level. -Added access to the dos function delay. -Modified all-dead to play game-over music from on old C64 game. Methinks Ultima|Ascencion may be similar ;-) 11-6-98 -Added system VRM All_Dead which is called when the whole party has been killed. all_dead must be present! -Added safety code to sync_map -Fixed a bug that meant the player could only look through windows once. -Fixed a bug which caused the player to stay sitting down when they got out of a chair in the same direction that they were facing when sat down. -Fixed bugs in the VRM fixup code which appeared when the VRM could not be found in the list. -Added warnings that appear in the bootlog when the VRM is missing. -Added a new function restart(); to the VRM library. It reloads the level and restarts. -Added rnd(x), which returns a random number up to x-1 -Fixed a bug in the stepped animation code which prevented animation from stepping if it was shared between two objects. -Improved the makevrm batch file to allow compilation in subdirectories, and split the vrm sources. -Looked out the window and saw 5 small red aircraft practicing for Middle Wallop (on the 12th/13th) 10-6-98 -Brain lapse meant that the last 3 dates were wrong.. -Added various improvements to the demo's interface. -Added new 'ifHurt' directive, that calls a VRM when an object gets damaged. -Now the characters in the demo make sounds when they're in combat. -Prevented ifHurt from responding if the blow killed it. (stops the hurt and killed sounds playing together) -Rewrote the translucency code to do proper algorithm instead of ORing. It's so beautiful now.. 9-6-98 -Fixed overlay problems, added support for special overlays that are drawn above all other objects. -If containers are smashed, the contents all spill out. -Music and sounds now have their own sections in the script instead of being numbered. -Changed play_sound and play_song to reflect this change. -Many modifications to the demo game, including new sounds and improvements of the enemy dying. -Added printxy function to the system, writes direct to screen not via the console. -Wrote VRM support for a player stats screen. -Redrew the Equipment window in the demo. -Documented the recent system changes until 1am.. 8-6-98 -Implemented OVERLAYS. Still needs some work though. -Added new function set_object_sequence() which is used to transform an object into something else temporarily. -It's used to make the player sit down when he's on a chair. 7-6-98 -Design work, drew some stuff for the Church. -New algorithm for OVERLAY support, which will be used in Chairs. 3-6-98 -Fixed bugs where translucency flags got trashed when the player died. 2-6-98 -Once more, I'll be a bit busy, so worklog entries will be erratic until the end of the week. 1-6-98 -Fixed more bugs when the player dies. -Now the game restarts properly when the whole party is dead. -You can now switch the torches on or off. -Upgraded system to 64MB. Now I have tons of memory that will never get used. It did fix certain EMM386 problems though. 28-5-98 -Finished the Organ. -Extended HP to 32 bits instead of 16 -Added new flag, WIELD, for the weapons VRMs. -Added new pointer to OBJECT, for weapon wielding. -Wrote VRM code to allow the player to wield weapons. -Added DAMAGE field to stats for weapon damage. -In VRM code, player can now attack with different weapons that do different damage points, or with fists. -Created Death-on-a-stick, a nasty weapon that kills anything. -Modified Trigger system, added VICTIM variable, the player who trod on the Trigger, so that current_object is the trigger. -Fixed some bugs when the whole party is dead. 27-5-98 -Didn't have much time, but started drawing a pipe organ for the Church. 26-5-98 -Fixed an annoying bug where the player could pick up things which were too heavy. Caused by an obsolete .hpp file. -Re-drew the blood that appears when the player/follower dies. -Need to split fixed into pushable and gettable object flags. -Need textures to make a passable church for the demo >;-) 25-5-98 -Rewrote the rooftops code to be automatic, depending on the current player's position. -Open Roof objects are still available for manual override. You can put them next to windows and windowed doors. -Added support for death and destruction. -The player can now kill the follower, smash torches etc. 22-5-98 -Come and get it! -Released demo version 0.02, at http://fly.to/ire -Tested it with NT 3.51 and was amazed at how well it worked -Some keyboard bugs, but that's NT for you. 21-5-98 -Animation happens in the background (most of the time) -Animation is locked to the timer -Saving and loading are now fully supported -Party support -Container support -The game runner can now be used to edit containers. (Use ire -mapedit) -Editor has more features and bugfixes -Automatic sprite ordering in the editor (No move backwards/forwards crap) 18-5-98 -HA!! You can reload your position in the game! -You can't SAVE though, so it just returns to the initial state when you first ran the game. 17-5-98 -I was not able to do anything owing to time constraints. -This week will be a bit erratic, so updates will be fewer, but hopefully larger when they do arrive. -I'll try to put out new documentation, the latest files and a converter to the new map format during the week. 14-5-98 -Tore the whole engine apart looking for a ****ing big bug which prevented the player from moving southwards. -In fact, the player's sprite was >32 pixels high, and the game decided he was two squares tall. Being solid, he actually tripped up on the end of his own shoes. Really. -This reveals a bug for moving objects more than one square in size. This bug has not yet been fixed, I just made the player shorter. -Revised the z1 layer of the map file structure, ie the .mz1 file format. (This contains the Sprites section) -I'll write a converter between the old and new map format. -I've added plenty of reserved space so this should not be necessary again. -Made more progress on containers within containers. -The game will probably use the editor's new level format for savegames. Try my U6 utilities out and you will see the significance of this statement. In a nutshell, the editor will not allow you to put things inside containers, but you use the game to do this, and your savegame will be the finished level. (This is not true anymore!) 13-5-98 -Added experimental support for translucency. Quality of the effect is compromised in favour of speed. A translucent flag is added to the system and script.cc -Experimental routines to store the state of containers (for savegames and level editor) are being designed. -Added objectstore, an array similar to storage[], but for objects instead of integers. -Updated object.vrm to allow the user to enter bags and other containers, like U6. 12-5-98 -Drew a chest, and added it to the demo game. -Added support for containers in the game runner. -Added new flag to mark objects as containers and modified script.cc to support the new flag. -Modified move_from_pocket to allow you to drop things into bags and chests, using the container flag. -You can't drop things onto walls anymore. -You can't push things through walls anymore. 11-5-98 -Come and get it! -The public demo release can be found at: http://fly.to/ire 10-5-98 -Setup works, other bugs fixed. -Updated documentation. -Packaged for release. 9-5-98 -Found problems in the sound setup on cards with an IRQ other than 5, on the Soundblaster driver. Fixed. -Fixed problems with drop. -You can now drop any object in your backpack, not just the first one. -You can't walk off the map anymore. 7-5-98 -Fixed bugs in VFS_Open that prevented the .RAR loader from working correctly. -Fixed bugs in soundsystem .wav loader that prevented it from being able to load WAVs from a .RAR file. -Drew my own guy to replace the Avatar. Looks like the guys in Colin Day's Insurrection. -Changed compile("res\\main.txt") to compile("main.txt") -redraw() now prints text on the console as well -Console now prints half-completed strings instead of the finished strings only, used for prompting in the demo. -Added short object descriptions for GET, LOOK, USE prompts. -Recompiled editor for new data structures. -Added a banner to appear on exit, for copyright purposes. (I.e. to credit the authors of DJGPP,DLX,Allegro etc) 6-5-98 -Finished the documentation of the engine at present. -Removed the function get_near_direction from the engine -Reimplemented it in VRM code. -Added get_tile to the VRM library -Game exits if a non-existent VRM is called, instead of just putting a warning in the bootlog.txt file. 5-5-98 -No work to the engine at all today. -Documentation is 4/5 complete, though. -Gearing up to make a very very early pre-alpha release by next week, if all goes well. -Had some killer ideas for the plot in the demo game, which of course will not be ready for the prealpha release. 4-5-98 -Modified the script parsing routines to compile each section in a specific order, regardless of the position of the section in the actual file. -Removed some bugs from the setup program, and added features. -The setup program source code is abysmal, since it predates the IRE's structural rewrite. It uses antiquanted library calls, so I have put the source for these old libraries in the setup source directory. -One day I'll rewrite setup.. 3-5-98 -Slight gap, owing to May Day, where we celebrate the rise of the USSR, or was it something else..? -I spend the entire weekend and mayday documenting the system -3/4 of the system is documented, I think, but the last bit is a bastard. 30-4-98 -Simplified keyboard logic -Added get_input function to get current keypress in a VRM -Added redraw function to update the display in a VRM -You can now scroll around the objects in your backpack -Added more items for the demo game -Fixed bug that meant all objects had a behaviour call even if there was no behaviour defined. Should speed up game. 29-4-98 -Added TAG support in the editor. -Added sound volume support in sound, music -If you press F4, a dialog box pops up allowing you to change the volume levels. -To allow customisation, the volume bar is made of three images: (The volume bar itself;Slider in focus;Slider out of focus) -Added keys using the VRM system, with tags. -Added a query function to check the name of an object -Fixed cosmetic bugs in compiler -Added hotkeys in the editor to change editing mode 28-4-98 -Crossed logic boards from two disk drives and fixed the problem with my FDD. -Implemented Get and Drop in player.vrm -Added more functions to the VRM library -Modified the main loop for party support -Party support is now more-or less working again. -Added party flag to objects so members are not solid, and you can walk over them, like in U6. -Join works, but there are bugs involving the above flag. -Added Move, so you can push the party members out of the way -Added Fixed flag, to prevent windows and doors being moved around, picked up or added to your party. -Extended flags data structure to 32 bits instead of 16 27-4-98 -Dismantled my machine to try and cure FDD problems. 26-4-98 -Changed the keyboard input routines. -Created keys.hpp with mnemonics for all key scancodes. -Copied keys.hpp into the VRM header file. -Added lots of useful internal functions to the VRM security gateway so they can be called in VRM code. -Re-implementing Look, Use, Get, Drop in player.vrm -Look works (except for tiles, fix that later) -Use works in all cases. 23-4-98 -Rewrote the main loop to be much simpler, by making more use of VRMs. -Each character now has a behaviour VRM which controls it's actions or does nothing if no behaviour is assigned. E.G. The player's behaviour uses the key input to move them -The main loop now just calls these VRMs, calls the Status VRM and administrates behaviour. -Took out the new keyboard routines, now using BIOSKEY instead. -Added new unused variables into the character data, for the user to play with :-) -Added a TAG to the character data for event triggers. -In a few days, the engine will become self-sustaining, when ANYTHING can be done using VRMs. Of course, I'll add new features to make it _easier_ to do anything. :-) -Entered into single combat with a vicious bug that GPFs in the RMCB (worst it gets) if the RMTB is too small. If I double the size of the RMTB it works fine, but is it fixing the problem or hiding it? 22-4-98 -Changed 'top-layer-objects' to 'Rooftops' in the editor. -Made rooftops not appear by default, in the editor. -Briefly disabled protection against player picking himself up and watched the avatar disappear up his own arse. The engine took it better than I had expected. -Implemented a simple weight system for GET to prevent the user picking up objects that are too heavy. -Started to implement party-mode, using a chase system to get the other members to follow you. -You can currently get anything to join you, knives, doors windows etc.. -I'm going to redesign the main loop again.. 21-4-98 -Added new 'drop_under' flag to the engine and the script, it makes sure that any object dropped on this square appears underneath the object with the flag set. -Modified drop routine to take account of the new flag. -Rewrote the entire keyboard system and main game loop. -Now supports multiple keypresses. -Fixed script parser that it printed the correct line if it came across a command it did not understand. -Rewrote the direction-get routine used by Look,Use,Get+Drop so that it can be used by VRM routines. -Also wrote a new 'far' direction get routine, for extended drop (throw), spellcasting etc. -Made a to-do list with 12 points on it, ranging from easy (change a message in editor) to hard things (do conversation) 20-4-98 -Renamed 'top-layer' to Roof, since it will be used for the roofs of buildings (Roof is more self-explanatory) -Added support for switching roof objects on or off in the map rendering -Added new variable for VRMs to use to control the roof -Implemented trigger objects that call a VRM if stood on -Modified the editor to allow recovery from objects in a saved file that do not exist in the character section. -Removed surplus VRM code from the editor, added a variable to skip some processes in the editor. -Added support for objects that are only visible in editor. 19-4-98 -Sound effects are now officially supported! -The bug was caused by the presence of two different sizes of data structure at different points in the program. -The name collisions between mikmod and the other modules has been resolved. 18-4-98 -I took a week off for easter, hence the gap. Although I have spent most of easter in Ultima 7, I did do some work. -The status area is now controlled by a VRM module called status, which displays the object browser and shows the objects in your pockets as they are picked up. -The player can drop objects. -Music is supported via MiGmod, a bizarre hybrid of mikmod 2.09, 2.10, and 3.01 with my own API extensions thrown in. -Sound effects are being added, but there is a horrible bug causing the .wav data to assume a length of 2^24. 8-4-98 -Managed to burn a bootable DRDOS install CD using linux 8-) -Added new source file, objects.cc which contains the linked list functions for performing object searches and list manipulation. -Added function move_to_pocket() which removes an object from the master list and puts it into the pocket of a container. -Now the player can pick up objects! -The player is able to rip doors off their hinges :( -The player can't drop objects yet, but I'm working on it. -Drew screen for the player's body and worn objects, and the object browser. 7-4-98 -I recompiled my linux kernel in a 5-hour ordeal by fire. My CD recorder should now be able to CD record without win95. After this I had little time (or sanity) for anything else. -Moved the direction-getting code for the LOOK and USE into a function of its own. -Began to implement pockets in the characters. Basically, everything has the ability to be a container, so the same code is used for get and drop as for things like bags and chests. 6-4-98 -Modified the scripting to take default actions in VRM into account. -Lots of work to support VRMs.. updating vrm.hpp and script.hpp, adding callable functions to the VRM unit etc. -Got the doors to work using VRMs!!! I have done it! VRMS work! This is a MAJOR break for the engine, as VRM underlies the whole system. Yeah! -Got a first shot of the game engine doing its stuff. -Go and see it, now! 5-4-98 -Rewrote the looking code to support objects as well. -Now you can look at large objects and get a description. -Added animation code to the system. Objects now animate, but too quickly. -Updated bitmap_a.asm to use BT and SALC instead of bitmasks 2-4-98 -Rewrote object collision detection to use a collision matrix which is stored as a bitmap the size of the whole map. Wrote routines to do the bit-level modification -split the bitmap routines into two files, bitmap_c.c bitmap_a.asm, which is assembled with NASM. The two routines are independent, and a conditional define in bitmap.h determines if the C or 386 version is used. -Now it supports objects larger than 1x1 grid square. 1-4-98 -I don't go in for April Fools, so there is nothing daft here -Collision detection is now supported in objects, but this is a bit of a kludge, and it doesn't work for objects larger than one square yet. -In the long run this kludge will not work, so I'm going to use a new algorithm tonight which will be quicker. 31-3-98 -Hopefully the io destructor problem should not happen again. -Fixed mode bugs in the console, that prevented display outside the game window. -Added support for changing console size and position -Added support for tile descriptions in the script. -Fixed major bugs in the script tidying code. -Took out the toupper() in the script preprocessor and made sure all the system was case-insensitive. -You can now look at tiles and it describes them! 30-3-98 In the game runner... -Fixed bugs in graphical console code that prevented display -Began to add support for VRMs into the game runner... * Added code compiler in script.cc * Added Init_VRM to init.cc -Screwed up and the io destructors kept calling themselves over and over again.. reboot time. -Fixed the current problem, but the underlying cause still needs attention. -Restructuring the control elements of the main loop, as they were only experimental anyway. 29-3-98 -Repositioned some controls in the editor -Game runner loads in a status panel -Game runner is now player-oriented, instead of a map viewer Now it hunts for a character called 'player' and makes that the focus of the game. -Added collision detection into the game engine (for tiles) so the game now is a game.. 26-3-98 -Fixed bug in the editor that prevented you choosing the video mode you want. (I.e. you needed LFB) -Added support for optional user .ini files, like !avios.ini -Removed old code for loading tiles. -Tidied up the INIT module which is now a lot shorter. -Game runner now loads in the map and allows you to pan it. -Began documenting the scriptfile. -Added checks to make sure that there are more than 0 tiles. -Added checks in the game runner to see if a map was loaded. 25-3-98 -Added routines to linklist.cc for moving layer objects back and forward within the list. -Added buttons to change the priority of layer objects in the list. -Added counter to show the position of the current layer object in the list. -Added new QuickName directive to the sequences compiler in the script parser, to speed up adding single-frame objects. -Completely rearranged the tile-drawing mechanisms so that tiles can be solid, in preparation for making the game runner actually able to play the game. 24-3-98 -In a major change, I added support for top-layer objects, which float above the real objects for decoration, but do not interact with any other objects at all. Can be used for adding roofs. -Save and load for top-layer objects is supported as well. 23-3-98 -Added new routines to linklist.cc for moving objects back and forward within the list. -Added buttons to change the priority of an object in the list. -Added counter to show the position of the current object in the list. -Fixed bug in removal of existing menu screens. -Made nice brickwork and doors tiles to test the system. I am really happy with the editor now. 22-3-98 -Split init.cc into init.cc and linklist.cc. -Init.cc is mostly tidied now, linklist.cc contains the alloc and free routines for the linked-list data structures. -Added support in the editor for traversing the object list. 21-3-98 -Took the code home to make up for tues and wed. -Added support for descriptions in the script compiler. -Began to comment the RLE compressor in init.cc 19-3-98 -Crawled into work, with a screenshot of the editor at the moment. -Now you can change the direction that the object is facing using some direction buttons. -The object saving code was storing too much information and the reload function was ignoring the data in the script file as a result. Fixed. -Fixed bugs in 6->5 bit colourmap converter, that cause the character's face to appear bright purple. 16-3-98 -Did a lot of work to the editor. Then I came down with a short but violent flu. Now I can't remember what I did. I made some working code to save the objects on the map. 15-3-98 -Fixed stability problems in object display code -Added new GUI call for clipped, hollow box. 12-3-98 -Fixed stack bug that caused crashes on exit. -You can now pan around the map and edit it fully. -Save and Load of the map is now fully functional. -You can now add objects but that is not very stable yet. 11-3-98 -Added intelligent toggle buttons that toggle your variable. -Editor now has the ability to load, save and edit the map at tile level. -Unfortunately it crashes on exit and I haven't worked out why yet. The stack trace points to a line that has no code. -Editor doesn't go direct to the graphics engine anymore, except for when the map tiles are being drawn. 10-3-98 -Restructuring GUI used by the editor. -Rewriting the editor in a more structured format. 9-3-98 -Compiler now compiles CHARACTERS properly and is tidy -Loaders optimised and tidied further -Only the INIT module still needs attention. In addition the editor must be re-engineered to make use of the new data structures. 5-3-98 -Compiler now compiles SPRITES and SEQUENCES properly -Optimised Sprites/Sequences data structures -Fixed some string parsing routines 4-3-98 -Tidying init functions -Adding on-the-fly compilation instead of ISC -Merging data structures to limit redundancy owing to above -Isolated magic cookies 3-3-98 Source code was yucky. I intend to make this a more open project than AViOS, so I am cleaning up the source code. Writing game runner from scratch, using modules from AVIOS and the editor. Insulating the code in the modules so that the game can be built up piece by piece. -OSCLI functions isolated and tidied -FS functions isolated and tidied -Loaders isolated and tidied -Console and logger isolated and tidied 2-3-98 Got editor in a reasonable state. Fixed bug in RLE encoding routines. Things that have been done but not documented fully: ---------------------------------------------------- * Sub-class of object for decoratives (e.g. trees) to reduce the load on the game for detailed maps. Add a flag (DECOR). If DECOR is set, there is only ONE instance of this object and it is shared over the map. This will require that the consistency checks be disabled for all DECOR objects, and that DECOR objects are only removed from the list when destroyed, NOT deallocated!. * Symlinks for NPCs: a new flag for NPCs. If set, always refer to the owner of the NPC, not the NPC itself, for conversation and other stuff. This will allow radios and other such things where you talk to an NPC via a proxy: we will need to record the outcome of the conversation for the actual NPC, NOT the telephone. This will also allow one NPC to be in two different places at once, and also helps A LOT if you have a large, stationary NPC such as an airliner in a hangar, which would have to be assembled from several different objects. Hello! The IRE history and work log is now in descending order! The most recent updates are at the top of the file. If you want to read the entire log, it's best to start from this end and work your way upwards, because it will make more sense that way.