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