REVISION HISTORY
================
VERSION 3.6.2 - Patch 10, July 2026

Editor:
 - Double clicking the Translation in Project Explorer will now attempt to open the translation
   file in the associated application (if none is registered, the system should ask you to do so).
 - Made it so that in Log Panel's config Output and Filter settings are synced: when user decreases
   any Output level the respective Filter level will be adjusted to be not higher than that, and
   when user increases any Filter level the respective Output level will be adjusted to be not
   lower than that.
 - Made it so that when Editor recreates a spritefile from sources, it would also created a new
   sprite index file (sprindex.dat).
 - Fixed window may appear offscreen on program launch if number of active monitors have changed
   since the previous session.
 - Fixed Editor compiling a game data file of a wrong name, if game's "filename" setting
   contains dots.
 - Fixed Editor compiling a Web/Emscripten game build generated a faulty "my_game_files.js"
   if the game's filename contains single quote marks (apostrophes). This mistake would result
   in game not being able to launch in the browser.
 - Ensure that Room Editor displays placeholder sprite 0 for objects which had a non-existing
   sprite assigned to them (so that they could be seen in the editor).
 - Fixed autocomplete in script not processing indexed attributes properly.
 - Fixed Editor not detecting and reporting "unlinked script functions" for Room events properly.
 - Fixed missing comments for Type.GetByName() script functions.
 - Fixed automatic game build on /compile exiting the program with a error code if there were
   only script warnings.

Engine:
 - Implemented smoother transition between segments of the walking path for characters: now they
   will not make a small pause at the end of each segment, but keep moving with the same speed,
   unless having to turn on spot first. This also fixes a unexpected slowdown occuring when a
   character is moving along a path consisting of very short segments in zig-zag pattern.
 - Fixed mouse cursor's starting position to be in the center of the actual game's resolution,
   and not at (160, 100) as if it's always 320x200.
 - Fixed SetGameOption(OPT_PORTRAITSIDE) not always working correctly.
 - Fixed speech skip key setting not working properly if it's assigned any letter key.
 - Fixed GUI controls rendered very smudged with Linear filter in Direct3D/OpenGL.
 - Fixed engine not always detecting audio driver failure on initialization, and thus not creating
   a "dummy" audio driver as a replacement (necessary for audio scripts to work without errors).
 - Fixed particular rare OGG Vorbis clips not playing.


VERSION 3.6.2 - Patch 9, May 2026

Editor:
 - Don't issue a warning if the script function of the standard interaction name is linked to a
   different event (e.g. "Character_Look" linked to a "Interact" event).
 - When run with a "/compile" command-line argument, Editor will automatically recreate sprite file
   from sources (if possible) without asking a question. This helps automatic game builds.
 - Fixed a project tree's item is activated without intent when user double clicks to open a
   folder, and project tree scrolls down so that a different item appears under mouse cursor.
 - Fixed AudioClip's label missing ID after clip is renamed in the project explorer.
 - Fixed unhandled exception in the "Change ID" dialog occuring if the item has ID greater than the
   total number of items. This situation may occur if the project file was modified by hand.
 - Fixed copy-pasted gui controls always get linked to a GlobalScript, and not a script module
   of their parent GUI.
 - Fixed that if a room editor is opened, and user changes one of the present Character's RealName,
   such Character becomes impossible to select in the room.
 - Fixed Walk-behind's baseline is not drawn in the room editor if Zoom is less than 100%.
 - Fixed game plugin's extra dependencies not found in the Compiled/Windows folder when game
   is run from the Editor.

Engine:
 - Fixed a potential error occuring when a animating object or character was assigned a view's
   loop without any frames (possibly a regression since some previous patches).
 - Fixed ListBox.FillDirList() and File.GetFiles() not being able to find files in subdirectories,
   if a search pattern has relative parent path.
 - Fixed a mistake in ListBox.FillDirList() and File.GetFiles(), which could prevent files from
   different places (like from game package and game directory) to be merged in a single list when
   using $DATA$ location token.
 - Fixed ListBox.FillDirList() and File.GetFiles() listing files from within the game package with
   their relative parent paths. It is supposed to list only filenames, for consistency with the
   regular files on disk.
 - Fixed ListBox.FillDirList() and File.GetFiles() not sorting the filenames alphabetically
   properly if these names contain non-latin unicode characters.
 - Fixed ListBox.FillSaveGameList() always sorting saves by the filetime, disregarding the
   function parameters.
 - Fixed Dictionary and Set not sorting their items properly if the keys contain non-latin unicode
   characters.
 - Fixed a potential error that may occur when a temporary dynamic object is created inside the
   script function's parameter list, but there's a blocking action or a Wait call between when it's
   created and when it's passed into the function.
   Example case: "func( WaitAndReturnValue(), String.Format(...) )".
 - Fixed another rare case when a WAV file can get stuck in the end of the playback forever.


VERSION 3.6.2 - Patch 8, March 2026

Editor:
 - All input fields that allow decimal values with a fractional part now use a dot ('.') separator
   regardless of the local system settings. This is done primarily to make it easier to share
   values between property fields and script.
 - Fixed Editor treating custom properties names as case-sensitive when loading them from the
   project file, although they are considered case-insensitive everywhere else.
 - Fixed deleted custom property values were remaining in objects data, apparently forever
   (they were not visible, unless you re-add the property under same name).
 - Fixed "dialog_request" not being added automatically to GlobalScript if it's missing.
   (Regression since 3.6.2 Patch 7.)
 - Fixed Editor resizing its own application window instead of Help window when Help->Index
   or Help->Contents menu command was ordered by user.

Engine:
 - Character and object scaling properties, and auto-tracking Camera positions will now be
   updated extra time prior to "Room Before Fade-in" and "late_repeatedly_execute_always" events.
   This is done to ensure that user scripts can read proper up-to-date values during these events.
 - Fixed characters and room objects scaling not being updated while the cutscene is being skipped.
   (Regression in 3.6.2)
 - Fixed user script functions that match the existing engine API would not get registered and not
   called in script (engine functions get called instead). NOTE: such situation may occur if
   certain deprecated engine API functions were disabled during compilation, and user script
   have declared functions with names identical to these. (Regression in 3.6.2)
 - Fixed ListBox.FillDirList() and File.GetFiles() not finding any files if request was made to
   search right in the game's directory. (Regression in 3.6.2, or possibly earlier version)
 - Fixed inventory cursor not updated immediately if OPT_FIXEDINVCURSOR option is set.


VERSION 3.6.2 - Patch 7, March 2026

Editor:
 - Restore AutoComplete showing static struct members for the struct's instances. Static members
   were supposed to be shown for instances too, unless they are tagged by $AUTOCOMPLETESTATICONLY$
   marker in script. (Broken in earlier 3.6.2 patches)
 - Fixed bad file created when the new room template is overwriting existing one.
 - Fixed editor was not loading any script changes done externally when compiling the game.
 - Fixed Mouse Cursors having "Character" as a type name displayed in the property grid's title.

Engine:
 - Try initialize a "dummy" audio driver if other known drivers failed. This will not make player
   hear anything, but prevents typical script errors which might occur when the audio playback
   is not created.
 - Optimize DynamicSprite.ChangeCanvasSize() and Crop() functions to not recreate a bitmap in case
   the sprite's size does not actually change.
 - Improved "--loadsavedgame" command-line option. Allow to pass a save slot number instead of a
   exact file name as an argument, and try to find the file both in the game's own directory and
   saves folder.
 - Fixed SetRestartPoint() was writing a save immediately instead of waiting until the current
   script ends, as it should. (Regression in 3.6.2)
 - Fixed a error in the engine if there was any blocking action run in game_start().
   (Regression since one of the previous 3.6.2 updates)
 - Fixed character, who was facing a diagonal loop, unexpectedly switching to an orthogonal loop
   after idle animation, if the idle view has only 1 frame in its diagonal loops.
 - Fixed a rare case when a character would interrupt its continuous idle animation when commanded
   to walk, even though no actual walk takes place, because the character is either at destination
   or too close to destination for making a step.
 - Fixed engine was printing "character stop moving" into the log unnecessarily in some cases.
 - Fixed DynamicSprite.Crop() was letting to "crop" to an invalid region of a source image.

Compatibility:
 - In pre-3.6.2 games don't snap a character to a walkable area if it stopped moving
   while turning on a spot. This behavior was accidentally required in some very old
   games to keep character positions correct.


VERSION 3.6.2 - Patch 6, January 2026

Editor:
 - Save last size and position of the "Sprite Import" dialog.
 - Fixed potential memory corruption occuring when importing 4-bit sprites of odd sizes.
 - Fixed minor visual mismatches in GUI previews occuring for high-res games.
 - Fixed Font's ProjectFilename property value having two dots before extension.

Engine:
 - Support "--audiodriver" command line argument for explicitly selecting an audio driver.
 - Support "--script-log" command line argument, which creates a script execution log.
 - Fixed SetTextOverlay() script function ignoring new position parameters.
 - Fixed default Slider's handle drawn with 1 pixel offset mistake. (Regression after Patch 5)
 - Fixed multiline dialog options having unnecessary indentation at new lines in case there's
   already an indentation after option numbering or a "bullet" graphic.
 - Fixed extra black frame displayed after a OGV playback. (Regression since one of the earlier
   patches)

WinSetup:
 - Do not show "Accessibility" tab if all the option groups have been disabled by the default
   game config.


VERSION 3.6.2 - Patch 5, November 2025

Editor:
 - Fixed 8-bit sprite import with "Leave as-is" option when image file does not use a transparent
   color. This resulted in regular color in slot 0 becoming a transparent instead.
 - Fixed Callstack panel not getting cleared when the game is shutdown, and clicking on its items
   could bring Editor into the wrong state.
 - Fixed crash occuring under some conditions when the Editor is trying to display a tooltip with
   the struct's member in script.
 - Fixed Autocomplete not displaying members of dynamic array's elements (was displaying dynamic
   array's "Length" property instead).
 - Fixed Autocomplete mistakes related to multidimensional arrays declared in script. (Although
   v3.* script compiler does not support multidimensional arrays, this fix prevents strange
   results if user have these in script for some reason.)
 - Fixed Autocomplete displaying generated types (dynamic array types), which it should not show
   to the user.
 - Fixed Autocomplete not displaying parent type's extender methods for child types.
 - Fixed script tooltip displaying extra pair of brackets for dynamic array variables.

Engine:
 - Fixed Slider unexpectedly increasing MaxValue by 1 if it was assigned equal to MinValue.
 - Fixed Character's speech text's behavior being modified by a non-blocking voice clip run by
   a Game.PlayVoiceClip() call.
 - Fixed Game.PlayVoiceClip() not supporting narrator's voice.
 - Fixed voice clips played by Game.PlayVoiceClip() not resuming after restoring a save.
   (This is an old mistake present since the PlayVoiceClip function was introduced.)


VERSION 3.6.2 - Patch 4, October 2025

Editor:
 - Make Font's OutlineFont property provide a drop-down list with fonts.
 - Restrict Room's BackgroundAnimationDelay property to a range of 0-255 (engine's limitation).
 - Fixed Character's animating preview not updating if a View is being edited at the same time.
 - Fixed Font preview scrolling too far down, and sometimes causing some letters to cut off.
 - Fixed View Editor reacting to shortcuts such as F or Delete when the input focus is set to 
   a selected Frame's properties.
 - Fixed Editor reporting "the script name in use" errors for Room Objects and Hotspots that
   don't have any script name set.
 - Fixed Editor Preferences resetting Android JDK and SDK path if one was typed or pasted directly
   into the text box rather than selected using a Folder browse dialog.
 - Fixed Editor displaying an "unhandled exception" if an older file cannot be deleted while
   rebuilding the game. Should be recording such error and display as a regular message box or
   in the output panel.

Engine:
 - Returned "Linear" filter for Software renderer. It was temporarily cut during development of
   version 3.6.0, but we forgot to bring it back.
 - Do not enable "infinite FPS mode" if game script calls SetGameSpeed with a value 1000 or higher.
   The problem is that the script API does not have any means to turn this mode off, so game
   will be stuck in "maxed FPS". The remaining method is Ctrl+E hotkey used to toggle
   "infinite FPS" if the game is run with "--fps" command line argument.
 - Do not apply disabled effect on a Button which runs a blocking animation. Also do not hide
   its parent GUI if game options tells that GUIs should be hidden when the interface is disabled.
 - Changes to the current room's masks will now be remembered in game saves.
   (This only refers to he current room; the mask changes are still reset when player leaves
   the room, just like the changes to room backgrounds.)
 - Dynamically update debug overlay with a room mask on it if a room mask is being drawn upon.
 - Do not quit if failed to run PlaySilentMIDI(), log a warning instead.
 - Do not try animating a cursor if the assigned view is invalid or contains no frames in loop 0.
 - Don't log warnings for File.Exists and Game.GetSaveSlotDescription when a file was not found,
   as these functions are meant to test a file existence.
 - Fixed engine's general misbehavior occuring if any Character, GUI or AudioClip does not have
   any ScriptName assigned.
 - Fixed "Box Out" room transition not using a color set with SetFadeColor() when running with
   a Software renderer (this behavior was implemented in 3.6.2).
 - Fixed room background animation running too fast if the BackgroundAnimationDelay was set
   to a value > 127.
 - Fixed Character.FaceDirection() and similar commands not resetting idle state.
 - Fixed Character.WalkStraight for games with legacy "low-res" coordinates setting.
 - Fixed severe performance drop when dialog options are displayed (regression in 3.6.2).
 - Fixed dialog options were rendering twice per game frame (this did not cause any graphical
   glitches, but could cause extra performance issues).
 - Fixed that room objects may not get drawn during dialog options if they are started right at
   entering the room, and running game loops is disabled when options are shown.
 - Fixed video playback in Software renderer mode displaying frames in a wrong order.
 - Fixed PlayVideo() does not clear the screen before playing a video in Software render mode,
   which could result in having traces of previous scene staying on screen.
 - Fixed a DynamicSprite not updated on screen after CopyTransparencyMask() call (except when
   running with a Software renderer).
 - Fixed that disabled Buttons may not have their looks updated if GUI disabled style was changed
   in script ("OPT_WHENGUIDISABLED").
 - Fixed wrong text color used for a speech with "Sierra with background" style when no GUI is
   assigned as a text window and speech is displayed in a standard box.
 - Fixed automatic font outline could miss some pixels around the first and last letter of the
   text string if the font's glyphs contain pixels with negative offsets.
 - Fixed Overlays with the matching z-order not always sorted in the order of their creation
   (regression in 3.6.2).
 - Fixed SeekMIDIPosition() and GetMIDIPosition() crashing the game if a "silent MIDI" is playing.
 - Fixed NumPad key presses doubling up when NumLock is on in a "old key-handling mode".
 - Fixed Wait(0) call still suspending the game until the next update, should exit instantly.
 - Fixed WaitInput() with infinite timeout suspending forever in a skipped cutscene.
 - Fixed wrong palette used when loading secondary 8-bit backgrounds in a 16/32-bit game.
 - Fixed that "unhandled_event" would be called only starting with the second object interaction
   if that object has a function name assigned for that interaction, but the actual function is
   not found in script.
 - Fixed that "interface_click" not getting called if a GUI click event's function is missing in
   a designated script module, but is present elsewhere (although that function will be never run).
 - Fixed mouse clicks could stop working after a call to a InventoryScreen() function, if player
   character does not have any items (regression in 3.6.2).
 - Fixed Software renderer could potentially crash when the sprite cache reaches its limit and
   there's an overlay displayed on screen.
 - Fixed a "division by zero" crash occuring when the engine is precaching a View without frames.

Compatibility:
 - If PlayVideo() is used to play a non-OGV file, then engine will lookup to a OGV file of the same
   name to play instead. This is made to let game authors or players of old games to convert wmv/avi
   video assets to ogv without recompiling game scripts.
 - Fixed loading games made by v2.56 editor which contain custom properties.

Plugins:
 - Fixed a crash in AGSBlend plugin, occuring if DrawSprite function was called with transparency
   parameter = 100 (fully transparent).


VERSION 3.6.2 - Patch 3, September 2025

Common:
 - Removed a very old limit of 14 chars max lipsync filename.

Editor:
 - In case of multiple objects selected in the editor (such as GUI controls or View Frames)
   Properties Grid will now hide properties that are not allowed to be assigned same value,
   such as ID or Name.
 - Resize all Buttons when changing an Image for multiple selected buttons at once.
 - In Room Editor added separate checkbox for "Move Room Objects From Bottom-Left". The respective
   Character's checkbox will no longer affect Room Objects.
 - Fixed editor not being able to find a event function in script if there was a comment
   on the same line as a function declaration.
 - Fixed bad script generated for Global Variables of String array type.
 - Fixed editor was suggesting Room 301 as a first non-state-saving room, while 300 is the one.
 - Fixed a error in "New Room" and "Change Room Number" dialogs where having number 300 and
   ticking "don't save state" checkbox would cause "value out of range" exception.
 - Fixed "Show sprite usage" did not account for Slider's background image.
 - Fixed text input fields on Colour Finder and Lip Sync panels did not fallback to the default
   text field setting in Color Theme in case their individual settings were missing.

Compiler:
 - Fixed a crash caused by meeting certain unicode characters in script (outside of string or
   character literals).

Engine:
 - When a room state restored from a save has a different number of Room Objects, it will be
   automatically fixed to match the number of Objects found in the current game's room.
 - Removed error triggered if a Wait or any similar "waiting" command was called in the starting
   room's "Before fade-in" event. For some reason this error was only shown if it's the first
   room in the game, which does not make much sense. There's still a warning logged in this
   circumstance.
 - Fixed magenta color on room background could be treated as transparent when it's a part of
   a walk-behind.
 - Fixed switching display modes while running a 16-bit game could lead to current graphical
   overlays (like character portraits, etc) become corrupted.
 - Fixed engine to not automatically switch from an empty view loop when animating character
   by command (should only do that when animating walking).
 - Fixed text height calculation did not account for the outline font's size (only for automatic
   outlining).
 - Fixed standard dialog options surface had excessive height (regression in 3.6.2).
 - Fixed mouse cursor may not get updated after "Before fade-in" event if there was a Display
   function called in it.
 - Fixed function such as Game.ScanSaveSlots(), ListBox.FillSaveGameList(), and similar, wrongly
   error when a single-slot range is passed (min slot = max slot).
 - Fixed a potential crash occuring when engine was trying to log a warning in case a invalid
   font was assigned to a Game's or GUIControl's Font property.
 - Fixed engine overwriting existing translations when duplicate keys are found in the translation
   file (it should keep the first met translation instead).
 - Fixed engine to not try to translate empty lines. There was a rare error when the translation
   contained an incorrect entry with empty key line but non-empty translation, in which case
   engine could display that "translation" anytime any label has empty text.

WinSetup:
 - Fixed "Translation" option always reset to default when starting the setup program.


VERSION 3.6.2 - Patch 2, July 2025

Editor:
 - The multiline Text edit window can now be called for all the "free text" properties in the game,
   by pressing the "..." button.
 - "Edit Custom Properties" and "Edit property schema" dialogs are now resizable, and remember
   their size and position.
 - When making a game template Editor will now use an optional "template.files" file, if one is
   found in the project folder. This file should contain include/exclude filepath patterns,
   and lets include subfolders into the template too.
 - Fixed Editor application freezing at the Splash screen if any exception occured when
   starting up. Now it should close itself properly.
 - Fixed "Export sprites" dialog visual style and being cut on Windows 11.
 - Fixed script preprocessor not recognizing macros which begin with a underscore.
 - Fixed that error reports occuring when opening a room had only their first line displayed
   in a message box, instead of a full error message.
 - Fixed wrongly issued warnings about voice-over filenames not matching selected naming style.
 - Fixed that during a test game run new function names may still be auto-inserted into the
   object's event property when user clicks on "..." button (or double clicks the gui control),
   while actual functions won't be added to script, as the script is forbidden from being modified
   during game test.
 - Fixed that if there was already a function name inserted into a gui control's event property,
   but actual function not present in script, the function is not created when user double clicks
   the gui control.

Compiler:
 - Fixed error occuring when processing a global variable which type is an empty struct.

Script API:
 - Fixed default values for save slots range in FillSaveGameList(), RestoreGameDialog() and
   SaveGameDialog(), they did not match historical behavior of these functions. The default
   slots range is now 0-99.

Engine:
 - Fixed game refusing to load if a font file is not found, use font 0 as a fallback instead.
   (This restores a historical behavior, but now it works for any font, not only WFNs.)
 - Fixed characters being forcedly moved to a walkable area after a call to FaceLocation()
   or a similar function.
 - Fixed a single black frame displayed before the video when PlayVideo() is called.
 - Fixed "fade-out" transition could sometimes not play to the end.
 - Fixed mouse cursor and @OVERHOTSPOT@ labels displayed for 1 frame between fade-in and 
   "After fade-in" event, which could cause them flickering unexpectedly if "After fade-in"
   script contains blocking cutscene.
 - Fixed @OVERHOTSPOT@ labels not redrawing after blocking action ends if the cursor remains
   over the same hotspot where it was before the action.
 - Fixed game interface could become enabled for a single game frame each time right before the
   Dialog options are displayed. This could cause e.g. a "normal" cursor or @OVERHOTSPOT@ text to
   appear for the split second.
 - Fixed gui texts aligned to Bottom or Right had a position mistake in 1 pixel.
 - Fixed slightly broken slider's handle position for thin sliders with very small handle sprites.
 - Fixed SayAt() not being clamped at the screen width (as it was historically).
 - Fixed AudioClip.IsAvailable not working correctly.
 - Fixed sprite cache or texture cache not initializing properly if their size in config is
   assigned to a too large number. The cache sizes will be now correctly limited to the max
   possible size available to the current engine build (32-bit or 64-bit).

Compatibility:
 - Corrected a fix for the misaligned text centering on buttons in pre-3.6.0 games (the previous
   fix introduced in 3.6.2 Patch 1 happened to be breaking some other cases).

WinSetup:
 - If any of the cache sizes in config is set to a value not present in the option lists,
   the list will be assigned to the nearest matching value, instead of resetting to default.


VERSION 3.6.2 - Patch 1, June 2025

Editor:
 - On failed new font import do not replace the font with font 0 in preview, as that's confuses
   users and hides import errors.
 - Fixed an unhandled exception which occured on Text Parser panel when user pressed Enter while
   no item is selected.

Engine:
 - Try to detect incorrect argument types in string formatting functions such as String.Format,
   in attempt to avoid crashes when a '%s' format is used (this is still not 100% secure though).
 - Do not quit with error if a wrong GUI type is assigned as a "TextWindow GUI", display default
   message box instead and log a warning.
 - Fixed a crash occuring when reading Character.DestinationX/Y properties while the character
   is turning on spot after a call to FaceDirection.
 - Fixed a crash occuring when SpeechView is assigned a view that has no loops.
 - Fixed Lucas-Arts speech positioning mistake occuring, for example, when there's a big
   transparent GUI covering whole screen.
 - Fixed dialog options with no text, they were displayed and could be selected by player,
   which should not be happening.
 - Fixed Character.PlaceOnWalkableArea() and Room.NearestWalkableArea() returning wrong results
   if Room's mask resolution is not 1:1.
 - Fixed Direct3D and OpenGL renderers displaying sprites with occasional "magenta" pixels when
   "Smooth scaled sprites" setting is enabled but graphic filter is set to "Nearest-neighbour".

Compatibility:
 - Support detecting and loading game data from Linux game ports where it's called "agsgame.dat",
   and is created using an older version of the third-party "agspack" utility.
 - Disable smooth walk transition in pre-3.6.1 games, as apparently this breaks logic in some of
   them where precise walking coordinates and/or timing is required by scripts.
 - Fixed misaligned text centering on buttons in pre-3.6.0 games.


VERSION 3.6.2, May 2025

Common:
 - Event handler function are now allowed to be located in any script module.
 - New naming rule for the voice clips: full char name, followed by a number, separated by a dot,
   e.g. "RogerTheGreat.1234.ogg". The old rule may be enabled again by a switch in "Backwards
   Compatibility" settings.

Editor:
 - In "Start New Game Wizard" game template selection now displays template's description right
   in the dialog.
 - "Game statistics" now have Ctrl + F2 shortcut instead of F2.
 - F2 can be used for starting editing names of items in the Project Tree (ones that support that)
   and folders in the Sprite Manager.
 - Added "Game Speed" property in General Settings.
 - Added "Use old-style voice clip naming rule" property in General Settings, it lets to select
   whether the game should expect old-style voice clip filenames (4-letter char name followed by
   number) or the new one (full char name, followed by a number, separated by a dot).
 - In General Settings renamed "Override built-in inventory window click handling" option to the
   older variant "Handle inventory window clicks in script" (because it's easier to understand).
 - GUI selection in settings is now done using drop-down lists which list all eligible GUI types
   instead of having user to type GUI number. The setting will be automatically fixed if a GUI
   is removed.
 - Property Grid now displays Custom Properties right in the main properties list for each item
   that supports them.
 - Added "WrapText", "TextPaddingHorizontal", "TextPaddingVertical" properties to GUI Button.
 - GUI Labels can select full range of Alignment values in their TextAlignment property.
 - Added "TurnWhenFacing" property to Characters.
 - Textual GUI controls can now select "Null Font" as their font: this will prevent any text to be
   drawn even if one is assigned, and make it have zero size (when it matters).
 - Property Grid and Room's navigation bar now display object's description along with the script
   name on the drop-down list labels.
 - "Events" tab on the Properties Grid now has "ScriptModule" selection, which lets define in which
   module should the related script functions be generated and looked for. The GUI Controls use
   a ScriptModule set in their parent GUI, and Room events always has a fixed room script selected.
 - Added "Open Recent" submenu in the File menu.
 - Sync script editor's commands in Edit menu with the context menu.
 - Added "Toggle Line Comment" command to Edit menu for scripts.
 - More panes in the Editor are DPI-aware (rescale well with the system font scaling).
 - Editor tabs now display icons indicating their contents (may be disabled in Editor Preferences).
 - Room panel tabs now display room names.
 - Editor will now remember certain window states: "Sprite selector" window and splitter position,
   splitter position in "Sprite manager".
 - Support reordering folders in Project Explorer with drag & drop.
 - Support importing plain script files: ash, asc or both, - besides script modules (*.scm).
 - On "Color Finder" pane also display actual RGB values that the engine will use. They may be
   different from requested RGB, because historically engine limits drawing color's RGB precision
   to 16-bit.
 - Font's "SourceFilename" and "Font Size" properties now have buttons that let import another font
   file, or reimport same font with different size respectively, instead of clicking on a button on
   the preview window.
 - Added a readonly "ProjectFilename" property to Fonts, which displays their in-project file name.
 - Global Variables panel now allows to declare arrays.
 - Added "Controls transparency" slider to GUI edit pane.
 - Copy, paste and delete commands now apply to all the selected GUI controls in GUI editor.
 - When pasting a copied GUI control, Locked property of a new control will be turned off.
 - Support editing group properties for selected GUI controls.
 - Added a multiline Text edit window for Button and Label controls, that may be called by Ctrl+E,
   from context menu, or by pressing "..." button of the Text property in the Properties grid.
 - Support reordering folders in Sprite Manager with drag & drop.
 - Added "Replace source paths for sprites..." context menu command in Sprite Manager. This command
   allows to batch-replace parent folder for all sprite source paths, in case you moved original
   files from one folder to another.
 - Added "Palette index" selection for sprite's import transparency option.
 - Support importing 32-bit BMP files of extended formats (this support is formal at the moment,
   and does not guarantee that any of the extended data will be interpreted).
 - Support importing 1-bit (monochrome) and 4-bit images as sprites, room backgrounds and masks
   (converted to 8-bit).
 - Do not alter or clamp palette for 8-bit sprites imported in a 16/32-bit game.
 - Support importing indexed images which palettes contain translucent alpha as sprites with alpha.
 - Support importing indexed PNGs as room backgrounds and masks.
 - Added "Change Room Number" context menu command for the Rooms in Project Explorer.
 - When the room background size changes, reset room edges to defaults.
 - Removed obsolete "Copy walkable area mask to regions" command from the Room editor.
 - Improved scrolling of drop-down lists in the Room's navigation bar: made scroll buttons larger,
   and support mouse wheel.
 - In Room Editor, during any area drawing mode Ctrl + LMB now works as area picker regardless
   of the currently selected tool.
 - Added "Replace source paths for audio clips..." context menu command for the Audio node.
   This command allows to batch-replace parent folder for all clips' source paths, in case you
   moved original files from one folder to another.
 - Don't restrict compiling a voice-based lipsync if game has a Lucas-Arts style speech.
 - Do not delete previously built game exe from Compiled/Windows folder when testing a game
   from the editor.
 - Editor will now report any missing script functions that are assigned to events, but not
   present in script, as warnings when compiling the game.
 - Editor will now report any script functions that *look like* event functions, but not assigned
   to corresponding events, as warnings when compiling the game.
 - Editor will interrupt "Check for updates" process if it is taking too long with no progress.
 - Added "/maketemplate" command-line option that tells Editor to run, make template out of the
   said game, and quit.
 - Fixed Project Explorer refreshing when user changes names or descriptions of room objects.
 - Fixed importing indexed PNG as a sprite, previously Editor would mistakenly treat the source
   image as 32-bit.
 - Fixed importing GIFs with "palette 0 / N" transparency option would refer a palette color from
   each individual frame's palette rather than the original GIF palette, which could lead to wrong
   colors used as transparents.
 - Fixed importing 8-bit BMP sprites with no "Remap palette" and "Leave As Is" as a transparency
   option would still remap palette index 0 to the first found palette entry with Alpha 0,
   even if that's a filler entry not used by the image.
 - Fixed exporting room backgrounds was always writing a 32-bit image rather than using actual
   background's color depth.
 - Fixed Autocomplete failing in case of UNIX line endings in script file.
 - Fixed Autocomplete not giving correct results in case of a long chained access, i.e. something
   like "var[0].member.member".
 - Fixed Autocomplete giving wrong list of choices for wrong syntax cases like: indexed access of
   a type and non-array struct variable, member access of a static array.
 - Fixed Button getting resized to the image's size when user cancels different sprite assignment.
 - Fixed "Color Finder" and color properties were mapping a color number to RGB values with
   accuracy mistakes, resulting in slightly different values than the engine would use.
 - Fixed Font preview could crash the Editor with out of memory error in case of a very big font.
 - Fixed Editor refusing to open a project if one or more of the sections are missing in the file.
 - Fixed an unhandled exception occuring when rebuilding rooms if any script's header is missing.
 - Fixed a "unterminated string" error in Dialogs was not pointing to the actual error location.
 - Fixed double warning message when trying to close the Editor while a game test is running.
 - Fixed Editor may display a "save project" confirmation when run with "/compile" command-line
   parameter.

Scripting:
 - Dynamic arrays now have Length readonly property that returns their number of elements.
 - Support zero-length dynamic arrays. This may be useful if you need to have a dynamic array
   with no elements, but don't want to bother about checking a null pointer.

Script API:
 - Added eNullFont constant that lets assign or pass a "null font" to any property or function
   parameter which expects a font's ID. This "null font" will simply make any text not drawn
   and have no actual measurements (size, spacing, etc).
 - Added global events: eEventDialogStart, eEventDialogStop, eEventDialogRun,
   eEventDialogOptionsOpen, eEventDialogOptionsClose (these are handled in "on_event").
 - Events eEventGUIMouseDown and eEventGUIMouseUp now get additional parameters: mouse button,
   mouse x and y positions (relative to the exact GUI).
 - Expanded "on_mouse_click" callback, now supports two more parameters: click x,y coordinates.
 - Added RestoredSaveInfo struct which contains information about game save's contents, 
 - Support "validate_restored_save" callback, which lets user to validate restored saves with
   mismatching data and request cancellation or continuation of restoring this save.
 - Added Button.WrapText, TextPaddingHorizontal, TextPaddingVertical.
 - Added Character.Following property that returns another Character that this one follows after.
 - Added Character.TurnWhenFacing property.
 - Added Character.MoveStraight() complementing WalkStraight().
 - Added DateTime.CreateFromDate() and CreateFromRawTime().
 - Added static Dialog.CurrentDialog property and non-static ExecutedOption and AreOptionsDisplayed
   properties.
 - Added static Dialog.Stop() function, a OO-style alias to StopDialog().
 - Added RenderLayer enum, and optional "layers" parameter to DynamicSprite.CreateFromScreenShot(),
   that tells which of the game's render layers to capture when making a screenshot.
 - Added File.Copy() and File.Rename().
 - Added FileSortStyle and SortDirection enum, and File.GetFiles() function that returns a dynamic
   array of filenames found using certain pattern, and optionally sorted by name or time,
   in ascending or descending order.
 - Added File.GetFileTime() that returns file's modification time.
 - Added File.ReadFloat(), WriteFloat(), ReadRawFloat(), WriteRawFloat(), ReadRawBytes() and
   WriteRawBytes().
 - Added Game.InBlockingWait property, that tells whether game is waiting for any blocking action
   or a Wait* call to complete.
 - Added SaveGameSortStyle enum and Game.GetSaveSlots() function that returns a dynamic array
   of save slot indexes, optionally sorted in certain way.
 - Added Game.GetSaveSlotTime() that returns a time this save slot was last written.
 - Added Game.ScanSaveSlots() that scans a range of game saves and tests them for compatibility,
   using "validate_restored_save" too if it's present in user script.
   This action is not run immediately, but is scheduled to be executed after current script
   ends. It reports of scanning completion by sending eEventSavesScanComplete event.
 - Label.TextAlignment has now type Alignment, rather than HorizontalAlignment, and has
   full alignment range (both horizontal and vertical).
 - Added optional "fileSortStyle" and "sortDirection" parameters to ListBox.FillDirList().
 - Added optional save slot range (min/max), saveSortStyle and sortDirection parameters to
   ListBox.FillSaveGameList(). This lets to define the exact range of saves it should fill,
   and order them in desired way.
 - Added ListBox.FillSaveGameSlots(), which initializes a list of saves from a dynamic array
   of save slot indexes.
 - Added Object.DestinationX and DestinationY properties, complementing ones in Character.
 - Added Overlay.SetPosition() and SetSize() functions for convenience.
 - Added Room.BackgroundCount readonly property.
 - Added Room.NearestWalkableArea() that returns the nearest found point on a walkable area.
 - Added GetWalkBehindBase() function, complementing SetWalkBehindBase().
 - Added Speech.SpeakingCharacter that returns currently speaking character (for blocking speech).
 - Added GetTimerPos() that returns timer's position (remaining time), in ticks.
 - Added CopySaveSlot() and MoveSaveSlot(), which moves existing save to another slot.
 - Added optional save slot range (min/max) parameters to RestoreGameDialog() and SaveGameDialog().
 - Added optional "sprite" parameter to SaveGameSlot(), that lets to pass a number of an arbitrary
   sprite to write into this save instead of a standard "screenshot".
 - Added optional "width", "height" and "layer" parameters to SaveScreenShot().
   SaveScreenShot() now accepts paths containing standard file tokens ($SAVEGAMEDIR$ etc).
 - Added SendEvent() function that allows to trigger "on_event" function calls in script.
   Special event value eEventUserEvent may be used as a base index for user-defined events.
 - Added System.DisplayFPS property that toggles FPS counter (a replacement to Debug(4, 1)).
 - Added System.GetEngineInteger() and System.GetEngineString() for returning diagnostic
   information about engine's runtime state. Possible arguments are defined by
   EngineValueID enum.
 - Added new game-wide option OPT_SAVEGAMESCREENSHOTLAYER that lets to define which of the game's
   render layers will be captured when making a standard screenshot for the save game.
 - Add SaveComponentSelection enum and game option OPT_SAVECOMPONENTSIGNORE, which lets to skip
   certain components when saving or restoring a game. This has dual purpose: reduce number of
   things in game that may break older saves by simply not having them in a save, and also
   reducing the size of game saves on disk (e.g. in case of dynamic sprites). Note that all things
   that were not restored from the save will retain their *current state*.
 - Fixed some script functions in AGS API were declared with "int" return value, while they
   are supposed to be "void".

Engine:
 - Updated to SDL 2.30.11 and SDL_Sound 2.0.4.
 - Engine now potentially supports reading saves made in older game versions with different
   content, so long as these saves have *less* data in any given type (i.e. less Characters,
   or less controls on a certain GUI, or less variables in script, and so forth).
   This feature is enabled by having a special "validate_restored_save" function anywhere
   in the game script, that accepts an argument of type RestoredSaveInfo. RestoredSaveInfo
   contains various information about the restored save, and "Cancel" property, that must be
   explicitly set to "false" in script in order to allow to restore such save.
 - Engine supports returning to previously saved rooms which have less script data.
   It's important to remember though that it does no validation of restored room state on its own.
 - Dropped support for pre-3.5.0 game saves.
 - Increased the cap of simultaneously loaded scripts to 1024 (this includes all regular script
   modules, a single active dialog script, and a single active room script).
 - Engine no longer quits with error in case a script function assigned to a Room event is missing.
   Logs warnings about missing script functions assigned to any events.
 - "Box Out" room transition now uses color set with SetFadeColor().
 - Character.FollowCharacter() can now have a distance parameter up to 32766 (was limited to 255).
 - Ensure that Character.Speaking returns true when a speech is playing even if the character
   has no speech view.
 - Character.PlaceOnWalkableArea() now does a 1-pixel step scan, ensuring walkable area will be
   found regardless of how small it is. Optimized the search algorithm to keep it fast enough even
   in very large rooms.
 - Support voice-based lipsync (Pamela, Papagayo) with Lucas-Arts style speech.
 - DynamicSprite.CreateFromFile() may now load 1-bit and 4-bit bitmaps, converting to 8-bit.
 - Do not alter or clamp palette for 8-bit sprites loaded into a 16/32-bit game at runtime.
 - Assigning InventoryItem.Graphic will no longer reassign CursorGraphic too even if they were
   identical previously.
 - Calling DeleteSaveSlot() on a slot within 0-50 range will no longer secretly move a save with
   the topmost number (within the same range) to fill the emptied slot. If you still like to
   recreate this behavior, then use MoveSaveSlot() command.
 - Support calling StopDialog() inside any regular script and dialog script, and also while
   dialog options are displayed. That will schedule dialog's stop to be performed after current
   script finishes.
 - Removed arbitrary limit of 2k bytes for the result of String.Format().
 - Engine will no longer quit with error if any object is assigned a non-existing sprite, but
   continue, using a sprite 0 as a placeholder instead.
 - Ensure that the objects with identical z-order (baseline) always keep same relative sort order
   when being drawn (note: engine does not guarantee a predefined order, only a persistent one).
 - Implemented video buffering on a separate thread. Allow to drop late video frames.
 - When mouse is locked in window, confine its position to the game viewport; exclude black border.
 - Added "display" config option to "graphics" section. This is a 1-based display index, where
   0 means "use default display".
 - Added new accessibility config settings in "access" section: "speechskip", "textskip",
   "textreadspeed". These let player to override game's skipping style for character speech and
   text messages, and text reading speed parameter that controls speech timing.
 - Added "max_save" config option in "override" section: this lets to enforce an arbitrary number
   of saves displayed in a standard save/restore dialogs in game.
 - Added "--display" command-line argument that lets choose which display to open game window on.
 - Added "--no-plugins" command-line argument that denies loading any plugins;
   also added respective config option "noplugins" in "override" section.
 - Fixed Software renderer being unable to restore a windowed mode on certain monitors,
   when switching from a real fullscreen mode.
 - Fixed character may get stuck inside a non-walkable area after Character.WalkStraight().
 - Fixed character may rarely finish walking on a non-walkable pixel.
 - Fixed calling Character.StopMoving() after AddWaypoint() succeeded a regular Walk() call with
   eWalkableAreas parameter will wrongfully teleport the character to the nearest walkable area,
   even though AddWaypoint is supposed to ignore walkable areas.
 - Fixed a number of region or hotspot's "Stand on hotspot" events may unexpectedly run after a
   blocking character's walk, even if character is no longer standing on that region/hotspot.
 - Fixed Lucas-Arts style character speech displaying offscreen if character is standing below the
   bottom of a room viewport.
 - Fixed calling Dialog.Start() inside a dialog script would create a nested "dialog state",
   which could eventually lead to internal mistakes and program stack overflow. Dialog.Start()
   will now schedule a proper dialog topic switch, equivalent to "goto-dialog" command.
 - Fixed displaying room masks with Debug command in legacy "upscale" mode.
 - Fixed a potential lockup that may occur when the engine is run from the editor, and is told
   to stop at a breakpoint.
 - Fixed 48khz OGG clips may have extra silence added to them in the end, causing "hickups" when
   the sound playback is looped.

Engine Plugin API:
 - Updated few callback and function prototypes in order to make them 64-bit compatible
   (allow pass and receive pointers). This includes AGS_EngineOnEvent for AGSE_TRANSLATETEXT
   and render stage events, and CallGameScriptFunction which now lets pass a const char* argument.
 - Added IAGSEngine.CreateDynamicArray(), which lets plugins to create dynamic arrays.
 - Added IAGSEngine.GetDynamicArrayLength() and IAGSEngine.GetDynamicArraySize(), which tell
   the passed array object's number of elements, and total size in bytes respectively.
 - Added IAGSEngine.Log(), which lets plugins to print using engine's log system.

Compatibility:
 - Fixed loading of games made in AGS 2.55-56 which include plugins.
 - Fixed loading of rare games made with AGS 2.5 or higher, which contained deprecated
   "room animations" (animations themselves are currently not functional).
 - Fixed old rooms with rare x3 resolution not displaying correctly.
 - Fixed old pathfinder imprecision affecting few pre-3.0 games.
 - Allow pre-2.7 games to have RestartGame() command be followed and overridden by a NewRoom().
   This is necessary for some older games to be able to proceed.

Windows:
 - Windows version of AGS is now built with MSVS 2019 and higher.

WinSetup:
 - Redesigned winsetup into a tabbed dialog.
 - Added "Reset To Defaults" button that resets all options to values from the game's default
   config file.
 - Added "Display" selection, allows to select which display to open the game window on.
 - Added "Accessibility" settings for skipping speech and text messages, for text reading speed.
 - In "disabled" section of config "access_skipstyle" setting lets disable all options in setup
   related to the speech and text skipping.


---------------------------------------------------------------------------------------------------

VERSION 3.6.1 - Patch 13, January 2026

Editor:
 - Fixed minor visual mismatches in GUI previews occuring for high-res games.
 - Fixed Callstack panel not getting cleared when the game is shutdown, and clicking on its items
   could bring Editor into the wrong state.

Engine:
 - Fixed default Slider's handle drawn with 1 pixel offset mistake. (Regression after Patch 12)
 - Fixed Slider unexpectedly increasing MaxValue by 1 if it was assigned equal to MinValue.
 - Fixed multiline dialog options having unnecessary indentation at new lines in case there's
   already an indentation after option numbering or a "bullet" graphic.
 - Fixed Character's speech text's behavior being modified by a non-blocking voice clip run by
   a Game.PlayVoiceClip() call.
 - Fixed Game.PlayVoiceClip() not supporting narrator's voice.
 - Fixed SetTextOverlay() script function ignoring new position parameters.


VERSION 3.6.1 - Patch 12, October 2025

Editor:
 - Restrict Room's BackgroundAnimationDelay property to a range of 0-255 (engine's limitation).
 - Fixed View Editor reacting to shortcuts such as F or Delete when the input focus is set to 
   a selected Frame's properties.

Compiler:
 - Fixed a crash caused by meeting certain unicode characters in script (outside of string or
   character literals).

Engine:
 - Do not enable "infinite FPS mode" if game script calls SetGameSpeed with a value 1000 or higher.
   The problem is that the script API does not have any means to turn this mode off, so game
   will be stuck in "maxed FPS". The remaining method is Ctrl+E hotkey used to toggle
   "infinite FPS" if the game is run with "--fps" command line argument.
 - Do not quit with error if a wrong GUI type is assigned as a "TextWindow GUI", display default
   message box instead and log a warning.
 - Do not quit if failed to run PlaySilentMIDI(), log a warning instead.
 - Do not try animating a cursor if the assigned view is invalid or contains no frames in loop 0.
 - Don't log warnings for File.Exists and Game.GetSaveSlotDescription when a file was not found,
   as these functions are meant to test a file existence.
 - Fixed engine's general misbehavior occuring if any Character, GUI or AudioClip does not have
   any ScriptName assigned.
 - Fixed room background animation running too fast if the BackgroundAnimationDelay was set
   to a value > 127.
 - Fixed Character.FaceDirection() and similar commands not resetting idle state.
 - Fixed dialog options were rendering twice per game frame (this did not cause any graphical
   glitches, but could cause extra performance issues).
 - Fixed slightly broken slider's handle position for thin sliders with very small handle sprites.
 - Fixed sprite cache or texture cache not initializing properly if their size in config is
   assigned to a too large number. The cache sizes will be now correctly limited to the max
   possible size available to the current engine build (32-bit or 64-bit).
 - Fixed Software renderer could potentially crash when the sprite cache reaches its limit and
   there's an overlay displayed on screen.
 - Fixed switching display modes while running a 16-bit game could lead to current graphical
   overlays (like character portraits, etc) become corrupted.
 - Fixed a DynamicSprite not updated on screen after CopyTransparencyMask() call (except when
   running with a Software renderer).
 - Fixed SeekMIDIPosition() and GetMIDIPosition() crashing the game if a "silent MIDI" is playing.
 - Fixed NumPad key presses doubling up when NumLock is on in a "old key-handling mode".
 - Fixed WaitInput() with infinite timeout suspending forever in a skipped cutscene.
 - Fixed mouse clicks could stop working after a call to a InventoryScreen() function, if player
   character does not have any items.
 - Fixed engine overwriting existing translations when duplicate keys are found in the translation
   file (it should keep the first met translation instead).
 - Fixed engine to not try to translate empty lines. There was a rare error when the translation
   contained an incorrect entry with empty key line but non-empty translation, in which case
   engine could display that "translation" anytime any label has empty text.
 - Fixed a "division by zero" crash occuring when the engine is precaching a View without frames.

Compatibility:
 - If PlayVideo() is used to play a non-OGV file, then engine will lookup to a OGV file of the same
   name to play instead. This is made to let game authors or players of old games to convert wmv/avi
   video assets to ogv without recompiling game scripts.
 - Fixed loading games made by v2.56 editor which contain custom properties.
 - Fixed loading saves made by v3.4 - v3.4.1 engine in games with custom properties.
 - Disable smooth walk transition in pre-3.6.1 games, as apparently this breaks logic in some of
   them where precise walking coordinates and/or timing is required by scripts.
 - Fixed misaligned text centering on buttons in pre-3.6.0 games.

Plugins:
 - Fixed a crash in AGSBlend plugin, occuring if DrawSprite function was called with transparency
   parameter = 100 (fully transparent).

WinSetup:
 - If any of the cache sizes in config is set to a value not present in the option lists,
   the list will be assigned to the nearest matching value, instead of resetting to default.


VERSION 3.6.1 - Patch 11, May 2025

Editor:
 - Clear output panels when loading a different project.

Engine:
 - Fixed engine could run scheduled previous room's event after changing to a different room.
   This could happen, for example, if the room was changed in "on_event" with
   eEventEnterRoomAfterFadein; in such case a previously scheduled "After Fade-in" would run
   before proper "Before Fade-in" of the new room.
 - Fixed in 8-bit games Fade effect did not having a frame delay (was passing instantly).

Compatibility:
 - Fixed certain old 8-bit games (like "Trilby's Notes") did not recover after the FadeOut()
   script command.


VERSION 3.6.1 - Patch 10, April 2025

Editor:
 - Fixed a check for an imported room mask size did not correctly account for the room's
   mask resolution setting (it worked, but mishandled some edge cases).
 - Fixed exceptions occuring when reimporting a sprite or a audio clip from source,
   if the source filename string was wrapped in double quotes.
 - Fixed script variables generation could sometimes produce a non-latin character in a
   variable name if the Editor is running on a system with non-English current locale.
 - Fixed '\n' linebreaks not saved correctly in dialog option strings.
 - Fixed translation compiler mistreating escaped opening bracket in a text line ("\[");
   it must keep it as-is, because "[" char is a old-style line break in AGS.
 - Fixed LogPanel not applying filter settings right after they were changed.

Engine:
 - Fixed a AudioChannel did not report a correct Position right after a AudioClip.PlayFrom() call.
 - Fixed Button resizing to sprite 0 size if NormalGraphic is set to 0 (default button look).
 - Fixed that if Character's walking speed is changed while its walking, and movement path contains
   45-degrees diagonal segments, character starts walking along a different route.
 - Fixed a solid Character (serving an obstacle) can get ignored by a walking Character, if the
   obstacle character's position appears within the walking character's own blocking zone.
   (This seems to be a redundant condition introduced very long time ago in the engine by mistake.)
 - Fixed object's look not updated after it was assigned a dynamic sprite, redrawn, sprite deleted,
   object redrawn without a sprite (used a placeholder), and then another dynamic sprite assigned
   with coincidentally the same number.
 - Fixed font outline index limited to 127 (although we theoretically support higher font numbers).
 - Fixed font outline parameters not initialized correctly if engine is built by a system that
   treats "char" as unsigned 8-bit type.
 - Fixed a crash which occured when script mistakenly tried to call RunInteraction() for
   a inventory item 0.
 - Fixed loading translation entries larger than 1024 bytes.
 - Fixed SDL log level was defaulting to "verbose" if not read from config (should be "info").

WinSetup:
 - Fixed "Save and Run" command sometimes caused 2 engine processes, one of which terminated later.
   This did not prevent a game from running, but could result in temporary CPU and memory overload.


VERSION 3.6.1 - Patch 9, January 2025

Editor:
 - Fixed dragging an item to a folder in Project Explorer might cause that item to visibly appear
   in a wrong folder, if there are folders which name differ only in letter case.

Engine:
 - Fixed Character.Animate() could cause game to error reporting "invalid loop" if this character
   was idling at the time, and Character.LockView() was not called prior to Animate().
 - Fixed inventory cursor hotspot (crosshair) not drawn properly over item sprites with alpha.

OSX:
 - Fixed location of global config file: was in game installation directory, now in
   "Library/Application Support/uk.co.adventuregamestudio".


VERSION 3.6.1 - Patch 8, November 2024

Editor:
 - Fixed game cannot be loaded if its GameFileName setting is an empty string.
 - Fixed pressing Alt was not selecting Main Menu.
 - Fixed error occuring when trying to assign an image to the multiple selected View Frames
   if they have different initial images.
 - Fixed script preprocessor directive "#else" in the nested conditions. 

Engine:
 - Made File.ReadStringBack() support reading back strings without null-terminator in the end
   (ReadStringBack() reads a string, which has its length prepended to the sequence of chars).
 - Improved graphic mode selection when game window is moved to a secondary monitor.
   Note that still not all graphic setups are reliable on secondary monitors, specifically "real
   fullscreen" mode may be behaving unexpectedly if you try to switch to it on non-primary display.
 - Fixed AudioChannel's Paused state is not saved when saving the game.
 - Fixed error in case a character was walking while being locked to a temporary View, and switched
   to a directional loop which does not exist in the locked view.
 - Fixed active item cursor's image may duplicate itself onto other cursors under certain
   conditions.
 - Fixed Inventory Window in automatic mode not redrawing its contents immediately when player
   character changes.
 - Fixed ListBox.FillDirList() may add case-sensitive duplicates on platforms with case-sensitive
   filesystems.
 - Fixed room's fade-out effect playing while skipping a cutscene (it must skip instantly).
 - Fixed FadeOut or FadeIn not toggling screen state if they are inside a skipped cutscene.
   This could have resulted in screen not turning to black or not restored as expected if cutscene
   was skipped by player.
 - Fixed Wait() delay of value > 32k would be treated as infinite timeout.
 - Fixed Ctrl + Alt key combination not working (toggle mouse lock). This is a regression in 3.6.1.
 - Fixed game may fail loading on platforms with strict memory alignment (e.g. MIPS processors).

Compatibility:
 - Fixed SetCharacterViewEx() not treating "align" parameter according to old-style set of values.
 - Fixed SetTextOverlay() could cause internal mistakes leading to unexpected errors in game.
 - Fixed Wait() calls for pre-3.6.0 versions of Script API, where negative delay was treated as 0.

WinSetup:
 - Fixed setup not distinguishing "desktop resolution" and "native resolution" from explicit
   resolution sizes when saving or loading config. Made sure that it remembers exactly the choice
   that user made ("desktop", "game resolution" or explicit resolution size).
 - Fixed "native game resolution" not present in the list if it equals desktop resolution.
 - Fixed nearest resolution selection in case config requested a resolution equal to the native
   game's resolution, but that resolution was not among the supported ones.


VERSION 3.6.1 - Patch 7, September 2024

Engine:
 - Hotfix mouse cursor not being drawn sometimes after changing rooms (regression in 3.6.1 P6).


VERSION 3.6.1 - Patch 6, September 2024

Editor:
 - Fixed Ctrl+C and Ctrl+V not working in GUI editor.
 - Fixed sprite export and copying a sprite to clipboard operations were always exporting
   a 32-bit image, regardless of the actual sprite's color depth.
 - Fixed "Recreate spritefile" command was unintentionally converting any sprite to 32-bit if its
   source was not found, and it was taking existing image from the old spritefile.

Engine:
 - Fixed Software renderer could crash the game under some circumstances when the sprite cache's
   limit is exceeded (this is a regression in 3.6.1).
 - Fixed text-based lipsync's frame delay calculation: the existing formula was causing the delay
   value to "jump" back and forth with the slightest difference of speech text length, resulting
   in the speech lines of close length to be played with the notably different animation speeds.
 - Fixed drawing a 32-bit sprites on a 8-bit surface (e.g. a room mask), it was done wrong and
   was causing a memory corruption too.
 - Fixed drawing a room's walkable mask in script could cause errors during character walking
   if used colors exceeded walkable area number limit.
 - Fixed walk-behinds not drawn over characters and objects anymore (regardless of their baselines)
   after walk-behind mask was changed using drawing operations in script.
 - Fixed Game.SimulateKeyPress() not working in "old key-handling mode" (regression since 3.6.0).
 - Fixed script location is not reported in case of logical errors in engine's functions
   (regression since 3.6.0).

WinSetup:
 - Removed an obscure "Use 85 Hz display" option.


VERSION 3.6.1 - Patch 5, August 2024

Editor:
 - When the room background size changes, clamp Room Edges to the new size.
 - Fixed Editor refusing to load a project if its folder name exceeds 40 characters.
   (An obsolete historical limitation which we forgot to cut from the program.)

Compiler:
 - Fixed script compilation hanging forever if a non-latin unicode character is met in script
   (outside of comments).

Engine:
 - Fixed GUI.ProcessClick() using mouse position when detecting a GUI control, instead of
   the position passed in the argument list.
 - Fixed Region.GetAtScreenXY() was returning null for offscreen coordinates. Made it return
   region[0] for consistency with other room areas, and backwards compatibility.
 - Fixed room Overlays not sorted in the order of their creation, like screen Overlays.
 - Fixed a potential mistake in Lucas-Arts speech position when there are multiple room
   viewports and speaking character is not directly visible in any of them.
 - Fixed Engine could switch program's locale to the current system locale by mistake
   when player is typing text. This could potentially lead to random glitches in text input
   in games which are run in ASCII mode and are handling extended characters.
 - Fixed TextBox was trying to display unsupported characters (in ASCII mode), resulting in
   random garbage.


VERSION 3.6.1 - Patch 4, July 2024

Editor:
 - Fixed extracting templates with very large files inside would cause "Out of memory" error.
 - Fixed crash occuring when trying to import a non-existant GIF frame during Sprite Import.
 - Fixed potential mistake with sprite transparency occuring when importing a 8-bit sprite
   into 16/32-bit game.

Compiler:
 - Fixed "\t" (and few other less common escaped chars) not handled properly when they are
   inside string literals.
 - Fixed a crash in compiler occuring if user script defined a variadic function.
   (User-defined variadic functions are not properly usable at the moment, but this at least
   prevents an unhandled exception.)

Scripting:
 - Declare "UNICODE" macro for scripts if game is made in unicode mode.

Script API:
 - Added a number of missing OPT_* constants used with Get/SetGameOption functions.

Engine:
 - Fixed setting Screen.AutoSizeViewportOnRoomLoad to false in "game_start" could cause primary
   viewport and camera become initialized with zero width and height.
 - Fixed setting camera's size in "game_start" would unexpectedly get camera clamped to 320x200.
 - Fixed number of mistakes in Text Parser occuring when handling "multiwords".


VERSION 3.6.1 - Patch 3, June 2024

Editor:
 - Fixed that after deleting a View's frame editor did not select next frame (regression in 3.6.1).
 - Fixed "Delete last loop" button not appearing in the View Editor if the view is filled using
   "Assign sprites to view" command from the Sprite Manager.

Engine:
 - Implemented an alternate solution for rendering "bad" TTF fonts that does not increase their
   loading times (after previous patch 2).
 - Allow scene render during "load room" event if the last room transition was "Instant".
   This has to be done because number of games used this event for custom transitions.
 - For games compiled in "Debug" mode "warnings.log" file will be written in "savegame dir"
   on platforms where modifying game directory is forbidden in principle (OSX, iOS, Android, Web).
 - Fixed System.Log() was registered for plugins using a wrong argument list.

Compatibility:
 - Fixed loading of 3.5.0 saves (broken in 3.6.1).

Windows:
 - Fixed disk space check was testing space in the current directory instead of the
   save game location.


VERSION 3.6.1 - Patch 2, May 2024

Editor:
 - Fixed few potential program errors for "Generate Keystore" in Android preferences.
 - Fixed external processes (such as test game runs) were started using ShellExecute,
   which could theoretically lead to unintended results.

Engine:
 - Fixed String.Replace crashing the engine if the resulting string exceeds 3000 bytes.
 - Fixed releasing a mouse button could cause double "on_event" call (with eEventGUIMouseUp).
 - Improved rendering of TTF fonts which have glyph sizes surpassing declared font's height.
   This fixes the look of text on gui controls, and automatic outlining on these fonts.
 - Fixed a dialog shown with InputBox() function drawing typed text beyond text box'es border.
 - Fixed custom dialog options in the "old mode" not triggering redraw when the active
   option changes.


VERSION 3.6.1 - Patch 1, April 2024

Editor:
 - Fixed View's frame preview sometimes drawn incorrectly, in case of certain panel sizes.
 - Fixed folding in the script editor not working correctly if there's a commented closing
   bracket ("//}") inside this code section.
 - Fixed Editor sometimes failing to update game exe's file information and/or icons, if
   user was importing any sprites during this working session.

Engine:
 - Fixed room objects not updating under Direct3D/OpenGL renderer, if they were assigned a dynamic
   sprite, then that sprite was deleted, and a new one assigned with coincidentally same ID.
 - Fixed room objects not updating under Software renderer, if they were assigned a dynamic sprite,
   and that sprite was modified while object was not visible on screen.
 - Fixed inventory cursor's crosshair not displayed (when enabled in game settings).


VERSION 3.6.1, April 2024

Common features:
 - Implemented Deflate compression option for sprites.
 - Removed length limits for: Game name, savegame folder, Character's script name and
   regular name (description), Inventory item's name (description), Mouse cursor's script name,
   Audioclip's script name.

Editor:
 - Discontinued Source control integration functionality, removed "Put sound and sprite files
   in source control" option from General Settings.
 - In General Settings moved few properties to different groups for better consistency.
 - Added "Scale Character sprite offsets" property to General Settings. This property refers to
   scaling of Character.z and sprite offsets added by LockViewOffset script command.
 - Added TextureCacheSize and SoundCacheSize properties to Default Setup. These let configure
   the sizes of runtime texture and sound cache sizes respectively.
 - Added "Leave room after fade-out" event to Rooms (called "Unload" by default).
 - Added Translated property to all GUI Controls (was available only in ListBox). Translated
   property tells whether this control's text has to be translated, and applied text direction
   (in right-to-left text mode).
 - Support '\n' linebreak character in the Label's Text and potentially other text properties.
 - Improved Room Editor controls:
   Added free panning mode done by holding the middle mouse button, or alternatively -
   by holding Space + LMB.
   Mouse Wheel without key modifiers scrolls the room vertically; Shift + Mouse Wheel scrolls
   the room horizontally.
   Zoom is done by Ctrl + Mouse Wheel and room now zooms towards or outwards the cursor position.
 - In Room Editor the context menu is now displayed by RMB or Shift + RMB while editing masks.
   The individual room mode menu is merged with the "copy coordinates" command when shown.
 - In Room Editor the hint with coordinates is now also displayed when moving Objects or Characters
   with keyboard.
 - In Dialog Script editor support most Edit menu and context menu commands from the regular Script
   editor, with a few exceptions.
 - In Sprite Manager added command "View" -> "Show filenames" which toggles display of a sprite's
   source filename under the sprites.
 - Adjust sprites' import settings after "Crop sprite edges" command; this would ensure that these
   sprites are restored from source file keeping their cropped sizes.
 - During sprite export Editor will display a proper progress dialog.
 - Zoom controls in Character and View panes now allow downscaling too. View editor displays the
   preview sprite stretched to fill the parent panel.
 - View editor now allows to select multiple frames at once, across multiple loops too, using
   standard Shift + LMB and Ctrl + LMB combinations. Properties panel lets modify properties for
   all the selected frames at once.
 - Added "Replace with all sprites from folder" command to the View editor's context menu.
 - For Audio Clips in the project tree added "Force Reimport", "Force reimport all file(s)" and
   "Replace Source File" context menu commands.
 - For Output Panel added "Copy selection" context menu command.
 - Implemented Log Panel that lets you see the engine and game logs right in the Editor.
 - Improved LipSync panel looks in case user's system has display scaling option enabled.
 - "Goto Definition" command in script will now work for most of the game entities too, such as
   Characters, GUIs, and so forth. In that case it will find a game's entity and open a respective
   editor panel for it. This still does not work for some types, such as Room objects, and Views.
 - Added main menu commands for opening a Project folder and Compiled folder.
 - Added "Export Global Messages to script" menu command. This command is meant for upgraded
   pre-3.2 game projects, and will generate a script with a String array, moving global messages
   texts there.
 - For script's tabs added a context menu command for opening this script's location.
 - When run with "/compile" argument Editor will print all messages to the console (stdout),
   instead of displaying modal message windows.
 - For Android build target Editor now supports a directory to place plugins in.
 - When building a game for Android and Linux the Editor will now be more tolerant to missing
   plugins and only issue a warning instead of stopping with error.
 - Config will now be saved in UTF-8, letting to support setup program's title text in unicode.
 - For non-Windows build targets Editor will fix config containing Direct3D graphics driver
   option and set OpenGL instead.
 - For Color Themes: implemented character literal, braces match and braces error settings.
 - Made Editor be somewhat more tolerate to missing XML nodes in Game.agf, in many cases it will
   still let open a game.
 - When upgrading older game projects, Editor will insert a call to SetRestartPoint() in the end
   of the 'game_start' function in GlobalScript.asc. This is done to complement removal of an
   automatic restart point in the engine. This inserted command is safe to remove.
 - When upgrading pre-3.2 rooms with disabled SaveLoadEnabled property the Editor will reset
   this property and insert a comment with a warning into the corresponding room's script.
   This is done because this property is deprecated as is no longer accessible.
 - Fixed Editor refusing to open a game if one of the translation files is missing.
 - Fixed General Settings and Default Setup not working correctly right after importing
   a pre-3.* game project.
 - Fixed importing GIFs or 8-bit PNGs may lose transparent pixels if source images used
   other palette index than 0 for transparency.
 - Fixed Project Explorer's folders collapsing after certain user actions, such as dragging
   items or renaming things.
 - Fixed deleting collapsed "region" in script would sometimes lead to portion of the script
   undeleted but staying invisible.
 - (Possibly) Fixed a "Index out of range" exception in Script editor, related to the
   "script location" drop-down list, which could occur at random circumstances while
   working with the script, and any Color Theme is enabled.
 - Fixed Editor could miss some of the files when cleaning up old compiled files after the
   Game's Filename property is changed.

Scripting:
 - Support "#else" preprocessor directive.

Script API:
 - Implemented Room's "After fade-out" event.
 - Added eEventLeaveRoomAfterFadeout event for the global "on_event".
 - Added eEventGameSaved event which runs after game was saved.
 - Expanded interaction functions for Character, Object, InventoryItem, Hotspot and Region types:
   now they all receive respective object's pointer as a parameter, similar to GUI event functions,
   as well as a cursor mode this interaction was run with, if applicable.
 - Added Game.ResetDoOnceOnly(), which completely resets all DoOnceOnly instances.
 - Added Game.PrecacheSprite() and Game.PrecacheView(), which preload certain sprites and linked
   frame sounds into the engine's sprite cache memory.
 - Added ScriptName property to AudioClip, Character, Dialog, GUI, GUIObject, Hotspot,
   InventoryItem, Object.
 - Added static GetByName() function to AudioClip, Character, Dialog, GUI, GUIObject, Hotspot,
   InventoryItem, Object.
 - Added Object.AnimationVolume property, which works similar to Character.AnimationVolume.
 - Added static File.ResolvePath() and File.Path property.
 - Added support for a text formatting to a number of functions:
   DisplayAtY(), Character.SayAt(), Character.SayBackground(), DrawingSurface.DrawStringWrapped().

Engine:
 - Updated to SDL 2.28.5 and SDL_Sound 2.0.3+.
 - Significant performance improvement to scripts. Script running speed restored to a level
   close to AGS 3.2.1. Testing few "script-heavy" games showed fps raise by up to 30-40%
   compared with 3.6.0 engine.
 - Improved performance of String objects in script. For instance, appending a character to
   a String is now roughly x2 times faster, *sequential* iteration of String.Chars[] in Unicode
   mode is about x12 (!) times faster (Strings in ASCII mode have relatively less improvement,
   because they have been faster than Unicode mode already).
 - Improved performance when creating, deleting and manipulating Overlays; allows the game
   to have thousands of those with much less slowing down.
 - Improved performance when updating and deleting dynamic sprites, and notifying any objects
   that have to redraw themselves. Engine no longer resets Graphic properties of objects
   referencing deleted dynamic sprite to 0.
 - Implemented "texture cache", in addition to the existing "sprite cache". The texture cache
   keeps textures generated from raw sprites and lets reusing them, improving performance
   and reducing CPU workload. The actual impact is proportional to the game's resolution and
   amount of simultaneously animated objects on screen.
 - WFN font renderer now too supports unicode mode and renders texts in utf-8, so long as the
   font contains glyphs of corresponding indexes.
 - Buttons, ListBoxes and TextBoxes now support Right-to-left text direction.
 - DrawingSurface.DrawString now supports Right-to-left text direction.
 - All the script File functions now treat paths in case-insensitive way (including subdirs),
   which makes them platform-independent.
 - Removed an automatic SetRestartPoint() call at startup. This is done in case user does not want
   to use default "restart" save slot, or has a custom save system.
 - Support handling multiple mouse clicks per game frame, similar to how multiple key presses
   were supported since 3.6.0.
 - When starting up, engine will now precache only first 4 or 8 loops of the starting player
   character's View. This is done to avoid filling sprite cache with too much sprites at once
   in case when the player's View contains lots of additional animations.
 - Characters will now have their graphic offsets, set by Character.z property and LockViewOffset()
   function, scaled along with the character's own scaling. This is done so long as the respective
   game option is enabled in the General Settings.
 - Ensure that character and object scaling is updated even when the game is not drawn.
   This fixes rare issues when their scale property did not update in time whilst the game was
   completely fadeout, and similar cases.
 - Allow to change Character's move speed while its moving.
 - When Character is ordered a new move command while already moving, the engine will try to make
   a smooth transition between old and new moving without a delay.
 - Ensure that when Overlays have identical ZOrder they will be sorted in the order of their
   creation. Besides convenience, this is also meant to restore historical behavior from before
   Overlay.ZOrder property was introduced.
 - Allow game to call DynamicSprite.CreateFromDrawingSurface() and CreateFromBackground()
   with zero or negative size, clamping it to 1x1, in consistency with Create().
 - Engine will now log a warning for the most incorrect parameters to Animate function instead
   of quitting the game.
 - Engine will now skip blocking Character.Say commands instantly while skipping a cutscene.
 - Object.SetView now lets invalid loop and frame values, and fallbacks to using loop 0, frame 0,
   printing a warning. This is also consistent with backwards-compatble SetObjectFrame() behavior.
 - Changed Object.SetView() to not play a frame's sound, which could lead to a duplicated sound
   play if Object.Animate is run right after.
 - Text Overlays internal images are now registered as dynamic sprites, and their IDs may be
   read from Overlay.Graphic. This lets find out their sizes using Game.SpriteWidth/SpriteHeight
   and optionally draw them somewhere using DrawingSurface.DrawImage.
 - Ensure all the script API is now correctly available for the plugins.
 - Engine will now safeguard plugin's reading and writing of game saves, so that any mistakes
   done by plugins won't affect other parts of a save.
 - Engine will disable vsync in a "infinite fps" mode, because vsync prevents getting more fps.
 - Engine will force any in-game debug messages to be displayed as blocking message boxes,
   disregarding game's "Display all messages as speech" option.
 - Display critical alerts as system modal message dialogs on all platforms that support that
   (unless engine is run with "--no-message-box" parameter).
 - Print some info about memory usage when reporting a "Out of memory" error.
 - Deprecated in-game "console", as practically useless.
 - Added new config settings in "graphics" section: "sprite_cache_size" (which replaces deprecated
   "cachemax" in "misc") and "texture_cache_size".
 - Fixed Characters may be seemingly "walking in place" for some time when arriving at destination.
 - Fixed Display and Say commands treating the second met "&" sign as a voice-over token too
   (they must only check the first one in string).
 - Fixed PlayMP3File() function limiting filename argument by an arbitrary number of characters.
 - Fixed speechlines were adjusting their Y position while trying to not overlap GUIs even when
   these GUIs are completely offscreen.
 - Fixed first Sierra-style speechline in a sequence was adjusting its Y position without need
   when GUIs are set to be hidden during game pause (this includes blocking speech).
   Normally, the speechlines are adjusting their Y position in order to not overlap GUIs,
   but when GUIs are hiding during speech there should not be any need to do so.
 - Fixed script behavior in case a local variable was assigned a value without being initialized
   with a zero memory by compiler's intruction beforehand. This is not a problem with the standard
   compiler, but technically could be an issue with any custom implementation.
 - Fixed old-style letterbox viewport getting broken after loading an old pre-3.5.0 save.

Engine Plugin API:
 - Added IAGSStream interface, IAGSEngine.OpenFileStream() and GetFileStreamByHandle().
 - Added IAGSEngine.ResolveFilePath() method, which resolves a script path (with location tokens)
   into a proper system filepath.
 - Fixed IAGSEngine.GetFontType() incorrectly reporting TTF font type for WFN fonts with more than
   128 characters.

Compatibility:
 - In Editor, restored all the Character's variables available in "backward-compatible" mode.
   This is primarily to make it easier to import very old games.
 - Allow to run an animation over a loop with zero frames, by using the placeholder frame.
   This lets particular old games to continue running instead of crashing with error.
 - Fixed slower character walking speeds in pre-3.1 upscaled and high-resolution games.
 - Fixed Object.SetView() and SetObjectFrame() not treating -1 for loop and frame as
   "keep previous values" in older games.
 - Fixed inventory window not updated after game.top_inv_item is assigned a new value.
 - Fixed a "New Room" command in old-style dialog scripts was preventing "First time Enter room"
   event to be called.

Windows:
 - 32-bit Windows engine is now built as "large address aware" program, which will allow it to use
   up to 3 GB of RAM on 32-bit systems and 4 GB of RAM on 64-bit systems (was 2 GB previously).

iOS:
 - Updated port for 3.6.*.

Web / Emscripten:
 - Fixed Safari cannot switch the game into fullscreen mode.

WinSetup:
 - Added options for setting texture cache and sound cache size.
 - Added options to disable particular graphic drivers and graphic driver selection,
   and fullscreen mode selection.


---------------------------------------------------------------------------------------------------

VERSION 3.6.0 - Patch 13, April 2025

Editor:
 - Fixed translation compiler mistreating escaped opening bracket in a text line ("\[");
   it must keep it as-is, because "[" char is a old-style line break in AGS.

Engine:
 - Fixed loading translation entries larger than 1024 bytes.

WinSetup:
 - Fixed "Save and Run" command sometimes caused 2 engine processes, one of which terminated later.
   This did not prevent a game from running, but could result in temporary CPU and memory overload.


VERSION 3.6.0 - Patch 12, February 2025

Engine:
 - Fixed deleted DynamicSprite which is still assigned to a mouse cursor may cause engine's
   sprite cache to enter a corrupt state, eventually leading to a crash.


VERSION 3.6.0 - Patch 11, April 2024

Editor:
 - Fixed exception in Room Messages editor occuring if a certain game's Character is missing.

Engine:
 - Fixed disabled GUIs not hiding their controls if "Hide all their controls" disabled style
   is set in General Settings, and game is run with Direct3D or OpenGL renderers.
 - Fixed "greyed out" GUI controls leaving traces on parent GUIs when running with Software
   renderer.
 - Fixed text parser in Dialog Options not working correctly if "new key handling" mode is on.
 - Fixed DynamicSprite.SaveToFile() return value was inverse (regression in 3.6.0).
 - Fixed engine crash in GetHotspotProperty() if the function is called with invalid ID.
 - Fixed room Camera may fail to restore its position in the room after loading a save.
 - Fixed fonts may not be assigned correct parameters when a new game is launched
   by calling RunAGSGame() in script (regression since 3.6.0 or 3.5.*).

Compatibility:
 - Fixed engine refusing to load saves made by 3.2.0 engine, although being capable to do so.


VERSION 3.6.0 - Patch 10, February 2024

Editor:
 - Fixed a warning condition for copying 32-bit bitmaps to a desktop clipboard of less color depth.
 - Fixed keyboard shortcuts for GUI Editor's Copy and Paste commands.
 - Fixed a rare exception when scrolling the room in the editor.
 - Fixed "Auto-number speech lines" and "Create voice acting script" operations failing
   if a Character's name contains underscore.

Compiler:
 - Fixed escaped character literals not being parsed correctly. This makes character literals
   like '\n' and '\t' actually work in script.

Engine:
 - Updated SDL_Sound library to 2.0.3.
 - Improved OpenGL texture management, which should result in less system and video memory
   spent on sprite textures.
 - Fixed Character.AddWaypoint() potentially using wrong walkspeed, if multiple characters or
   objects are ordered to start a non-blocking move in a mixed order.
 - Fixed Character.AddWaypoint() is using incorrect speed if this room has a non 1:1 mask
   resolution, and "Scale speed with mask resolution" setting is enabled.
 - Fixed Overlay.Create() crashing the engine if a non-existing sprite is passed as an argument.
 - Fixed Say("...") command get stuck in endless loop if Speech.DisplayPostTimeMs is non-zero.
 - Fixed PlayFlic() not working if called second time in game.
   This is likely a regression since 3.6.0.
 - Fixed NumPad keys not handled properly by the engine (in on_key_press, IsKeyPressed, and TextBox
   control). This is a regression since 3.6.0.
 - Fixed OpenGL renderer causing scaled sprites to have colored outlines sometimes while using
   Linear filter.


VERSION 3.6.0 - Patch 9, January 2024

Engine:
 - Fixed engine incorrectly reporting a script loading error, which may occur if the total size of
   script's global variables is bigger than the size of the compiled bytecode.


VERSION 3.6.0 - Patch 8, January 2024

Editor:
 - Fixed command "Crop sprite edges" in the Sprite Manager would copy import settings from the
   completely unrelated sprite onto the cropped one.

Engine:
 - Fixed @GAMENAME@ label not updating if Game.Name property is changed at runtime.
 - Fixed System.ColorDepth was reporting a final display resolution, while it should report game's
   native resolution for historical reasons.

Compatibility:
 - Fixed "upscale" mode not working for "default" game resolution in pre-3.1 games (the hidden
   meaning of "default" is 320x200 also).

Windows:
 - Fixed a rare bug when the Windows engine could fail loading the game for no good reason.
   This error is related to a bug in Windows SDK 8.1.


VERSION 3.6.0 - Patch 7, December 2023

Editor:
 - For Android build target disabled compression of `.ags` and `.vox` assets, as that slows down
   engine streaming resources (sprites etc).
 - Fixed Editor failing to start if user preferences file is corrupted
   (this is a second fix, complementing one done in AGS 3.5.1).
 - Fixed RAM use spiking fast during batch sprite reimport from sources, which could randomly
   lead to program errors.
 - Fixed Dialog properties displaying internal values not meant to be seen by a user.
 - Fixed selecting parent GUI after its control did not display GUI's own properties in
   the Properties Grid.
 - Fixed Editor generating deprecated settings in the default config file.

Engine:
 - Fixed GUI controls unexpectedly clipping parts of text even if "controls clip contents"
   setting is disabled, in case when their Font has VerticalOffset property set.


VERSION 3.6.0 - Patch 6, November 2023

Editor:
 - Fixed GUI editor could display selection rectangle from a different GUI editor pane,
   if two or more are displayed on screen at the same time.
 - Fixed "autoptr" and "builtin" keywords not colored as valid keywords in the script editor.
 - Fixed character literals in a script editor having wrong colors when a Color Theme is applied.

Engine:
 - Made String.Chars and Length properties work faster in ASCII mode.
 - Issue a warning when blocking Display or Say commands are called during fade-out.
 - Fixed engine failing to startup sometimes if controller device subsystem failed to init
   (it should not init at all in this version, as we do not support joysticks yet).
 - Fixed "Before fade-in" event could be called recursively under some peculiar conditions
   (regression since 3.6.0).
 - Fixed buttons on a non-clickable GUI were still changing to "mouse over" graphic under cursor.
 - Fixed button click not registered if it has been made not visible and visible again during a
   single game frame (regression since 3.6.0).
 - Fixed TextWindow borders drawn behind the rightmost corner pieces, which may be seen if the
   edge sprites are half-transparent.
 - Fixed a brief black screen flash occuring right after the video playback ends
   (regression since 3.6.0).
 - Fixed engine refusing to load legacy saves if the audio clip count does not match
   (number of audio clips should not affect saves).

WinSetup:
 - Added an option to disable "smooth scaled sprites" setting.
 - Added an option to disable language selection.
 - Made filter names in "disabled" section treated in case insensitive way.


VERSION 3.6.0 - Patch 5, September 2023

Editor:
 - Reimplemented multiple sprites properties editing in the Sprite Manager. This ability was
   dropped in 3.5.0 unintentionally.
 - Fixed Autocomplete not treating certain struct members as "static" or "protected" if their
   declaration is too long.

Engine:
 - Fixed Character.WalkStraight() was resetting walking animation if called during walking.
 - Fixed Character's idle animation getting reset to frame 0 when the speech is played without
   a valid speech view (idle animation should continue playing in such case).
 - Fixed idle animation sometimes not starting immediately after Character finishes walking.
 - Fixed a crash occuring if script tries to get or set a custom property for a non-existing
   Room Object (this seem possible to do by iterating over `object[]` array).

Compatibility:
 - Implemented "legacysave_assume_dataver" override option in config, which lets to instruct the
   engine which game data version to assume when restoring legacy (pre-3.5.0) saves. This "hack"
   appeared to be necessary because of a mistake done during development of the older engine
   versions, where the save format was changed, but engine was made to rely on the game data
   version instead of incrementing save format index.
 - Implemented "legacysave_let_gui_diff" override option in config, which lets the engine to
   read less gui elements from restored save than the number registered by the game.
   This is to emulate a (possibly unintended) effect in pre-3.5.0 saves.
 - Fixed engine could try to load game data from game.exe without checking whether data is actually
   appended to it when restoring a legacy save in a game with a different file structure.
 - Fixed number of GUI elements were not tested when loading a legacy save, which could lead to
   GUI data getting overwritten incorrectly without a warning if number of controls changed since.
   If the test failed, engine will act according to "legacysave_let_gui_diff" config option:
   either quit with error or log a warning and continue.

Plugins:
 - Fixed potential "index out of bounds" exceptions in the built-in PalRender plugin.


VERSION 3.6.0 - Patch 4, August 2023

Editor:
 - Export Game's Title into translations.
 - Fixed Game.agf was not created after importing a 2.* game project (regression in 3.6.0).

Engine:
 - Character.AnimationVolume property is now applied to the portrait animation as well.
 - Removed few of the less important game messages from logging, because they may quickly clutter
   the log under some circumstances.
 - Fixed when animating a character portrait, the first frame's linked sound is not played.
 - Fixed IsSpeechVoxAvailable() returning positive result if run from IDE and Speech folder
   is empty.
 - Fixed speech and messages were skipped by modifiers and other special keys (Ctrl, Alt, etc).
 - Fixed crash occuring when you resize DynamicSprite while it is displayed on screen.
 - Fixed audio clip started right before a ChangeRoom would not play until after the room changes.
 - Fixed in Software display mode the room Overlays may not be properly covered by a walk-behind
   under very specific conditions.
 - Fixed System.Log() would cause engine crash if there are more format placeholders than args.
 - Fixed some game options that are not allowed to be changed at runtime could still be
   overwritten when restoring an old save, leading to a weird game behavior.


VERSION 3.6.0 - Patch 3, July 2023

Editor:
 - Don't error when loading a room file which has unsupported number of events,
   instead these will be cut out. This may let e.g. use room templates from newer
   versions of AGS.
 - Sprite's default property is changed from deprecated Resolution setting to SourceFile.
 - Fixed full spritefile recreation would write duplicate sprites into the spritefile,
   if game project (Game.agf file) contained multiple sprites with same ID for any reason
   (for example, if they were added by manually editing Game.agf).
 - Fixed importing SCI fonts with >128 chars.
 - Fixed font preview did not properly display characters with indexes 128-255.

Engine:
 - Fixed "noloopcheck" script function modifier was not handled correctly sometimes.
 - Fixed a button with inventory placeholder did not update immediately when the active
   inventory is set.
 - Fixed textual GUIs were not redrawn immediately after a call to SetGameOption(OPT_RIGHTTOLEFT).


VERSION 3.6.0 - Patch 2, June 2023

Common:
 - Fixed a TTF font could cause a crash in the Editor or the Engine if the font renderer tries
   to draw a letter with higher number than the highest glyph number in the font.

Editor:
 - Added "Restore all sprites..." command to the Sprite Manager's context menu
   (this duplicates the "File -> Recreate sprite file" menu command added previously).
 - Refresh Sprite Manager after fully recreating a sprite file.
 - Sprites will now hide their "Resolution" property if the game settings have "Allow relative
   asset resolutions" disabled. This is to avoid user's misuse of this property.
 - Fixed a minor memory leak occuring when editing a tree item's label in Project Explorer.

Engine:
 - Engine will now find and load plugins in the game dir when run from a different location.
 - Fixed crash occuring if Character was told to FaceLocation while "Turn to face" game
   setting is enabled, and character's View does not have enough loops.
 - Fixed Character resetting current non-blocking animation if it was ordered to Move,
   as soon as it arrives at destination.
 - Fixed crash occuring if a GUI button was somehow set a negative NormalImage number.
 - Fixed "bad script stack" error could be sometimes displayed if the game was aborted in
   the middle of running a script.


VERSION 3.6.0 - Patch 1, May 2023

Editor:
 - Fixed room's deprecated setting LegacyMusicVolumeAdjustment not applied correctly.

Engine:
 - Fixed Room Objects whose dynamic sprite was deleted in "leave room" event becoming
   invisible during fade-out transition. Logically this has to happen, but historically
   they kept displaying until the transition end, so we restored this behavior for compatibility,
   and simply because there's no "after fade-out" event in the engine yet to delete these sprites.
 - Fixed Game.StopAudio() fails to remove queued clips if no particular audio type id is requested.
 - Fixed performance regression in the script related to long loops (regression in 3.6.0).
 - Fixed memory leak occuring when printing text in Right-to-left mode (regression in 3.6.0).
 - Fixed rare mistake during text wrapping which may occur if a Unicode text is cut in the middle
   of the word.
 - Fixed playing certain WAVs caused game to freeze forever on exit.

Compatibility:
 - Fixed frame-linked sounds not playing in the games made before 3.6.0. 
 - Allow game to call DynamicSprite.Create() with negative size, clamping it to 1x1.


VERSION 3.6.0, April 2023

Common features:
 - Full Unicode support for all game texts: game properties, scripts, translations, input.
   ASCII/ANSI mode is still working, for backwards compatibility. This may be configured
   in the game project.
 - Extended sprite compression options: lossless storage optimization for 16- and 32-bit
   sprites; LZW compression option for sprites in addition to existing RLE compression.
 - GUI controls may now be told to clip their contents, which means that nothing gets drawn outside
   of their borders (as defined by X, Y, Width, Height properties). The only exception is Sliders,
   which are more complicated.
 - The historical TTF fonts' "fixup" that altered their height and vertical offset is now
   optional and works only if backwards compatible option is set.
 - Max number of AudioChannels is now 16 (was 8).
 - Removed game Cursors hard limit (was 20).
 - Increased Room Objects limit to 256 (was 40).
 - Discontinued "Windows Game Explorer" support in both Editor and Engine.

Editor:
 - Editor requires .NET Framework 4.6 to run.
 - Added Android build target support (requires "Android component" installed).
 - Added Web/Emscripten build target support (requires "Web build component" installed).
 - Expanded UI color theme format, support global color options and allow missing entries.
 - Script editor works in unicode mode.
 - Added "Text format" option in General Settings which lets switching between ASCII/ANSI and
   Unicode (UTF-8) modes. This defines which format the game texts will be written in, when
   saving the game project and compiling the game.
 - Added "Use old-style keyboard handling" option to the General Settings, which lets select
   between classic key press handling and new one meant for unicode chars support in scripts.
 - Supports compiling UTF-8 translations. TRS file now has "Encoding" setting that tells
   how to interpret this TRS text.
 - Added support for building multiple speech voxes, by taking files from the Speech subfolders.
 - Added support for adding custom files into the game package. This is done by assigning
   a list of directories to "Package custom data folder" option in General Settings.
 - Editor now copies a acsetup.cfg file from the project's root folder (if one is provided by)
   as a base for generating default config file. Settings from Default Setup will be written over,
   but other found options won't be removed.
 - Added "Sprite file compression" option in General Settings, replacing "Compress the sprite file"
   option. The new option allows a selection of compression algorithm used for sprites. Currently
   supported: None, RLE (old default compression) and LZW.
 - Added "Enable sprite storage optimization" option to the General Settings, that permits the
   editor to repack sprites in a different storage format, reducing their disk size whenever
   possible. This option may be used alongside with the sprite compression. Note that this does not
   change how the sprites work in game.
 - Added "GUI controls clip their contents" option to the General Settings.
 - Added "TTF fonts height used in the game logic" option to the General Settings, that makes
   your game use real font's pixel height when arranging text and text-based UI elements,
   as opposed to the nominal font's size.
 - Added "Touch to Mouse Emulation", "Touch to Mouse motion mode" and "Display FPS on Screen" to
   Default Setup. Removed few deprecated options.
 - Added "TTF font adjustment" property to Fonts, as well as to General Settings where it serves
   as a project default for the new fonts. This property lets you choose between "no changes" and
   backward compatible TTF fixup meant to keep fonts made for AGS displayed as they were meant to.
 - In the "Import TTF" dialog added a choice to import the size closest to the given pixel height.
 - Fonts now have Auto Outline Style and Auto Outline Thickness properties.
 - Fonts now have a readonly Family Name field, that lets user see the original name of a font
   they've imported (if available).
 - Added IdleDelay property to Characters that lets you set time needed to pass before IdleView
   is activated. This is equivalent to the Character.SetIdleView script function.
 - Added Character.IdleAnimationDelay property to let setup idle view's animation speed.
 - Added Cursor.AnimationDelay property to let setup cursor's animation speed.
 - The TextWindow edges now have distinct names in the dropdown list of the property grid.
 - Rooms created from a Blank template will now have default background of a game's resolution.
 - When creating new room objects they will now have their script names set to some default value.
 - Added Room.BackgroundAnimationEnabled property to let have disabled animation on room load.
 - Editor will now create an empty sprite file if one is missing in the game project. Any existing
   sprite descriptions in the project will be kept, letting user to reimport these from sources.
 - Added "File -> Restore all sprites from sources" menu command.
 - Added "Apply" button on editor's Preferences dialog.
 - In Preferences replaced "Import Color Theme" with a "Open Theme Folder", as a temporary solution
   for managing theme files.
 - Select script editor's font in the editor's Preferences.
 - Added "Help" option to the editor pane's tab context menu.
 - Upgraded script editor to Scintilla 3.21.1 and ScintillaNET 3.6.3.
 - Cursor's position in script is now displayed on the status bar.
 - Dialog scripts now too can open help topics for keywords or script functions under cursor on F1.
 - Added zoom controls for the Sprite Manager, Character, Cursor, Inventory and View panes.
 - Sprites may now be imported by drag'n'drop into the Sprite manager.
 - In sprite manager's context menu added command "Create source files for all sprites with missing
    / external sources..."
 - In sprite manager's context menu added (restored) command "Replace sprite using previous files".
   Also made "previous file" remembered consistently whenever a sprite is imported or replaced.
 - In sprite manager's "export all" dialog added "skip if inside project's folder" option.
 - In sprite manager's "export all" dialog added "reset tile settings" option.
 - On the View pane the frames having set delay and linked sound will be now indicated with icons.
 - Editor no longer errors and fails when opening a game project with some script files missing.
 - Editor no longer errors on empty translations when compiling the game.
 - Editor now exports values of the string type Custom Properties to translations.
 - Editor no longer prevents exporting string arguments from Get/SetTextProperty calls to TRS file.
 - Editor now cleanups spritefile on game load, identifying any data not referenced by the project
   and marking it for deletion.
 - Fixed editor silently enabling all available Build Targets when upgrading a pre-3.4.0 project.
   This could be very inconvenient as there are several of them supported now.
 - Fixed open folders in the Project Tree were collapsing whenever you create a new subfolder or
   change an object's name in properties.
 - Fixed editor was not preventing from entering Character's and AudioClip's ScriptName too long
   for the engine to handle.
 - Fixed Image and View properties in various objects were allowing negative values.
 - Fixed some of the object previews (at least GUI) could crash if user entered a non-existing
   sprite's number as an Image property.
 - Fixed editor displaying unhandled exception if the script which user is trying to open was
   missing. Instead it will now open a blank script.
 - Fixed room editor was suggesting to save the modified room even if no changes were made.
 - Fixed a recently imported sprite could be displayed incorrectly scaled up in the room editor
   for high-resolution games, if the "Allow relative asset resolutions" was enabled in General
   Settings, and the sprite 0 had "Resolution" property set to "Low".
 - Fixed program crash occuring on sprite's import if failed to open a source file for any reason.
 - Fixed View animation preview stopping at frame 100 (if loop contains over 100 frames).
 - Fixed going to a "find all" result in dialog script did not highlight the found text,
   and sometimes did not scroll down to it.
 - Fixed "Goto Definition" not working for Enums and Defines (macros).
 - Fixed script autocomplete sometimes was not updated right after opening a script.
 - Fixed script autocomplete for function calls was mistreating commas in strings and inline
   comments as if they were separating actual parameters.
 - Fixed script autocomplete was not displaying members of extended structs if the parent struct
   was declared in another header.
 - Fixed script autocomplete was not working for enum names.
 - Fixed structs and enums were not highlighted if declared inside a script's body.
 - Fixed in dialogs numbers inside names were incorrectly highlighted as numeric values.
 - Fixed matching or mismatching braces were not highlighted consistently at all times in
   regular and dialog scripts.
 - Fixed crash occuring when user was trying to set breakpoint on the very last line in script.
 - Fixed few editor panes were not opening correct help topics in F1.
 - (Possibly) fixed error message text in the runtime error popup could be drawn partially beyond
   the popup borders if the user's system has text scaling option enabled.

Compiler:
 - Support unicode character literals.
 - Support using float literals when defining default values for function arguments.
 - Support hexadecimal number literals (e.g. "0xABCDEF").
 - Removed 500-characters line limit.

Script API:
 - Expanded `on_key_press` callback, now supports two parameters: key code and key modifier flags.
 - In the new key handling mode `on_key_press` is called for each actual key press;
   e.g. combinations like Ctrl+Z will result in two `on_key_press` calls, one with eKeyCtrlLeft and
   second with eKeyZ; added support for "NEW_KEYINPUT_API" macro in scripts.
 - Implemented new `on_text_input(int ch)` callback which is called when the engine receives
   a printable character. This callback is essential for handling unicode chars in script.
 - Similarily, expanded `dialog_options_key_press` with the third `mod` argument, and implemented
   `dialog_options_text_input` callback for receiving unicode chars during the custom dialog
   options state.
 - Implemented `dialog_options_close` callback which is called when custom dialog options are
   removed from the screen. This allows to perform any required cleanup.
 - Added eEventEnterRoomAfterFadein event for `on_event` callback, which corresponds to
   "enter after fade-in" room event.
 - Added eKey constants for Shift, Control and Alt keys.
 - Added eKeyMod enum for key modifiers constants.
 - String.AppendChar(), ReplaceChar() functions and String.Chars[] property are now working with
   the unicode characters.
 - String.Format("%c") specifier will now be able to print unicode characters.
 - Extended Button.Animate() to have blocking style, direction and starting frame parameters, thus
   matching other Animate commands (of Character and Object).
 - Extended all Animate() commands by adding "volume" parameter, that defines volume of the
   frame-linked sounds for the duration of this animation.
 - Added Character.AnimationVolume, defining volume of the frame-linked sounds.
 - Added Character.IdleAnimationDelay to let control idle view's animation speed.
 - Character.Scaling is no longer limited by a range of 5-200 (now supports 1-32767).
 - Hotspot.Name and Object.Name may now be set in script.
 - Added Object.ManualScaling and Object.Scaling.
 - Deprecated Object.IgnoreScaling (use Object.ManualScaling instead).
 - Object.SetView default loop & frame values are now 0 (was -1 which retained loop and frame
   indexes from the previous view, often unexpected to the user).
 - DrawingSurface.DrawImage() and DrawSurface() now support optional source rect coordinates.
 - Added functions for getting DrawingSurface of room masks: GetDrawingSurfaceForWalkableArea(),
   GetDrawingSurfaceForWalkbehind(), Hotspot.GetDrawingSurface(), Region.GetDrawingSurface().
 - Added new delay parameter to Mouse.ChangeModeView() to let control cursor's animation speed.
 - Added Game.ChangeSpeechVox() and Game.SpeechVoxFilename, support switching the voice-over pack.
 - Added Mouse.AutoLock property that toggles automatic mouse lock inside the game window.
 - Added Room.Exists().
 - Added System.Log().
 - Added SkipWait() that skips any active Wait() function.
 - Added WaitMouse() to complement existing Wait functions.
 - Added InputType enum which defines input devices and lets create their sets as flags.
 - Added WaitInput(), a more generic and extendable function that accepts a combination of flags
   telling which input types to wait for.
 - All Wait* functions now may have infinite timeout if you pass a negative timeout parameter.
 - All Wait* functions now return the reason they were skipped: a combination of InputType flag
   and a respective key or button code.
 - Added GUIControl.Transparency property.
 - Added Overlay.CreateRoomGraphical and CreateRoomTextual. Use these two functions to create
   "room overlays": that is - overlays that display a sprite inside the room, sorted among other
   room objects, characters and walk-behinds.
 - Added readonly Overlay.InRoom property that tells if this is a room or screen overlay.
 - Extended Overlay.CreateGraphical() with a new "clone" parameter that tells whether to assign
   a sprite index, or make a sprite's copy owned exclusively by this overlay. The former will
   save program memory but make overlay update if the sprite is edited later. The latter is
   meant primarily for backwards compatibility. Overlay.CreateRoomGraphical has the same param.
 - Added Overlay.Graphic property that lets you change overlay's sprite after it's created.
 - Added Overlay.Width and Height properties, that let you freely scale existing Overlay.
 - Added readonly Overlay.GraphicWidth and GraphicHeight properties that let read original
   overlay's graphic size, as not all overlays hold a sprite reference (e.g. textual overlays).
 - Added Overlay.Transparency property.
 - Added Overlay.ZOrder property that lets you sort Overlays among themselves and other objects
   in the same "game layer": screen overlays are sorted among GUI, while room overlays are
   sorted among room objects, characters and walk-behinds.
 - Added Speech.TextOverlay and Speech.PortraitOverlay for accessing blocking speech overlay
   and portrait overlay respectively.
 - Added Game.BlockingWaitSkipped which tells the result of the last blocking wait skipping,
   also including result of the blocking speech skipping.
 - SkipSpeechStyle now supports eSkipNone mode; when used it will disable any kind of skipping,
   such speech can be only skipped by a direct command from script.
 - Extended Screen.ScreenToRoomPoint() with an optional "restrictToViewport" argument, which
   lets to choose whether tests over empty place result in conversion through the default
   viewport or a null pointer.
 - Added AudioClip.PlayOnChannel().
 - Added AudioChannel.Pause() and Resume() functions, and IsPaused property.
 - Added AudioChannel.SeekMs(), complementing PositionMs (as the Seek() function interprets
   position differently depending on the audio format).
 - PlayVideo() now supports an option to play both game's and video's audio track simultaneously.
 - Added File.WriteRawInt() to complement ReadRawInt().
 - File paths in script now support $DATA$ token, which tells to read files from the game package.
   This only works for read operations. Functions that support this token currently are:
   File.Open(), DynamicSprite.CreateFromFile(), ListBox.FillDirList().
 - Debug(2, 0) command that displayed walkable areas is superceded by Debug(2, n), where "n" is
   a mask type: 0 - none, 1 - hotspots, 2 - walkbehinds, 3 - walkable areas, 4 - regions. This
   command also works as a toggle switch, calling it with the same mask index will turn it off.
 - Debug(5, n) command that displayed character's walk paths now also works as a toggle switch.

Engine:
 - New SDL2-based backend for graphics, audio and input.
 - Hqx graphic filters discontinued (could be temporary).
 - Windows-only DirectMedia video playback discontinued (could be temporary).
   Only OGG/OGV videos are kept supported at this point.
 - Support resizing game window on desktop systems.
 - Support "borderless full-screen window" mode in addition to the real (exclusive) fullscreen.
 - Support for switching vertical sync at runtime with Direct3D/OpenGL renderers.
   Also enable vsync in windowed mode too.
 - Unicode (UTF-8) text support: engine can now switch between ASCII and UTF-8 text mode.
   This is controlled by both game's OPT_GAMETEXTENCODING setting and translation's "Encoding"
   setting: they tells whether to interpret game texts as UTF-8 or ASCII/ANSI.
 - Support optional translation's "GameEncoding" setting: it hints the original game's codepage
   to help with their conversion. This is mostly meant for translating existing older (ANSI) games.
 - Engine now supports using real pixel height of the TTF fonts when arranging text and UI elements
   on screen; using nominal import size of the font is used as a compatible mode for the old games.
 - Also supports separate "normal" and backward compatible "fixup" modes when initializing TTF
   fonts, letting to display both common TTFs and ones made specifically for AGS in the past
   to display as they were meant to be.
 - Supports scripts using functions and variables from any other scripts, regardless of the
   script module order in the project.
 - Removed limit of simultaneous Button animations.
 - Removed limit of Character followers.
 - Removed Overlay limit.
 - Character.SetWalkSpeed() is no longer restricted by an arbitrary limit of 50.
 - Process character's idle view based on real game speed, not hardcoded 40 fps.
 - Improved file writing times (e.g. when doing a game save) by using buffered file stream.
   Initial tests showed 50% faster file writing.
 - Engine now renders GUI controls as separate textures when using hardware accelerated renderers.
   This may significantly improve performance in the high-resolution games and games with large
   number of GUI elements on screen.
 - Engine now shares the video texture data for all game objects on screen sharing same sprite.
   This improves performance in case there are multiple objects which use same image.
 - Various performance optimizations for both raw drawing and texture updates (Direct3D/OpenGL).
 - Engine now ensures that in threaded audio mode the AudioChannel's state only changes once the
   game is updated, and not while the game script is running. This prevents situations when
   the clip could begin playing before all properties are set in script, or when AudioChannel's
   properties' values (such as Position) could change while running a game script.
 - 24-bit wav PCM support, comes with the new sound library.
 - File.ReadRawLineBack() now always reads full line, and not limited to 200 characters anymore.
 - Debug displays, such as showing room mask and character walk paths, are now implemented as
   non-blocking translucent overlays, allowing you to keep playing the game while they are on.
 - Implemented debug key controls for calling a built-in save and restore game dialogs. These
   controls have to be set in user config as "save_game_key" and "restore_game_key"
   in "[override]" category. These may be used by testers if the game is missing a save function
   or one is bugged.
 - Engine now supports loading compiled scripts as separate files packed along with the game,
   along with those embedded into the main game data or inside room files.
 - Engine no longer bails out with error if the chosen translation cannot be loaded on startup.
 - When reporting script errors, engine will print callstack for all the active script "threads":
   for example, if there's Wait() function called and error happened in repeatedly_execute_always,
   then it will print both actual error's location, and Wait() call's location.
 - Engine config now has graphic modes defined as a simplier string options:
   "[graphics] fullscreen" for the fullscreen mode setup, and "[graphics] window" for the windowed.
   Fullscreen option can explicitly define a "borderless full-screen window" mode.
 - Added "emul_mouse_mode" and "emul_mouse_relative" options to config in "[touch]" category.
 - Added "cache_size" and "stream_threshold" options to config in "[sound]" category, they setup
   the rules for sound caching and choosing whether to load a clip fully into mem or stream one.
 - Added "load_latest_save" and "show_fps" options to config in "[misc]" category.
 - Added "background" option to config in "[misc]" category, that defines the starting
   run-in-background (aka multitasking) mode (may later be changed by SetMultitaskingMode()).
   Added "--background" command line option for the same purpose.
 - Added "--sdl-log" command line option for setting up SDL2 library output verbosity. The engine
   log config now has a new "sdl" group meant for SDL2 messages.
 - Support "--user-conf-dir" command-line arg (and "user_conf_dir" config option) superceding
   "--localuserconf"; the new option directly tells the location of user config file.
 - Path related command-line and config options, - such as "shared_data_dir", "user_data_dir"
   and "user_conf_dir", now support $GAMENAME$ token in path which is resolved to the game's title.
 - Added "--clear-cache-on-room-change" command-line arg (and similar config option).
 - Don't error when DrawingSurface.DrawImage has bad transparency parameter (warning instead).
 - Don't error when detecting bad format in File.Read* functions (warning instead).
 - Added stubs for agsshell plugin (a contemporary cross-platform variant of ags_shell).
 - Added stubs for agsappopenurl plugin.
 - Fixed potential crashes if a room-related API function has been called in "game_start";
   this is achieved by having a dummy room placeholder object. Still results of such calls are
   undefined and should not be relied upon.
 - Fixed potential crash on room load if the walkable area mask contained color values
   above the supported range.
 - Fixed dialog script's "goto-previous" command not working if used from the first sub-topic run
   using "goto-dialog" (a very-very old bug).
 - Fixed AGS_EngineInitGfx plugin callback was not called during OpenGL renderer initialization.
 - Fixed Direct3D/OpenGL renderers were displaying plugin's raw drawings in a wrong position in
   the scrolling rooms, if the drawing was done on AGSE_PRESCREENDRAW or AGSE_POSTROOMDRAW events.
 - Fixed overlay may fail to be created sometimes, if previously another overlay had been
   forcefully removed when changing rooms (this is an ancient bug which existed for many years).
 - Fixed ListBox.RowCount reporting 0 if called before the control was displayed once.
 - Fixed GetTextWidth would still return a size of an outline for an empty text string.
 - Fixed text may be misaligned in gui controls, as its outline thickness is not counted.
 - Fixed some TTF fonts could be cut at the bottom when the speech is displayed.
 - Fixed scheduled sound fadeout effect was not cancelled by skipping a cutscene.
 - Fixed OGV Theora videos positioned incorrectly if they have certain sizes or aspect ratios.
 - Fixed game fps sped up if SetGameSpeed() is called repeatedly in game script.
 - Fixed game not reacting to system close commands when stuck in script, which made it impossible
   to close the "hanging" game by usual means (other than terminating the process).

Engine Plugin API:
 - Added IAGSEngine::GetGameInfo() function which returns information about the game, such as
   its title and GUID.
 - Added new render callback AGSE_POSTROOMDRAW, for handling drawing inside the room above all
   room objects.
 - Added IAGSFontRenderer2 interface, expanding the original font renderer interface, improving
   font plugins support.
 - Added ReplaceFontRenderer2() and NotifyFontUpdated() functions.

Compatibility:
 - Fallback to the first loop with frames if current character's loop does not have any.
 - Use the dummy frame if current character's speech view loop does not have any.
 - Ignore character having view/loop with no frames while it's not in the current room.
 - Legacy behavior of MoveCharacterBlocking's return value.
 - Fixed walkable area's continuous scaling was broken for high-res rooms in old games.
 - In pre-3.* games force player to walkable area after changing rooms, this is to emulate an
   unintentional effect created by the old engines.
 - Fixed pre-3.4.1 anti-aliased TTF fonts display (their vertical position was broken).
 - For pre-3.5.0 games support old behavior of coincidental dynamic sprite replacement
   on GUI backgrounds (and few other places) without explicit assignment; that is - when the new
   DynamicSprite is created right after deleting an old one.
 - Support Label.TextAlignment with legacy alignment constants for pre-3.5.0 games made with
   the custom engine from "Clifftop Games".
 - Support native resolution hack for games made with "Clifftop Games" custom engine, where
   640x400 games are run as 640x360.

Android:
 - Rewrote universal AGS game launcher/player using up-to-date Google guidelines. The former
   "launcher" is now called "AGS Player".
 - Implemented single game project template meant for building your own signed APK.
 - Implemented two touch-to-mouse control scheme (selectable in config), for one finger
   emulating LMB only, and for two fingers emulating LMB and RMB.
 - Support relative motion speed setting for touch-to-mouse emulation.
 - In AGS Player added "Browse" button to the game folder selection, which opens default system
   file picker.
 - AGS Player now searches for games recursively, in all the subfolders.
 - AGS Player now has preference button per each game, which opens individual game's settings.

OSX:
 - OpenGL renderer is now supported on MacOS.

Web / Emscripten:
 - Initial port release.

Windows:
 - Installer will create program links with three-digit version in the name.
 
Plugins:
 - Added SpriteFont plugin to the list of builtins, for ports that use ones.
   SpriteFont plugin is updated to support custom "Clifftop Games" font variants.

WinSetup:
 - Added "Fullscreen as borderless window" checkbox.
 - Remade sound options to reflect the move to the new audio system in the engine.


===================================================================================================

VERSION 3.5.1 - Patch 20, March 2023

Engine:
 - Fixed AudioClip.Play allowing to place clips on a crossfade channel in general case;
   there's still a backward-compatible case where it's allowed to do so for audio types
   with reserved channels that exceed the normal channel limit.
   (Regression since 3.5.1 Patch 11)


VERSION 3.5.1 - Patch 19, March 2023

Engine:
 - Fixed System.Volume is not correctly applied after restoring the save.
   (Regression since at least 3.4.0)


VERSION 3.5.1 - Patch 18, February 2023

Engine:
 - Fixed background speech and textual overlays may disable GUI when being continuously
   created in repeatedly_execute* kind of functions. (Regression since previous patch)


VERSION 3.5.1 - Patch 17, January 2023

Editor:
 - Fixed GUI.Visible property was resetting to false when PopupStyle is switched to Modal.

Engine:
 - Performance improvement in Direct3D/OpenGL renderers, related to plugins which subscribe to
   render events.
 - Fixed renderer error occuring if room background frames are of different sizes.
 - Fixed software renderer may have an unpainted black line at the bottom, if there's a GUI or
   Overlay positioned partially offscreen.
 - Fixed GUI buttons could retain mouse-over pic after interface is disabled then enabled
   (this is a regression since recent patch).
 - Fixed crash occuring when user creates too many Overlays in script;
   will report a scripting error instead.
 - Fixed memory leak occuring when the TTF font is drawn partially outside the DrawingSurface.
 - Fixed Parser.Said() could lead to a program crash in case there are space-separated words
   following the comma (e.g. "climb,get in bed").
 - Fixed crash occuring if a plugin tried to call SetVirtualScreen().

Plugins:
 - Fixed SnowRain plugin drawing particles only in 320x200 bounds.


VERSION 3.5.1 - Patch 16, December 2022

Editor:
 - Fixed autocomplete crashing the editor if there was an import declared with type and variable
   having identical names, and user tries to type that variable's name and a dot to access
   its members.
 - Fixed newly created Views taking free IDs in the middle of the list in random order instead of
   a straight one (after you previously deleted some Views).

Engine:
 - Added missing "DrawSprite" function for "agsblend" plugin stubs.
 - Fixed loading pre-3.5.0 games on big endian systems.
 - Fixed GUI buttons not displaying the mouse-over image if the interface state was toggled
   to enabled state while the mouse was over the button.


VERSION 3.5.1 - Patch 15, October 2022

Editor:
 - Fixed crash that could occur when changing View's ID to an unused number in the middle.
 - Fixed comments and string literals were styled incorrectly in dialog scripts.
 - Fixed unterminated string literals in script were not considered as errors when processing
   scripts for translation update and autonumbering of speech lines, leading to wrong results.
 - Fixed Editor was updating translation file even if errors were found while scanning the
   scripts, which could cause a TRS corruption.
 - Fixed Editor could overwrite changes done manually to TRS while the editor is open and if
   you run a translation update right after.
 - Fixed potential program crash on exit in case an editor's plugin has mistakes in "shutdown"
   callback. Instead editor will report a component's error, but still close properly after.

Script API:
 - Removed a rule that Viewport and Camera with ID 0 can't be deleted.


VERSION 3.5.1 - Patch 14, September 2022

Editor:
 - Do not error when compiling a 256 colors game if Direct3D or OpenGL are selected as a default
   graphics driver (display a warning instead).
 - Fixed crash when trying to import pre-2.60 game projects.


VERSION 3.5.1 - Patch 13, August 2022

Engine:
 - Fixed room object does not update its texture if it had a dynamic sprite assigned to it,
   and that sprite was unassigned, modified or recreated with same ID, and then reassigned again, -
   all within the same game frame.
 - Fixed normal font renderer is not reinitialized correctly in the engine if a plugin uses
   IAGSEngine::ReplaceFontRenderer(), passing original renderer's pointer (which it received from
   the previous ReplaceFontRenderer call).


VERSION 3.5.1 - Patch 12, June 2022

Engine:
 - Fixed GUI textual controls don't redraw when the game translation changes until player clicks
   on GUI (regression since previous 3.5.1 updates).
 - Fixed multitasking mode persisting if the game was switched from windowed to fullscreen mode
   (even though it's not supposed to work in fullscreen).


VERSION 3.5.1 - Patch 11, May 2022

Editor:
 - Fixed batch sprite export with "Set exported file as sprite source" option was assigning
   new source paths without file extension.

Engine:
 - Performance fix: GUIs changing Transparency or Visible state should not redraw their surface.

Compatibility:
 - Allow AudioClip.Play to to place clips on a crossfade channel, which is normally unaccessible
   from script. This prevents errors in some games that relied on this behavior.


VERSION 3.5.1 - Patch 10, April 2022

Engine:
 - Fixed crash when visible viewport does not have any linked camera.
 - Fixed ListBox.FillSaveGameList() may include save slots with negative slot number (e.g. when
   the save file has "*.-01" extension).
 - Fixed potential crash after failed RunAGSGame() call.
 - Fixed search for the game data by GUID when restoring a save belonging to another game;
   this was implemented in 3.5.1, but appeared to not work correctly.


VERSION 3.5.1 - Patch 9, March 2022

Editor:
 - Removed restriction on max dialog topics in the project. The dialog limit in the engine was
   removed in 3.4.1, but remained in the Editor by oversight.
 - Fixed Audio Clip items in the project tree not displaying their IDs right after being renamed.

Compiler:
 - Fixed crash occuring when compiler tries to report "Already referenced name as import" error.

Engine:
 - Added "--translation" and "--no-translation" command-line arguments.


VERSION 3.5.1 - Patch 8, Ferbuary 2022

Engine:
 - Clearer error messages for Get/SetProperty functions.
 - Fixed PlayFlic() command fails to start the video (regression in 3.5.1).
 - Fixed DrawingSurface.DrawSurface() not applying transparency parameter correctly if the
   drawn surface has alpha channel.
 - Fixed @OVERHOTSPOT@ is not updated immediately when character's name changes while cursor
   is above that character.


VERSION 3.5.1 - Patch 7, January 2022

Editor:
 - Added "Layout -> Reset to Defaults" menu command.
 - Editor will now reset panel layout to default state if loading layout fail for any reason.
 - Default config is now saved also when the game is run in debug mode (F5). This ensures that
   the test run is using the latest Default Setup, if the user's config has not been created yet.
 - Editor will now display an error if user tried to reserve too many channels for audio types.
 - Fixed Editor failing to start if user preferences file is corrupted.
 - Fixed "Use old-style custom dialog options API" was not set when importing pre-3.4.0 projects.
 - Fixed comboboxes' drop-down arrows were not painted with the right color from a color theme.

Engine:
 - Fixed program crash occuring if the game reserved too many channels for audio types.
 - Fixed potential crash occuring when player loads a save made in a multi-frame room, but the room
   was since edited and no longer has as many frames.
 - Fixed character may have incorrect Frame property values while turning.


VERSION 3.5.1 - Patch 6, December 2021

Editor:
 - Added line numbers in the dialog script editor.
 - Fixed Dialog script loosing changes if the pane is closed or redocked.
 - Fixed controls arrangement on the Dialog pane getting broken when it's redocked.

Engine:
 - Fixed filepaths in scripts that have backslashes ('\') fail on non-Windows systems.
   All the File functions will now convert backslashes in filepaths into forward
   slashes for compatibility.
 - Fixed engine was still creating standard directories for game saves and data, even
   if user provided the custom paths for these.
 - Fixed TextBox control crashing the game if it's empty and player presses Backspace.
 - Fixed controls on a fully transparent GUI were not interactive (this is an original
   AGS behavior, which was unintentionally changed in 3.5.0 by mistake).

Compatibility:
 - When running 3.5.0 games, treat fully transparent GUI as non-interactable.
   In AGS transparent GUIs may be still interacted with, but 3.5.0 introduced an
   unintentional (and undocumented) change to this, which was reverted in 3.5.1.

Android:
 - Support global engine's config file when the game is run from the Launcher: it's
   located in the AGS games' parent directory, same place where android.cfg is.

WinSetup:
 - Added "Custom game shared data path" to complement "Custom save path" option.


VERSION 3.5.1 - Patch 5, October 2012

Re-released without code changes, only fixing program build instructions for Linux.


VERSION 3.5.1 - Patch 4, September 2021

Editor:
 - Fixed swapping of inventory item's numeric ID could lead to errors.
 - Fixed crash when importing pre-3.* games with multiple script modules.
 - Renamed "Enforce object-based scripting" setting to "Enforce post-2.62 scripting".

Compiler:
 - Fixed potential memory corruption when user script reaches max nested if/else blocks.

Engine:
 - Also tell module name and approximate source line when reporting script import errors
   for the variables and local functions.


VERSION 3.5.1 - Patch 3, August 2021

Editor:
 - Fixed sprite file over 2 GB could not be loaded (regression since the last patch).

Engine:
 - Further improvement to GUI performance: don't redraw GUI when the mouse cursor is
   hovering over or interacting with controls not leading to an actual visual change.
 - Fixed ListBox items could become unaccessible if its font or height is changed leading
   to a disabled scrollbar.


VERSION 3.5.1 - Patch 2, July 2021

Engine:
 - Fixed speech lipsync getting disabled after loading another game with RunAGSGame().
 - Fixed MOD/XM clips fail to play (regression).
 - Fixed certain OGV videos fail to play (regression).
 - Fixed software renderer was not updating game screen correctly when running a game with
   legacy "letterboxed" feature  (regression).


VERSION 3.5.1 - Patch 1, June 2021

Editor:
 - Fixed script compiler sometimes was not specifying actual Dialog number when reporting errors
   in the dialog scripts.

Engine:
 - Fixed Game.TranslationFilename always returning empty string (regression).
 - Fixed GUI controls which were toggled from disabled to enabled state not responding to the
   mouse clicks until the mouse is moved (regression).
 - Fixed OpenGL did not apply a Linear filter when "Render sprites in screen resolution"
   option is off.


VERSION 3.5.1, June 2021

Editor:
 - Added "Attach game data to exe" option to General Settings. This lets you to package game data
   separately from the game.exe (only important on Windows at the moment).
 - Deprecated "Limit display mode to 16-bit" property in Runtime Setup as it's no longer
   used by the engine.
 - Display aspect ratio in game resolution dialog.
 - Implemented classic Color Picker dialog for the Color type values in the property grid,
   instead of the default one which does not allow user-defined colors.
 - Improved tab switching performance for script windows.
 - Editor will now enforce full game rebuild after upgrading an older project, this ensures
   that all scripts are recompiled with the new version rules.
 - Fixed room lists in property editor were not updated after room number is changed.
 - Fixed importing pre-3.* projects broken by incorrect assignment of "Game file name" property.
 - Fixed importing Characters and GUI without sprites still created empty sprite folders.
 - Fixed crash when exporting/importing Characters with no Normal View.
 - Fixed translation compiler did not correctly save some of the escaped sequences, such as "\n".

Scripting:
 - Implemented correct parsing of a "const string" function return type.
 - Fixed implementing imported functions was forbidden in the room scripts.

Script API:
 - Added GUI.Shown readonly property that tells whether GUI is active on screen. This is primarily
   for GUIs with "Popup At Y" style, because they hide themselves regardless of Visible property.
   Note that since 3.5.0 GUI.Visible only tells a script-set value.
 - File.Open() now supports $CONFIGFILE$ tag which will try to open user config file for reading or
   writing regardless of where config is located on disk.
 - Added System.SaveConfigToFile() which writes current engine settings to the user config file.
   Only the options that can be changed at runtime are written back at the moment.
 - GetTranslation() now returns "const string" (was "string"). This is to prevent modifying
   returned string using old-style string functions, such as StrCat(), as this string may be
   allocated in the internal engine memory for its own use.

Engine:
 - Support loading audio and video from data packages larger than 2 GB.
 - Improved game data loading times by introducing buffered file stream. Initial tests
   showed 3-4 times faster file reading.
 - Improved game performance by not reupdating all of the GUIs each time anything changes, instead
   only affected GUI will be updated each time.
 - Some improvement to general script performance.
 - Some improvement to script Dictionary and Set types performance.
 - Room Object's Graphic property now can be assigned a sprite with index over 32767 and
   up to 65535. This restriction is due to internal data format, which cannot be fully fixed
   without breaking compatibility with plugin API. This may still be worked around by assigning
   a View, as View's frames may contain sprites of any index available.
 - Similarily, Object's View, Loop and Frame can now be assigned a value over 32767 and
   up to 65535; not that this was ever an issue...
 - Removed arbitrary limit of 1000000 dynamic array elements (now supports over 2 billion).
 - Dialogs with no enabled options left will be now stopped, instead of raising script error.
 - Engine will not longer quit the game when failing to write a save, but simply display an
   error on screen (...why this was a thing in the first place?!).
 - When restoring a save engine will now try to match game GUID pack rather than exe/pack name.
   This resolves potential problems when game package may have different name in distribution
   to another system. Also makes saves in multi-game collections more reliable.
 - In Debug game mode allow to toggle infinite FPS mode (prior it could not be turned off).
 - Expanded text parser error messages for easier debugging.
 - Adjusted all the command-line options to have consistent prefix convention, where all full-name
   options must be preceded by double-dash, and one-letter options by single dash.
 - Added "--localuserconf" command and similar global config option which tells engine to read and
   write user config in the game's directory rather than using standard platform path.
   Game dir must be writeable for this to work.
 - Added "--conf" command which forces engine to read only explicit config file on startup.
 - Added "--user-data-dir" and "--shared-data-dir" commands for setting save game directory and
   shared app data directory from command line (this corresponds to existing options in config).
 - Fully configurable log output (in both game config and command line) allows to set up which
   message types and groups are printed by which output methods (sinks), including: file,
   system console, in-game console. "warnings.log" is now created only if file log was not
   requested by user.
 - Added "--log-" set of command line options for setting up log output.
 - Added "--tell-filepath" option for printing known engine's and game's file locations.
 - Added "--tell-gameproperties" option for printing some of the game's general settings.
 - Support proper lookup for Allegro 4 library resources (such as its own config and digital MIDI
   patches) in the game directory.
 - Engine will no longer precreate directories for common files: saves, user config, and so forth,-
   before actually writing them.
 - Fixed running game from another directory by passing its relative filename as command-line
   argument: in this case engine was incorrectly using its own directory to search for external
   game data, opening files for reading by script command, and so on.
 - Fixed some of the engine's own hotkeys (such windowed/fullscreen mode toggle) not working
   during certain skippable game states.
 - Fixed overlay was set to wrong position if it were using TextWindow gui and either its text
   or X, Y properties got changed.
 - Fixed crash occuring when the speech is using text window gui with zero Padding and the speech
   text is an empty line.
 - Fixed characters and room objects were not updating their looks if their current graphic was
   a Dynamic Sprite, and that sprite was modified with ChangeCanvasSize, CopyTransparencyMask,
   Crop, Flip, Resize, Rotate or Tint function.
 - Fixed Views' frames keeping reference to deleted Dynamic Sprites.
 - Fixed engine crash when button's graphic is set to sprite out of range.
 - Fixed animated cursor's normal graphic reappearing in between animation frames if mouse mode
   is being repeatedly reassigned, for example in rep-exec script.
 - Fixed certain interactions did not work with GUI if it was made fully transparent.
 - Fixed ListBox.FillSaveGameList() search pattern, it included files which contain save filename
   pattern but do not exactly match; for example: "agssave.001_".
 - Fixed engine was ignoring audio files in game directory when running games which use
   old audio system.
 - Fixed crash in Direct3D and OpenGL renderers that occured if game uses a plugin that performs
   software drawing on screen, and one of the rooms is smaller than the game's resolution.
 - Fixed Direct3D was assigning wrong fullscreen refresh rate sometimes, slowing alt-tabbing.
 - Fixed "--test" mode was lost upon restoring a save.

Engine Plugin API:
 - Added IAGSEngine::GetRenderStageDesc() function which returns current render stage parameters.
   As of this version these parameters include 3 transformation matrixes, allowing any 3D render
   plugin to stay compliant to engine's scene rendering.

Compatibility:
 - Fixed engine was trying to read unnecessary data when loading pre-2.72 games.
 - Fixed "upscale" mode for old games (was broken in 3.5.0). Also engine will now try to detect
   if "upscale" mode wanted by reading old config options (if they are present).
 - Fixed GUI.Visible not returning expected values for GUIs with "Popup At Y" style in
   pre-3.5.0 games, breaking some older games logic.
 - Fixed potential buffer overflow when reading pre-3.1.0 games with old dialog script texts.
 - Fixed engine was applying player's position too early when ChangeRoom was called for 2.72 and
   earlier games, which could result in wrong placement in the new room if the character was
   walking right before the transition.

Android:
 - Corrected game scanning in AGS launcher, now it will work consistently with the desktop ports,
   and detect any compatible game data files named "*.ags" or "*.exe".

OSX:
 - When looking for game files engine will no longer use hardcoded filename, will search for any
   compatible pack file instead.

Windows:
 - Windows version of the engine now reads global configuration file. It is looked up in
   "%USERPROFILE%/Saved Games/Adventure Game Studio/acsetup.cfg"
 - Default log file location is now also in "%USERPROFILE%/Saved Games/Adventure Game Studio".
 - Added "--no-message-box" command line option to hide message boxes when alerts are raised.
 - Added "--console-attach" command line option to try attach to the parent process's console.

WinSetup:
 - Fixed changing fullscreen mode from "use current desktop" to explicit resolution on save.

---------------------------------------------------------------------------------------------------


VERSION 3.5.0 - Patch 10, May 2021

Engine:
 - Fixed managed handle error that occured if you would copy an element of any string array
   returned by Dictionary.GetKeysAsArray(), GetValuesAsArray() and Set.GetItemsAsArray();
   for example: assign array's element to a local variable.


VERSION 3.5.0 - Patch 9, March 2021

Editor:
 - Fixed importing Characters and GUIs saved by previous versions of the editor.
 - Added support for startup pane hyperlink color in Color Themes.

Engine:
 - Disabled writing user config upon game exit at least temporarily, because it was causing
   confusion by unexpectedly overriding default config even if player did not start setup program.
 - Fixed crash occuring if room object's Graphic is set to sprite with ID greater than 32767.
 - Fixed button image did not appear updated right after restoring a save.
 - Fixed legacy PlayMusic() and PlaySound() functions failing if the audio file
   had uppercase characters in name (regression since 3.4.0).

Linux:
 - For users of prebuilt binaries fixed potential crash in ogg vorbis library that could occur upon
   restoring a save made while sounds were playing.
 - Fixed OpenGL window did not resize properly upon running the game on some systems.
 - Fixed Alt + Enter combination for toggling window mode was not detected on some systems.


VERSION 3.5.0 - Patch 8, February 2021

Editor:
 - Fixed compressed sprite file was not built properly if exceeded 2 GB.


VERSION 3.5.0 - Patch 7, January 2021

Editor:
 - Added validation for "Game file name" property to help avoid unsupported filenames.

Engine:
 - Fixed Right-to-left text was not drawn correctly (regression in 3.5.0).


VERSION 3.5.0 - Patch 6, December 2020

Engine:
 - Fixed Viewport.GetAtScreenXY() causing script errors at runtime.
 - Fixed Software renderer could freeze the game in case there are multiple room viewports.
 - Fixed Software renderer could draw room viewport in a wrong position if it was moved.
 - Fixed RunAGSGame crashed the game if it uses any font plugin (implementing IAGSFontRenderer).

Plugins:
 - Fixed built-in PalRender plugin had uninitialized variable that could cause a crash.


VERSION 3.5.0 - Patch 5, October 2020

Editor:
 - Fixed Inventory Item preview could show wrong sprites and/or sprites in wrong scale.

Engine:
 - Fixed Dictionary.Get() crashing on missing key instead of returning null, as expected.
 - Dictionary.GetKeysAsArray(), GetValuesAsArray() and Set.GetItemsAsArray() now return null
   if they have no elements (0-sized arrays are forbidden by AGS Script).
 - Fixed AudioChannel.SetRoomLocation() parameters lost upon restoring a saved game.

Linux:
 - Disabled mouse speed control as it cannot be correctly supported. This fixes mouse movement
   glitches in fullscreen on certain systems.

Compatibility:
 - Don't error on missing speech animation frames if speaking character is disabled (.on = false)
 - Fixed legacy Seek/GetMIDIPosition() and Seek/GetMP3PosMillis() not working correctly in threaded
   audio mode.


VERSION 3.5.0 - Patch 4, August 2020

Editor:
 - Fixed room editor crashing after user changes script name of a character present in opened room.
 - Fixed modifying any item's name will make a new name assigned to all opened tabs.

Engine:
 - Fixed OpenGL was taking screenshots incorrectly on certain systems with different alignment
   of color components in video memory (OSX, iOS).

WinSetup:
 - Fixed "Use voice pak" option was reset if no speech.vox found.


VERSION 3.5.0 - Patch 3, July 2020

Editor:
 - In room editor adjusted the object selection bar's visual style, made dropdown buttons larger
   and easier to click on.
 - Made room editor display "locked" cursor consistently when whole object/area group is locked,
   and when over locked Edges.
 - Fixed room editor failing to initialize if currently selected object's name exceeded navigation
   bar's width.
 - Fixed some panels were not upscaling sprite previews in low-resolution projects as intended.
 - Fixed ViewFrame's default Sound value set as "-1 (unknown)" (should be "none").
 - Fixed "Change ID" command did not affect order of game objects in a compiled game until a
   project was reloaded in the editor.
 - Fixed "Change ID" command on a View restricted max ID to a wrong number (lower than normal).
 - Fixed Character preview was not updated when View ID is changed.
 - Fixed Room editor displayed character incorrectly when its ID is changed.
 - Fixed import of room scripts when loading an old game made by AGS 2.72 or earlier.
 - Fixed another unhandled exception occuring when Editor was about to report "unexpected error".

Engine:
 - RunAGSGame() will now automatically reset translation to Default before starting new game,
   to prevent situations when new game will be trying to init a translation from previous game.
 - Character speech will be now displayed relative to the first found viewport the character is
   seen in, or the one which camera is closest to the character in the room.
 - Fixed crash when deleting custom Viewport in a non-software graphics mode.
 - Fixed Viewport.Camera not handling set null pointer properly (should disable viewport now).
 - Fixed Screen.RoomToScreenPoint()/ScreenToRoomPoint() functions were converting coordinates
   always through camera #0, instead of a camera actually linked to the primary viewport.
 - Fixed Screen.AutoSizeViewportOnRoomLoad property was forcing always camera #0 to align itself
   to the new room, instead of a camera actually linked to the primary viewport.
 - Fixed speech vertical position was not correctly calculated if the room camera is zoomed.

Linux:
 - Fixed script floats were printed according to system locale rules and not in uniform one.

Windows:
 - Again fixed game becoming minimized when quitting with error from the Direct3D fullscreen.


VERSION 3.5.0 - Patch 2, February 2020

Editor:
 - Fixed mouse cursor flicker above the script editor, again (was fixed first for 3.3.5, but
   then reverted by mistake).
 - Fixed bitmap palette was not remapped to game or room palette for 8-bit sprites if they were
   imported with "Leave as-is" transparency setting.
 - Fixed an imported palette did not really apply to sprites until reopening a game in the editor.

Engine:
 - Fixed crash when saving in a game which contains Set or Dictionary in script.
 - Fixed crash caused by a 32-bit sprite with alpha channel in a 8-bit game.
 - Fixed occasional regression (since 3.4.3) in OpenGL renderer that caused graphic
   artifacts at the borders of sprites, but only when nearest-neighbour filter is used.

Windows:
 - Fixed keyboard and mouse not working when game is run under Wine (or, potentially, particular
   Windows setups too).
 - Fixed maximal allowed window size deduction, which works better on Windows 8 and higher.
 - Fixed game becoming minimized when quitting with error from the fullscreen mode, requiring
   player to switch back in order to read the error message.

WinSetup:
 - Fixed crash occuring if the chosen graphics driver does not support any modes for the current
   game's color depth.


VERSION 3.5.0 - Patch 1, December 2019

Editor:
 - Fixed changing Audio Clip ID or deleting a clip could break sound links in view frames.
 - Fixed importing an older version project during the same editor session, in which one game was
   already opened, could assign previous game's GameFileName property to the next one.
 - Fixed some fonts may be not drawn on GUI preview after any font with lower ID was modified.
 - Fixed Pause and Stop buttons were enabled when first opening an audio clip preview, and clicking
   these could lead to a crash.
 - Fixed a potential crash during audio clip preview (related to irrKlang .NET library we use).
 - Fixed a potential resource leak in the sprite preview.

Engine:
 - Fixed IsKeyPressed script function returning values other than 0 or 1 (broke some scripts).
 - Fixed grey-out effect over disabled GUI controls was drawn at the wrong coordinates.


VERSION 3.5.0, December 2019

Common features:
 - Now using Allegro v4.4.3 library (previously v4.4.2).
 - Support for large files: compiled game, sprite set, room files now may exceed 2 GB.
 - Deprecated relative assets resolutions: now sprites, rooms and fonts are considered to
   match game's resolution by default and not resized, unless running in backwards-compatibility
   mode.
 - Allow room size to be smaller than the game's resolution.
 - Removed fonts count limit.
 - Raised imported sprites count limit to 90000 and removed total sprite count limit
   (this means you may have around 2 billions of dynamic sprites).
 - Removed length limit on the Button and TextBox text (was 50 and 200 respectively).
 - Removed limit on ListBox item count (was 200).

Editor:
 - Editor requires .NET Framework 4.5 to run. Dropped Windows XP support.
 - Editor preferences are now stored using .NET configuration model, instead of the
   Windows registry.
 - Added support for custom UI color themes.
 - Added "Window" - "Layout" submenu with commands for saving and loading panel layout.
 - Game and room templates are now by default saved in AppData/Local/AGS folder.
   Editor finds them in both program folder and AppData.
 - Allow to change IDs of most of the game items in the project tree by swapping two
   existing items. This is done by calling a context menu and choosing "Change ID".
 - Added "Game file name" option to let users easily set compiled game file's name.
 - Added "Allow relative asset resolutions" option to "Backwards Compatibility" section.
   Disabled by default, it makes game treat all sprites and rooms resolution as real one.
 - Added "Custom Say/Narrate function in dialog scripts" options which determine what
   functions are used when converting character lines in dialog scripts to real script.
   IMPORTANT: this does not currently work with the "Say" checkbox. The workaround is as before:
   duplicate option text as a first spoken line in the dialog script.
 - New revamped sprite import window.
 - Sprites that were created using tiled import can now be properly reimported from source.
 - Added context menu command to open sprite's source file location.
 - Using Magick.NET library as a GIF loader. This should fix faulty GIF imports.
 - New sprite export dialog that lets you configure some export preferences, including
   remapping sprite source paths.
 - Sprites have "Real" resolution type by default. "Low" and "High resolution" are kept
   for backwards compatibility only. When importing older games resolution type will be
   promoted to "Real" whenever it matches the game.
 - New navigation bar in the room editor, which allows to select any room object
   or region for editing, show/hide and lock room objects and regions in any combination.
   These settings are saved in the special roomXXX.crm.user files.
 - Improved how Room zoom slider works, now supports downscale.
 - Added "Export mask to file" tool button to the Room Editor.
 - Added MaskResolution property to Rooms. It ranges from 1:1 to 1:4 and lets you define
   the precision of Hotspot, Regions and Walkable Areas relative to room background.
 - Added "Default room mask resolution" to General Settings, which value will be applied
   to any room opened for editing in this game for the first time.
 - Added "Scale movement speed with room's mask resolution" to General Settings.
 - Removed Locked property from the Room Object, objects are now locked by the navbar.
 - Split GUI's Visibility property into PopupStyle and Visible properties.
 - Added Clickable, Enabled and Visible properties to GUI Controls.
 - "Import over font" command now supports importing WFN fonts too.
 - Removed "Fonts designed for high resolution" option from General Settings. Instead added
   individual SizeMultiplier property to Fonts.
 - Alphabetically sort audio clips in the drop lists.
 - Display audio clip length on the preview pane without starting playback.
 - Now packages Audio and Speech files using extended pack format, allowing longer filenames;
   This also removes a 4-digit limit on speech file numbers; was 1-9999 per character,
   now up to 2 billion due to how engine handles these.
 - Sync variable type selector in Global Variables pane with the actual list of supported
   script types.
 - Added ThreadedAudio property to Default Setup.
 - In preferences added an option telling whether to automatically reload scripts changed
   externally.
 - Added "Always" choice to "Popup message on compile" preference. Successful compilation
   popup will only be displayed if "Always" choice is selected.
 - Added shortcut key combination (Shift + F5) for stopping a game's debug run.
 - Don't display missing games in the "recent games" list.
 - Editor now checks for missing sprite data in the spritefile, replacing affected sprites
   with placeholder image to prevent crashes.
 - Build autocomplete table a little faster.
 - Disabled sending crash reports and anonymous statistics, because of the AGS server issues.
 - Corrected .NET version query for the anonymous statistics report.
 - Fixed Default Setup was not assigned a proper Title derived of a new game name.
 - Fixed crash and corruption of project data when writing to full disk.
 - Fixed saving sprite file to not cancel completely if only an optional step has failed
   (such as copying a backup file).
 - Fixed changing character's starting room did not update list of characters on property
   pane of a room editor until user switches editing mode or reloads the room.
 - Fixed room editor kept displaying selection box over character after its starting room
   has changed.
 - Fixed room editor not suggesting user to save the room after changing object's sprite
   by double-clicking on it.
 - Fixed sprite folders collapsing after assigning sprite to a View frame or an object.
 - Fixed view loops displayed with offset if the view panel area was scrolled
   horizontally prior to their creation.
 - Fixed MIDI audio preview was resetting all instruments to default (piano) after pausing
   and resuming playback.
 - Fixed MIDI audio preview had wrong control states set when pausing a playback.
 - Fixed autocomplete not showing up correctly if user has multiple monitors.
 - Fixed autocomplete crashing with empty /// comments.
 - Fixed script compiler could leave extra padding inside the compiled scripts filled with
   random garbage if script strings contained escaped sequences like "\n" (this was not good
   for source control).

Scripting:
 - Fixed compiler was not allowing to access regular properties after type's static properties
   in a sequence (for example: DateTime.Now.Hour).

Script API:
 - Introduced new managed struct Point describing (x,y) coordinates.
 - Introduced StringCompareStyle enum and replaced "caseSensitive" argument in String functions
   with argument of StringCompareStyle type.
 - Implemented Dictionary and Set script classes supporting storage and lookup of strings and
   key/value pairs in sorted or unsorted way. Added SortStyle enum for use with them.
 - Implemented Viewport and Camera script classes which control how room is displayed on screen.
 - Implemented Screen struct with a number of static functions and properties, which notably
   features references to the existing Viewports. Deprecated System's ScreenWidth, ScreenHeight,
   ViewportWidth and ViewportHeight in favor of Screen's properties.
 - Added Game.Camera, Game.Cameras and Game.CameraCount properties.
 - All functions that find room objects under screen coordinates are now being clipped by the
   viewport (fail if there's no room viewport at these coordinates). This refers to:
   GetLocationName, GetLocationType, IsInteractionAvailable, Room.ProcessClick, GetWalkableAreaAt
   and all of the GetAtScreenXY functions (and corresponding deprecated functions).
 - Added Character.GetAtRoomXY, Hotspot.GetAtRoomXY, Object.GetAtRoomXY, Region.GetAtScreenXY,
   replaced GetWalkableAreaAt with GetWalkableAreaAtScreen and added GetWalkableAreaAtRoom.
 - Replaced Alignment enum with a new one which has eight values from TopLeft to BottomRight.
 - Renamed old Alignment enum to HorizontalAlignment, intended for parameters that are
   only allowed to be Left, Center or Right.
 - Added new script class TextWindowGUI, which extends GUI class and is meant to access
   text-window specific properties: TextColor and TextPadding.
 - Added new properties to GUI class: AsTextWindow (readonly), BackgroundColor, BorderColor,
   PopupStyle (readonly), PopupYPos.
 - Added Button.TextAlignment and Label.TextAlignment.
 - Added missing properties for ListBox: SelectedBackColor, SelectedTextColor, TextAlignment,
   TextColor.
 - Replaced ListBox.HideBorder and HideArrows with ShowBorder and ShowArrows.
 - Added TextBox.ShowBorder.
 - Added AudioClip.ID which corresponds to clip's position in Game.AudioClips array.
 - Added Game.PlayVoiceClip() for playing non-blocking voice.
 - Added SkipCutscene() and eSkipScriptOnly cutscene mode.
 - Allowed to change Mouse.ControlEnabled property value at runtime.
 - Added Game.SimulateKeyPress().
 - Added optional "frame" parameter to Character.Animate and Object.Animate, letting you begin
   animation from any frame in the loop.
 - Deprecated "system" object (not System struct!).
 - Deprecated Character.IgnoreWalkbehinds and Object.IgnoreWalkbehinds.
 - Deprecated DrawingSurface.UseHighResCoordinates. Also, assigning it will be ignored if game's
   "Allow relative asset resolutions" option is disabled.

Engine:
 - New pathfinder based on the A* jump point search.
 - Implemented new savegame format. Much cleaner than the old one, and easier to
   extend, it should also reduce the size of the save files.
   The engine is still capable of loading older saves, temporarily.
 - Implemented support for sprite batch transformations.
 - Implemented custom room viewport and camera.
 - Removed limits on built-in text wrapping (was 50 lines of 200 chars max each).
 - Removed 200 chars limit for DoOnceOnly token length.
 - Try to create all subdirectories when calling File.Open() for writing,
   DynamicSprite.SaveToFile() and Game.SetSaveGameDirectory().
 - Reimplemented threaded audio, should now work correctly on all platforms.
 - Made debug overlay (console and fps counter) display above any game effects (tint, fade, etc)
 - Made fps display more stable and timing correct when framerate is maxed out for test purposes.
 - Print debug overlay text using Game.NormalFont (was hard-coded to default speech font).
 - Improved performance of hardware-accelerated renderers by not preparing a stage bitmap
   for plugins unless any plugin hooked for the particular drawing events.
 - Reimplemented FRead and FWrite plugin API functions, should now work in 64-bit mode too.
 - Support "--gfxdriver" command line argument that overrides graphics driver in config.
 - Implemented "--tell" set of commands that print certain engine and/or game data to stdout.
 - Use "digiid" and "midiid" config options to be used on all platforms alike and allow these to
   represent driver ID as a plain string and encoded as an integer value (for compatibility).
 - Completely removed old and unsupported record/replay functionality.
 - Replaced number of fatal errors reported for incorrectly called script functions with
   a warning to the warnings.log instead. This is done either when arguments may be fixed
   automatically, or script command simply cannot be executed under current circumstances.
 - Expanded some of the error messages providing more information to end-user and developers.
 - Fixed engine could not locate game data if relative path was passed in command line.
 - Fixed potential bug which could cause DoOnceOnly tokens to be read incorrectly from a savedgame.
 - Fixed engine crashing with "division by zero" error if user set InventoryWindow's ItemWidth or
   ItemHeight to 0.
 - Fixed engine crashing if Object.SetView is called with a view that does not have any loops.
 - Fixed old walk-behind cut-outs could be displayed on first update in a room if the room's
   background was modified using raw drawing commands before fade-in. This happened only when
   running Direct3D or OpenGL renderer. Note that this bug was probably never noticed by players
   for a certain barely related reason.
 - Fixed BlackBox-in transition done by software renderer could have wrong aspect ratio.
 - Fixed Direct3D and OpenGL displayed pink (255, 0, 255) fade as transparent.
 - Fixed Direct3D was slightly distorting game image in pixel perfect mode.
 - Fixed Direct3D was not clearing black borders in fullscreen, which could cause graphical
   artifacts remaining after the Steam overlay, for example.
 - Fixed potential crash that could happen when switching between fullscreen and windowed mode,
   or switching back into game window (only observed on Linux for some reason).
 - Fixed a bug in mp3/ogg decoder where it assumed creating an audiostream succeeded without
   actually testing one.

Linux:
 - Use same FreeType library sources as Windows version, which suppose to fix TTF font glitches.
 - Re-enabled threaded audio setting.
 - $APPDATADIR$ script paths are now mapped to "$XDG_DATA_HOME/ags-common", making sure it is a
   writeable location.

Windows:
 - Windows version of AGS is now built with MSVS 2015 and higher.
 - Engine is marked as a DPI-aware application that supposed to prevent window scaling by system.

WinSetup:
 - Added "Enable threaded audio" checkbox.


===================================================================================================


VERSION 3.4.4 - Patch 1, September 2019

Engine:
 - Fixed increased CPU load when displaying built-in dialogs (save, restore etc).


VERSION 3.4.4, July 2019

Editor:
 - Disabled screenshot made when sending a crash report, for security reasons.
 - Fixed Audio folders were displaying internal "AllItemsFlat" property on property grid.
 - Fixed crash when editor was updating file version in compiled EXE but failed and tried to
   report about that.

Engine:
 - Fixed Character.DestinationY telling incorrect values beyond Y = 255.
 - Fixed DynamicSprite.SaveToFile() not appending ".bmp" if no extension was specified.
 - Fixed IsMusicVoxAvailable() not working correctly in old games which use 'music.vox'.
 - Restored support for running games made with experimental 3.3.0 CR version.
 - Fixed character's blinking frames drawn incorrectly when legacy sprite blending mode was on.
 - Restored legacy InventoryScreen() behavior which picked sprites 0, 1, 2 for inventory dialog
   buttons when predefined 2041, 2042 and 2043 were not available.
 - Fixed negative "cachemax" value in config could lock the engine at startup.
 - Added Scavenger's palgorithms plugin to the list of builtins, for ports that use ones.
 - Added stubs for monkey0506's Steam and GoG plugins to let run games on systems that do not have
   Steam/GoG installed (all related functionality will be disabled though).
 - Added stubs for SpriteFont plugin.
 - Added missing stubs for agswadjetutil plugin.

Linux:
 - Support for OpenGL renderer.


VERSION 3.4.3 - Patch 1, February 2019

Engine:
 - Fixed serious mistake that would cause crashes in plugins which export their own
   managed types for game script.

Linux:
 - Fixed compilation against recent Allegro 4.4.3 release.
 - Updated prebuilt binaries to be compatible with Debian 8 (jessie) and higher.


VERSION 3.4.3, February 2019

Common features:
 - Removed restriction preventing GUIs to be larger than the game's screen.

Editor:
 - Added missing audio options to Default Setup.
 - Fixed GUI and Room editors sometimes having larger scrollable area than necessary.
 - Fixed editable area was not resized when GUI size changed.
 - Fixed TextWindow GUI's elements could be deleted or moved in the editor with key
   controls with no means to restore them.
 - Don't modify filesystem permissions in Compiled directory when compiling the game.
   Editor no longer requires non-standard "takeown.exe" utility.
 - Fixed Windows Explorer was sometimes locking the game files during compilation.
 - Fixed rooms not being rebuilt when running game just created from a template.
 - Fixed translations were not updated or available at all for the test run unless the
   game was fully rebuilt.

Engine:
 - Allowed engine to return integer of "0" value from script functions that are "void"
   by nature, for compatibility reasons. This may fix running particular old games.
 - Fixed const-sized char[] arrays in managed structs did not work correctly and could
   even cause engine to crash.
 - Fixed some compilers could instigate a crash in the on_event callback if it was called
   before the first room is loaded.
 - Prevent game from crashing if there was an attempt to use a non-existant font index.
 - Fixed crash when calling DisplayTopBar with a title longer than 200 characters.
 - Fixed DisplayTopBar() was displayed on screen for the time calculated from the length
   of it's title rather than it's message text (regression).
 - Fixed built-in inventory screen could crash the game again (regression).
 - Made engine fallback to defaults if config contains invalid graphic scaling setting.
 - Fixed crash in the Software renderer which was occuring if it failed anytime after
   setting display mode but prior to initializing scaling filter.
 - Fixed graphic artifacts looking like thin vertical lines around sprites when running
   OpenGL renderer (aka "texel leaking").
 - Fixed OpenGL not displaying tinted sprites at all if tinting shader does not work
   (now will display sprites without tint).
 - Fixed 8-bit sprites could have broken colours if game is run using Direct3D or OpenGL.
 - Fixed broken colours during fade-in and fade-out in 16-bit games.
 - Fixed possible crash occuring when switching in and out the game window while game is
   being shut down.
 - Improved a warning message displayed when sound driver was not initialized, and added
   a hint for players on how to supress it.
 - Fixed double error message displayed if the game has an unsupported data format.

Linux:
 - Fixes Linux game launch script (fixes issues with itch.io client).

Android:
 - Long press on "Back" button now calls in-game menu (was displaying exit confirmation).
   This change was made to counter removal of "Menu" button on many modern devices.
 - Fixed long press on "Back" and "Menu" buttons not handled correctly on some devices.

WinSetup:
 - Always provide at least two standard fullscreen modes for selection, even if graphics
   driver failed to return a list of supported modes.


NOTE: VERSION 3.4.2 was cancelled and never released: the WIP build was renamed to 3.5.0.


VERSION 3.4.1 - Patch 4, September 2018

Engine:
 - Fixed dynamic array of Dynamic Sprites or Overlays could lose some of its elements
   after restoring a savedgame.
 - Fixed Debug(2) and Debug(5) commands (regression).
 - Fixed "warnings.log" was never created (regression).


VERSION 3.4.1 - Patch 3, July 2018

Editor:
 - Added scrollbars and zoom slider to the GUI editor.
 - Added one extra zoom step to the Room editor and fixed mouse wheel scrolling
   zoom slider by 3 steps at once instead of 1.
 - Fixed Undo history getting lost after saving the script.
 - Fixed crash when importing old game's rooms with interaction variables.
 - Fixed incorrect character names appearing after old game's import.

Engine:
 - Reverted conversion of all graphics on load to 32-bit, made the game run in its
   native color again, but correctly convert to 32-bit display instead.
   This fixes certain bugs found in 16-bit games since the first 3.4.1 release.
 - Fixed pressing ALT+ combination on Windows sometimes caused another key to "stuck",
   endlessly triggering key events in game.
 - Fixed service key shortcuts (switching display mode, (un)locking mouse in window)
   did not work at particular stages of the game, like video playback and dialog options.
 - Fixed unwanted transparency on built-in GUI in 8-bit games.
 - Fixed engine was reporting string format errors as internal ones and not script's.
 - Fixed crash when loading an old game's room with interaction variables.


VERSION 3.4.1 - Patch 2, May 2018

Editor:
 - Font's line spacing and offset are now used when displaying GUI previews.

Engine:
 - Removed limit on maximal number of asset files in a game package.
 - Fixed game refused to start at all if speech.vox has bad format.
 - Fixed DynamicSprite.SaveToFile() was not appending default  "bmp" extension
   if user did not specify one.

Android:
 - Updated port to work with 3.4.1 engine. Software renderer works again too
   (was broken in 3.4.0).


VERSION 3.4.1 - Patch 1, January 2018

Engine:
 - Removed game error reported when GUI coordinates were off the room limits.
 - Fixed crash in Direct3D renderer when alt+tabbing out of fullscreen mode.
 - Fixed OpenGL fullscreen mode was not minimized when you alt+tab from it.
 - Fixed Direct3D and OpenGL renderers unnecessarily applied anti-aliasing on
   utility sprites (used for transition effects) when "smooth scaled sprites"
   option was enabled.


VERSION 3.4.1, December 2017

Common features:
 - Upgraded Windows version of AGS with Allegro v4.4 library (previously v4.2).
 - Implemented "RenderAtScreenResolution" game setting. When enabled, characters
   and objects are scaled in screen pixels rather than game pixels.
 - Implemented VerticalOffset and LineSpacing properties for fonts.
 - Removed limit on Dialog Topics (was 500 topics per game).
 - Removed length limit on the script names of Inventory, GUI and GUI Controls.
 - Removed length limit on the script names of Hotspots and Objects.
 - Removed length limit on event handler names.

Editor:
 - Removed legacy game compiler.
 - Raw compiled game data is now saved in "Compiled\Data" folder, as opposed to
   just "Compiled".
 - The speech.vox file is now not recompiled if game is quick-run (using F5).
   Engine is supposed to find newer files in the Speech folder.
 - Editor can now import games older than 2.72, and newer too (3.*) if you have
   extracted data files from compiled executable.
 - ScriptAPIVersion and ScriptCompatibilityLevel settings now have "Highest"
   option, which is meant for automatically enabling newest script API when
   upgrading old project in a newer editor.
 - Added new "Default Setup" pane, which works similarily to "General Settings"
   and lets you configure default values for game setup.
 - Added "Font Height (pixels)" readonly property to the Font's pane, which
   works for both WFN and TTF fonts and may be used as a reference.
 - Made Editor correctly detect modern versions of MS Windows for display on
   About dialog and when sending anonymous statistics.
 - New application icon to comply with 3.4.0 splash screen.
 - Fixed crash when importing old games which have extended editor version
   string saved in the project files.
 - Few improvements to the game compilation made in hope to reduce occasional
   data corruption.

Script:
 - Fixed local variables not working in the switch's case expressions.
 - Fixed Strings in switch, making them compare by value again.
 - Fixed compiler mistakes caused by the use of objects of empty type
   (that is - struct without any variables in it).
 - Fixed few cases of possible compiler crashing when there is an unfinished
   statement in the end of the script.
 - Fixed unhandled exception occuring when user types "#undef", "#ifdef" or "#ifndef"
   on the last line of the script.
 - Fixed #ifver and #ifnver not working properly if version number had only one
   component (major version).

Script API:
 - A new parameter StopMovementStyle is added to following functions: LockView,
   LockViewAligned, LockViewFrame, LockViewOffset, UnlockView. This parameter
   can be eStopMoving (default) or eKeepMoving.
 - DynamicSprite.CreateFromFile and SaveToFile now support path tokens and
   comply to the new file path rules (no writing files to the game's
   installation directory).
 - Added missing readonly properties to get Lighting/Tinting parameters for
   Character and Object: HasExplicitLight, HasExplicitTint, LightLevel,
   TintBlue, TintGreen, TintRed, TintSaturation, TintLuminance.
 - Added Mouse.SelectPreviousMode() and Mouse.IsModeEnabled(CursorMode)
   functions.
 - Added readonly properties to get Button's animation state: Button.Animating,
   Button.Frame, Button.Loop, Button.View.
 - Added GetFontHeight(FontType) and GetFontLineSpacing(FontType) functions.
 - Added setter for System.Windowed property, letting to change it at runtime,
   switching between windowed and fullscreen modes.
 - Added System.RenderAtScreenResolution property to change sprite rendering
   mode at runtime.

Engine:
 - Added OpenGL renderer to Windows version.
 - Partial support for plugins drawing on screen for hardware-accelerated
   renderers (Direct3D, OpenGL).
 - Added support for switching between fullscreen and windowed modes at runtime
   using Alt+Enter key combination.
 - All supported renderers now run 16-bit and 32-bit games in 32-bit display
   mode by default, and convert game's graphics on load if that is required.
   Hardware-accelerated renderers (Direct3D and OpenGL) are also allowed to run
   8-bit games, converting graphics to 32-bit at runtime.
   This measure improves Software renderer work on contemporary systems, and fixes
   loss of green hue precision in 16-bit games when they are run with Direct3D or
   OpenGL.
   NOTE: 8-bit dynamic palette cycling is still not supported for hardware-
   accelerated drivers.
 - Added support for global configuration file, which works as configuration
   for all games and overrides default game's config file. Individual game
   user's config overrides global one in its turn. Global config's location is
   platform-dependent (this feature is currently disabled on Windows).
 - Implemented separate config option for game's shared data path, to keep it
   distinct from user-defined saves path.
 - Engine saves last Windowed and RenderAtScreenResolution mode states to the
   user config file.
 - Engine no longer writes and reads gamma level in saves, meaning that gamma
   keeps its current value when restoring a saved game.
 - Removed arbitrary limit on number of sprites rendered at the same time for
   hardware-accelerated renderers (Direct3D and OpenGL) (was 75), and another
   limit imposed on drawing entries for all drivers (was 200).
 - Engine now tries to get voice files from the Speech folder first, if one
   exists, and speech.vox later when quick-run from the Editor.
 - Fixed speech portrait was displayed below GUI, contrary to speech text.
 - Fixed ShakeScreen command was causing graphic artifacts when game is run
   with software renderer.
 - Fixed calling ChangeView during idle animation results in new view being animated.
 - Fixed Speech.SkipStyle getter return value for eSkipTime case.
 - Fixed Speech.VoiceMode not returning correct values when speech.vox is not
   enabled/present.
 - Fixed AdjustVolumeWithScaling character's property not working with the new
   audio system.
 - Fixed volume drop was not applied to audio clips which begin playing during
   speech voice-over.
 - Fixed Game.SetAudioTypeSpeechVolumeDrop did not affect currently playing
   clips until next voice-over begins.
 - Fixed Game.TranslationFilename returning "default" instead of empty string
   if no translation is set.
 - Fixed engine was trying to locate "My Documents" folder on Windows Vista and
   higher even though it did not need it, and reporting internal error if such
   folder was not found, even though "Saved Games" folder is used instead.
 - Properly toggle console upon play.debug_mode variable change in script.
 - Added missing stubs for agsjoy plugin.

WinSetup:
 - Fixed display mode selection was missing certain items.


VERSION 3.4.0 - Patch 4, March 2017

Editor:
 - Improved Font preview, now it displays all 256 supported characters and
   resizes itself to accomodate these on the grid properly.
 - Fixed game compilation on systems which have Japanese ANSI or similar locale
   as default locale for non-Unicode applications.
 - Fixed Linux binaries were not copied to the Compiled folder if AGS Editor is
   installed to "C:/Program Files" and run in a non-administrator mode.
  
Engine:
 - Fixed toggling mouse lock in window with Ctrl+Alt did not work all the time.


VERSION 3.4.0 - Patch 3, February 2017

Common bug fixes:
 - Fixed program crash in Engine and Editor when loading/importing a game that
   contains file with name longer than 50 characters.

Editor bug fixes:
 - Do not copy hidden and system files into final directories when building the
   game.


VERSION 3.4.0 - Patch 2, February 2017

Script API:
 - Extended the list of System.OperatingSystem possible return values;
   now supports eOSAndroid, eOSiOS, eOSPSP

Editor bug fixes:
 - Fixed incorrect Unicode-to-ANSI string conversion during game compilation
   which caused text containing non-latin characters become random mess in game,
   even if game fonts compiled to the proper ANSI codepage.

Engine bug fixes:
 - Fixed mouse cursor stuck at the left border of the screen when using OpenGL
   renderer (Android & iOS ports).
 - Fixed InventoryScreen() script function caused game to crash if particular
   resources are not available.
 - Fixed built-in inventory screen not working with Direct3D and OpenGL
   renderers.
 - Fixed obsolete gfxfilter names are printed when using --help argument.

Cosmetics & convenience:
 - Corrected error message displayed when engine cannot get write access to the
   disk (e.g. no more telling to not run from CD on Android).
  
Manual:
 - Added information on static extenders.


VERSION 3.4.0 - Patch 1, November 2016

Editor:
 - Fixed #if(n)ver preprocessor directive failed to properly compare versions
   if the current and required versions have different number of digits.

Engine:
 - Returned support for some older config options related to graphics mode,
   so that the engine would be able to use old config files.
 - Fixed graphics mode initialization failure in certain less common setup
   cases, such as when requested window size was larger than current
   desktop resolution, or when the final mode appeared smaller than the
   precalculated one.
 - Fixed couple of memory leaks occuring when saved game is restored.
 - Fixed rare crash when restoring a game while having unreleased DrawingSurface
   pointers.
 - Fixed compilation in C++11 mode.

WinSetup:
 - Fixed "native game resolution" mode choice was not properly restored when
   loading config file.


VERSION 3.4.0, September 2016

Common features:
 - Added support for building game for multiple platforms (Windows and Linux
   options are maintained now).
 - Added custom game resolutions.
 - Added extended WFN font support (up to 256 characters).
 - Made custom property values modifiable at runtime.
 - Removed limit on custom properties number (was 30 properties per project),
   increased maximal property name and value length.
 - Removed limit on GUI Control number (was 30 per GUI),
   increased maximal control name length.
 - Removed limit on script modules number (was 50).
 - Added Locked property to room Objects.
 - Added Padding property for TextWindow GUI.

Editor features:
 - New splash screen.
 - Exposed Clickable property for room Objects in the Editor.
 - Exposed TintLuminance property for room Regions in the Editor.
 - Added "Close all tabs" command for the pane's context menu.
 - Added Preferences option "Prompt dialog on closing multiple tabs".
 - The sprite editor now highlights drop targets when you drag sprites around.

Editor Plugin API:
 - Exposed GUI Panes to plugin API.

Engine features:
 - Added support for any runtime display resolution (now restricted only
   by your system specifics).
 - Added support for vertical sync in Direct3D rendering mode.
 - Made engine try to use all implemented graphic renderers in the
   order of priority, if user selection failed to initialize.
 - Rised default sprite cache limit for desktop platforms to 100 MB (was 20).
 - Game writes latest translation and mouse speed setting to config file
   on exit.

Scripting features:
 - Added managed user structs; although currently limited to containing only
   non-pointer variables in them.
 - Added support for dynamic arrays in non-managed structs.
 - Added support for dynamic array as return value of the struct's
   member function.
 - Added support for static extender functions.
 - Added "do..while" kind of loop, in addition to previously existing "while".
 - Added "for" operator and related loop construct.
 - Added "switch" and "case" operators and related branching construct.
 - Added "break" and "continue" operators working in any loop or switch.
 - Added missing compound assignment operators (*=, /=, and so on).
 - Made preprocessor macros usable in definition of another macro.
 - Added "#region" and "#endregion" preprocessor commands.

Script API:
 - Added Script API version switch to the project's General Settings. For every
   supported API version a "SCRIPT_API_vXXX" macro is introduced, where XXX are
   version numbers.
 - Added Script Compatibility Level switch to General Settings. For every
   compatible version a "SCRIPT_COMPAT_vXXX" macro is introduced.
 - Added AudioChannel.Speed property.
 - Added CharacterDirection enum and optional "direction" parameter
   for Character.ChangeRoom().
 - Added Character.FaceDirection().
 - Added Character.DestinationX and Character.DestinationY properties.
 - Added RunActiveOption() and Update() member functions to the
   DialogOptionsRenderingInfo type.
 - Extended Dialog Options API: added support for dialog_options_repexec() and
   dialog_options_key_press() functions to improve handling of the custom
   dialog options; added related compatibility project option and support for
   "NEW_DIALOGOPTS_API" macro in scripts.
 - Added game.dialog_options_highlight_color variable.
 - Added File.Seek() function and File.Position property.
 - Added IsInteractionAvailable() method to Hotspot, Object and
   Character types.
 - Added Game.AudioClipCount property and Game.AudioClips[n] array.
 - Added Game.IsPluginLoaded().
 - Added GUIControl.ZOrder property.
 - Added GUI.Click() and Button.Click() functions which call
   OnClick event handler of corresponding GUI or button.
 - Added GUI.ProcessClick() function that processes click on GUI only,
   similarily to how old ProcessClick processed click on room objects only.
 - Added Mouse.Click() function to simulate mouse click on screen.
 - Added Room.GetProperty() to substitute global GetRoomProperty().
 - Added Room.ProcessClick() to substitute global ProcessClick().
 - Added SetProperty() and SetTextProperty() functions to Room, InventoryItem,
   Hotspot, Object and Character types.
 - Added optional "luminance" parameter to Region.Tint() and
   Region.TintLuminance readonly property.
 - Added SetAmbientLightLevel() to set global light level for
   anything in the room.
 - Added Character.SetLightLevel() and Object.SetLightLevel() functions to
   set individual light levels. Negative light levels can be used
   in 8-bit games to produce darkening effect.
 - Added System.RuntimeInfo property which returns a short description of
   current graphics mode, scaling filter and enabled game resources.

Editor bug fixes:
 - Fixed Undo history was deleted when an Editor panel changes
   its docked state.
 - Fixed crashes under certain circumstances when a script editor is closed.
 - Fixed crash if selecting a character without a normal view
   in the room editor.
 - Fixed Ctrl+Tab did not work for the first time when cycling
   through opened editor tabs.
 - Fixed "Go to Line..." command did not always move cursor to correct line.
   Also, do not select that line.
 - Made the project completely rebuild itself whenever "Enable Debug Mode"
   value in the General Settings differs from the setting used for
   the last build, to prevent inconsistency in compiled scripts.
 - Fixed a crash when trying to run game setup from the Editor
   while "Compiled" folder does not exist.
 - Fixed project items could sometimes get incorrectly arranged
   inside the folder.
 - Fixed writing faulty timestamps in project file on some occasions that
   could spoil usage of file versioning control.
 - Fixed Help window positioning on multi-monitor desktop.
 - Fixed error in autocomplete occuring when there is a single-line comment
   in the end of the script.
 - Fixed incorrect compiler parsing of a static function call inside
   array index brackets.
 - Fixed compilation of struct member functions having name identical
   to existing global function.
 - Fixed compilation of structs having members with names identical
   to non-basic types, global variables and game entities (such as characters,
   GUI, etc).
 - Corrected few error messages related to struct's function declaration.
 - Fixed compiler reporting errors as "runtime errors" under
   certain circumstances.
 
Engine bug fixes:
 - Fixed result of using transparency parameter of the
   DrawingSurface.DrawImage() in 32-bit games when drawing opaque sprites
   over surfaces with alpha channel.
 - Fixed DynamicSprite.CopyTransparencyMask() was overwriting magic transparent
   pixels on destination with alpha values from mask.
 - Fixed the speech portrait position was not adjusted for character walking
   between its lines, when BasedOnCharacterPosition portrait placement is used.
 - Fixed occasional pathfinding failure on straight lines with complex
   walkable areas.
 - Fixed using '[' special character in Display-like commands discarded all of
   the backslashes before it (e.g. "\\[" should now print \[ as expected).
 - Fixed WAVE audio not looping after restoring a game
 - Fixed a bug that caused MP3 clip continuously increase its base volume if
   the directional volume modifier was applied.
 - Fixed queued audio clips did not update their volume when default
   audio type volume changes.

WinSetup:
 - Added support for "default_translation_name" option in the "[language]"
   section of the config file.


===================================================================================================


VERSION 3.3.5 - Patch 7, September 2016

Editor:
- Fixed "Check for updates" feature, which should now be compatible with
  the new website.

Engine:
- Allow to run game without mouse installed (game won't abort).
- Fixed SetSavegameDirectory() to be compliant with the new script path rules.
  Now if you pass a save directory without specifying $MYDOCS$ tag, the
  directory will be created as a subdirectory of default saves path. If the
  player has configured a custom save path, SetSavegameDirectory() will
  properly keep subdirectories after remapping paths.
- Fixed missing slash after special directory token in the script file paths
  could case a creation of directory outside of permitted location.
- Fixed plugins with dot (".") in their name failed to load (regression).
- Fixed display gamma forcedly reapplied every time save is restored.


VERSION 3.3.5 - Patch 6, August 2016

Editor:
- Fixed properties buttons dissapearing from the Properties panel if the
  object was selected while the panel was not visible.

Engine:
- Fixed Display script functions displaying different text if there is any
  variadic text formatting function called in repeatedly_execute().
- Fixed text formatting functions did not parse "%%" format properly.


VERSION 3.3.5 - Patch 5, July 2016

Engine:
- Fixed user's allegro.cfg was ignored.


VERSION 3.3.5 - Patch 4, July 2016

Compiler:
- Fixed crash occuring when there is an incomplete declaration in the end
  of script.

Engine:
- Engine will fall back to using default system paths if it failed using
  user-defined custom save path for any reason.
- Fixed engine displaying same warning twice if the loaded game was compiled
  for higher version of AGS.

WinSetup:
- Only let user choose actually existing folders for custom save paths.


VERSION 3.3.5 - Patch 3, June 2016

Engine:
- Fixed "datafile" config option was ignored.
- Fixed "datadir" config option was never used when searching for possible game location
  (this was broken for several years!).
- Fixed Game.FileName property return empty string.
- Fixed built-in console making Direct3D9 graphics driver crash in 16-bit games.


VERSION 3.3.5 - Patch 2, June 2016

Engine:
- Fixed compilation on big-endian systems.
- Fixed compilation with GCC 6.


VERSION 3.3.5 - Patch 1, April 2016

Engine:
- Added support for $INSTALLDIR$ location tag in the filepaths
  used in the script.
- Fixed game could not find files in the current directory when
  run from the Editor.

WinSetup:
- Fixed error that could occur if choosed custom save path
  contained "%" symbol.
- Read correct game's resolution from game data instead of config file.
- Do not write all default config contents to user config, save only options
  that are set by setup program.


VERSION 3.3.5, March 2016

Editor Features:
- Path to resource's (sprite, audio) source file is now saved as relative one if the file is
  located inside game project's folder.
- Removed arbitrary limit of the script imports (was 50000).
- Script allows struct member qualifiers to be in any order.
- Better detection of integer constants overflow in script.
- Removed arbitrary limit of integer default value of +/-32000. Integer values are now limited
  by correct 32-bit values (-2147483648 to 2147483647).
- Support for negative constants in enums.
- Better folding markers and indentation guides in script editor.

Editor Bug Fixes:
- Fixed compiler crash if unknown keyword used after "readonly".
- Fixed compiler did not properly report incorrect type of dynamic array in function declaration.
- Fixed compiler did not report proper type name in case of syntax error sometimes.
- Fixed mouse cursor flicker above the script editor.

Engine Features:
- Removed unconfigurable mouse cursor's acceleration (Windows).
- Support for mouse cursor speed control: may be defined in configuration and changed in script.
- A config option for keeping consistent cursor speed relative to user's desktop resolution.
- Support for locking mouse inside window: automatic lock is enabled in configuration, and user
  may use Ctrl+Alt combination to lock/release mouse at any time.
- Restricted writing game files to special system directories
  (game is forbidden to write files into installation directiory or by absolute path).
  Unsafe paths are either remapped (when possible) or rejected.
- Support for player defined saves & game file directory.
- -v/--version command line argument makes engine display its version and bail.

Engine Bug Fixes:
- Fixed crash if screenshot is taken while game window was minimized or moving.
- Fixed alpha blend did not work properly for speech portrait if blinking frame did not have alpha channel.
- Fixed Display and Say script commands were displaying text for minimal amount of time under certain conditions.
- Fixed legacy audio functions did not start digital music playback if MIDI driver failed to initialize.
- Fixed game was run in smallest possible window if graphics driver failed to initialize fullscreen mode.
- Fixed "--help" command line argument not working all times depending on its order.
- Fixed engine did not always properly closed application window when running debug build.

Script API:
- Supported late_repeatedly_execute_always() callback in script, called after game has updated, but
  before it is drawn.
- Added Mouse.ControlEnabled (readonly) and Mouse.Speed properties.
- Added System.HasInputFocus property which tells if game currently has focus or runs at background.

Cosmetics & convenience:
- Clarified disabled MIDI option name in WinSetup.
- Extended information displayed if graphics driver failed to initialize.
- Clarified error messages for running unsupported games.


VERSION 3.3.4, July 2015

Features:
- Removed 10,000 symbols limit in scripts.
- Added Character.Thinking and Character.ThinkingFrame script properties.
- Added Papagayo voice lip sync support.
- Find/Replace dialog now remembers the state of "Case sensitive" checkbox.
- Engine now scans all available files in search of game data, only giving standard names
  a priority.

Bug Fixes:
- Fixed Editor crash in case of lip sync data parsing error.
- Fixed Find/Replace dialog skipped the first word in the script being searched through.
- Fixed an order of cycling through fields on Find/Replace dialog.
- Restored letterboxed game's viewport behavior for larger (and scrolling) rooms.
- Fixed Hq2x and Hq3x filter rendering when the display resolution requires side borders.
- Fixed Hq2X and Hq3x filters leaving graphic artifacts on letterbox borders.
- Fixed wrong screen settings could be applied in particular cases when requested gfx filter
  could not be found or failed to initialize.
- Gfx filter name supplied in command line is case-insensitive now.
- Do not disable both digital sound and MIDI music if only one of these failed to initialize.
- Fixed MIDI music refuses to start if digital sound is disabled.
- Fixed division by zero in AlMP3 library code, that could cause crash when seeking in MP3
  audio clip.
- Removed an advise to contact Chris Jones displayed in case of error.

Compatibility:
- Permissive emulation of pre-AGS 3.1.1 "option-on/off" commands in dialog script, that do
not stop game execution if a wrong option number is supplied.


VERSION 3.3.3, December 2014

Features:
- "Number dialog options" game setting now let you choose between "Disable", "Keyboard shortcuts
  only" and "Draw numbers and use keyboard shortcuts" instead of being just "on"/"off".
- The built-in shortcut for showing runtime information has been changed from "Ctrl + V" to
  "Ctrl + Alt + V".

Bug Fixes:
- Fixed audio-related crash on some Linux and Linux-derived systems caused by improper use of mutexes.
- Fixed division by zero and color value overflow cases in alpha blender.
- Fixed voice audio breaking playing on very rare occasions when clip format is OGG or MP3.
  The fix is imperfect, and there's very short pause occuring at same point of playback. The voice
  will continue playing though.
- Fixed character walking in hi-res games when the destination has negative Y coordinate.
- Fixed black borders not drawn in screen corners by Direct3D renderer.

Compatibility:
- Corrected interpretation for games made with AGS 3.0 - 3.2 to let them assign empty loop
  in SetObjectFrame().

Engine log:
- Do not log out supported gfx modes twice if the secondary color depth is equal to primary one.


VERSION 3.3.2, September 2014

Features:
- Reimplemented alternate display modes, now side-borders and top/bottom borders work properly for
  all game and screen resolutions.
- Added config option to run pre-3.1.0 lo-res games in hi-res mode.

Bug Fixes:
- Fixed Editor crashing when user types "#define" on the last line of the script.
- Fixed error in game compilation after user moves item folders up or down in the project tree.
- Fixed bug which could make Character.Transparency and Object.Transparency properties return
  slightly incorrect values.
- Fixed bug that could let user to load corrupted savedgame, which in turn could cause more trouble.
- Provided error handling for several exceptional cases on graphics mode initialization (program
  should at least close normally, showing comprehensible error message).
- Fixed crash in legacy built-in inventory screen.
- Fixed bug in script interpreter that could cause misinterpretation of value provided by plugin.
- Fixed "--setup" command line argument not working if it is not the first argument.
- Fixed WinSetup dialog not sized properly when larger fonts (DPI) option is used in
  Windows display settings.

Log additions:
- Write the game data version and the list of supported graphic modes to the log.

Manual:
- Fixed Speech.VoiceMode example.


NOTE: VERSION 3.3.1 was cancelled and never released: the WIP build was renamed to 3.4.0.


VERSION 3.3.0, February 2014:

This release is a product of collaborative work of the following people
(in alphabetic order):
  Bernhard Rosenkraenzer
  Cristian Morales Vega
  Gilad Shaham
  Ivan Mogilko
  Francesco Ariis
  Janet Gilbert
  Jochen Schleu
  Michael Rittenhouse
  Paul Wilkinson
  Piotr Wieczorek
  rofl0r
  Scott Baker
  Shawn R. Walker
  Steve McCrea
  Steven Poulton
  Sunit Das
  Tobias Hansen
  Tom Vandepoele
  Tzach Shabtay

AGS Engine underwent significant rewrite, with primary aims being better multi-platform
compatibility and backwards-compatibility. Complete list of related changes is too vast
to cite them here, a detailed documentation is provided in the form of the git log at
this repository: https://github.com/adventuregamestudio/ags

Engine Ports:
- Android port.
- iOS port.
- Linux port.
- PSP port.

Features:
- Increased maximal Font number from 15 to 30.
- Added "Translated" property to ListBox gui control, which forces engine to translate
  ListBox items.
- Proper alpha blender for blending two 32-bit sprites with alpha channels.
  Added new option for gui alpha blending setting which turns the proper blender on.
  Added new setting for the use of the blender in general cases (such as DrawImage function).
- Added Dialog.SetHasOptionBeenChosen() method.
- Added DialogOptionsRenderingInfo.HasAlphaChannel property.
- Added eKeyNone constant to eKeyCode enumeration.
- Added two more options for the Skip Speech style: "skip by key only" and "skip by mouse only".
- Added SkipSpeechStyle enumeration.
- Added Speech script class which members substitute number of global functions and variables.
- The backward-compatible "Old-style game-wide speech animation speed" game setting is replaced
  with two active options that allow to turn game-wide speech delay on and off and specify its
  value.
- SetMusicMasterVolume() legacy script function now accepts volume values between -210 and 100
  (was between 0 and 100); large negative values may be used to mute the music completely.
- Added a "Browse" button to the "Create in folder" field in the Start New Game wizard.
- Added "Reload sprite from source" command to Sprite Manager's context menu.
- Sprite Import window is now resizable.
- Engine can now run games of older versions, starting from 2.50. The level of
  compatibility varies.
- Improved character walking smoothness at 60%-80% scaling.
- Game.ChangeTranslation() script function no longer causes game to quit if the translation file
  belongs to different game or has unknown format.
- The game automatically fallbacks to software graphics driver if the hardware one could not run
  or initialize gfx mode for any reason.
- Added support for x5-x8 graphic scaling filters.
- Added config option to find maximal supported scaling automatically.
- Added optional threaded audio support.
- Added config option to override System.OperatingSystem value.
- Added config option to override multitasking mode.
- Added optional log file support to the engine.
- Added support for GNU-style long command line arguments.
- Windows version writes crash dump on "out of memory" error.

Editor Plugin API:
- Added property for getting playable character.
- Added property for getting ScriptsAndHeaders collection.
- Added methods for refreshing project's tree.
- Added method for refreshing property grid.
- Added methods for controlling output panel.

Bug Fixes:
- Editor no longer allows to create more game items than engine supports.
- Fixed "savegameindex[]" array was declared with incorrect size in script.
- Fixed incorrect selection of a new sprite, imported while the "Select sprite" dialog is open.
- Fixed sprite lookup in folders, differing only by name case.
- Fixed the autocomplete list displaying obsolete information in some cases.
- Fixed false notifications of the script had been changed externally after being saved in
  the editor.
- Fixed overlapping labels in the Editor Preferences dialog.
- Fixed inventory items and cursor crosshair with alpha channel not being drawn properly.
- Fixed crash that occured when ListBox.GetItemAtLocation() is called from
  repeatedly_execute_always() just before the list box is about to be drawn on screen for the
  first time.
- Fixed custom dialog options clickable area by correcting its horizontal coordinate range.
- Fixed error that caused audio volume to reset to default during cutscenes.
- Fixed AudioChannel.Volume returning incorrect value when called from skipped cutscene.
- Stopped play.close_mouth_end_speech_time variable from making effect in voice mode and
  Sierra-style speech.
- Fixed return value of the AudioChannel.PositionMs for MOD/XM clips.
- Fixed OGG and MP3 speech ending prematurely if the audio file size is a multiple of 32 KB.
- Fixed error which took place when user restored a game saved with background music playing,
  in case the music is not found in resources anymore.
- Fixed division by zero which occured if there was a 1px tall walkable area with vector scaling.
- Fixed side-borders that were not applied properly at larger widescreen resolutions.


===================================================================================================


VERSION 3.2.2 Beta, July 2012:

Following changes made by Tzach Shabtay, unless noted otherwise.

Features:
- Added docking panels and Window menu to control all the windows.
- Added folders for characters, dialogs, inventory items, guis, rooms, scripts and views.
- Added new menu items for all folders to move up/down.
- Added the ability to drag/drop files to be before other files.
- Added highlights for drag&drop and auto-expand folders on hover during drag&drop.
- Script and header files are now combined into one and can be expanded/collapsed, similar to
  room settings & script.
- Removed the context menu commands to move script modules up/down, this can now be done with
  drag/drop (and not only for scripts). The script dependency rule remains the same
  (lower scripts can import symbols from upper ones, but not vice versa).
- Removed the "exclude script" option.
- The "Sort room by number" now sorts within folders.
- Added a menu item to find all usages for characters, dialogs, views,inventory items and
  global variables.
- Added a menu item for almost all document tabs, to navigate to their node on the project tree.
- Added "Goto line" dialog from script editor via shortcut Ctrl+G (and changed existing
  shortcuts to open global script & header to Ctrl+Shift+G/H).
- Added keyboard shortcut (Ctrl+M) to switch between header and source.
- Objects, characters and edges can now be moved with the arrows in the room editor.

Editor Plugin API:
- ISourceControlProvider interface for editor plugins to define your own source control provider
  (Michael Rittenhouse).

Mono Support:
- Partially disabled some features only when running with Mono, since I couldn't see a way to
  code them without the
  Win API:
   - Breaking in debug will not automatically set the editor to the foreground, the user might
     have to click on the window.
   - Notifying the user on file changes externally if the editor is in focus will not happen.
     It will happen when the window is activated, so I hope it won't be too annoying.

Bug Fixes:
- Fixed crash clicking in margin of dialog editor (Chris Jones).
- Fixed RGB colour picker not working in 256-col games with colour numbers > 32 (Chris Jones).
- Fix for: when moving an object after zooming in and out, the floating co-ordinates no longer
  appear next to the object.
- Fixed "Go-to definition" on global variables in script editor didn't do anything. It will now
  open the global variables editor and select the global variable.


VERSION 3.2.1, March 2011
 - Added Find/Replace In All Files capability (Tzach Shabtay)
 - Added GUI control snapping, alignment, grouping and locking to GUI editor (Steven
   Poulton)
 - Added loop cut/copy/paste, Flip All Frames and Import From Sprite Folder options to
   Views in editor, to access this right-click to the right of the loop (Tzach Shabtay)
 - Added RGB colour selector to the various colour properties (ProgZmax)
 - Added Characters option to room editor to show all characters set to start in that
   room (ProgZmax)
 - Added Find All Usages right-click option to script editor (Tzach Shabtay)
 - Added current co-ordinates display while dragging objects/characters in room
   editor (Steven Poulton)
 - Added syntax colouring to dialog scripts (Steven Poulton)
 - Added Dialog.ShowTextParser script property (CJ)
 - Upgraded to latest version of LEC template (abstauber)
 - Middle mouse button now activates the "Copy co-ordinates to clipboard" option in all
   the room editor modes (ProgZmax)
 - Fixed D3D tints not working properly (3.2 regression) (Nefasto)
 - Fixed crash drawing GUIs with no background (3.2 regression) (CJ)
 - Fixed crash restoring/restarting depending on state of crossfading (CJ)
 - Fixed intermittent crash moving objects and using the Ctrl+A debug option (CJ)
 - Fixed "crossfade buffer null attempting transition" if you restored a save game that
   had a different current transition type to the current game position (CJ)
 - Fixed script editor tooltips getting stuck if they appeared over the tab bar at the
   top of the editor (Tzach Shabtay)
 - Fixed editor error if you deleted a room that a character was set to start in (CJ)
 - Fixed co-ordinates displayed in room editor not reflecting Low-Res Co-ordinates
   setting (ProgZmax)


VERSION 3.2, June 2010
 - Rewrote audio system. The old number-based sound and music are gone, replaced with
   new named audio clips. Added AudioClip.*, AudioChannel.*, Game.IsAudioPlaying,
   Game.SetAudioTypeVolume, Game.StopAudio, System.AudioChannels, System.AudioChannelCount,
   System.Volume, ViewFrame.LinkedAudio script commands.
 - Added Game.IgnoreUserInputAfterTextTimeoutMs, Maths.Exp, Maths.Log, Maths.Log10,
   Maths.Cosh, Maths.Sinh, Maths.Tanh
 - Added option to automatically add side borders when running 4:3 games on widescreen
   monitors
 - The generated EXE version information is now set to your Game Name and Developer Name
   instead of "Adventure Game Studio" and "Chris Jones"
 - Added new LEC-style template by abstauber
 - Added Applies To feature to custom properties, so that you can have properties that
   only apply to Rooms or Characters, for example
 - Added menu option to remove old Global Messages from the game, to stop them coming
   out in translation sources
 - Added support for anti-aliased TTF fonts in all situations where they weren't
   previously supported.
 - Added $APPDATADIR$ support to File.Open to allow you to write files to an accessible
   folder that is not the Save Games folder
 - Added eMouseMiddleInv support to on_mouse_click
 - Added editor plugin API methods IGUIController.ActivePane, IRoomController.PreSaveRoom
 - Added plugin API events AGSE_PRESAVEGAME and AGSE_POSTRESTOREGAME
 - Improved graphics mode detection so that the screen doesn't keep flickering when
   trying to start up a low-res game full screen
 - Improved colour quality of mini-sprites displayed in sprite manager
 - Improved the user-friendliness of some error messages, thanks to Error Reporting
 - Improved editor robustness to recover if the Game.agf.user file was corrupt
 - Winsetup now displays the game name in the title bar instead of "Adventure Game Studio"
 - Disabled editor option to save changes whilst the game was running, since doing so 
   could cause sprite file corruption
 - Editor property grid now displays a drop-down list instead of a text box when
   selecting a font or room
 - Changed the pathfinder so that the character cannot get stuck if he ends up outside
   one of the room edges
 - Removed limit on number of text parser words
 - Renamed the "handle inventory clicks in script" general setting to better reflect
   what it does
 - Removed room properties Play Music On Load, Music Volume and Save/Load Enabled since
   they are now obsolete
 - Mouse.IsButtonDown now works with eMouseMiddle
 - "Export all sprites in folder" command now exports 32-bit sprites as PNGs to prevent
   losing the alpha channel
 - Improved error handling if you passed an int to a string argument in String.Format
 - The Restart Point save file (AGSSAVE.999) is no longer deleted when you quit the game, 
   to fix a problem where RestartGame didn't work if you started the game by double-clicking
   an Enhanced Save Game file in explorer
 - Disallowed accented characters like é in script names in the editor, because they
   wouldn't compile
 - Dynamic sprite deletion warning is now only displayed on exit if Debug Mode is turned on
 - Fixed sprite entry getting duplicated if you dragged a sprite to the end of the list
 - Fixed crash with Hq2x and Hq3x graphics filters (3.1.2 regression)
 - Fixed character/object tints and light levels in D3D not matching DX5
 - Fixed TintScreen in D3D so that it looks the same as DX5
 - Fixed Sierra-style speech box moving if the room was scrolled while it was displayed
 - Fixed error running game and problems with save games if there were unicode
   characters in the folder path
 - Fixed GUI controls not updating properly if the control moved under the mouse, but
   the mouse didn't move
 - Fixed theora video being permanently muted after you played one video with muted audio
 - Fixed Dynamic Sprites causing memory corruption if a mouse cursor was set to sprite 0
 - Fixed Compress Sprites setting not taking effect until you next edited some sprites
 - Fixed GUI AdditiveOpacity mode not working properly if you tried to have a non-alpha
   sprite on an alpha GUI
 - Fixed light levels >100% not working with Direct3D driver
 - Fixed Object.MergeIntoBackground not working with Direct3D driver
 - Fixed IsKeyPressed not working with the following keys: [ ] \ ; ' , . /
 - Fixed struct member functions with more than 9 parameters giving run-time error
 - Fixed File commands looking in the wrong directory if you launched the game by
   double-clicking a save game in explorer
 - Fixed SetBackgroundFrame in Player Enters Screen event causing old frame to flash up
   briefly with D3D driver
 - Fixed Make Default Language command crashing if two different source lines mapped to
   the same translated line
 - Fixed run-time error if you returned a string from a function that was a member of a
   local dynamic array
 - Fixed sprite cache corruption if you had a single sprite larger than 20 MB
 - Fixed Room.GetDrawingSurfaceForBackground and Character.PlaceOnWalkableArea to give
   error message instead of crash if you called them from game_start
 - Fixed GUI label text not being anti-aliased if there was a background image but the
   BGColor was set to 0
 - Fixed editor crash creating new game if your Windows username had unicode characters
   in it
 - Fixed Views tree collapsing after renaming or drag-dropping a view
 - Fixed editor crash on startup if you made the editor window very small before closing
   it down last time
 - Fixed editor crash if you set an object's image to -1
 - Fixed character gliding if he bumped into another solid character and the character's
   MovementLinkedToAnimation property was false
 - Fixed DynamicSprite.Rotate cropping 1 pixel off the left side when rotating an image
   with an odd width/height
 - Fixed ShakeScreenBackground not clearing letterbox borders properly if you switched
   from a large to a small shake
 - Fixed "Internal compiler error: table overflow" if there were a lot of imported
   functions/variables
 - Fixed when importing an 8-bit image, if there was another palette slot in the image
   with the same colour as the transparent slot it got changed to black
 - Fixed Game.SpriteWidth/SpriteHeight returning the size of the blue cup instead of 0 if
   you supplied an invalid sprite number
 - Fixed script editor issue if you typed some text, switched to another tab, then came
   back and did Undo
 - Fixed autocomplete editor crash if there was a line break inside an array indexer
 - Fixed compiler crash if a dialog script just had a @ on a line on its own
 - Fixed editor crash if you tried to use a non-icon file as TEMPLATE.ICO
 - Fixed sprite import window crash if you right-clicked in the second stage of tiled import
 - Fixed mouse cursor being drawn in dialog options in DX5 mode even when Mouse.Visible was
   set to false
 - Fixed no line number provided when DynamicSprite.CreateFromDrawingSurface threw an error
 - Fixed script editor crash if you saved the script while the final function was missing
   its closing brace
 - Fixed the editor Preferences window only allowing you to type 5 characters in if you
   wanted to manually enter a path for the New Game Directory or Import Directory
 - Fixed "Close all other tabs" crashing if a room editor with unsaved changes was one
   of the other tabs
 - Fixed changing a walk-behind baseline not marking the room as modified
 - Fixed editor crash XmlException: An error occurred while parsing EntityName.
 - Fixed compilation errors if you named a character with only numeric digits, eg "c500"


VERSION 3.1.2 SP1, February 2009
 - The Editor will now not allow you to open the same game in two different copies of the editor
 - Fixed translations and \[ tag not working on GUIs (regression from 3.1.1)
 - Fixed crash with custom dialog options if you saved the game before running any dialogs
 - Fixed editor crash with tiled sprite import if you dragged out an invisible selection area
 - Fixed editor crash if the Game.agf.user file was read-only
 - Fixed auto-number speech lines to not number "..." lines
 - Fixed TintScreen not working properly in some situations with DX5 driver

VERSION 3.1.2, February 2009
 - Added support for using Transparency properties with alpha-channel sprites
 - Added inventory item CursorImage property to allow you to set a different image for
   the mouse cursor to the inventory window
 - Added F4 hotkey to jump straight to the Events grid to edit interactions
 - Added Character.SpeechAnimationDelay property which replaces the old game.talkanim_speed
   setting and also works with Sierra-style speech. A new General Settings option is
   provided to enable/disable backwards compatibility.
 - Added Game.TextReadingSpeed and Game.MinimumTextDisplayTime properties; obsoleted
   game.text_speed
 - Editor now remembers which item in the property grid was selected as you switch
   between tabs
 - Added plugin API event AGS_EngineInitGfx and methods GetDirectInputKeyboard,
   GetDirectInputMouse and ReplaceFontRenderer.
 - Added Error Reporting feature to editor, to send error information to AGS website if
   the editor crashes
 - Added eKey* enum for use with on_key_press and IsKeyPressed, to make script more readable
 - Added Show Start Page option to Help menu to allow you to access Tips if you have the
   start page disabled at startup
 - When changing the game resolution, the editor will now offer to automatically resize
   all your GUIs to compensate.
 - Improved performance of Theora video playing
 - Templates are now stored in a "Templates" sub-folder to satisfy Vista permissions
 - "Letterbox Mode" option in General Settings is now only shown if the game resolution
   is 320x200 or 640x400
 - Moved the character SpeechColor property from the Movement to the Appearance section
   in the editor, where it belongs!
 - Moved the "You are currently using the eraser" tooltip further away from the cursor 
   so it doesn't obscure what you're doing
 - Improved rendering of View Editor at 120 DPI
 - DynamicSprite.Resize now won't allow new image to be over 25 MB to help spot
   mistakes in size calculations
 - Mouse.ChangeModeGraphic now won't allow you to change the graphic of the Inventory 
   cursor if "Use selected inventory graphic for cursor" is enabled
 - Translations are now automatically recompiled if you change the game name, to ensure
   that they still work
 - Made some stability improvements to how the editor handles the sprite file
 - Improved the editor error message if the game folder had unicode characters in it
 - Fixed editor crash in Vista creating a new game
 - Fixed dynamic sprites sometimes being discarded by the sprite cache
 - Fixed option-off-forever being treated as option-off (introduced by 3.1.1)
 - Fixed compile error if you created a Bool in the Global Variables editor with default
   value set to upper case "TRUE" or "FALSE"
 - Fixed Vista Game Explorer integration appearing as "Play" in the start menu recent list
 - Fixed save games not persisting the walking state of the highest-numbered character
 - Fixed editor's room area undo buffer not being cleared when a different room was loaded
 - Fixed custom dialog options not working properly when using transparent background
 - Fixed Dialog.GetOptionText returning original English text when a translation was in use
 - Fixed button ClipImage property clipping 1 pixel too many in high-res games
 - Fixed PlayVideo not working properly when DX5 graphics filter was in use
 - Fixed PlayAmbientSound screwing up audio if it was used on a channel where a normal
   PlaySound command was still playing
 - Fixed DX5 driver problem switching a GUI background graphic from one with to one
   without an alpha channel
 - Fixed DisplayAtY, GUI.SetSize and Mouse.SetPosition not checking Y co-ordinate
   correctly in 320x240 and 640x480 games when using native co-ordinates
 - Fixed colour corruption if you imported an 8-bit sprite into a hi-color game and
   palette slot 0 of the sprite was not black
 - Fixed dialog script compiler bug if you used "this" in a string within a normal
   scripting command
 - Fixed script editor crash if you deleted a block of code, then hovered the mouse over
   a script variable.
 - Fixed GUI button being set to wrong size if you changed its image in the editor to a
   low-res sprite in a hi-res game
 - Fixed problem with ChangeRoomAutoPosition in hi-res games with hi-res co-ordinates
 - Fixed game.screenshot_height not allowing 240/480 in games of those resolutions
 - Fixed potential crash on fadeout with DX5 Nearest Neighbour filters
 - Fixed object positions getting messed up when importing a hi-res game from AGS 2.72
 - Fixed intermittent editor crash that could occur when shutting down the game
 - Fixed editor crash if you dragged a GUI control to the edge of the GUI then deselected
   it with the property grid
 - Fixed editor crashing if you tried to import a dodgy font
 - Fixed editor not allowing you to rename a script to a different capitalization of the
   same name
 - Fixed editor crash if you tried to rename a script file to contain \ or :
   

VERSION 3.1.1, December 2008
 - Added support for running normal scripts as part of dialog scripts, 
   and thus obsoleted the run-script, dialog_request business
 - Added OGG Theora video support to PlayVideo, and enabled theora videos
   to be compiled into the game EXE
 - Added right-click "Find Sprite By Number" option to Sprite Manager
 - Added Dialog.HasOptionBeenChosen script function.
 - Added basic save and load GUIs to the Default Game template
 - Replaced Anti-Glide mode with a per-character setting MovementLinkedToAnimation.
 - Improved auto-dedent of } in script editor to make it more useful and less annoying
 - Improved performance of pathfinder when calculating a route.
 - Added list of editor keyboard shortcuts to manual
 - When changing between room area mask types, the current tool will be set back
   to the Select tool to assist the most common workflow
 - Cursor mode now sets back to Select after adding a GUI control
 - Discontinued support for Windows 98 due to upgrading compiler from VC6 to VC2008.
 - Improved editor error messages if an error occurred reading/writing the sprite file
 - Workaround for Windows error getting file list on Linux network shares
 - Assign To View dialog now remembers the loop assigned to last time as well as view
 - Improved editor error handling if it was unable to start the game for testing
 - Fixed GetLocationName/GetLocationType not returning anything if the mouse cursor was
   over a GUI, but a different X/Y was being checked
 - Fixed GetLocationName returning a space if a nameless object was at the location
 - Fixed clicking in the corner of the screen taking you back to the desktop when
   using D3D driver
 - Fixed D3D driver drawing an extra game loop before the room faded out
 - Fixed transparent sprites not rendering correctly with D3D driver
 - Fixed object "ignore walk-behinds" setting not working with D3D driver
 - Fixed PlayVideo failing to play some WMV files with D3D driver
 - Fixed editor crash debugging if the call stack had more than 6 lines
 - Fixed call stack window not appearing if the project tree was on the left hand side
 - Fixed crash if you manually set Character.Loop and the current Frame was invalid for
   the new loop
 - Fixed crash in DisplayAt/SayAt if you passed the width in as 0
 - Fixed text box stealing up/down arrow key presses (AGS 3.1 regression)
 - Fixed debug console showing low-res co-ordinates for Character.Walk
 - Fixed autocomplete not always correctly selecting entries containing an underscore
 - Fixed a couple of potential crashes if characters had an invalid view/loop/frame
 - Fixed potential crash displaying text in voice-only mode
 

VERSION 3.1, October 2008
 - Added option to use native hi-res co-ordinates.
 - Added option to continue running game loops while dialog options are displayed
 - Added support for 1024x768 resolution.
 - Added support for custom rendering of dialog options
 - Added graphics filters to D3D driver, to allow 320x200 games to easily be run
   in a larger window.
 - Added 4x Nearest Neighbour filter to allow 320x200 games to easily be run on
   widescreen monitors at 1280x800
 - Added "Go to sprite" context menu option to script editor when right-clicking
   on a number
 - Added Character.HasInventory, Character.HasExplicitTint, Character.Move,
   Character.SpeakingFrame, String.Replace, String.StartsWith, String.EndsWith,
   Game.ChangeTranslation, Game.UseNativeCoordinates, Dialog.ID, TextBox.TextColor,
   Slider.HandleGraphic, Slider.HandleOffset, Slider.BackgroundGraphic and
   Parser.FindWordID script functions.
 - Added pop-up calltip when hovering the mouse over a function/property in the script.
 - Added separate Replace menu option to go straight to the Replace dialog
 - Added previous searches list and Case Sensitive option to the Find dialog
 - Added Preferences option to configure whether Help window stays on top or not.
 - Room objects editor now draws alpha-channel sprites correctly
 - When the engine aborts with an error, the editor will now automatically zoom to
   the line in the script where the error occurred
 - Editor now shows the call stack to the current position in the script when debugging
 - Improved autocomplete to work better when adding code to existing functions
 - Rewrote debugger to use a different method of communicating with the engine (Named
   pipes instead of Files) which should hopefully resolve some stability issues some
   people have been having with it
 - Added support for calltip help text if you put a comment starting with /// on
   the line before the import declaration. 
 - Added feature for editor to send anonymous system information to AGS website
 - Added editor plugin API IScriptEditorControl methods: SelectionStart, SelectionEnd,
   SelectedText, CursorPosition, GetLineNumberForPosition, GetTextForLine and
   GetTypeNameAtCursor
 - Added new GUI Visibility option to have a normal GUI but initially switched off.
 - Added ability to set initial GUI Transparency in the editor.
 - Added Tip of the Day section to the Start Page.
 - Added new file format for exported characters to enable characters with more than
   20 frames in a loop or 16 loops in a view to be exported; this also fixes some
   character settings not being preserved in the old file format.
 - Added Preferences option to allow you to do Exact Palette background imports in
   8-bit games, like you could in AGS 2.x
 - Added warning message when you use the Import New Background option in a room, to
   help newbies who are using it by accident instead of the Change button.
 - Added option for AGS Editor to pop up a message every X days reminding you to back
   up your game
 - GUI Text Box now allows the user to type in extended chars like éíñ when the
   textbox is using a TTF font
 - D3D driver now automatically tries 640x400 if your monitor doesn't support 320x200,
   like the DX5 driver already did
 - Removed Setup option to use the "wrong" resolution.
 - Changed winsetup so that it doesn't pop up the Administrator prompt on Vista.
 - RunAGSGame now shows an error if you try and use it while running with the debugger,
   since it doesn't work in this situation
 - Moved the inventory hotspot marker settings from the inventory panes to the
   General Settings area since it makes more sense there and should reduce confusion
 - Removed the room height limit of 1400 pixels.
 - Removed the 30 character limit on hotspot descriptions
 - Obsoleted InventoryScreen command, which is no longer supported.
 - Editor now prompts you if you modify a script file in an external application
   while it is open in the editor
 - On Windows XP and earlier, AGS will now create a "My Saved Games" folder in My
   Documents and then create individual game folders underneath, to avoid clutter
 - When clicking the "..." button to go to an event script, AGS will now zoom to the
   line after the { rather than the "function" line itself
 - Renamed String.Contains to String.IndexOf to reduce confusion with other
   languages such as Java and C#. String.Contains will continue to work as well for
   the foreseeable future
 - Removed obsolete InventoryScreen usage from the Default & Empty Game templates
 - Improved import of 2.72 games to ensure that unhandled_event is called with Use
   Inventory interactions
 - Changed Default and Empty Game templates to 16-bit colour by default
 - Changed error message when unable to initialise graphics mode to say the real
   resolution rather than game resolution when using a graphics filter
 - Editor now gives error if speech file number > 9999 rather than leading to
   in-game File Not Found errors
 - Fixed alpha-transparent dynamic sprites losing their alpha channel when you
   restored a save game
 - Fixed object image not being refreshed properly if it had a dynamic sprite which
   you deleted at the same time as making the object invisible
 - Fixed autocomplete popping up when it shouldn't do if you pressed space after
   typing a member property/function
 - Fixed problem with Mouse.SaveCursorUntilItLeaves if the original mode was now
   disabled when it tried to restore it
 - Fixed error starting up editor if you closed it while minimized
 - Fixed dialog options text window edges with transparent parts not drawing
   correctly with D3D driver
 - Fixed crash restoring save game if there was an active dynamic drawing surface
   created by CreateCopy
 - Fixed Mouse.DisableMode crashing if cursor mode 4 (UseInv) was set as a Standard
   mode
 - Fixed some music skipping problems when using ShakeScreen and during room
   transitions
 - Fixed translations not working on script lines that had embedded speech marks
 - Fixed GUI editor to not draw the background colour outside the actual GUI size
 - Fixed error trying to save a game to a network share
 - Fixed sound numbers over 999 not playing
 - Fixed D3D driver smoothing all sprites, not just scaled ones, when "Smooth scaled
   sprites" was selected
 - Fixed problem where if you closed a window and chose not to save changes, when
   you opened the window again the changes were still there
 - Fixed script changes being lost if you opened a room script, made some changes,
   didn't save them, then opened the room itself, then created an event handler
 - Fixed sprite import colours messing up if there were index-0 pixels on the image
   but index 0 was not being imported as the transparent colour
 - Fixed Display() not working if the game had no GUIs
 - Fixed changes to blink interval not always being applied immediately
 - Fixed crash in Character.Say if the character's talking view had been set to an
   invalid view number
 - Fixed PlayVideo restarting the music after the video finished, even if it was set
   to play game music
 - Fixed the debug console being drawn behind characters and objects
 - Fixed duplicate entries in autocomplete if you set an enum value to equal another
   enum value
 - Fixed ListBox.RowCount always returning 0 until the GUI had been drawn for the
   first time
 - Fixed Characters pane chopping off bottom of view preview when run at 120 DPI


VERSION 3.0.2 SP1, June 2008
 - Editor now gives friendlier error message if a hotspot description is too long
 - Fix to workaround .NET error importing a portion of a sprite
 - Fixed editor allowing you to name a gui or character such that its legacy macro
   name led to a compile error (eg. "gGui" or "cGui")
 - Fixed No Transparency sprite import not working properly if the sprite colour
   depth had to be converted

VERSION 3.0.2, June 2008
 - Added Global Variables pane to editor, to allow you to easily declare global
   variables for the script instead of having to do all the import/export rubbish
 - Added script functions Dialog.GetOptionText, Dialog.DisplayOptions,
   Dialog.OptionCount, Game.DialogCount, DynamicSprite.CreateFromDrawingSurface
 - Added plugin API functions IsRunningUnderDebugger, BreakIntoDebugger and
   GetPathToFileInCompiledFolder
 - Added editor plugin API methods ShowSpriteSelector, SetStatusBarText,
   Game.Sprites, CreateNewSprite, ChangeSpriteImage, GetSpriteUsageReport,
   DeleteSprite
 - Improved responsiveness of room Edges editor under Windows Vista
 - Improved look of various dialogs when run at 120 DPI
 - Improved parsing of function list in script editor when the script contains
   comments and strings
 - Editor now makes sure that you don't name a View the same as a character
 - When importing alpha channel images, alpha-transparent pixels are now recognised
   as transparent pixels
 - New GUI alpha channel method (in General Settings) to allow more intuitive
   rendering of alpha channels on GUI controls
 - Alpha-transparent background and borders are now supported for textwindow GUIs
 - Added option to put sprite and sound files under source control
 - Modified source control integration not to check in the username, which was
   happening in some cases
 - Updated to v1.6.0 of Verb Coin template (thanks Electroshokker!)
 - Room editor now shows "?" for mouse position when the cursor is outside the
   room area
 - Improved editor behaviour on startup if registry entries have been corrupted
 - Fixed demo game not compiling
 - Fixed editor error loading games if your regional settings had a space in the
   short date format
 - Fixed excluded room files still being compiled into the game EXE
 - Fixed potential managed object pool corruption if you used SayBackground a lot
 - Fixed some TTF fonts being incorrectly positioned in the editor GUI previewer
 - Fixed hotspot sometimes getting corrupted when importing a new background
 - Fixed exported GUIs not having the sprite resolutions exported correctly
 - Fixed line and rectangle tools sometimes being slightly out from where the area
   actually appeared
 - Fixed alpha channel not working on graphical Overlays
 - Fixed 8-bit rooms from 2.72 not being displayed correctly in the editor if
   they used gamewide colours
 - Fixed DrawingSurface.GetPixel sometimes returning invalid values in 32-bit games
 - Fixed translation file generation failing if a script included a speech mark
   inside quotes ('"')
 - Fixed Game.TranslationFilename property returning a path when the game is run
   under the debugger
 - Fixed crash if you tried to crop edges on a completely transparent sprite
 - Fixed Mouse.ChangeModeView crashing if you passed a View of -1
 - Fixed Voice Actor Script generation giving error if you used "Narrator" (with
   a capital N) in a dialog script
 - Fixed speech.vox being generated even if you had no speech
 - Fixed transparency being lost when importing an 8-bit character into a hi-colour
   game
 - Fixed the last imported image file being locked by the editor
 - Fixed template generation failing if the template had speech or translations
 - Fixed template generation saying it was successful even when it failed
 - Fixed Create New Game not putting music/sound files in the sub-folders
 - Fixed dynamic arrays not working if you had Left-to-right Precedence turned off
 - Fixed view preview not flipping frames if they were being scaled down
 - Fixed view preview not being updated if you changed the currently displayed
   sprite's Flipped setting
 - Fixed script editor function list not including extender functions
 - Fixed editor crash if you deleted a GUI control whilst in the middle of dragging
   it around
 - Fixed editor crash if you deleted the Compiled folder while it was running
 - Fixed editor crash if you selected a whole line of script and then pressed F1
 - Fixed error generating voice acting script if there was a player.Say line in the
   script with no indentation
 - Fixed crash in sprite import window when zooming out and in of the bottom right
   corner
 - Fixed intermittent error after closing game when using debugger


VERSION 3.0.1, April 2008
 - Added zooming and mask transparency to the room areas editor
 - Added ability to drag and drop sprites to other sprite folders, like in 2.72
 - Added ability to drag and drop views between view folders
 - Added ability to delete views and view folders
 - Added "Go To Definition" right-click option in script editor, and fixed
   cut/copy/paste context menu options not always being enabled correctly
 - Added Create Voice Acting Script option, to generate a file containing all
   voice speech lines for each character
 - Added draggable baseline to the Walk-behinds Editor to make it more user friendly
 - Added "New sprite using last sprite" and "Replace sprite using last sprite"
   options to sprite manager, to allow you to quickly grab multiple frames off
   a single source image
 - Added "Sort sprites by number" option to sprite manager
 - Added "Sort by number" option to room list
 - Added File.Exists, File.Delete, String.IsNullOrEmpty, DrawingSurface.GetPixel,
   DrawingSurface.DrawStringWrapped, Game.InSkippableCutscene,
   Game.SkippingCutscene, System.NumLock, System.CapsLock, System.ScrollLock
   commands.
 - Added back Match Brace feature in script editor
 - Added new room template dialog for creating new rooms.
 - Added back Ctrl+G/Ctrl+H as shortcuts to get to the global script and script
   header
 - Added PaletteLockedToRoom property on sprites to allow you to easily remember
   if the sprite was imported against a specific room (8-bit only)
 - ListBox.FillDirList now supports $SAVEGAMEDIR$
 - Changed the Ctrl+X debug option in-game to make it more user friendly
 - View Preview now scales down large sprites to fit inside the preview window
 - Removed limit on number of phenomes per file with PAM voice speech
 - Increased max script modules to 50
 - Double-clicking a room object now opens the sprite selector
 - Editor will now remember the file path that you import fonts from, and display
   it as a property on the font
 - When adding a new frame to a view, the editor is now more intelligent about
   the default sprite that it chooses for the new frame
 - Attempting to display messages with extended characters in SCI font will
   now render those characters as a ? rather than aborting the game.
 - Editor now prevents you from deleting sprite folder if sprites in it are
   still in use
 - Editor plugin API: Added new OpenEditorForScript, ShowHelpFile, GetSpriteImage
   and DrawSprite methods; added RoomController and SourceControl operations;
   added Views property to Game object
 - Added AGSE_PRERENDER plugin event to allow characters/objects to be modified
   just before they are rendered
 - When you double-click a script error message or use the drop-down function
   list, the script editor now does a better job of highlighting the relevant
   line.
 - Increased size of function list drop-down in script editor
 - Improved pathfinder dealing with narrow winding walkable areas
 - Added right-click Flip option and shortcut key 'F' to flip frames in view editor
 - Added preferences option to set the default directory where new games
   are created
 - Assign To View window now remembers the last view number used
 - Editor now prompts you to save the current game before loading a different one
 - Editor now remembers the position of the main two splitters when you quit
 - Made some improvements to reduce music stuttering in some complex rooms
 - New engine command line parameter -noexceptionhandler to disable the AGS
   exception handler (for plugin developers)
 - Object properties now show "BaselineOverridden" as a separate setting to
   clarify the baseline behaviour
 - Improved the way some editor dialogs look when run with Large Fonts (> 96 DPI)
 - Removed left/right loops compile warning, and instead a single frame in the
   left/right loops is automatically created
 - Harmonised speed of fade-in/fade-out between D3D and DX5 drivers
 - Fixed FadeIn not showing characters/objects if you changed the game state
   since FadeOut
 - Fixed Quick Import Multiple Sprites not remembering the import directory
 - Fixed intermittent crash if a view preview was active when you saved the game
 - Fixed speech colour being random if you used SierraWithBackground speech
   without a custom text window GUI
 - Fixed plugin API screen drawing events, and implemented support for them
   with D3D driver
 - Fixed intermittent crash starting engine with debugging enabled
 - Fixed built-in save/load/quit dialogs having transparent borders in 8-bit games
 - Fixed mouse wiping away dialog options background in 8-bit games
 - Fixed some issues importing 8-bit sprites locked to a room background
 - Fixed FadeIn not dealing with letterbox borders correctly if SetFadeColour
   had been used
 - Fixed room editing pane being closed when you built the game after editing
   the room script
 - Fixed ChangeRoom moving the character before fading out with some transitions
   and the D3D driver
 - Fixed crash importing characters with Run Next Loop flag set on a view; and
   fixed invalid character export files being generated for characters with Run
   Next Loop flag set.
 - Fixed engine crash on startup with D3D driver on some graphics cards in
   16-bit games
 - Fixed GetViewportX/Y not working properly in room Before Fadein event
 - Fixed compile error with custom icons that have all 13 Vista icon formats
 - Fixed IsKeyPressed not working properly with A-Z keys on non-qwerty keyboards
 - Fixed script editor not to do a matching bracket check when you close a
   bracket inside a comment or string
 - Fixed bug in editor when replacing a room background with one of the same
   size but with the game now running at a different resolution
 - Fixed Object.Animate not working with RepeatStyle=2
 - Fixed crash loading game into editor if a translation file contained a
   duplicate line
 - Fixed editor crash if you had an misplaced square bracket near the end of
   a script header
 - Fixed room background import to ignore source image DPI
 - Fixed GUI import/export if one of the GUI controls had an extended character
   in its text
 - Fixed RunAGSGame using wrong current directory when under debugger
 - Fixed multi-loop speech animations crashing if a blinking view was used
 - Fixed spurious "Unable to display speech" error if a character had just been
   animating before displaying speech.
 - Fixed "downgrade 32-bit to 16-bit" checkbox in Setup not working
 - Fixed voice lip sync falling behind if a very low game speed was used
 - Fixed voice lip sync looking in game folder rather than Speech folder for 
   PAM files; and fixed compile error if PAM files had the [Preferences] section
 - Fixed GUIs getting an erroneous alpha channel if the BackgroundImage was
   set to -1.
 - Fixed animated GIFs not importing correctly if they used incremental frames.
 - Fixed black areas of 8-bit backgrounds turning blue (you will need to
   re-import any affected backgrounds)
 - Fixed erroneous error message importing an image into an 8-bit game if it
   was smaller than the screen size.
 - Fixed error attempting to directly restore a saved game from explorer if
   the screen transition was Crossfade or Dissolve
 - Fixed function calltips not working if you put a space between the function
   name and the opening bracket
 - Fixed crash which could occur if a character was in the middle of an animation
   loop when a Say command was run
 - Fixed legacy global messages not getting included in Auto Number Speech Lines
   numbering
 - Fixed exported script modules giving error when importing into 2.72
 - Fixed crash importing a game from 2.72 if there was a room with an almost
   valid file name (eg. "room06.crm")


VERSION 3.0, January 2008
 - Rewritten editor from scratch; includes various new features such as
   ability to have more than one script open at a time
 - Hardware accelerated graphics driver in game engine, which speeds up
   rooms with lots of sprites, alpha blended objects, and more.
 - Full support for 256-character ASCII, so European languages like French
   and Spanish are now supported if you use a TTF font.
 - Added script debugger
 - Added integration with Windows Vista's Game Explorer and Enhanced Save Games
 - Added support for script extender functions.
 - Added support for dynamic arrays in script
 - Added source control integration
 - Added crash dump file when engine crashes, to enable faster fixing of bugs
 - New .NET-based editor plugin API.
 - Added Game.DoOnceOnly, Character.ChangeRoomAutoPosition, Game.FontCount, 
   Game.MouseCursorCount, DynamicSprite.GetDrawingSurface, DrawingSurface.*,
   DynamicSprite.Create script functions/properties.
 - Added syntax highlighting for struct types
 - Overhaul of RawDrawing functions, including ability to draw onto dynamic
   sprites and various new features.
 - Removed limit on number of views, GUIs and characters
 - Removed limits on number of frames per loop and loops per view
 - Increased max objects per room to 40 and max hotspots to 50.
 - Fonts have a script enum eFontXXX rather than having to use a number.
 - Engine will now automatically try 640x400 for 320x200 games if the
   player's PC doesn't support 320x200 (since this is becoming more common)
 - Improved performance of Character.PlaceOnWalkableArea in large rooms.
 - Workaround for teleportation problem in scrolling rooms with right
   edge incorrectly set.
 - Fixed String.Format crashing if the string length was more than 1200 characters.
 - Fixed engine crashing on startup if it was unable to load a plugin.
 - Fixed issue when combining CreateXXXOverlay and Overlay.CreateXXXX
 - Fixed changes to ViewFrame.Graphic not always being persisted in save games
 - Improved script garbage collection, so that calling String.Append in rep_exec
   doesn't keep eating up more and more memory until you save the game.

VERSION 2.72, July 2006
 - Added ability to use any size/resolution of icon, if you save your
   game with Windows 2000/XP.
 - Added support for graphic filters, and added a standard 2x and 3x
   scaler, along with Hq2x and Hq3x filters.
 - Added plugin API AGSE_ONSPRITELOAD function to allow plugins to modify
   sprites as they are loaded into memory.
 - Added new plugin API functions IncrementManagedObjectRefCount,
   DecrementManagedObjectRefCount, SetMousePosition, SimulateMouseClick,
   GetMovementPathWaypointCount, GetMovementPathLastWaypoint,
   GetMovementPathWaypointLocation, GetMovementPathWaypointSpeed.
 - Added ListBox.ScrollDown, ScrollUp, RowCount, HideBorder and
   HideScrollArrows. Added "Hide scroll arrows" setting to listboxes
   in GUI editor.
 - Added System.Gamma and SupportsGammaControl; and replaced old system.*
   variables with new System. properties.
 - Added Room.Width, Height, ColorDepth, LeftEdge, RightEdge, BottomEdge,
   TopEdge and MusicOnLoad properties.
 - Added ability to use movement speeds slower than 1 (-2 is now 1/2,
   -3 is 1/3, etc)
 - Added ability to name dialog topics, and ported RunDialog/etc to
   OO-style functions. Additionally, dialog scripts can now use the topic
   names with goto-dialog rather than using the number.
 - Added GUI Control z-order support (right-click Bring To Front / Send
   To Back options in editor, as well as BringToFront/SendToBack script
   commands).
 - Added Game.SetSaveGameDirectory command, including support for My
   Documents folder.
 - Added option to export animated background frames, and added a
   confirmation message to the Delete Frame button.
 - Added Game.SpeechFont and Game.NormalFont properties to replace
   SetSpeechFont/SetNormalFont but also provide a way for you to get
   the current setting.
 - Added Game.Name, Game.FileName, Object.Loop and Object.Frame properties.
 - Added Button.Font property, and added Text Alignment property to GUI
   buttons and list boxes in the editor.
 - Added Mouse.GetModeGraphic to allow you to get the sprite slot of
   the cursor.
 - Added String.AsFloat property to convert strings to floats.
 - Added Game.StopSound function, to allow you to easily stop all
   sound effects.
 - Added writable ViewFrame.Graphic property, which allows you to change
   view graphics at run-time.
 - Added Region.TintRed, TintGreen, TintBlue, TintEnabled and TintSaturation
   properties to allow you to get the current region setting.
 - Added game.read_dialog_option_color to allow you to set a different
   colour for dialog options which the player has already selected.
 - Added Ctrl+S option to script editor, to save changes so far.
 - Increased sound channels from 6 to 8, and you can now have more than
   1 simultaneous ambient sound.
 - ListBox.AddItem and ListBox.InsertItemAt now return false rather than
   quitting the game, if you try to add too many items to the list.
 - Disabled text boxes now do not draw the cursor.
 - Obsoleted GetGameParameter and added new functions and properties to
   replace it (see GetGameParameter in the help to redirect you to the
   new functions).
 - Obsoleted SetFrameSound and made the ViewFrame.Sound property writable
   instead.
 - Obsoleted savegameindex[] array, and added ListBox.SaveGameSlots[]
   array instead. Additionally, raised the max save games from 20 to 50.
 - Increased permitted length of GUI label text from 200 to 2048
   characters.
 - PlayMusicQueued now preloads the next track to provide a seamless
   transition between tracks.
 - Added DirectSound Hardware Mixer option to Setup.
 - Increased script editor line length limit from 300 to 500 characters.
 - Editor now uses "Sound" sub-folder to store sound files, like the way
   it currently works with Music and Speech.
 - Editor view preview window will now play frame-linked sounds if they
   are in .WAV format.
 - Added shortcut keys Ctrl+1 through Ctrl+9 and Module Scripts sub-menus
   for easy access to module scripts and headers.
 - Autocomplete now warns if you use an array index to access properties
   on a non-array, and vice versa.
 - Added option to Assign Sprites To View dialog to allow you to add the
   sprites in reverse order.
 - Editor now shows each character's talking view as well as normal view
   in the Characters pane.
 - Mouse.SetBounds now actually locks the cursor within the bounds,
   rather than it moving invisibly within the locked out area.
 - Added game.keep_screen_during_instant_transition option for 8-bit
   colour modes.
 - Changed the default restart point to be just before the first room is
   loaded, in order to avoid problems with the restart point not working
   properly in some games.
 - The game can now be closed with the X button or Alt+X while a PlayVideo
   is playing.
 - Moved GUI Clickable setting from the checkbox into the Properties window,
   since it more intuitively belongs there.
 - "Enforce new-style strings" now disables old-style string functions.
 - Old split resource files now get deleted if you disable splitting or
   reduce the number of split files.
 - PlayVideo now pauses the video if the player alt+tabs away from the game
   while it is playing.
 - player.ChangeRoom in game_start is now allowed, and will change the
   room that the game starts in.
 - Increased editor performance when importing tiled sprites.
 - Debug console now also writes its output to the Windows Debugger (which
   you can read with an application like DebugView); useful if the debug
   console normally flies past too quickly to be useful.
 - View preview window now cycles through whole of multi-loop animations.
 - Fixed crash if you used Restore or Restart within a script module
   event handler.
 - Fixed template creation to work with Music and Speech sub-folders.
 - Fixed agsedit.log timestamp having the wrong month.
 - Fixed character blinking not working properly once they had finished
   talking.
 - Fixed translation source not including strings from script modules.
 - Fixed a backwards compatibility issue with game.num_inv_items.
 - Fixed characters with only left/right loops sometimes using the wrong
   loop when moving.
 - Fixed game erroring out if you used Character.ChangeView to change
   from a 4-directional to a 2-directional view.
 - Fixed GUI Labels to be not clickable by default.
 - Fixed "Refresh list" option not working in the Room List if no room
   was selected.
 - Fixed calltips not picking up member functions if you put a space
   before the opening bracket.
 - Fixed text parser not handling an optional choice of words properly.
 - Fixed text parser not handling a choice of words with spaces properly
   in Said().
 - Fixed Global Messages pane not updating after Importing Dumped Text.
 - Fixed FaceLocation not working properly if the character's current loop
   was not one of the normal walking loops.
 - Fixed Mouse.SetPosition clipping the Y to 200, even in 320x240 games.
 - Fixed sierra-style speech screwing up if you used RemoveOverlay or
   SetTextOverlay in repeatedly_execute_always while the speech was displayed.
 - Fixed Tiled Sprite Import allowing you to import over the edge of the
   image when zoomed in.
 - Fixed ShakeScreen leaving artefacts in the black borders when running
   in letterbox mode.
 - _blank.crm is now included when you make a template.
 - _blank.crm will be checked for in editor folder if not found in game folder.
 - Fixed editor crashing if a very large template.txt file was used when
   starting a game from a template.
 - Fixed block comment parsing sometimes not working properly if /* was the
   last thing on a line.
 - Fixed String.Contains not working properly with strings >200 characters.
 - Fixed PlayMusic not working if it was called whilst an old track was
   fading out but crossfading was now disabled
 - Fixed "too many events posted" error if several commands like Walk
   were used in quick succession.

VERSION 2.71, December 2005
 - Added friendly string support, and modified various built-in
   functions to return a String rather than requiring a buffer.
 - Added option to compress the sprite file to reduce disk usage.
 - Added editor sprite caching, to improve performance and reduce memory
   usage of the editor with large games.
 - Increased max speech files per game to 10000.
 - Added == and != operator support for strings.
 - Added support for having pointer variables in structs.
 - Added Clickable property to GUI controls to allow you to disable
   a control without affecting its appearance.
 - Added new Dynamic Sprite features: CreateFromExistingSprite,
   CreateFromBackground, Crop, Resize, Rotate, Flip and SaveToFile
   functions; and ColorDepth, Width and Height properties.
 - Added Game.GetMODPattern, ListBox.InsertItemAt and Maths.ArcTan2
   script functions.
 - Added Slider.Min and Slider.Max to allow the script to access
   these slider properties.
 - Added Object.IgnoreScaling and Character.Scaling properties;
   renamed Character.IgnoreScaling to ManualScaling.
 - Added const string support to prevent accidentally passing the
   parameters the wrong way round to functions like StrCopy.
 - Added option to PlayFlic not to clear the screen before starting
   playback.
 - Added "Adjust volume with scaling" character option and equivalent
   Character.ScaleVolume property.
 - Editor now uses "Speech" and "Music" sub-folders to store speech
   and music files in to reduce the clutter in the main game folder.
 - Added "New Run Script Action" to the right-click menu in the
   interaction editor, to allow you to quickly create a Run Script
   interaction without having to go through the interaction dialog.
 - Added "noloopcheck" keyword to allow you to bypass the script loop
   checks.
 - Added GP_ISFRAMEFLIPPED option to GetGameParameter.
 - Editor now forces all background imports to the game's colour depth.
 - Game now attempts to mute audio when alt+tabbing away to another
   application.
 - Implemented lazy evaluation for && and || operators.
 - Improved script compiler speed.
 - Arrays and structs are now officially supported, and are documented
   in the manual.
 - Ambient sound volume is now dropped along with the music volume
   while speech is being played.
 - Added menu option to rebuild only the music or only the speech vox,
   since in large games rebuilding both could take a long time.
 - If Sound is disabled in the game Setup, then it no longer plays
   in PlayVideo either.
 - Insert and Delete keys now have allocated keycodes and are officially
   supported.
 - Narrator speech now closes the Display() window when the voice
   finishes, if play.skip_display is set to auto-remove after time.
 - Compiler now does type checking on return values from custom functions.
 - Display command now obeys the SetVoiceMode setting.
 - Pamela lip-sync now allows multiple phenomes per frame.
 - "void" is now properly supported as a function return type.
 - PgDn, PgUp, Home and End are now mapped to the ASCII codes of their
   equivalents on the numeric keypad, rather than duplicating arrow keys.
 - Underscores can now be used in GUI and view names, and invalid names
   pasted into the box are now rejected.
 - The hi-color Palette pane now displays the current colour number in
   a text box so that it can be copy & pasted easily, and allows you
   to type in a colour number and find out the RGB.
 - Renamed the setup.exe in the AGS distribution to setup.dat to
   prevent unzip programs from trying to "install" it.
 - Renamed "Player Enters Screen" events to "Player Enters Room" to use
   consistent terminology.
 - If a dynamic sprite attached to an object is deleted, the engine 
   now prints an error message rather than crashing.
 - Setting game.close_mouth_end_speech_time to 0 now continues sierra-
   style speech animation indefinately, like it does with lucasarts speech.
 - Removed "Target DOS" option from the menu, since the DOS engine is
   no longer available.
 - Fixed compiler bug allowing enums to be redefined.
 - Fixed compiler crash when declaring a large struct.
 - Fixed engine error if Turn Before Walking was enabled and a character
   only had left/right loops.
 - Fixed walk-to point getting randomly moved if you alt+tabbed back
   into AGS from another application.
 - Fixed the Import Dumped Text option truncating dialog options to 70
   characters.
 - Fixed memory leak in GUI.SetSize/Width/Height methods.
 - Fixed volume jump if a track was fading out and you changed rooms
   to a room with a louder volume setting.
 - Fixed Overlay.X/Y properties returning wrong value for SayBackground
   overlays.
 - Fixed editor crash when deleting sprite folders.
 - Fixed editor crash when selecting a sprite for a GUI control.
 - Fixed editor crash on Characters pane if the character's normal view
   had no frames in loop 0.
 - Fixed crash rather than error message if script exceeded stack limit.
 - Fixed Single GUI Import not updating GUI images properly, and
   allowing duplicate GUI control names to be imported.
 - Fixed editor crash if you manually removed a #sectionend and then
   tried to edit that script function.
 - Fixed colours in GUI editor showing up wrong in 32-bit colour games.
 - Fixed SetCharacterIdle skipping the current frame if called while
   the character was moving or animating.
 - Fixed + having a higher precedence than - and thus 5 - 3 + 2 giving
   0 rather than 4.
 - Fixed only one edge interaction being run if the player walked off
   two overlapping room edges.
 - Fixed GIF import crash with some gif images.
 - Fixed "out of memory" crash in game if you accidentally used a
   full-screen image as the talking view for sierra-style speech.
 - Fixed CyclePalette not updating the screen when cycling backwards.
 - Fixed compiler allowing built-in types to be used in struct
   definitions.
 - Fixed Auto-Number Speech Lines starting from NARR0 rather than NARR1
   for the narrator.
 - Fixed GUI control event handler function names being incorrectly
   truncated.
 - Fixed compiler to not allow a struct to be a member of itself.
 - Fixed compiler not giving an error if you forgot a semicolon after
   an object method call.
 - Fixed editor crash if you typed a string longer than 200 characters
   into a text property.
 - Fixed character disappearing if it was tinted/lit and used an 8-bit
   sprite in a hi-color game.
 - Fixed music not resuming after PlayVideo if crossfading was enabled.
 - Fixed the player character's PreviousRoom property starting off as
   the first room number, rather than -1 as it said in the manual.
 - Fixed static methods in plugin headers not being picked up by
   autocomplete.
 - Fixed IsKeyPressed not working with backspace (ASCII code 8).
 - Fixed voice speech not being played if a SkipUntilCharacterStops
   command was in effect when the speech was displayed.
 - Fixed Restore Game occasionally corrupting the managed object pool.
 - Fixed some usability issues in the Import Sprite dialog, where moving
   the mouse off the side of the image while right-dragging would cause
   the cursor to jump around.
 - Fixed WAV music files not being picked up from MUSIC.VOX
 - Fixed region light level picking up tint amount if you switched it
   from tint to light and then selected a different region.
 - Fixed Out of Memory crash if you had a character off the bottom of
   the screen and a walkable area with continuous scaling touched the
   bottom of the screen.

VERSION 2.7, May 2005
 - Added object-based functions for Characters, Objects, Hotspots,
   Regions, Inventory Items, GUIs, Overlays, Files and the mouse.
   This also indirectly adds some new functions, since there is now a
   way to do GetTransparency, GetBaseline, etc.
 - Added named pointers to each character, eg. "cEgo", "cBman", etc.
   This allows you to do "cEgo.Walk" rather than "character[EGO].Walk"
 - Added struct member function support, including static member
   functions.
 - Added script array bounds checking.
 - Added script module support, so that you don't have to cram
   everything into the global script. This also allows you to easily
   share code with other people by exporting the module.
 - Added icons to script editor autocomplete.
 - Added script Property support, to make the various interfaces more
   intuitive.
 - Added support for optional parameters to text script.
 - Added support for enums to script, including autocomplete support
   when calling a function that uses them.
 - Added plugin API functions NotifySpriteUpdated,
   SetSpriteAlphaBlended, QueueGameScriptFunction,
   RegisterManagedObject, AddManagedObjectReader and
   RegisterUnserializedObject.
 - Added simple inheritance support to structs, allowing you to create
   derived classes.
 - Added support for protected member variables/functions and
   write-protected member variables.
 - Added left-to-right operator precedence option.
 - Added float data type, along with related conversion functions
   and trigonometric functions such as cos, sin and tan.
 - Added "Enforce object-based scripting" option, which means that
   old-style commands (such as MoveCharacter) no longer work.
 - Added sprite file indexing to speed up load time for games with a
   large number of sprites.
 - Added Solid, BlockingWidth and BlockingHeight properties to Objects.
 - Autocomplete now lists structure members.
 - Added Crop Sprite Edges Symmetric option, to leave the central
   pivot point of the sprite unchanged.
 - Added AbortGame function to allow script modules to perform checks
   on their parameters and easily give an error.
 - Added #ifdef, #ifndef, #endif, #undef and #error preprocessor
   directives to the script language.
 - Added DEBUG and STRICT pre-defined macros when in debug mode
   and strict scripting mode, respectively.
 - Added script call stack when an error occurs, rather than just the
   current line number.
 - Added script editor Preferences dialog, allowing you to control
   which automatic editing features are enabled.
 - Added Character.BlockingWidth/BlockingHeight to allow you to
   customize the blocking size of a character.
 - The "player" variable is now kept updated to reflect the current
   player character, so it's now perfectly safe to use  player.Walk
   rather than  character[GetPlayerCharacter()].Walk
 - Added GUI OnClick handler to provide a more intuitive way to handle
   clicks on the GUI background.
 - Added export/import single GUI function.
 - Added ClipImage option to GUI buttons.
 - Added option to select the transparency and palette settings for
   the Quick Import options.
 - Improved the custom inventory window, so that it can display
   inventory for a specific character; and also it now has object-based
   methods to manipulate it, rather than messing around with variables
   like game.top_inv_item.
 - Improved script type checking -- it will now catch far more errors
   if you try to do things like assign a string to an int, or pass
   character[EGO] to a function where EGO was wanted.
 - Local variables are now automatically initialized to 0.
 - Improved function calltips so that it highlights the current
   parameter.
 - Added support for multi-word words in text parser.
 - Removed various buttons on the Room Settings and GUI panes, and
   moved them to new Room and GUI menus, respectively.
 - Script compiler now checks that the "import" declaration of
   variables in the script header matches the real definition in
   the global script.
 - Added confirmation prompt in script editor if you choose "Discard
   and exit"; and added shortcut keys for the exit options.
 - Increased max sprites to 30000.
 - Increased max overlays from 10 to 20.
 - Improved game startup speed and room loading speed.
 - Changed MOD music player from JGMOD to DUMB, and consequently:
   Fixed some previously unsupported S3M's music files not playing.
   IT Impluse Tracker format mod files are now supported (music*.it)
 - Removed limits on the total number of GUI controls you can have.
 - If two room-changing functions are called in one script, an error
   now occurs (eg. using RestoreGame followed by NewRoom).
 - Added the game name to the script editor title bar (useful if you're
   alt-tabbing between multiple games).
 - Added ability to use a sprite as the inventory cursor hotspot dot.
 - Dynamic sprites are now persisted in save games.
 - Changed Test Game behaviour to hopefully fix problems with it hanging.
 - SaveGameSlot/SaveGameDialog are now delayed-response functions, just
   like the RestoreGame ones. This means the game won't actually be
   saved until the script function finishes.
 - Improved character 'skipping' sometimes at move speed 1.
 - Increased max custom properties from 20 to 30.
 - Changing an object's name now marks the room as dirty.
 - RawDrawImage and MergeObject now draw alpha-blended images properly.
 - Sprite Usage report now tells you which GUI a GUI button is on.
 - Added \[ to Display/Say/etc, to enable you to display the [ character
   rather than it doing a line break.
 - Significantly improved script compile speed.
 - Ctrl+Space now allows you to pop up the autocomplete list at any
   time, like in Visual Studio.
 - If Split Resources Files is checked, the sprites are now put into the
   .001 resource file to stop the EXE getting too big (since it could
   cause performance problems due to anti-virus software).
 - Added editor warning message if you Save Room As to a filename that's
   not roomX.crm or intro.crm
 - Renamed "No interaction" character checkbox to "Clickable" (and thus
   reversed its behaviour) to make it consistent with the script.
 - Renamed GUI "Foreground color" property to "Border color" since
   that's all it does.
 - Importing a new background with a different size to the old one
   now gives you an opportunity to cancel.
 - Improved accuracy of GetMP3PosMillis and voice lip-sync with OGG
   sound files.
 - goto-previous dialog command now stops the dialog if there is no
   previous topic, rather than aborting the game.
 - StrCopy now works with copying into char buffers less than 200 bytes
   (USE WITH CARE, there is no buffer overrun protection)
 - Enabled Quick Import sprite options in 256-colour games.
 - Added an option to Auto-number Speech Lines to number Display() lines
   for the narrator.
 - PlaySound now returns the channel number that the sound is playing on.
 - Renamed intro.crm to room0.crm, to stop it causing confusion.
 - Renamed the manual to "ags-help.chm" to make it more obvious what
   it is when accessing it externally from the editor.
 - Changed shortcut key for Freehand tool in Room Areas to Ctrl+D to
   stop it conflicting with Edit Script (Ctrl+E).
 - Changing a character's script name now forces a re-compile of the
   dialog scripts.
 - DisplaySpeech no longer changes the mouse cursor if the cursor mode
   is already the Wait mode.
 - Auto-number speech lines now tells you which room the error was in,
   if there is a compile error when re-compiling.
 - Script names can now contain the digit 0-9 after the first character.
 - Fixed interactions getting disconnected and other problems after
   deleting an object.
 - Fixed function calltip not appearing if you used the ( key to
   autocomplete the function name.
 - Fixed "unknown interaction" crash if the room changed within an
   interaction.
 - Fixed crash which could happen when an inventory cursor was in use.
 - Fixed erroneous type mismatch error sometimes when using char arrays
   as strings.
 - Fixed animated GIF import if the transparent color had the same RGB
   value as one of the real colors.
 - Fixed PlayMusicQueued skipping some tracks if crossfading was enabled.
 - Fixed script editor not re-opening properly if you closed it while
   it was minimized.
 - Fixed problems creating a template with a filename longer than 15
   characters (now truncates to 15 instead).
 - Fixed Assign To View not always flipping the first frame when you
   asked it to.
 - Fixed editor crash sometimes if you had been editing a room with no
   code in its room script.
 - Fixed editor crash if you deleted a sprite folder whilst editing
   its name.
 - Fixed #defined names so that they are not replaced if preceded by
   a dot.
 - Fixed script compiler allowing array.member with no index specified.
 - Fixed text parser not allowing 1-letter words.
 - Fixed SetCharacterSpeechView not allowing -1 to turn it off.
 - Fixed crash importing GIF files with comments (thanks to "Hard Rock"
   for the fix).
 - Fixed slider background image not being exported as part of GUI.
 - Fixed Paste From Clipboard sprites getting given an alpha channel
   if you previously imported an alpha-channel sprite from a file.
 - Fixed FollowCharacter not working on two NPC's if Hide Player
   Character was ticked in the room.
 - Fixed free disk space crash on game startup on some Win9x systems.
 - Fixed pixel-perfect click detection not always working properly
   with flipped sprites.
 - Fixed compiler crash if a single array or struct was bigger than
   32KB.
 - Fixed line numbers being missing from a couple of compiler error
   messages.
 - Fixed SetChannelVolume not working properly with the ambient sound
   channel.
 - Fixed occasional animation glitch if the previous loop in the view
   had no frames.
 - Fixed compile error if you had more than 500 functions in the global
   script.
 - Fixed speech animation not playing if DisplayMessage was used with a
   room message set to display as character speech.
 - Fixed RunAGSGame crashing if called from a custom script function.
 - Fixed IsKeyPressed(13) not working with the numeric keypad Enter key.
 - Fixed GUI editor not allowing you to set a label text longer than
   25 characters.
 - Fixed clickable z-order of GUI controls to be the same as the visual
   z-order.
 - Fixed Mouse Moves Over Hotspot not being run if the mouse was still
   but the room scrolled around it.
 - Fixed translation files to be read from the datadir in acsetup.cfg,
   if specified.
 - Fixed rare crash which could occur with MoveObject.
 - Fixed GUI Editor allowing you to add controls to a text window GUI.
 - Fixed MoveCharacter error messages if a character was following
   another character and neither were in the current room.
 - Fixed the Player Enters Screen After Fadein running before fadein
   in the new room if ChangeRoom was called from Player Enters Screen
   Before Fadein.
 - Fixed GetTime returning the wrong year.

VERSION 2.62, November 2004
 - Added AddInventoryToCharacter, FileWriteRawChar, GetButtonPic,
   GetHotspotName, GetObjectName, LoseInventoryFromCharacter,
   NewRoomNPC, RemoveObjectTint, SetFadeColor, SetNextScreenTransition,
   SetObjectTint text script functions.
 - Added COM Plugin API access to Characters, GlobalMessages,
   Script #defines, GameDirectory, SaveGame and QuitGame.
 - Added GIF image import, and Quick Import GIF Frames option.
 - Added ability to get current year to GetTime.
 - Added characters[].idleview variable to provide read access to
   the character idle view (still use SetCharacterIdle to change it).
 - Increased max sprites displayed at once from 39 to 50, and improved
   user-friendliness of the error message if it is exceeded.
 - Pixel-perfect click detection now works with scaled sprites.
 - Increased max hotspots to 30.
 - Increased max characters to 300.
 - Increased max views to 600.
 - Increased max GUIs to 50 and max GUI Buttons to 250.
 - Added option for objects to use region tint and light levels, and
   an option for objects to use walkable area scaling.
 - Added ability to get the number of characters, objects and GUIs
   to GetGameParameter.
 - Added missing characters to default font 0 (#, $, &, etc)
 - Added warning if you called FollowCharacter on a character which
   was doing a looped animation.
 - Added automatic de-denting to the script editor, so that }
   characters get automatically pulled back to line up with
   the corresponding {
 - In the Walk-behind editor, only the baseline for the currently
   selected area is now displayed, for clarity.
 - Changed room area editor so that only the selected area is displayed
   bright, and the other areas are all greyed out.
 - Added Script Modified indicator (*) to script editor title bar.
 - Added Sierra Portrait Position game option, to allow you to specify
   the portrait to be on the left, right or alternate. This supersedes
   and obsoletes the old game.swap_portrait variable.
 - Added game.skipping_cutscene variable so that you can find out when
   your code is being skipped over.
 - Added game.abort_key, to allow you to customize the Abort Key to be
   something other than Alt+X.
 - Read-only variables such as mouse.x are now enforced as such.
 - Display("") now does nothing, rather than pausing the game.
 - View preview window now displays current frame number.
 - DisplaySpeechBackground now removes any existing background speech
   for the character before displaying the new speech.
 - Fixed bug in 2.61 which was resetting all character movement and
   animation speeds if you upgraded a game from a pre-2.55 version.
 - Fixed WAV music not getting included in the MUSIC.VOX
 - Fixed recursive function calls to give error rather than crashing.
 - Fixed movement 'snapping' to destination when using move speed 1.
 - Fixed crash if there were no frames in one of a character's main
   loops, by providing an error message instead.
 - Fixed GetRegionAt to return the nearest region if the co-ordinates
   are off the edge of the screen.
 - Fixed plugin API AbortGame function crashing.
 - Fixed attempting to skip a cutscene hanging if No Auto Remove text
   was being used.
 - Fixed SetCharacterIdle not kicking in straight away when delay was 0.
 - Fixed IsKeyPressed not supporting the + - = keys.
 - Fixed FaceLocation problem with characters that had less than 4 loops.
 - Fixed SetObjectTransparency and SetCharacterTransparency so that a
   transparency of 100 means the sprite is completely invisible, even
   with 256-colour and alpha-blended sprites.
 - Fixed StopMoving resetting the character's current frame to 0, even
   if they weren't moving.
 - Fixed problems using NewRoom inside a region interaction whilst
   moving to a hotspot walk-to point.
 - Fixed walk-behind area 15 not working.
 - Fixed SetMusicVolume changes not being persisted in save games.
 - Fixed error message about repeatedly_execute_always popping up if
   you used a blocking function in Enters Screen Before Fadein (which
   you shouldn't do anyway).
 - Fixed object baselines not being sorted out properly when you deleted
   an object.
 - Fixed crash if you used NewRoom from within a Player Leaves Screen
   script.
 - Fixed SetCharacterIgnoreWalkbehinds placing the character behind all
   other sprites.
 - Fixed text windows getting a black background if colour 0 was
   specified, rather than being transparent.
 - Fixed view preview window not stretching properly with 320x200 games.
 - Fixed view preview window aligning sprites to top rather than bottom.
 - Fixed view preview window not blanking out display if you selected a
   loop with no frames.
 - Fixed view preview window not remembering its location on the screen
   for next time.
 - Fixed AnimateCharacterEx not working properly when playing a multi-loop
   animation backwards.
 - Fixed DisplayThought to shrink the thought bubble to fit the text when
   a short amount of text is displayed.
 - Fixed mouse cursor staying as Pointer (mode 6) when a dialog is STOPped.
 - Fixed nested array indexes not working properly when used with a
   struct in the form  a[i].b[c[k].d];
 - Fixed text box accepting keypresses when disabled.
 - Fixed SetObjectPosition giving erroneous line numbers if you passed an
   invalid object to it.
 - Fixed "Use exact palette" being ignored if "Share palette" was
   ticked in 256-colour animated backgrounds.
 - Fixed "repeatedly_execute" option on the Script menu sometimes
   selecting repeatedly_execute_always instead.
 - Fixed script editor crashing if you created a variable name longer
   than 60 characters.
 - Fixed parse error if a string longer than 255 characters was used in
   the script.
 - Fixed SetGlobalString not being safe if you passed a string longer
   than 200 characters to it.
 - Fixed Wait(0) to give error message rather than cause strange in-game
   results.
 - Fixed SetPlayerCharacter to do nothing at all if you pass the current
   player character to it (previously it was resetting the inventory layout)
 - Fixed ChangeCharacterView giving a warning message if the character's
   idle animation was playing.
 - Fixed issue with Sierra-style speech if the first frame in the speech
   view was flipped.
 - Fixed crash if you closed the script editor while the message telling
   you to do so was still displayed.
 - Fixed FaceLocation hanging if the character was set as hidden.
 - Fixed #defines working on words inside 'single quotes'.
 - Fixed "you need to select an item first" message box when trying to
   set the Inventory Hotspot Dot.
 - Fixed problem when SetPlayerCharacter was used in a room which
   had "Hide Player Character" ticked.
 - Fixed DisplayThought positioning if character was not in current room.
 - Fixed PlayMP3File error if filename was longer than 25 characters.
 - Fixed interaction editor Text Script Equivalent code for Conditional
   If Variable Equals Value

VERSION 2.61, May 2004
 - Added AreThingsOverlapping, DisableGroundLevelAreas,
   EnableGroundLevelAreas, FileIsError, HasPlayerBeenInRoom,
   RawDrawImageResized, RawDrawImageTransparent,
   SaveCursorForLocationChange, SetCharacterFrame, SetGraphicalVariable,
   SetGUIObjectEnabled, SetInvItemName, SkipUntilCharacterStops script
   functions.
 - Added operators % ! ^ << >> to scripting engine (remainder, Not,
   XOR, LeftShift, RightShift).
 - Added repeatedly_execute_always script event function, which is
   called every game loop, even when a blocking function is running.
   Supported in both the global script and room scripts.
 - Added character[].z variable, to allow you to make a character levitate
   into the air whilst still using the baseline, light levels and
   interactions of its Y co-ordinate.
 - Added OLE Automation support to editor, to allow plugins to interact
   with the editor, add menu options, new panes, and so forth. This
   includes support for editor-only plugins which are not included
   with the game at run-time.
 - Added plugin API engine functions BlitSpriteRotated,
   BlitSpriteTranslucent, CanRunScriptFunctionNow, CallGameScriptFunction,
   DisableSound, GetDirectSound and UnrequestEventHook; events
   AGSE_SCRIPTDEBUG and AGSE_AUDIODECODE; and new entry point
   AGS_EngineShutdown.
 - Added view preview window to let you quickly test loop animations.
 - Added ability to get a view frame's speed and sprite number from
   GetGameParameter.
 - Added game.speech_text_align variable to control the alignment
   of lucasarts-style speech.
 - Added game.auto_use_walkto_points variable to allow you to stop
   the engine automatically moving the player to walk-to points.
 - Added game.inventory_greys_out variable to enable inventory controls
   to grey out with the rest of the GUI when disabled.
 - Added game.skip_speech_specific_key variable, which allows you
   to set that only one particular key can skip speech (eg '.' in
   old lucasarts games).
 - Added system.viewport_width, system.viewport_height, system.version
   text script variables.
 - Added "Mouse click only" skip speech style, which only allows
   speech to be skipped with a mouse click, not a key press.
 - Added "Change colour depth" option to Game menu, to make it more
   intuitive than just being on the Palette pane.
 - Implemented Match Brace feature in script editor.
 - Changed text window background image positioning and clipping such
   that you can now have transparent edges on the outside of the border
   graphics whilst using a background image.
 - Newly added GUI Buttons are now set to Run Script by default.
 - Added ability to set a tiled background image for GUI sliders.
 - Enabled sliders to be grabbed by the entire width of the handle, not
   just the width of the main slider bar.
 - Added "Handle offset" option to sliders, to allow you to manually
   shift the handle across if the graphic doesn't line up properly.
 - Added Cancel button to the InputBox (and the Debug Ctrl+X box).
 - Editor welcome dialog now displays game folder name before
   complete path in Recent Games list.
 - Stopped autocomplete list popping up when inside strings and
   comments in the script editor.
 - Increased max dialog messages to 3000.
 - Increased max speech files from 2000 to 3000.
 - Changed the Object Pos display in the Objects pane of the editor to
   display the lower-left co-ordinate, as used in the game engine, rather
   than the top-left.
 - Renamed "Blank game" to "Default game", and added "Empty game"
   template (courtesy of AGA) which has no default sprites at all.
 - The Dump Text feature now also dumps the script header if "Text
   scripts" is selected.
 - Changed goto-previous to save a nested history of previous topics
   so that it can be used to retreat up the dialog tree.
 - Ambient sound is now restored properly after a PlayVideo.
 - Added low disk space check when saving a save game slot.
 - Added option to script editor Find dialog to start search from current
   location, rather than start of script.
 - Lucasarts-style speech now abides by the setting of
   game.close_mouth_end_speech_time.
 - Encrypted strings in compiled files, to prevent the player loading
   the exe into notepad to cheat.
 - Mouseover GUI button pics no longer work while in a blocking cutscene.
 - While moving a GUI object, the X/Y co-ordinates update dynamically
   in the properties window.
 - When using FOLLOW_EXACTLY, the following character is now drawn
   in front of the followed character; an extra option to
   FollowCharacterEx allows you to reverse this behaviour if you wish.
 - Editor now remembers the settings of "Lock sprite to current room"
   and "Remap colours to game palette" between imports.
 - Prevent the user restoring a save game if views have been added
   to the game since it was saved. This prevents later problems with
   the SetCharacterView and SetObjectView functions.
 - Removed close button from Edit Action window in the interaction
   editor, to fix the problem where a script could get disconnected
   from its interaction.
 - Removed the "Don't automatically lose inventory" option - it's now
   always on (not having it checked was a debugging nightmare).
 - PlayAmbientSound now does not reset the sound if you play an ambient
   sound that is already playing.
 - CyclePalette now supports rotating the colours in both directions.
 - FaceCharacter(EGO,EGO) now does nothing rather than facing left.
 - Default hotspot names (eg "Hotspot 1") are no longer output in the
   translation source file.
 - Keypresses are now discarded rather than queued if a blocking script
   is running when you press the key.
 - Skipping cutscene will now skip text boxes if No Auto Remove text is
   set, rather than hanging the game.
 - Fixed character walking on the spot at the end of a move occasionally.
 - Fixed Talk cursor flashing up briefly before dialog options
   turn back on during a conversation.
 - Fixed MoveToWalkableArea not working if the character was off the
   screen.
 - Fixed QFG4-style speech not working.
 - Fixed crash in DisplayTopBar.
 - Fixed Sierra-style speech not supporting flipped view frames.
 - Fixed lockup which could occur with some nested interactions.
 - Fixed bug where characters could get stuck when using Adjust Speed
   with Scaling.
 - Fixed Setup program not working if it was run from the command line.
 - Fixed font wierdness and crashing the first time you run a new game
   made from a template.
 - Fixed "Mouse moves over hotspot" running even if the mouse was
   actually moving over a GUI on top of the hotspot.
 - Fixed GUIs sometimes not re-enabling themselves until the mouse
   moved over them.
 - Fixed continuous idle loops not starting immediately after
   speech finished.
 - Fixed character view not always getting set back to normal view
   after talking but before dialog options are displayed.
 - Fixed script compiler allowing local strings to be returned from
   functions.
 - Fixed crash in SetGlobalString if you passed a very long string
   to it - now truncates to 200 characters instead.
 - Fixed translation output including text from deleted GUI buttons
   and labels.
 - Fixed auto-timeout text not working with DisplayTopBar.
 - Fixed editor having problems with finding the right script
   function to edit if you made a mistake with { } placement.
 - Fixed character being moved to non-walkable area if you left a
   room that it was moving in.
 - Fixed editor wiping most of the currently loaded room when
   you loaded a different game in.
 - Fixed editor problem editing script functions if the function
   was called before it was used
 - Fixed DisplaySpeech resetting the character's frame to 0 after
   they finished talking.
 - Fixed compile error if a string ended in a backslash.
 - Fixed problem with #define if tabs were used rather than spaces.
 - Fixed commented out #define statements so that they are properly
   ignored by the compiler.
 - Fixed 100% CPU usage while a text box was displayed.
 - Fixed character portrait remaining on screen when the parser-in-
   dialog was used.
 - Fixed digital speech and music files not being used if the current
   directory was not the game's directory when the game was run.
 - Fixed IsKeyPressed not working with shift, ctrl and alt.
 - Fixed idle animation not always kicking in straight away after 
   the character stopped moving.
 - Fixed '@' character not being displayed in GUI labels.
 - Fixed region tint problem if the amount was set to 50%
 - Fixed error message if you set the game to start in room -1.
 - Fixed inventory hotspot colours >32000 not working
 - Fixed GUI Properties window appearing on the taskbar.
 - Fixed GUI button text not being drawn backwards when Backwards
   Text was enabled.
 - Fixed config file "datadir" setting not working with root
   directories.
 - Fixed editor crash if you pressed Alt+F4 while the GUI Properties
   window was selected.
 - Fixed editor crash if you closed the Interaction Editor while the
   script editor window was open.

VERSION 2.6 Service Pack 1, January 2004:
 - Fixed editor importing of some 16 and 32-bit BMP files which
   didn't work previously.
 - Fixed crash on game startup if you deleted the default mouse
   cursor sprite.
 - Fixed cropping sprites not marking them as dirty (and thus
   the changes were not saved to disk).
 - Fixed Player Enters Screen (After Fadein) not getting run if
   there was a blocking command in First Time Enters Screen.
 - Fixed crash in 800x600 games if a background smaller than
   800x600 was imported.
 - Fixed crash if you used new-room dialog script command inside
   a dialog run by a room interaction command.
 - Fixed crash with continuous scaling areas if the min was set
   to the same as the max.
 - Fixed rare editor crash after changing colour depth.
 - Fixed problem with downgrading 32-bit alpha sprites to 16-bit
   after the game had been running for a while.
 - Fixed FadeIn not being skipped when skipping a cutscene.
 - Editor now checks for invalid colours in imported walk-behind
   masks since they could cause strange effects in-game.
 - Changed editor's Test Game code to try and fix problems some
   people are having with it.

VERSION 2.6, December 2003:
 - Added AnimateButton, ClaimEvent, DeleteSprite, DisplayTopBar,
   GetInvGraphic, GetTextHeight, GetTextWidth, LoadImageFile,
   LoadSaveSlotScreenshot, PlayMusicQueued, RawDrawFrameTransparent,
   RawSetColorRGB, SetAmbientTint, SetAreaScaling,
   SetCharacterSpeedEx, SetCharacterViewOffset, SetGUIClickable,
   SetGUIObjectSize, SetGUIZOrder, SetTextBoxFont, StopObjectMoving
   text script functions.
 - Added plugin API functions MarkRegionDirty, GetMouseCursor,
   GetRawColorComponents, MakeRawColorPixel, GetFontType,
   CreateDynamicSprite, DeleteDynamicSprite, and new plugin API
   hooks AGSE_FINALSCREENDRAW and AGSE_TRANSLATETEXT.
 - Added 24/32-bit colour support.
 - Added alpha channel support for 32-bit sprites.
 - Added room script support for on_key_press and on_mouse_click, so
   that the current room can handle the input rather than having it
   all done by the global script.
 - Speed enhancement for rooms with relatively few objects.
 - Added ability to import PNG and TGA files in the Sprite Manager.
 - Added option to automatically outline fonts.
 - Added support for saving screenshots into save games.
 - Added GUI Z-order support, so that you can choose which order
   overlapping GUIs are drawn in.
 - Added Crop Sprite Edges option to sprite manager, to crop the
   edges off a group of sprites down to the size needed by the
   largest of them.
 - Added ability to specify character X and Y walking speeds
   seperately.
 - Added Quick Import Multiple Sprites and Export All Sprites
   In Folder options for sprite folders.
 - Added ability to re-order sprites within a folder by dragging
   them around.
 - Added "Assign to view" right click option in Sprite Manager,
   to allow a group of sprites to easily be added to a view.
 - Added script names for views, working similarly to GUI and
   character script names.
 - Added editor option to show outline of all GUI objects, to allow
   you to find blank or transparent controls.
 - Added FOLLOW_EXACTLY feature to FollowCharacterEx, to allow you to
   easily keep a sprite on top of a character.
 - Added Show Usage option for sprites, to find out where they are
   used in the game; and tied this into the Delete Sprite option.
 - Added ability to have only left/right walking frames for
   characters (just delete all frames in loop 0).
 - Increased max GUIs to 40, max GUI buttons to 200.
 - Increased max views to 400.
 - Increases max objects to 20 per room.
 - Added auto-complete for plugin functions and functions defined
   in the script header.
 - Added ability to manually set X and Y position of GUI
   controls.
 - GUI Editor and Font Editor now show full detail in 640x400
   games rather than a scaled down version.
 - Rearranged options on the main Game Settings tab to make
   the order more logical.
 - Made only the options area of the dialog editor scrollable, to
   improve its usability.
 - Added system.vsync script option to smooth full screen scrolling.
   Note that enabling this will cap your game frame rate at the
   screen refresh rate.
 - Built-in inv window now sets player.activeinv while using an item
   on another (to make it consistent with custom inventory).
 - Disabled deleting sprites while selecting a sprite for something,
   to prevent crash if you deleted the old active sprite.
 - Made the tabbing order of the controls in Setup more logical.
 - IsSpeechVoxAvailable and IsMusicVoxAvailable now return 0 if
   the user has no sound card or sound is disabled.
 - Stopped the user loading in a different room while editing the
   room script.
 - Loading a new room now properly resets the Room Areas undo buffer.
 - Disabled anti-aliasing on text drawn on transparent GUIs, to
   fix the pink effect.
 - Improved alignment of portrait with text window when using
   Sierra-style speech.
 - Increased text script stack size to 4 KB.
 - Fixed large memory leak which could cause slow loading and Out
   of Memory errors in games that used TTF fonts.
 - Potentially fixed game hanging on exit on some computers.
 - Fixed editor crash if you used return without a semicolon.
 - Fixed script editor not properly parsing functions where there
   was a { character in a string.
 - Fixed script errors if you declared a variable in a room script
   with the same name as one which was in the script header.
 - Fixed positioning issue with some TTF fonts at 640x400.
 - Fixed objects 10 and above not being able to move.
 - Fixed changing room settings not marking room dirty.
 - Fixed mouse cursor not changing back to arrow pointer in dialog
   windows.
 - Fixed music not always being restored correctly when restoring a
   save game.
 - Fixed narrator speech not being cancelled when the user skipped
   a text window.
 - Fixed GUI textboxes to not allow the cursor to extend beyond
   the end of the text box.
 - Fixed crash clicking scroll bars in save dialog when no save games.
 - Fixed rare random crash with small GUI labels.
 - Fixed lockup using NewRoom from within the default inventory window.
 - Fixed editor not to allow Test Game feature with DOS-compiled games.
 - Fixed @overhotspot@ not removing item name if you moved the mouse
   off of all inventory items but within the inventory GUI.
 - Fixed GUI not detecting clicks when it first appears until the
   mouse moved.
 - Fixed GUI buttons being greyed out on Persistent GUIs when
   "GUIs turn off when interface disabled" was set.
 - Fixed parser-in-dialog to use the same font as the dialog
   options.
 - Fixed parser-in-dialog text not being erased when you pressed
   backspace with the default dialog options display.
 - Fixed problem creating GUI controls if you dragged the
   rectangle up-left.
 - Fixed idle animations using loops 4-7 of view, even if
   "No diagonal loops" was set for the character.
 - Fixed following characters so that if you leave a room, then
   quickly come back, the following character is still there.
 - Fixed converting a GUI to a text window sometimes corrupting
   other GUIs.
 - Fixed compiler allowing assignment to string in declaration.
 - Fixed crash if game.text_speed was zero (now error out instead).
 - Fixed keyboard focus in editor being lost when selecting the GUI
   editor from the left hand tree.
 - Fixed editor crash compiling a script with no right hand side of
   an operator.
 - Fixed crash using nested imported function calls in script.
 - Fixed black palette entries getting remapped to dark grey in
   256-colour sprites.
 - Fixed import rectangle changing size when switching import images
   if the importer was zoomed in.
 - Fixed editor crash if you deleted the last selected sprite.
 - Fixed system.screen_height returning 200 even when it was
   actually running at 240.
 - Fixed speech positioning problem with GUIs Turn Off When Disabled
   setting.
 - Fixed crash loading a room if anti-alias sprites was enabled
   and the room palette was corrupt somehow.
 - Fixed fade-in problem with 256-colour animated backgrounds in
   a hi-color game.

VERSION 2.56b, August 2003:
 - Added GetScalingAt text script function.
 - Fixed Lucasarts-style speech being wrongly offset when character
   is near to the edge of the screen.
 - Fixed editor crash if you pressed Find Next while auto-complete
   was displayed.

VERSION 2.56a, August 2003:
 - Changed the way region tints work, to make them more useful.
 - Added RawDrawRectangle text script function.
 - Added game.anim_background_speed to allow you to modify the
   speed at which the animated backgrounds rotate.
 - DisplaySpeechAt with Sierra-style speech doesn't shrink text box.
 - FaceLocation with "turn to face" now works in Enters Screen event.
 - Increased max fonts to 15.
 - Fixed region tint in 15-bit colour.
 - Fixed crash if the player typed [ or ] into the text parser.
 - Fixed region tints not being saved in save games.
 - Fixed region light levels messing up in editor.
 - Documented custom properties.

VERSION 2.56, August 2003
 - Added GetCharacterProperty, GetCharacterPropertyText,
   GetHotspotProperty, GetHotspotPropertyText, GetInvProperty,
   GetInvPropertyText, GetObjectProperty, GetObjectPropertyText,
   GetRoomProperty, GetRoomPropertyText, ListBoxRemove,
   SetCharacterBlinkView, SetGUIObjectPosition, SetGUISize,
   SetRegionTint and StrContains script functions.
 - Added Custom Properties to allow you to easily specify options
   for hotspots, characters, rooms, objects and inventory.
 - Added option for characters speed to be adjusted in line with
   their scaling level.
 - Added option to display multiple inventory items multiple times.
 - Added option to have the text parser with dialog options, so that
   the player can either select an option or type something in.
 - Added RGB tint option for regions as an alternative to light level.
 - Added "Quick Import FLC frames" to import all frames from a FLC
   file in one go to the current sprite folder.
 - Implemented multiple select for dragging and deleting sprites in
   the sprite manager.
 - Added "Update translation file" option, to add new lines from the
   game to the translation source, whilst leaving currently translated
   bits intact.
 - Added options to translation files, to allow changing font and 
   text direction on a per-translation basis.
 - Added preliminary support for right-to-left text writing.
 - Added ability to delete sprite folders (USE WITH CARE!!)
 - Added "Lock objects in position" checkbox to the GUI editor, to
   stop you accidentally moving objects when trying to select them.
 - Added extra "Blinking" view to draw an extra animation on top of
   the character's speech animation intermittently while they are
   talking. Currently Sierra-style speech only.
 - Added 'goto-previous' dialog script command to return to previous
   topic, and 'lose-inv' command to lose the player inventory.
 - Added new "Box out" and "Crossfade" screen transitions.
 - Added option for characters to turn to face their new direction
   when using FaceLocation/FaceCharacter.
 - Added "Persistent" GUI display option, to not remove it during
   a cutscene with "GUIs turn off when disabled".
 - Added "Auto number speech lines" to automatically give a number 
   to all speech lines in the game.
 - Added feature to detect hung scripts and abort the game (for
   example, scripts like  while (1) { }  )
 - Added ability to export/import the text parser word list.
 - Added MIDI controller event support, so that MIDI commands such as
   sustain will now work.
 - Sierra-style speech now shrinks the width of the text window if
   the text is narrower than the screen width.
 - Text parser now accepts ' and - characters, and automatically
   accepts plurals of all words (ie. an 's' on the end).
 - Added ability to change sprite numbers in the Sprite Manager.
 - Increased max sprite folders to 500.
 - Increased max sprites to 15000.
 - Increased max dialog topics to 500.
 - Increased max cursors to 20 (though the new ones will only activate
   the Any Click event at present).
 - Script editor is no longer a modal window (but only if it's not
   opened from the interaction editor).
 - Changing a hotspot name now correctly marks the room as modified.
 - Sprite manager now remembers which folder you were in before
   when selecting new item graphics.
 - SetPlayerCharacter now changes the mouse cursor if an inventory
   item of the old character was active.
 - Disabled auto-complete in the dialog script editor.
 - Fixed Enters Screen Before Fadein not being run if the NewRoom was
   launched from an inventory interaction.
 - Fixed normal mouse cursor flashing up in between messages
   when Always Display As Speech was being used.
 - Fixed Sierra-style speech box overrunning the face if it had
   wide borders.
 - Fixed set-speech-view dialog command not working.
 - Fixed buttons in default inventory screen being drawn without
   transparency.
 - Fixed dialog bullet getting set even if you pressed ESC.
 - Fixed animated backgrounds sharing the palette, even when you told
   them not to. You'll need to re-import the main background in any
   problem rooms for this fix to take effect.
 - Fixed thinking view not being exported with character.
 - Fixed RunAGSGame not resetting game paused flags.
 - Fixed RunAGSGame not working if mode was passed as 1.
 - Fixed Rebuild VOX Files to delete the music.vox if there were
   previously music files, but no longer are any.
 - Fixed SetSoundVolume not taking effect with footstep sounds.
 - Fixed editor crash if "function" was the last word in a script.
 - Fixed "player.inv[index]--;" also decrementing inv[index+1]
 - Fixed SetPlayerCharacter crashing if called from game_start.
 - Fixed dialog options moving across the screen in non-GUI mode.
 - Fixed editor crash typing >200 characters into a label.
 - Fixed text window GUI being used for dialog options instead of
   the specified Dialog Options GUI.
 - Fixed GUI button text not being translated if the button also
   had an image.
 - Fixed HideMouseCursor not hiding cursor while message displayed.
 - Fixed FollowCharacter crash when stopping char from following.
 - Fixed problem with translations where \" had been used in a string.
 - Fixed dividing by zero in the script causing a fatal exception.
 - You are now always prompted to save changes to a room when loading
   another one - the Preferences setting only affects the prompt when
   you choose the "Save Room" option on the menu.

VERSION 2.55, May 2003
 - GUIs can now be named, and those names used in the text script,
   much the same way as it works with characters.
   GUIs can also now be deleted, which is safe so long as you use
   their names rather than numbers to reference them in your scripts.
 - Optimization to speed up screens with large objects, and to
   speed up rendering of characters.
 - Added "regions" as a new room area mask type. These take over
   light levels from walkable areas, and also add 'Player Walks Onto'
   and 'Player Walks Off' interactions.
 - Added support for New Game Templates, to enable the user to choose
   between a new game Sierra-style, Lucasarts-style, and so forth.
   The default blank game also now includes a simple custom inventory
   window.
 - Added DisableRegion, DisplayThought, EnableRegion, GetGameOption,
   GetGameParameter, GetRegionAt, IsInventoryInteractionAvailable,
   RunRegionInteraction, SetCharacterViewEx and ShakeScreenBackground
   text script functions.
 - Added plugin API functions GetSpriteWidth, GetSpriteHeight,
   GetTextExtent, PrintDebugConsole, PlaySoundChannel, IsChannelPlaying
 - Increased max objects per room from 10 to 15.
 - Added "Quick Save" editor option, which saves your changes but
   doesn't compile the game files. This is useful when you just
   want to quickly save your work but not test the game.
 - Added drag and drop support to sprite manager for moving sprites.
 - Added game.text_align variable to allow you to centre text within
   message boxes.
 - Added ability to use custom image as GUI Slider tracker.
 - Added option for 256-colour animating backgrounds to share the
   main background's palette, to eliminate flicker effect on
   backgrounds with more subtle changes.
 - Added basic CallTips to script editor.
 - Mirrored view frames now work with objects.
 - Editor now checks whether the starting room exists before
   saving the game, which should hopefully help newbies.
 - Added "Conditional - If mouse cursor mode is" and "Conditional - 
   If player has been to room" interaction commands.
 - If you have no mod/xm music, the player is now not loaded and
   therefore you can use all 6 sound channels simultaneously.
 - SetButtonPic now updates the button size to the size of the new
   graphic, when changing the Normal graphic.
 - Editor now prompts you to rebuild the vox files if music or speech
   has been added to the game folder.
 - Tiled sprite import now goes from left to right in rows, rather
   than top to bottom in columns - more logical this way.
 - Allow FileOpen to open files in sub-directories if FILE_READ.
 - Tinkered with avi playback code a bit to try and make it more stable.
 - Fixed spurious engine crash "no such function in script" when nesting
   scripts inside interactions.
 - Fixed walk-behind mask granularity not being updated if a background
   of a different resolution but same relative size was imported.
 - Fixed editor crash sometimes when changing GUI background image.
 - Fixed crash trying to load a game saved in a 320x240 room when
   the current room was a 320x200 room.
 - Fixed crash when characters went off the top of the screen.
 - Fixed crash passing empty string to Display/DisplaySpeech.
 - Fixed SetGUIPosition giving error message at 800x600.
 - Fixed SetMusicVolume not allowing volume less than Normal.
 - Fixed character light levels to use region 0 settings if off-screen,
   to make the character be correctly lit as they walk from off-screen.
 - Fixed black on some sprites turning to transparent when ignoring
   walk behinds.
 - Fixed replay playback sync error with 640x400-res games.
 - Fixed game crash if you had an unterminated GUI label macro.
 - Fixed crash drawing small (eg. 4x4) sprites.
 - Fixed editor crash dumping game text in long path names.
 - Fixed crash in Win9x when trying to drag sprites in the sprite manager.
 - Fixed crash entering a very long global message in the editor.
 - Fixed music crossfading while playing FLC animation.
 - Fixed anti-aliased 256-col sprites being black during fade-in.
 - Fixed on_event(ADD_INVENTORY) not running if the player already
   had one of the item.
 - Fixed Undo wiping entire script if selected when editor opens.
 - Fixed dumping game text where there was no blank line at the
   end of a dialog script.
 - Fixed anti-aliased fonts causing problems with dialog options.
 - Renamed "Always on" and "Script only" GUI types to make more sense.

VERSION 2.54, March 2003
 - Added lip-sync text reading for speech lines.
 - Added option to anti-alias TTF fonts.
 - New Linux version of the AGS Engine, thanks to Shawn Walker. This is
   available seperately for download from the AGS website.
 - Added CentreGUI, GetGlobalString, GetHotspotPointX, GetHotspotPointY,
   HideMouseCursor, SetButtonText, SetGlobalString, SetGUITransparency,
   SetMousePosition and ShowMouseCursor text script functions.
 - Added "Conditional - If player character is" and "Character - Change
   Character View" interaction commands.
 - Added checks to stop characters walking through each other, and
   a related "Can be walked through" character option in the editor.
 - Added option to Setup to anti-alias scaled characters, thanks to
   Michael Bukin.
 - Added "GUIs turn off" option for when the player interface is disabled.
 - Added game.dialog_options_x and game.dialog_options_y to allow you
   to set an offset if your dialog options GUI has a border.
 - Added game.narrator_speech to allow you to set which filename prefix is
   used for voice speech within the narrator-style Display() messages.
 - Added game.ambient_sounds_persist to allow ambient sounds to continue
   playing on room changes.
 - Added unofficial debug display console (press the ` key, like in Quake)
   which might help you track down problems with your game.
 - View frame sounds now don't play if all sound channels are in use.
 - Improved hi-colour fade out/in speed, thanks to Matthew Leverton.
 - Increased max sprite folders to 100.
 - Unhandled_event is now run if you use an inventory item on an
   interaction which does not handle that item.
 - Allow 240-height GUIs in 320x240 and 640x480 mode.
 - StopMusic now fades out the old track if crossfading is enabled.
 - Fixed hotspot walk-to points being randomly moved in the editor
   when the cursor left the top of the background area.
 - Fixed sound looping glitch disabling crossfading during a fade-out.
 - Fixed crossfading music not working while PlayVideo was playing.
 - Fixed speech positioning error with transparent GUIs.
 - Fixed RunAGSGame crashing if the old game used plugins.
 - Fixed SetFrameSound changes not being saved in save games.
 - Fixed editor crash drawing horizontal line in continuous scaling area.
 - Fixed crash in StopMusic/PlayMusic when using crossfader.
 - Fixed bottom row of pixels in a walk-behind area not working.
 - Fixed SetInvItemPic failing with inventory item 1.
 - Fixed crash right-clicking in bottom of main tree pane.
 - Fixed @overhotspot@ text popping up briefly between display lines.
 - Fixed sprite importer scrolling back to top when using right drag.
 - Fixed minor change to TTF font sizes.
 - Fixed DisplaySpeech text not staying long enough when using %s.
 - Fixed character stopping on wrong frame if the pathfinder failed.
 - Fixed problem with PlayMP3File and music crossfading.
 - Fixed dialog startup script not getting played when switching topics.
 - Fixed hotspot 0's walk-to point not being visible.
 - Fixed IsInteractionAvailable with hotspots with walk-to points.
 - Fixed crash in SetSoundVolume when multiple sounds were playing.
 - Fixed movement jumping when doing slow horizontal and vertical moves.
 - Fixed music glitching when the engine exits with an error.
 - Fixed horizontal scroll bar in sprite import window being missing.
 - Fixed crash displaying messages longer than 1000 characters.
 - Fixed UpdatePalette while skipping a cutscene.

VERSION 2.53, January 2003
 - Added GetDialogOption, GetGraphicalVariable, IsChannelPlaying,
   IsOverlayValid, PlaySoundEx, RunAGSGame, SetChannelVolume,
   SetCharacterSpeechView, SetDigitalMasterVolume, SetGameOption,
   SetMultitaskingMode and StopChannel text script functions.
 - Changed the way resolution selection works in the editor to make it much
   more intuitive and friendly to newbies
 - Added 800x600 resolution support.
 - Added IAGSEngine::GetViewFrame, GetWalkbehindBaseline, GetAreaScaling,
   GetScriptFunctionAddress, GetTransparentColor, GetRawPixelColor and
   IsGamePaused plugin API functions.
 - Added "Rebuild all room files" option to Game menu in editor.
 - Added Alt+R as a hotkey to start recording a replay mid-game.
 - Added "New room" option to File menu in editor.
 - Added "Stop running more commands", "Character - Face Location" and
   "Game - Pause command processor" interaction commands.
 - Added room variables to interaction editor.
 - Added multiple sound channel support.
 - Added crossfading option for background music.
 - Added exact palette import option for sprites in 256-colour games.
 - Added Script menu to editor, with options to jump straight to commonly
   edited global script functions.
 - Script compiler now detects mismatch of string/int in function calls,
   and multiple declarations of the same variable.
 - 640x400-res sprites are no longer stretched in the Characters pane.
 - DisplaySpeechBackground now returns the overlay number it uses.
 - Upgraded TTF font renderer, leading to much faster TTF rendering.
 - Decreased save game size.
 - Editor now warns you rather than crashing if the game files are read-only.
 - Changed maximum frame rate from 100 to 1000 FPS to help speed tests.
 - Room messages displayed as speech now use the SetSkipSpeech setting
   and ignore the "Auto remove after a time" checkbox.
 - Removed "(most detailed)" from 960x600 in Setup to try and stop inexperienced
   players from choosing it.
 - Repeatedly_execute is now not called before Player Enters Screen in a room.
 - Screen edges are now disabled while the game is paused.
 - Increased max parameters for script functions from 10 to 15.
 - Increased max GlobalInts from 300 to 500.
 - Sprite importer now displays pixel size of selection rectangle.
 - If a character view has 8 loops, but loops 4-7 only have one frame each,
   then the diagonal frames are only used when turning round, not when walking.
 - Allow 15 characters in game folder name instead of 8.
 - Fixed lockup if you tried to skip a cutscene while the icon bar was up.
 - Fixed editor minimizing after using external text editor.
 - Fixed interaction variables not getting saved in save games.
 - Fixed rare condition where game could freeze up.
 - Fixed room areas and GUI editor buttons being opaque.
 - Fixed DisplaySpeechAt not using translations and text not staying long enough.
 - Fixed rare text script string corruption after restoring save game.
 - Fixed crash when restoring game in games which used the text parser.
 - Fixed speech getting hidden behind tall thin GUIs.
 - Fixed bug restoring a game saved in a 320x200 room when in a 320x240 room.
 - Fixed viewport co-ordinates not being restored from save game.
 - Fixed DisplayAtY when "Always display as speech" was checked.
 - Fixed possible issue with IsMusicPlaying when the user had no sound card.
 - Fixed Raw changes to animated background frames not being saved in save game.
 - Fixed double-clicking an event in the interaction editor not creating a
   new action if it had previously had one which had since been deleted.
 - Fixed editor allowing you to create two variables with the same name.
 - Fixed interaction editor arguments sticking on Boolean sometimes
   even once you changed it to a different command.
 - Changed internal compiled game file format slightly.
 - Upgraded editor wxWindows version - hopefully will correct WinXP glitches.

VERSION 2.52, November 2002
 - Added AnimateCharacterEx, AnimateObjectEx, DeleteSaveSlot, GetInvAt, 
   GetRawTime, IsObjectOn, RawDrawCircle text script functions.
 - Added RESTORE_GAME event to on_event in order to let your game know when its
   just been loaded from a save game file.
 - Added game.score_sound to allow dynamic changing of the score sound.
 - Implemented speed optimisation which should boost performance in all rooms that
   have walk-behind areas, especially those with large objects.
 - Added ability to run animations backwards; see the new Animate*Ex script
   functions for more information.
 - Added 'datafile' option to config file to allow playing game off CD; PlayVideo
   now uses the data directory rather than the EXE directory.
 - Added 'Cancel' option to prompt when closing script editor.
 - Added mouse wheel support to replay recording/playback.
 - Fixed the infamous "Not enough memory to load masks" error and related Illegal
   Exception on startup, that occured to some people on Windows XP.
 - Added IAGSEngine::GetRoomMask plugin API function.
 - Increased max GUIs from 20 to 30.
 - The current zoom level is now displayed in the editor in Walkable Area mode.
 - The return key now works in the initial "Welcome to AGS" dialog.
 - VOX files are now removed on the rebuild if you remove all the music
   or speech source files from the game folder.
 - "Add Action After This" now inserts where you click rather than adding at end;
   added "Add Action Before This" option as well.
 - Fixed MoveCharacter functions resetting character frame to 0 if they were
   already moving.
 - Fixed error if you tried to export more than 140 functions from the global
   script.
 - Fixed GetLocationName/ProcessClick not obeying the SetObjectIgnoreWalkbehinds
   and SetCharacterIgnoreWalkbehinds settings; and priority problem with
   objects over walkbehinds.
 - Fixed Winsetup.exe not working with paths with spaces in.
 - Fixed IsSoundPlaying while skipping cutscene.
 - Fixed crash importing old rooms with old-style animations.
 - Fixed an error in the script header bringing up the global script when you
   clicked Yes to fix it.
 - Fixed unhandled_event not working with type 4 (No Hotspot)
 - Fixed crash when creating a room message longer than 3000 characters.
 - Fixed crash when Alt+Tabbing in windowed mode in Windows 2000.
 - Fixed "out of sync" error after playing back a replay for 10-15 mins.
 - Fixed rare crash after loading a save game.

VERSION 2.51a, October 2002
 - Fixed error loading wave files.
 - Fixed walk-behind area 15 not being able to set a baseline.
 - Trying alternate method for Save & Run to work around Windows cache bugs.

VERSION 2.51, October 2002
 - Added support for plugins to allow people to extend AGS.
 - Added sprite mirroring support to views.
 - Added smooth scaling for walkable areas.
 - Added DisplaySpeechAt, IsInteractionAvailable, SetLabelColor and
   SetTextWindowGUI text script functions; game.room_width and
   game.room_height variables.
 - Added give-score dialog script command.
 - Added replay recording and playback (currently unsupported).
 - Added 'Number dialog options' and 'Dialog options go upwards on GUI' game
   settings.
 - Speeded up room loading times.
 - Added skip type 3 (key or mouse) to PlayVideo.
 - Added 'Hide Border' option for text and list boxes.
 - ListBoxSetSelected now scrolls the list if necessary to show the
   selected item.
 - Added option to Setup to force letterbox mode, for people where 320x200
   doesn't work.
 - Made Load Room the default action for the room list.
 - Increased max sprite folders from 60 to 80.
 - If Sierra-style speech and No Auto Remove, stops portrait animating once
   the default time has elapsed.
 - Allow negative co-ordinates in SetGUIPosition, to allow you to slide the
   GUI on from off-screen.
 - Fixed new-room dialog script not stopping screen edges from taking effect
   before fadein.
 - Fixed colour problems when importing some 256-col animating backgrounds.
 - Fixed palette flicker when changing between 256-col anim backgrounds.
 - Fixed editor crash with dialog scripts >200 lines.
 - Fixed MouseOver pic not being used when GUI is switched on.
 - Fixed small OGG speech files erroneously repeating.
 - Fixed Skip Cutscene not working during voice speech.
 - Fixed hit-testing order when characters were behind objects and so on.
 - Fixed IsSoundPlaying not working properly with MP3 and OGG sounds.
 - Fixed bug with Rebuild VOX Files and OGG speech.
 - Fixed rare crash when clicking dialog option.
 - Fixed erroneous "Colour depth doesn't match" error importing animated
   backgrounds.
 - Fixed "been in no rooms" error if game started in room >300.
 - Fixed problem saving game while a mouse-y popup GUI was displayed.
 - Fixed script blocks not getting removed when Clear All Actions was used.
 - Fixed characters occasionally getting stuck if movement was stopped halfway
   into a move.
 - Fixed editor getting minimized after testing the game.
 - Fixed Setup Game option from editor not saving settings to the right place.
 - Fixed @overhotspot@ not blanking out over empty areas.
 - Fixed Voice Only mode displaying blank text box with Sierra-style speech.
 - Fixed issue with area-specific character views messing up along the edge.
 - Fixed save games not working properly if saved in an extended room ( > 300)
 - Fixed script editor window losing focus when you switch away.
 - Missing speech files now write to log rather than exiting game.
 - Engine now quits gracefully rather than crashing if you use invalid
   walkable areas.
 - Fixed rare crash when saving a room.
 - Fixed Setup saving settings not then being used by the engine that run.
 - Upgraded allegro version, to hopefully fix black screen issues.

VERSION 2.5b, September 2002
 - Added StrSetCharAt text script function.
 - Added ability to use number keys 1-9 as shortcut to select dialog options.
 - Added ability to have text and image on GUI buttons. Note currently
   the text will always be in the top-middle of the button.
 - Fixed issue with AreCharObjColliding in 640x400.
 - Fixed rare random crash bug when a script function ended.
 - Fixed DisplayAtY and RawPrintMessageWrapped not working properly
   at 640x400.
 - Fixed "symbol table overflow" with very large global scripts.

VERSION 2.5a, September 2002
 - Fixed problem with hi-res walkbehinds in newly created rooms.
 - Fixed crash bug when importing characters.
 - Fixed crash bug occasionally when exporting GUIs.

VERSION 2.5, September 2002
NOTE: Graphical scripts and Animations have been removed completely from
this version - the engine can no longer run old rooms that used them.
NOTE: It is now IMPOSSIBLE for your game to be de-compiled - even by me.
Take special care to backup more in future.
NOTE: Back up your game before using this version, as many changes have
been made and it's possible that the upgrade may cause problems.
 - Totally re-written interaction editor, which now combines the old
   graphical scripts into the main interaction window.
 - Optimised drawing of large objects to improve frame rate.
 - New built-in script editor, with syntax highlighting, auto-complete
   and more!
 - Added OGG Vorbis support for music, speech and sound effects.
 - Added DisplayMessageAtY, FileIsEOF, GetMessageText, GetTranslationName,
   GetWalkableAreaAt, ListBoxSetTopItem, PlayMP3File,
   RawPrintMessageWrapped, RunInventoryInteraction and SetFrameSound text
   script functions.
 - Walk-behinds for 640x400 rooms are now 640x400 res, allowing proper
   walk-behind effects in hi-res. Note currently since there's no zoom
   feature it's very difficult to do this in the editor - best idea is
   to use the Import Mask feature.
 - Added option to set a sound effect for a view frame - should be useful
   for doing footstep sounds and so forth.
 - Added "player" alias to dialog script meaning current player character
 - Increased maximum characters in a game from 50 to 150.
 - Increased maximum frames per loop to 20 and loops per view to 16.
 - Increased maximum options per dialog topic from 15 to 30.
 - Increased maximum inventory items from 99 to 300.
 - Increased GUI button/label limit from 80 to 150.
 - Using "..." as text to DisplaySpeech or in a dialog script pauses the
   conversation briefly as if the characters are stopping to think.
 - In 256-color games, animating backgrounds now each get a different
   palette, so they don't all have to use similar colours to the first.
 - Added mouse wheel and middle button support.
 - Added "Save and Run" button to Setup.
 - Added 'Handle inventory clicks in script' option to game settings
   to enable you to handle clicks on inventory items in your script.
 - Added "set-globalint" dialog script command.
 - Made running at 85 Hz an option in Setup rather than forcing it,
   since TFT monitors / laptops can't do it.
 - Save games now save the changes made by Raw functions.
 - Added support for passing error message and line number to external editor.
 - Renamed IsVoxAvailable to IsSpeechVoxAvailable to avoid confusion.
 - "Revert to default fonts" now sets back fonts 0-2 to defaults.
 - GUI editor now only resizes a GUI button when you change its image.
 - Added right-click Copy Co-ordinates to main room display window.
 - SetNormalFont now affects built-in dialogs (quit/save/etc).
 - Transition from preload screen to first room now uses your preference
   rather than a forced fade-out.
 - Fixed end of MP3 speech getting cut off.
 - Fixed EXE icon not being applied to game window.
 - Fixed speech text positioning with tall GUIs.
 - Fixed editor scroll bars not updating when importing large background.
 - Fixed character talking colour having to be below 256.
 - Fixed translations of global messages 984-999 not working.
 - Fixed bug with AreCharObjColliding, and made it pixel-perfect.
 - Fixed translations of GUI buttons not working.
 - Fixed "Stack pointer not 0" error using arrays as local variables.
 - Fixed crash on finish of importing text dump.
 - Fixed Sierra-style speech appearing under large top GUIs.
 - Fixed issue with animated backgrounds with odd widths and heights.
 - Fixed "character[CHARID.animating" crashing compiler
 - Fixed MOD music getting disabled after playing AVI/MPG.
 - Fixed SetAreaLightLevel crash with using area 15.
 - Fixed Add Inventory interaction using Data instead of VAL for the value.
 - Fixed outline fonts not working for dialog options.
 - Fixed glitching sometimes when mp3 music looped.
 - Fixed text dump import resetting room options.
 - Fixed very rare crash bug when changing rooms.
 - Fixed game.bgspeech_game_speed to work properly.
 - Fixed GetMIDIPosition and GetMP3PosMillis during a skipped cutscene.
 - Fixed DisplaySpeech when character talking colour was 0.
 - Fixed "No MIDI music" setting playing music anyway.
 - Fixed false AnimateObject error message when using AnimateCharacter.
 - Fixed bug where speed of first frame of speech animation was wrong.
 - Fixed following character problem if you changed room before the
   follower got to the current one.
 - Minor editor bug fixes.
 - Changed MP3 decoder from Xing to mpg123 for licensing reasons.

VERSION 2.4b, July 2002
 - Added IsMusicVoxAvailable text script function.
 - Editor now checks whether a sprite is part of a view before letting you
   delete it.
 - Editor makes backup copy of old game file and sprite file before saving.
 - Un-checking the external editor now keeps the file name for future use.
 - Fixed crash with messages longer than 350 characters.
 - Fixed walking onto screen from off-edge if NewRoomEx was used.
 - Fixed editor crash if a character had no normal view.
 - Fixed crash on RunDialog use inside dialog_request - error msg instead.
 - Fixed strange behaviour if SetViewport was called from repeatedly_execute.

VERSION 2.4a, July 2002
 - Implemented fade in with hi-color games.
 - Screen edges are now ignored during Player Enters Screen, which allows
   you to move the character in from beyond the edge without it changing
   rooms afterwards.
 - Editor now warns if you rename a game directory to >8 characters.
 - Fonts now drawn smaller in editor if Don't Scale Up is selected.
 - Fixed SetSkipSpeech style 3 not being skipped in cutscenes.
 - Fixed editor crash if GUI width/height was set to 0.

VERSION 2.4, July 2002
NOTE: Graphical scripts have been removed from this version. You will
need to re-do them as text scripts. Sorry. Rooms with graphical scripts
will continue to work until you modify the room in the Windows editor at
which point the graphical scripts will be removed.
 - NEW! Windows-based IDE.
 - Added TTF font support.
 - Added support for game translations.
 - Added support for MP3 speech files and sound effects.
 - Added support for AVI and MPG video (Windows engine only).
 - Added sprite caching system to decrease engine memory use.
 - Added ability for player to skip cutscenes; see StartCutscene for info.
 - Removed old-style translations, and moved remaining built-in messages
   to global message slots 984-995.
 - Added CallRoomScript, EndCutscene, GetMP3PosMillis, GetTranslation,
   IsTranslationAvailable, MoveCharacterPath, PlayAmbientSound, 
   PlayVideo, SeekMP3PosMillis, SetCharacterProperty, SetLabelFont,
   SetMouseBounds, SetNextCursorMode, StartCutscene, StopAmbientSound,
   StrGetCharAt, StrToLowerCase, StrToUpperCase, and WaitMouseKey text
   script functions.
 - Increase limit to 6000 sprite slots, 300 views.
 - Changed names of functions InterfaceOff and InterfaceOn to GUIOff and
   GUIOn, since a lot of AGSers now weren't around when Interfaces were
   used, and so are getting confused with these function names.
   The old InterfaceOff and On will still work for the time being so you
   don't have to change any code, just try to use GUIOn/Off from now on.
 - Added a few new Windows engine Setup options.
 - Added option to draw inventory cursor hotspot dots.
 - Added [optional] words to Said parser.
 - Added (INVSHR) to draw small items at actual size rather than stretching.
 - Added missing "Pick up character" event, and added User Mode 8 & 9 events
   to character, object and hotspot interactions.
 - Music file load failure now lets you know via the debug log.
 - Added Alt+X as the new engine break key, to replace Ctrl+alt+end.
 - Added %d/%s support to DisplaySpeech.
 - @overhotspot@ now displays nothing while the wait cursor is in effect.
 - Changed name of AC2GAME.DAT to AC2GAME.AGS to work with explorer better.
 - Go To Screen now makes sure character is placed within screen edges on
   new screen.
 - Walkable area 0's zoom level is now used if a character walks through
   it with MoveCharacterDirect.
 - Fixed AnimateObject flashing up frame 0 of loop 0.
 - Fixed flickering and mouse cursor problems while displaying dialog
   options in Windows engine.
 - Fixed SetButtonPic not updating if cursor was over button at the time.
 - Fixed problem when walking off left of scrolling rooms.
 - Fixed text staying on screen too long sometimes with voice speech.
 - Fixed crash when walkable area 15 was used.
 - Fixed walkable area 15's zoom and light levels not working.
 - Fixed inverted colours on some graphics cards at 16-bit.
 - Fixed skipping cutscene with blocking Display() and talkie games.
 - Fixed character walking on the spot at end of movement sometimes.
 - Fixed crash when moving with certain walkable area configurations.
 - Fixed mouse cursor moving to right when clicking top of icon bar.
 - Fixed idle animation not releasing properly if speech started in the
   middle of it.
 - Fixed rare "error -2" crash when changing rooms.
 - Fixed strings overwriting each other in text script nested function calls.
 - Fixed mouse moving problem with windowed-mode Win engine.
 - Fixed speech text appearing under GUI when near top of screen.
 - Fixed Windows engine crashing when close button was clicked.
 - Fixed Dissolve screen transition.
 - Fixed messed up colours on some systems in 15-bit.
 - Fixed SetObjectIgnoreWalkbehinds going behind all objects.
 - Fixed AreCharObjColliding returning 1 when object was off.
 - Fixed GetSaveSlotDescription and ListBoxSaveGameList returning
   "Invalid Slot" after being run a few times.
 - Fixed "GUI unchanged when disabled" greying out text buttons.
 - Fixed being able to activate inventory items out of sight in custom
   inventory window.
 - Fixed walkable area 15's light and zoom settings not being saved.
 - Fixed various issues with sound in Windows engine.
 - Fixed crash when playing some 640x400 games at 320x200.
 - Fixed room loading crash bug if a message was longer than 300 characters.
 - Fixed compiler crash if you did  Display("Text",);  now prints an error
 - Fixed crash bug if pressed a key during a complex cutscene
 - Fixed MP3 glitching at very low frame rates (<10 fps)
 - Fixed positioning of QFG4-style dialog options box if DisplaySpeech
   text script function used instead of dialog script.

VERSION 2.31, March 2002
 - Added ChangeCursorHotspot, DisplayAtY, FileWriteRawLine,
   IsInterfaceEnabled, IsObjectMoving and UpdateInventory text script
   functions.
 - Added [ as line break character to GUI labels.
 - Added game.skip_display script variable.
 - Background speech text is now removed when a character starts talking
   properly.
 - The engine now attempts to spot you using an int as a buffer by accident.
 - GUIs are now drawn on top of all screen overlays.
 - character[].animating is no longer 1 while idle animation is playing.
 - Screen edges now only take effect while the game is not in Wait mode.
 - Fixed unhandled_event happening when an Any Click event was used.
 - Fixed StopDialog not working at all.
 - Fixed parse error using ',' inside array index.
 - Fixed activating an interaction just before character leaves the screen.
 - Fixed dialog options GUI being too wide when short options.
 - Fixed mouseover picture on GUI buttons flashing up on InterfaceOn.
 - Fixed SetCharacterIdle if an idle animation was already playing.
 - Fixed glitch with pixel-perfect click detection at edges of sprites.
 - Fixed idle animations with following characters.
 - Fixed text colors when running at 15-bit.
 - Fixed lack of border around standard text window.
 - Fixed idle animations kicking in when they shouldn't.
 - Fixed Any Click response scripts overriding earlier interaction scripts.
 - Fixed DOS engine leaving artifacts when moving from 320x240 to 320x200.
 - Fixed some issues with extra animations playing after ReleaseCharView.
 - Fixed MP3 music skipping in ShakeScreen and during room loading.
 - Fixed repeating multi-loop animations jumping back to wrong frame.
 - Fixed clicking at current location stopping idle animation.
 - Fixed wait cursor not appearing when clicking option in dialog.
 - Fixed various pathfinder issues.
 - Fixed text in normal dialog box being transparent.
 - Fixed LEC inventory not updating when scrolling up/down in list.
 - Fixed users typing [ into text boxes.
 - Fixed SetCharacterWalkBehinds going in front of characters.
 - Fixed SetCharacterIdle not kicking in for a second.
 - Fixed "Error initializing sound" when "No sound" selected.
 - Fixed speech being left on screen if followed by normal textbox.
 - Fixed backspace not working in input boxes.
 - Moved dialog options window across to right when using full-screen pics.
 - Restricted FileOpen to only allow access to files in game directory.
 - Disabled F1 in roomedit because it could crash the program.

VERSION 2.3, January 2002
NOTE: This version of AGS has undergone major changes, and so the engine can
no longer run old games. You need to load and save your game in RoomEdit to
update it.
 - New pathfinder, which should generate better routes.
 - Added ability to call global script functions directly from local scripts,
   and script header file. See section 4.4.2 in the manual for information.
 - Added basic text parser, works similarly to the AGI one. See section 4.6
   in the manual for more information.
 - Added List Box GUI control.
 - Added ChangeCursorGraphic, GetCharacterAt, GetGUIAt, GetGUIObjectAt,
   IsGUIOn, IsKeyPressed, ListBoxAdd, ListBoxClear, ListBoxDirList,
   ListBoxGetItemText, ListBoxGetNumItems, ListBoxGetSelected,
   ListBoxSaveGameList, ListBoxSetSelected, MoveToWalkableArea, ParseText,
   RawClearScreen, RawDrawImage, RawDrawLine, RawDrawTriangle, RawPrint,
   RawRestoreScreen, RawSaveScreen, RawSetColor, RunCharacterInteraction,
   RunHotspotInteraction, RunObjectInteraction, Said, SaidUnknownWord,
   SetCharacterBaseline, SetCharacterIgnoreLight,
   SetCharacterIgnoreWalkbehinds, SetObjectClickable,
   SetObjectIgnoreWalkbehinds, StopMusic and TintScreen text script
   functions.
   Removed CallGlobalScript, CaptureScreen, CapturedPrint and EndCapture as
   they are now obsolete.
 - Optimised GUI drawing to eliminate LEC-style slowdown.
 - Added on_event text script event function, to let you have a common script
   to be run whenever the player enters a new room, and so on. Manual 4.4.1.
 - Added option to make characters turn to face the new direction before
   starting to walk.
 - All background music MP3 files can now be put into a special MUSIC.VOX file,
   similar to the way SPEECH.VOX works.
 - Finally fixed the sound selection list boxes in AGSWin setup.
 - Sierra-style inventory now scrolls if there are too many items to fit, and
   right mouse button cycles between Select and Look modes.
 - Added QFG4-style speech (black screen with talking view on left hand side).
 - Added "ignore lighting" and "no turning" character options to roomedit.
 - FaceLocation/FaceCharacter now use diagonal loops where available.
 - AGSWin now integrates itsself into explorer so you can double-click .AGS
   files to run them. This means you can rename AC2GAME.DAT to YOURNAME.AGS
   and double-click it to run the game.
 - Added (INVNS) which does the same as (INV) except that it does not stretch
   the item picture.
 - Added inventory interactions to unhandled_event.
 - Added game.total_score text script variable.
 - Edges of text windows can now be transparent.
 - If the mouse cursor has been changed from the default for the current mode,
   the wait cursor will not show when Wait() is called.
 - Save games can now be loaded if the VOX file has been added/deleted since
   the position was saved.
 - Upped limit to 19 hotspots (sorry, quick fix, more later).
 - Roomedit now allows cycling through all skip speech modes.
 - Pressing key does not now skip speech text if the icon bar is popped up.
 - Idle loops are no longer chosen at random - instead, the character's
   current loop number is used.
 - Added script header file, which is included into all scripts to prevent
   having to manually import functions into every room.
 - Added new-room dialog script command.
 - Fixed script problem with importing strings and using arrays.
 - Character export/import now deals with idle views.
 - Added "top-right" and "bottom-right" transparent corner for sprite import.
 - QFG4-style speech window now shrinks text window to fit text.
 - Speech text uses GUI fgcol instead of character talk color if a background
   text window is used for speech.
 - Changed the way Test Game works, to help with bugs when return to roomedit.
 - Fixed hi-colour PRELOAD.PCX not being shown.
 - Fixed "Object 9 can't move".
 - Fixed MP3 volume not being altered if the track is currently playing.
 - Fixed demo game using LEC interface for dialog options.
 - Fixed GetMIDIPosition returning -1 when a song was playing.
 - Disabled Ctrl-V while speech text is displayed.
 - Fixed text color problem in 15-bit colour.
 - Fixed SetGUIPosition in large (>320x200) rooms.
 - Fixed SetObject/CharacterTransparent with full transparency level.
 - Fixed AnimateCharacter if an idle loop was running at the time, and other
   idle animation problems.
 - Fixed transparent edges for text windows.
 - Fixed nasty crash on startup in Win engine.
 - Fixed problem going to 640x400 from 640x480 full screen room.
 - Internal info: upgraded both engines to Allegro 4.0 (from 3.1 DOS & 3.9.37
   Win) and switched to using ALMP3 v1.5 MP3 player.

VERSION 2.22, December 2001
 - Added GetMIDIPosition, IsButtonDown, SeekMIDIPosition, SetObjectBaseline,
   SetNormalFont, SetSpeechVolume, SetSpeechFont and SetSpeechStyle text
   script functions.
 - Added add-inv, set-speech-view dialog script functions.
 - Added Text Box GUI control.
 - Added text dumper to roomedit, to allow easy game translation and
   spell-checking.
 - Added option for QFG4-like dialog options display (ie. in text window).
 - Added option to draw text box behind sierra-style speech, aka KQ6.
 - Added ability to set hotspot for inventory mouse cursors.
 - Added "Jump to view" button to Visual, Views tab in roomedit.
 - Added buttons to change zoom level by +/- 1 as well as +/- 5.
 - Added safety checks to file I/O functions to stop engine crashing
   if invalid data is supplied.
 - Added game.following_room_timer, game.speech_text_gui, game.swap_portrait
   and game.text_shadow_color script variables.
 - Added F12 to take screenshot in roomedit.
 - Added option to PlayFlic to turn off stretching to full screen.
 - Added system.windowed script variable.
 - Added datadir section to acsetup.cfg to allow data files to be loaded
   from alternate directory (eg. CD-ROM, etc).
 - Upped GlobalInts to 300.
 - Upped vox file limit to 2000 files.
 - Upped to 20 SetTimers for the script.
 - Jibbled following characters a bit so if you don't join on a screen edge,
   they will appear where the player entered a few seconds later.
 - Text window background is now used when specifying it for dialog options.
 - Changed music search order to MP3, WAV, MID, MOD, XM.
 - Split resource files (.001, .002, etc) are placed in parent folder.
 - Windows engine will now continue anyway if it can't init sound.
 - Disabled Ctrl+V during Wait() statements cos it could desync the music.
 - Colour 0 for dialog options GUI now does transparent.
 - Fixed SetCharacterClickable.
 - Fixed cursor staying on old item after combining items.
 - Fixed S3M's not being included in EXE.
 - Fixed SetScreenTransition's effect only lasting for one transition.
 - Fixed mouse cursor animate only over hotspot problem in 640x400.
 - Fixed graphic overlay positioning at different resolutions.
 - Fixed mp3 skipping when mouse button held down in save/restore dialog.
 - Fixed SetAreaLightLevel adjustments not being saved in save games.
 - Fixed mouse cursor not skipping speech text if over GUI.
 - Fixed random idle loop being chosen if it is a continued long animation.
 - Fixed cursor changing back to arrow after looking at item in Sierra inv.
 - Fixed pressing extended keys (eg F1-F10) when message displayed and
   while room loading.
 - Fixed message editor being all caps (in 2.22 beta)
 - Fixed SetObjectBaseline (from 2.22 beta4)
 - Fixed the Debug Give All Inv function giving you item 0.
 - Fixed "table overflow" when having over 200 functions in global script.

VERSION 2.21, August 2001
 - Added Debug option to display FPS during game.
 - Added windowed option for Windows engine
 - Added GetObjectGraphic, IsTimerExpired, IsVoxAvailable, SetAreaLightLevel,
   SetInvDimensions, SetRestartPoint, SetTimer and WaitKey text script
   functions.
 - Added ability to delete GUI objects.
 - Inventory items are listed in the order the player picked them up.
 - Changed display initialization to hopefully fix colour problems.
 - Less severe errors (eg. "sound not found") are now logged to a WARNINGS.LOG
   file in the game directory, rather than quitting the engine.
 - Rewrote a lot of code to avoid slowdowns in 15-bit colour mode.
 - Made SetPlayerCharacter not change room if the new character is in the
   current room.
 - Added "no timeout; only on mouse-click" option to SetSkipSpeech.
 - Added "press any key or click mouse to skip" option to FLIC player.
 - Re-instated NewRoom in dialog_request.
 - The music volume is now decreased while speech is played.
 - If there is a compile error, it cancels the quit in roomedit
 - Changed SetSoundVolume to not affect MP3/XM files.
 - Made save game slots >=100 not appear in save list.
 - Fixed game instability when rooms over 600 height were used
 - Fixed sound issues with restoring a save game.
 - Fixed problem with character[].name in text script.
 - Fixed character scaling as he walks off the screen.
 - Fixed MP3 not playing during FLIC animation.
 - Fixed script problem with character names in strings.
 - Fixed PRELOAD.PCX looking all messed up.
 - Fixed multi-loop object animations not cycling back to first loop.
 - Fixed scaling when character walks into non-walkable area.
 - Fixed script not allowing negative initial values for variables.
 - Fixed "No save/load" room setting to now block the save and restore.
 - Fixed music volume spiking in between two speech lines.

VERSION 2.2, May 2001
NOTE: There have been major under-the-hood changes to AGS this version, so
unfortunately you'll need to upgrade all your room files. To do this, load
each one into RoomEdit and save it again. Sorry.
 - Completely re-written text script compiler and interpreter. Let me know
   if you have any problems with scripts that worked before.
 - Added option to split up resource files.
 - Added DisplaySpeechBackground, IsMusicPlaying, IsObjectAnimating,
   MergeObject, SetCharacterTransparency, SetInvItemPic, SetScreenTransition
   and UpdatePalette text script functions; removed SetPalette and GetPalette.
 - Corrected GetObjectAt (and consequently the built-in hit-testing) behaviour
   when there are two objects on top of each other - now it should always
   pick the one that's visible on top.
 - Added "Dissolve" screen transition.
 - Increased sprite limit from 1900 to 5000.
 - Overlays are now correctly restored when loading a save game position.
 - Added option to make a GUI non-clickable for transparent overlay GUIs.
 - Added unhandled_event type code 4, which occurs when the player clicks
   on nothing (ie. no object, character or hotspot at the location).
 - Added "Cancel" option to roomedit's "save changes?" dialog, and also
   made it appear if you load a new room in.
 - Added option to export sprite slot graphics.
 - Added SCI palette importing.
 - Fixed bug with tiled sprite imports.
 - Fixed crash when adding 50 buttons to the GUI, and upped limit to 80.
 - Fixed positioning of dialog topic options when not locked to GUI position.
 - Fixed VOX corruption with >200 files.
 - Fixed GUI transparent background pictures coming out pink, and offset of
   background images being wrong.
 - Fixed mouse area bug in Windows engine at full-screen 320x240.
 - Fixed SetButtonPic not updating until mouse moves over it.
 - Improvements to Windows engine, including it now cleans up its temp files.

VERSION 2.15 SR-3, March 2001
 - Added GetGameSpeed, MoveCharacterBlocking, SetWalkBehindBase text script
   functions.
 - Added option to have bullet-point graphic for dialog options.
 - Auto-speech now works with standard Display() command (uses player
   character's voice).
 - Fixed Windows engine page fault on startup, and fixed mouse detection.
 - Fixed DisplayMessage error with inventory events.
 - Fixed '[' being displayed sometimes instead of forcing new line.
 - Fixed multi-loop talking view getting stuck on last loop.
 - Fixed interaction window going wrong colour.

VERSION 2.15 SR-2, March 2001
 - Added SetCharacterClickable, StopDialog text script functions.
 - Added game.sierra_inv_color text script variable.
 - Now any room >= 640x480 will be full-screened in letter-box mode, allowing
   full-screen scrolling 640x480-res rooms.
 - RoomEdit now displays the room co-ordinates at all times in the bottom-
   right hand corner, so you don't need to use Ask Position.
 - Made NewRoom give an error message instead of crashing if called from
   the dialog_request function.
 - Speeded up room loading a bit.
 - Fixed bug where clicking and dragging off pop-up GUI button paused game.
 - Fixed GUI "Set Mode 4" to work correctly when the player has no inventory.
 - Fixed character frames being reset on restore game.
 - Fixed talking views to allow having one loop only for all directions.
 - Fixed go-to-next-loop to work in sierra-style speech windows.
 - Fixed losing first and last character on the line when using '[' symbol.
 - Fixed sierra-style speech text coming up at random positions.
 - Fixed NewRoom in game_start loading first room twice.

VERSION 2.15 SR-1, February 2001
 - Added MP3 support to Windows engine, thanks to Javier Gonzalez.
 - Added option to stop current sound effect: call PlaySound(-1);
 - Added text script functions GetHotspotAt and GetObjectAt.
 - Finally fixed walking speed 1. I think.
 - Fixed it so clicking the hotspot 0 (the background) doesn't trigger
   unhandled_event.
 - Fixed audio CD continue playing after exit.
 - Fixed speech going off the top of the screen.
 - Fixed memory leak in room-switching code.

VERSION 2.15, February 2001
 - Added auto-speech support (see section 4.1.1 in the docs).
 - Added support for transparent objects (hi-color only at present).
 - Added FollowCharacterEx, SetObjectTransparency, SetSkipSpeech and
   SetVoiceMode text script commands.
 - Added MOD/XM support to Windows engine.
 - Added feature so that in letter-box mode, 640x480 scenes are full-screen.
 - Added a way to link loops together to create animations with more frames.
 - Changed positioning of speech text so it's always above the character.
 - Removed dithering feature from RoomEdit graphic importing.
 - Fixed prevroom text script variable for following characters.
 - Fixed "DisplayMessage: data column..." error with graphical scripts.
 - Fixed rare crash when restoring save game.

VERSION 2.14 SR-5, February 2001
 - Stopped SetCharacterView/SetObjectView changing the loop number to 0.
 - Made ReleaseCharacterView fix the loop number if it would turn into a cup.
 - Added option to import exact palette slots for scenes (no remapping).
 - Fixed color screwup when importing 256-colour sprites into hi-col game.
 - Fixed Characters scroll bar in roomedit.
 - Fixed bug with 15 folders in sprite manager.
 - Fixed "First time enters screen" happening before the fade-in.
 - Fixed pixel-perfect click detection in hi-color.

VERSION 2.14 SR-4, February 2001
 - Added option for mouse cursor to animate only when over a hotspot.
 - Added text script functions GetObjectX/Y, GetViewportX/Y.
 - Fixed problem with walking speed 1 jumping to destination.
 - Fixed problem with scripts in Player Enters Screen.
 - Fixed restore game problem.

VERSION 2.14 SR-3, February 2001
 - Added FollowCharacter and SetCharacterIdle text script commands.
 - Added idle animation support.
 - Increased max views from 100 to 200.
 - Fixed bug with room change in repeatedly_execute.
 - Fixed problem with non-blank first frames in FLC files.

VERSION 2.14 SR-2, February 2001
 - Added "Player leaves screen" room event.
 - Added "Other click on inventory" inventory item event.
 - Added SetActiveInventory text script function.
 - Fixed problem with screen being visible on "Player enters screen" event
   in hi-colour.
 - Increased max dialog messages from 900 to 2000.
 - Roomedit creates a backup of your sprite file in case there is a problem
   loading the new one.
 - Fixed MIDI music.

VERSION 2.14 SR-1, January 2001
 - Added text script function IsSoundPlaying.
 - Added "GUI unchanged when disabled" option, which doesn't grey out
   or remove any buttons when the user input is disabled.
 - RoomEdit now generates a custom SETUP.BAT, replacing the old "AC.EXE"
   calls with your game's EXE name. This should make it a lot less confusing.
 - MP3 music now takes priority over MIDI music, so you can include MP3 files
   in a seperate zip file which users can optionally download and hear better
   quality music.
 - Fixed Text Window checkbox missing in GUI Setup.
 - Fixed problem with MoveCharacterDirect and off-screen co-ordinates.

VERSION 2.14, January 2001
 - Added slider control type to GUIs (see section 4.2.5 in the manual).
 - Added text script functions GetSaveSlotDescription, GetSliderValue,
   MoveCharacterStraight, ReleaseViewport, ResetRoom, RestoreGameSlot,
   SaveGameSlot, SetSliderValue and SetViewport.
 - Added ability to set light levels for walkable areas - see section 3.3.6
   in the docs for info.
 - Increased max overlays to 8 at a time instead of 3.
 - Outline fonts on GUIs now work.
 - Added ability to use custom icon for Windows EXE file - see section 4.3.1
   in the docs for info.
 - The "you are carrying nothing" message is now taken from global message 996
   rather than from the language file, which allows you to customize it.
 - Fixed character carrying on moving when talking if no talking view.
 - Added ability to specify character in Data column for global messages.
 - Added control panel to demo game, and fixed lockup with the slime.
 - Roomedit now remembers which folder you were in for each different type
   of file, so you don't save a room file to your scene folder by accident.
 - The GUI editor now displays the control type in the properties box.
 - Changed the "Load_Room: File not found" message to be more descriptive.

VERSION 2.13 SR-3, December 2000
 - Fixed MoveObjectDirect not working.
 - Fixed "INI_Lib" error message problem.
 - Fixed inventory window messing up after combining two items.
 - Fixed sierra-style speech window staying up after finished talking.
 - Fixed crash when deleting some room script functions.
 - Fixed importing walkable area mask bitmap in hi-colour games.
 - Fixed arrow keys and F11/F12 in Windows engine.
 - Fixed problem with mouse cursor staying as pointer when over GUIs.

VERSION 2.13 SR-2, December 2000
 - Added option not to use diagonal frames for characters.
 - Fixed FLC playing problem in hi-colour.
 - Fixed restore & restart game bug.
 - Removed ability to use local messages in global interactions, since they
   weren't supposed to work anyway.

VERSION 2.13 SR-1, November 2000
 - The Windows engine now uses your game's name instead of "Adventure Game
   Studio" in the title bar.
 - Fixed problem with the wrong walking loops being chosen.
 - Fixed problem with Windows engine not playing sound effects.
 - Fixed problem with FLC player.
 - Fixed roomedit returning from Test Game mode.

VERSION 2.13, November 2000
 - Windows engine is finally complete!
 - Increased local message limit to 100 per room.
 - Removed inventory item 0 since it didn't work.
 - Added text script functions CreateGraphicOverlay, GetBackgroundFrame,
   MoveObjectDirect, SetTextOverlay, FileReadRawChar, FileReadRawInt,
   SetGUIPosition.
 - Roomedit now converts all imported sprites to the game's color depth,
   and also keeps 256-colour sprites looking good when imported into a hi-
   color game.
 - Added diagonal walking animation support for characters. See section 3.2.7
   in the manual for which loop means which direction.
 - Added ability to specify game data file on command line.
 - Added ability to display current inventory item on GUI button.
 - Added option to not scale up fonts in high resolutions.
 - The current MOD track is now saved in the save games.
 - Fixed problem with walk-behinds in animating background rooms.
 - Fixed crash in roomedit with Edges and Ask Position.
 - Fixed save game bug where current frame of background wans't saved.
 - Fixed dialog positioning problem when roomedit runs in hi-resolution.
 - Fixed animation editor Set object view problem with main character.
 - Fixed crash when clicking in empty list box in Save Game dialog.

VERSION 2.12, August 2000
 - Added text script functions GetTime, SetButtonPic, StringToInt,
   CreateTextOverlay, MoveOverlay, RemoveOverlay.
 - Added "narrator" as a character name to dialog script, to enable you to
   have lines of dialog in the pop-up box rather than as speech text.
 - Roomedit now makes a backup of your sprite set before saving, so you don't
   lose much if it (very rarely) crashes.
 - Roomedit now tries more screen resolutions, should avoid "cannot setup
   display mode" error.
 - The currently playing music is now saved in the save games.
 - Fade Out now works in hi-colour (fade in doesn't yet though).
 - Fixed black covering background when using Undo.
 - Fixed icon bar popping-up briefly at start of game.
 - Fixed transparent Sierra-style text windows in hi-colour.
 - Fixed mouse bounding at bottom of screen in roomedit in hi-colour.
 - Fixed "goto-dialog 0" not working.
 - Fixed pink background of hi-colour objects in inventory.
 - Fixed bug in AreCharactersColliding with hi-res mode.
 - Fixed bug where 640x400-sized 320x200-res scrolling rooms didn't scroll.
 - Fixed bug where mouse cursor wasn't reset after using last of inventory.

VERSION 2.11 SR-2, July 2000
 - Fixed non-transparency when using hi-colour frames for character.

VERSION 2.11 SR-1, July 2000
 - Allowed numerical digits in game name as well as letters.
 - Fixed mouse cursor disappear after testing game in hi-color.
 - Removed floppy drives from Open dialog box, to stop Win2k slowdown.

VERSION 2.11, July 2000
 - RoomEdit now runs at your game's color depth, so you can see what all
   the graphics look like properly.
 - You can now use any color (not just the first 16) for GUI colours: take
   a look at the Palette screen and you can find out the number for a custom
   colour of your own.
 - Fixed import GUI and character bug with hi-colour graphics.
 - Fixed bug with importing animating hi-colour backgrounds.
 - Added Bulgarian translation by Alexander Alexandrov.
 - Added Slovenian translation by Janez Kranjc.

VERSION 2.1, July 2000
 - New text script functions SetCharacterSpeed, SetTalkingColor,
   AreCharactersColliding, DisableHotspot, EnableHotspot, StrFormat,
   FlipScreen, SeekMODPattern, InputBox, GetLocationType, CallGlobalScript
 - Added hi-color (16-bit colour) support - see section 3.2.11 in the manual
   for information.
 - Added room interaction event "Any click on object".
 - Added "pick up" as an extra normal mode - you can, of course, use it
   to mean whatever you want. Cursor mode 5 ("DENIED") represents it (mode 5
   is no longer used by the engine so it's spare for this use).
 - Added special tokens for use in global and room messages, which allow
   you to insert variable values into the message. See section 3.2.4 in the
   manual for how to use these.
 - Added "don't automatically lose inventory" option, which turns off the
   default behaviour of losing the item when a "Use inventory" event happens.
 - The unhandled_event function is now called when the player uses an
   unhandled inventory item on a hotspot/object (previously it was only
   called if there was no "Use inventory" response defined).
 - Added ability to import tiled sprites from a source bitmap file. See
   section 3.2.3 in the manual for how to use this feature.
 - Added "Test game" button to Game, Main tab of roomedit, which shells AGS
   and runs your game without you leaving the editor.
 - A Lucasarts-style GUI is now included in the AGS distribution - just import
   the LUCASART.GUI file to use it. Thanks to Jeremie Lumbroso.
 - New game has 1 dialog topic by default (stops bug where if you didn't
   create a topic, but added options then saved it was lost).
 - Fixed bug where hi-res sprites in GUI editor showed up double size.
 - Fixed crash in Characters tab when displaying views with >4 loops.
 - Random now returns number from 0 to MAX instead of (MAX-1).
 - Added Polish translation by Jakub Offierski.
 BUG FIXES SINCE v2.1 PREVIEW RELEASE:
 - Fixed walk-behinds in hi-colour rooms.
 - Fixed import/export GUI and import/export character with hi-color graphics,
   plus it now exports the GUI script as well as layout.
 - The pink background is not shown in roomedit with hi-color room objects.
 - Fixed cursors tab in roomedit with hi-color cursor.

VERSION 2.07 SR-4, May 2000
 - Fixed object drawn behind walk-behinds when it shouldn't be.
 - Fixed NewRoomEx (actually fixed this time) with invalid exits.
 - Fixed InterfaceOff screwing the game up if the interface was already off.
 - Fixed screw up with save/load when using different player character.

VERSION 2.07 SR-3, May 2000
 - Fixed object drawn behind walk-behinds when it shouldn't be.

VERSION 2.07 SR-2, May 2000
 - Added "unhandled_event" text script event, allows processing of events
   which the Interaction window doesn't handle.
 - Fixed problem with New Game, where the interface script wasn't set up
   properly.
 - Fixed NewRoomEx, to allow co-ordinates above 320x200 on scrolling rooms.
 - Fixed sprite import in hi-res screwing up palette.
 - Fixed "Add new font" crashing roomedit.

VERSION 2.07 SR-1, May 2000
 - Added text script functions ShakeScreen, SetMusicMasterVolume and
   SetSoundVolume, RemoveWalkableArea, RestoreWalkableArea
 - Added option to dialogs for the character to not say the option clicked.
 - Added option to not change inventory cursor to the item's graphic.
 - Right-clicking an inventory item in the lucasarts-style inventory now
   simulates a left-click in Look mode.
 - Slightly modified speech display, so it's always above the character's
   head instead of on top of it.
 - In dialog, if the character's speech colour is the same as the highlited
   option colour, the highlight colour will be changed to purple.
 - Fixed bug with running text scripts for inventory items.
 - Fixed bug where "Buttons off when disabled" didn't work.

VERSION 2.07, April 2000
 - Completely re-written interface system - now called the GUI system instead.
   You may need to make some changes for your game to continue working with
   this version - see section 4.2.5 in the manual for what's changed.
 - Added text script functions GetCurrentMusic, SetMusicRepeat,
   SetMusicVolume, MoveCharacterDirect, ChangeCharacterView, PauseGame,
   UnPauseGame, LoseInventory, SetLabelText, FileWriteInt and FileReadInt.
 - Fixed bug where forward frame was displayed breifly whenever you walked
   anywhere.
 - Fixed bug with hit-testing on scaled characters.
 - Fixed bug with "import new" and 640x400 sprites in roomedit.
 - Fixed the "room data segment size has changed" bug.
 - Roomedit now gives error message instead of quitting if a background
   import fails.
 - Fixed bug where character kept on moving while in talking view for speech.
 - Fixed bug where DisableInterface/EnableInterface didn't work.
 - Slightly improved room loading time.
 - Stopped the engine printing "File not found" when exiting game.
 - Added S3M music support.
 - Added technical info, for the programmer types out there. (techinfo.txt)
 - AGS now has a domain name: www.adventuregamestudio.co.uk
 - Removed the Windows version until I can sort out the bugs in it.

VERSION 2.06 SR-1, March 2000
 - Added support for importing JASC (Paint Shop Pro) palette files.
 - Fixed bug where roomedit crashed if your game contained more than 80 files.

VERSION 2.06, March 2000
 - Added character numbers, so that characters can be moved/animated using
   the Animation Editor. Just use the character's number +100 as the object
   number. For example, use "Move To 100,50" with Object as 102 will move
   character 2. The Character Editor shows the character numbers.
 - Finally fixed the text size in high-resolution modes.
 - Added scroll bar to character editor, so you can now have up to 50 instead
   of 15 characters.
 - Added "Enters screen after fade-in" event, which works like the "Player
   enters screen" event except that it occurs after the screen has faded in.
 - Added text script functions AreCharObjColliding, Wait, DisableInterface,
   EnableInterface, SetBackgroundFrame, SetGlobalInt, GetGlobalInt.
 - Added option for instant-change between rooms instead of fading.
 - RoomEdit now remembers the last directory you were in with the file
   selector, instead of always resetting to the game directory.
 - Added 320x240 and 640x480 letterbox-mode option.
 - Added WAV background music support.
 - Fixed bug with CDAudio that was causing crashes.
 - Fixed bug which crashed sometimes when speech was displayed.
 - Fixed bug which gave screenful of cups in sprite manager (I think...)
 - Removed the "delete sprite" option because it was causing too many
   problems. To delete a sprite, simply import a 1x1 sprite on top of it.

VERSION 2.05 SR-2, February 2000
 - Fixed bug in roomedit with animating backgrounds
 - Allowed to get back into roomedit if error with dialog script; however,
   you must fix the error before you can save the game.
 - Fixed bug with animating background scenes in usergame.exe

VERSION 2.05 SR-1, February 2000
 - Added Undo feature to roomedit.
 - Added option to import/export dialogs to roomedit.
 - Fixed bug with full-screen preview in roomedit at 640x400 resolution.

VERSION 2.05, February 2000
 - Added animating background support! See section 3.3.5 in the docs.
 - RoomEdit now uses a crosshair mouse cursor when drawing walk-behinds and
   hotspots, to enable you to better see what's under the cursor.
 - Added support for importing a BMP/PCX file as the mask for hotspot/walk-
   behind/etc. See section 3.3.4 in the manual for information.
 - Added support for export/import of characters, which allows you to share
   characters between games and with others on the internet. The end of
   section 3.2.7 in the manual describes this.
 - Added support for importing JPGs as background scene.
 - RoomEdit now allows scrolling up/down the inventory list, so you can have
   more than 15 inventory items (max 99 now).
 - Customizable text speech speed - see the  game.text_speed  global variable
   description (section 6.4 of the docs).
 - Fixed bug where Sierra-style inventory window messed up in various
   circumstances.
 - Improved the room loading speed.
 - Added text script functions SetObjectPosition and AreObjectsColliding.
 - Added GetPalette and SetPalette text script functions, to allow you to
   do things to the entire palette. New variable type "palette", which you
   use with these functions.
 - Added Italian translation by Mario.
 - Removed the room password option: it was a left-over from AC v1, and now
   that you can build an exe file of your game, it's not really needed.
 - NOTE: The Windows version has not been updated to 2.05 - the included
   acwin.exe is still the v2.04 version. This is due to time constraints and
   pressure to release 2.05 as soon as possible; the Win version still has
   the room changing bug, so it's not worth including until I work on that.

VERSION 2.04, January 2000
 - Added Sierra-style close-up-face option for speech display in conversations.
 - Added object naming, so that moving the mouse over objects in a Lucasarts
   interface displays a proper name, instead of "OBJECT 0".
 - Added option to make a character invisible to the hit-testing, so that the
   main character can't be interacted with (like the Lucasarts games).
 - Added pixel-perfect click detection option, so that clicking a transparent
   pixel of an object/character doesn't trigger the interaction.
 - Added option to use top-left pixel of sprite as transparent colour instead
   of just colour index 0.
 - Added support for using a background picture for text windows. To use this,
   just go to your text-window interface in the Interface Editor, then right-
   click the background, choose Properties, then click the "COL/PIC" button
   and type the slot number you want to use. The picture will NOT be tiled
   or stretched (but it will be clipped to fit the window), so you should make
   sure it is large enough for the biggest text windows (about 250x100 should
   be enough).
 - Added ability to delete sprites in the Sprite Manager.
 - Added SaveScreenShot text script function.
 - Added option to treat Walk mode as a normal mode, so that the character
   isn't automatically moved but instead a normal event is triggered when
   you click to move.
 - Modified RoomEdit so that when you click a "Display Message" interaction
   command, it provides a list of messages in the room to choose from, instead
   of prompting you for the message number. If there are no messages it will
   ask for the number, just like before (this means you can still set up the
   interactions before actually typing the messages in, if you want to).
 - Fixed bug where the player lost the inventory item when Data 99 was used.
 - Made some improvements to the beta of the Windows version.

VERSION 2.03, November 1999
IMPORTANT: Your game, and all your room files, need to be upgraded to use the
latest version. To upgrade, simply load and save in the Room Editor. You must
do this for EVERY ROOM in your game. Sorry, but it's to support the upcoming
Windows version.
 - Allowed creation of very wide (eg. 700x200) lo-res scrolling rooms.
 - New text script functions MoveCharacterToHotspot, DisplaySpeech, NewRoomEx.
 - Lucasarts-style inventory window.
 - Changed background importing - now, it just asks what resolution the
   drawing is supposed to be, instead of trying to work it out. This allows
   scrolling rooms of any size in any resolution.
 - Changed the way the Room Editor works with games - instead of running it
   from the directory which the game is in, it creates each game a
   sub-directory below the main RoomEdit/AGS directory. This makes it much
   easier to edit the demo game, and should solve problems with files not
   being found and so on. What this means for you is that if you are working
   on a game with its files in the RoomEdit directory, create a sub-directory
   and copy all your game files (*.crm, ac2game.*, etc) into it.
   Another result of this is that the usergame.exe is now called by the game
   directory's name, and placed in the main AGS directory.
 - Non-player objects can now be moved with the animation command "Move to",
   and also with a new text script command MoveObject.
 - Added graphical script command "Run dialog" (it's under "Remove object" if
   you can't find it).
 - Added "Save room" as well as "Save room as" to Room Editor. This option
   saves back to the same file you loaded from, which is quicker than having
   to select the right file to save to every time.
 - Slightly modified the background scene remapper: it now puts the background
   colours starting from the end of the palette and working backwards; this
   makes it easier if you want to increase the number of sprite colours part
   way through making a game. Otherwise this change is transparent to you.
 - Added ability to "lock" objects in the Room Editor. While an object is
   locked, it cannot be moved around the screen. Useful if you keep getting the
   wrong object when you're trying to move a different one.
 - Increased a few limits: now 100 views, 200 dialog topic, 900 dialog messages.
 - Fixed bug where "music0.mp3 not found" flashed on the screen breifly.
 - Fixed the interface text @overhotspot@ to include object & character names.
 - Included beta version of Windows port! See AGSWIN.TXT for information.

VERSION 2.02, September 1999
 - Fixed bug where you were unable to save the game.
 - Character names can use lower case
 - New option "Player can't skip speech" prevents the player clicking away
   conversation text, like the way the Lucasarts games won't let you.
 - Character walks to the walk-to point of a hotspot in Walk mode (as well
   as use/speak mode). This makes it more like the Lucasarts interface.
 - Fixed SCI font importing bug, and added an Auto-Recover feature so that if
   it does crash in future, then it won't permanently disable the Fonts tab.
 - Added sprite import support for 640x400-resolution object graphics.
 - Added crash protection to the StrCat function, so that it won't add text
   past the maximum string length instead of crashing the system.
 - New MIDI driver: Software wavetable synth, uses the digital sound driver
   to play MIDI music using General MIDI patch set. By using this driver, your
   MIDI music can sound the same on ALL sound cards. See section 2.2.1 in the
   docs for information.
 - Changed the way that the mouse cursor hotspot setting works - it's clearer
   what's going on now.
 - Added engine debugging options. See the TECHDBG.TXT file for information.

VERSION 2.01, September 1999
NOTE: You will need to upgrade your game to use the new engine. To do this,
simply load the game into the Room Editor and then save it again.
 - Characters can now have a Talking view, which allows animation in dialogs
 - Fixed bug in dialogs where various messages screwed up
 - Fixed bug where interface text color was always black
 - Dialog options can now wrap to more than one line
 - Hotspot names can be longer and use lowercase
 - Fixed scaling bug where he sometimes popped up full-size briefly
 - Fixed crash if you pressed a key while in a conversation
 - Fixed background importing bug where colour index 0 screwed up
 - Added custom font support; but currently, you can only import SCI fonts.
 - Added graphical script command "If inventory %d was used"; allows you to
   use graphical scripts with Data-99 inventory events.
 - Documented RunDialog text script function
 - In View Editor, setting graphic for new frame zooms to previous frame's
   graphic in sprite list
 - User-defined gap between display of options in conversations
 - Interface button properties has "..." button to link to script editor if
   the left-click action is set to Run Script.
 - You can export the palette to PCX as well as PAL file.
 - When saving game, RoomEdit also checks for AC.EXE in the roomedit.exe
   directory as well as the current directory. So editing the demo by typing
   ..\roomedit will allow it to compile properly.
 - Fixed game loading bug where the graphical script timer wasn't restored
 - Allowed 320-width sprite import in room editor (if you drag the rectangle
   to screen width, it imports what's under the rectangle border as well as
   what's inside).

VERSION 2.00, September 1999
Complete re-write of both the Room Editor and the engine. Some of the new
features are:
 - Character scaling: man can get smaller as he walks away from the screen.
 - Customizable interface: you're not stuck with the Sierra one any more.
 - Non-player characters supported - this allows you to have other characters
   roaming the world and keep track of where they are.
 - Animating mouse cursors supported.
 - Scrolling rooms.
 - Conversations, like in Lucasarts games, with easy-to-use Dialog Editor.
 - Conditions for clicking on player character - you no longer have to display
   a message.
 - Much more powerful text script: you can do a lot more with it.
 - Increased max loops per view to 8 instead of 4.
 - Customizable walking speed for main character.
 - Baselines for objects, useful for objects lying flat on the ground, so that
   the man doesn't walk behind them.
 - You can change the icon bar graphics.
 - You can build a single EXE file for your game. This goes one step further
   than the data file you could build in the last version.
 - Improved remapping of scenes and sprites, solves most of the palette
   problems people were having with importing their graphics.
 - Clarified LICENSE.TXT. You should read the new license agreement.

VERSION 1.14a, May 1999
 - Fixed bug with Lose Game where the LOSE.PCX wasn't being shown, and it
   called it an "internal error".
 - Fixed bug where the engine refused to run if you didn't have a sound card.
 - Added German and Dutch translations by Erix Designs, Spanish translation by
   Ernesto Couso Artiles, and French translation by Pierre-Marc Jobin.
 - The introduction messages are now translated.
 - Fixed graphical script bug, where the flags weren't always initialized to
   the CLEAR state.
 - Fixed "sound2.voc not found" in the Showoff demo game.

VERSION 1.14, April 1999
NOTE: You will need to re-compile games made with previous versions.
NOTE: Old save game positions cannot be loaded.
 - Complete overhaul of the text script system. If you were using text
   scripts, see section 3.8.5 for how to upgrade. Many new commands and
   built-ins are available, see section 4.4 in the docs for a complete list.
 - You can now change the main character's graphics within different areas
   of the same screen. Section 3.13.1 in the docs describes this.
 - You can customize the score sound and the red-X sound. See ScoreSoundCustom
   and ErrorSoundCustom in section 4.1 of the docs.
 - Added support for customizable borders for the text windows. Section 4.1.1
   in the docs explains how to use this feature.
 - Added option to move man as close as possible to destination instead of
   displaying red X. See "MoveNearest" in section 4.1 of the docs for info.
 - Added XM music support. See section 3.2 of the docs.
 - The intro system has been changed. Now, the games starts in INTRO.CRM if
   it exists rather than displaying PIC1.PCX. See section 3.15 in the docs.
   The demo game intro now has two screens.
 - You can now change music volume on a per-room basis. This allows you to
   have, for example, quieter music outside a building than when the player
   enters it (like with the shops in the arcade in SQ4).
 - New graphical script commands: "Start timer", "when timer expires" and "move
   man to object". See section 4.6 in the docs.
 - New animation command "place object" allows you to instantly move an object
   to another position (see section 4.5 in the docs).
 - Added Swedish translation by Arn.
 - Fixed bug where man would 'moonwalk' when he reached destination (I think -
   still waiting for confirmation that this is fixed).
 - Mod musics are now included in your data file (sorry about that!).
 - Objects are now drawn behind the status bar if they are that high up.
 - Fixed bug causing mouse droppings to be left on the screen when the player
   scored points.
 - Fixed bug where you had to click twice to make the man walk off the left
   and bottom of the screen.
 - Fixed bug in RoomMake where the load/save room dialogs could 'disappear'.
 - Fixed lsl3-type score ticking (it works now!)
 - Fixed text colour problem in restore/save/quit dialogs.
 - Fixed spelling of "perhaps" on the second screen of the demo. At last!

VERSION 1.13, March 1999
NOTE: You will need to re-compile any games made with previous versions.
NOTE: You cannot load old save game positions saved before this version.
 - Added "every time player enters screen" and "repeatedly execute" events. See
   section 4.3 in the docs for information.
 - Added "move to, ignoring walls" animation command, allows you to give the
   effect of the character walking through a door otherwise blocked, etc.
   Also, you can now set a repeating animation in the Animation Editor. See
   section 4.5 in the docs for info.
 - New Sierra-style inventory window! See section 4.1.3 in the docs for how to
   implement this.
 - Added graphical script commands "If player has inventory item", "Lose
   inventory item", "Every x loops" and "Random chance". See section 4.6 in
   the documentation for more info.
 - You can now use your own custom mouse cursors. See "Cursor" in section 4.1
   of the documentation.
 - Different cursor now used in dialog boxes and the like, allows for a proper
   walk cursor which isn't used everywhere else.
 - NEW: Windows version of the Project Manager.
 - The route-finder is now much quicker at working out whether you can get
   to the destination, so clicking on walls no longer pauses the game for ages.
 - New: MOD support for background music. You can now use mod files as well
   as midi files. See section 3.2 in the docs.
 - The "Go to screen" command is finally implemented in graphical scripts.
 - New: Global flags in graphical scripts. The demo game now demonstrates
   this (the cigarette appears on the bin screen once you've given the key
   to the man).
 - Choice of two fonts for the speech text - the original one or now an SQ4
   type speech font as well. See "SpeechFont" in section 4.1 of the docs.
 - The status bar is now fully (well, almost!) customizable. Section 4.1.2 in
   the docs describes how to do this.
 - You can change the colour and style of the message boxes. See section 4.1.1
   in the docs for info.
 - You can set messages to be removed after a time if the player has not
   clicked the mouse - useful for intros/animations/etc. See the end of
   section 2.5 in the docs for info.
 - The Sprite Manager can now scroll up/down if you have more sprites than fit
   on the screen. The maximum is now 500 imported sprites.
 - When the character dies, you can now have a "Restore or quit" dialog rather
   than exiting the game.
 - You can now draw double-thickness walls in the Room Editor. This saves a lot
   of time so you don't have to draw walls twice.
 - Speech text is now centred horizontally on the screen.
 - The score is not displayed in the status bar if TotalScore is set to 0.
   This allows for some games where you don't want to use the scoring system.
 - You can now set the icon bar to display on top of the status bar, instead
   of below it. See IconBarAbsTop in section 4.1 of the docs for info.
 - You can change the animation speed of the main character. Useful if you are
   using custom character graphics. See ManAnimSpeed in sect 4.1 in the docs.
 - The up/down facing view is now used when the character is going more
   vertically than horizontally, instead of only when going North or South.
 - Using foreign characters in save game descriptions no longer crashes.
 - The icon bar is now not displayed while the status bar is disabled.
 - Added Green speech text colour option. Oh yes!
 - In the demo game, once the door is unlocked you can now go through it by
   using the hand cursor.
 - A couple of people reported that their graphics cards couldn't do 640x400.
   Now, if RoomMake can't use 640x400 it will use a 640x480 mode with black
   borders at the top and bottom.
 - Added teleport-to-room command in debug mode lets you test things without
   having to play your whole game through.
 - The main character's colours have been slightly changed. He doesn't look as
   good now, but it stops the problems which were happening to some scenes.
 - The Room Editor can no longer save old format room files :-(  But I don't
   think you really want to go back to v1.00 now, do you?
 - Fixed bug causing colours 190 and 191 to be overridden (thanks Arn!).
 - Fixed bug where changing screen the main character would temporarily change
   to the standard front view.
 - Fixed bug where objects positions weren't saved if they were turned off.
 - Fixed bug in save games with some text scripts.
 - Fixed room loading bug which showed up occasionally on graphical scripts.
 - Fixed crash which happened when pressing the down arrow key in the Restore
   game dialog when there were no save games (yes, arcane but true! try it on
   an older version and see!)

VERSION 1.12a, February 1999
NOTE: You cannot load old save game positions saved before this version.
 - You can now move non-player objects with the "Move object" animation
   command.
 - Non-player objects are now drawn correctly when in walk-behind areas.
 - Fixed the bug where objects sometimes weren't being removed from the screen
   properly, like the poster in the demo game.
 - Better screen-changing routine which fades in with the objects on, so you
   don't get that sudden change effect.
 - Changing the man's graphics now actually works.
 - The current MIDI track and position are now saved in the save games. Woohoo!

VERSION 1.12, February 1999
NOTE: You will need to re-compile any games made with versions before this.
NOTE: You cannot load old save game positions saved before this version.
 - Added ability to change main character's graphic. See section 3.10 in the
   documentation for more information.
 - Added FLI/FLC animation support
 - Added simple animation support, so you can have, for example, a door
   actually opening. See section 3.11 in the documentation for info.
 - You can use Data column values in graphical script
 - New response "Turn object on" allows you to put back an object you removed
   with "Remove object".
 - You can now disable the main character in a room - this allows you to do
   things like close-ups of a control panel. This is now demonstrated in the
   demo game, and described in section 3.12.
 - You can now set an object to initally off in RoomMake, which you can turn
   on later using "Turn object on".
 - Added Finnish translation by Teemu Eramaa and Norwegian translation by
   Martin Seterstoen.
 - You can now import a portion of a PCX/BMP for object graphics. This allows
   you to draw several frames in one file, and then import each frame from the
   same graphic.
 - New option in the Sprite Manager allows you to use full 256-colour palette
   for imports if the graphic will only be used in one room. (This prevents
   the mapping to greyscale).
 - The Sprite Manager importer now preserves colour 0 (transparent) pixels in
   the imported image.
 - You can change the background music through a command as well as with the
   room option.
 - Improved message editor allows you to edit existing messages without having
   to re-type the whole thing and also allows longer messages.
 - Tweaked the auto-route finder: removed the bug where he would sometimes
   walk further than you asked, and shortened the time the routefinder is
   allowed before giving up. This means that it is quicker realizing that you
   can't get somewhere, but it may not be able to work out a path round
   complex obstacles.
 - Pressing 'N' in object editor now uses Sprite manager to select graphic
   instead of cycling through all available graphs.
 - Fixed a silly bug with the Go-to-screen data column value where he would
   appear on the wrong side.
 - The walk and hand icons have now been replaced.
 - Slowed down the animation speed of the main character, so he looks more
   like he's walking.
 - F1 now works in the Sprite Manager! Oh yes!
 - Fixed bug in RoomMake which crashed when you moved the mouse to the bottom
   of the screen.

VERSION 1.1, January 1999
NOTE: You will need to re-compile any games made with versions before this
version. If you do not, you will not be able to run the game with this version.
NOTE: The files needed to distribute your games have changed. Please see
section 6.2 of the docs for information.
 - Added SVGA support. Background scenes can now be up to 640x400 256-colour!
   Please read section 3.9 in AC.DOC for notes on this new feature.
 - Added background music support, using MIDI files (see section 3.2 of AC.DOC
   for information).
 - Added sound effect support (see section 4.2 in AC.DOC for info).
 - Character movement by mouse added: click on the destination and he will
   walk there, as in Sierra's VGA games.
 - New compression algorithm for room files, leading to smaller files. In fact,
   the room file is now sometimes smaller than the imported scene's PCX file!
 - Foreign language support added.
 - Portuguese translation by Nuno Costa.
 - You can now import your own PCX/BMP files as graphics for objects.
 - Support for animating background sprites added. SUPPORT is the key word
   here, because currently I've only drawn one animating sprite.
 - The first screen of the demo has been changed to show off SVGA and
   animating sprites. And it looks better like this.
 - Expanded text script to make it more powerful. It still doesn't rival AGI
   for power, but you can now print out variable values and do crude intro
   sequences. See section 4.4 in the documentation for information.
 - New, much better icons for the top icon bar.
 - Slowed down the time-of-day to a fixed rate (on fast systems it was
   changing from day to night to day far too quickly).
 - Keypad 5 now stops the character walking properly.
 - Ported the run-time engine to DJGPP (a 32-bit DOS system).
 - You can now remove the status bar. Wow!

SERVICE RELEASE 1, December 1998
NOTE: Save games created by this release are not readable with previous
versions; and this version cannot load old save games. Sorry. If you try to
load an old game, you'll get Oops error 600. This is the price of progress :-)
You CAN, however, still use old rooms (so you haven't lost anything - phew!)
 - Added graphical script editor to RoomMake. This allows easy advanced
   scripting without using the .SCR file. See the AC.DOC file for more info.
 - RoomMake has been ported to DPMI. No more memory problems running RoomMake!
 - RoomMake now has an improved user interface:
    * a new file selector which allows changing directory and is easier to use
    * improved other dialogs, such as the "Are you sure you want to Quit"
      dialog and the "enter password" dialog.
    * supports long filenames if run under Windows 95, 98, or LFNDOS.
    * better palette remapping when reading in a PCX file.
    * supports importing BMP files as a background scene
 - The old screen now fades out and the new one in when changing screens.
 - Corrected the bug which caused a crash if you used an object with certain
   graphics.
 - Corrected the crash which occured if the script file was newer than the
   compiled file (thanks Luke!)
 - One extra screen has been added to the demo game, and it now ends
   gracefully instead of with a Load_Room error.

REVISION 10.07.97
NOTE: You will need to re-compile any games you made with any versions
before revision 10.07.97.A.
 - added StartPos option to INI file, to define where the man starts on
   the first screen. Also fixed the jump which happened when he first moved
   from the beginning.
 - removed the 'please register' nag screen, since I've decided that the
   Adventure Creator is now swap-ware (see LICENSE.TXT for info).

VERSION 1.00, FEBRUARY 1997
Original release.
