Releases: adventuregamestudio/ags
This is 3.6.2 - Beta 4
Editor:
- Property Grid now displays Custom Properties right in the main properties list for each item that supports them.
- Support reordering folders in Sprite Manager with drag & drop.
- Script's Autocomplete will now work for dynamic array's Length property.
- Editor will now report any script functions that look like event functions, but not assigned to corresponding events, as warnings when compiling the game.
- Fixed dragging an item into the folder in Project Explorer could move it into a wrong folder if the folders have similar names only different in letter case.
Scripting:
- 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 Character.Following property that returns another Character that this one follows after.
- Added System.DisplayFPS property that toggles FPS counter (a replacement to Debug(4, 1)).
Engine:
- Removed arbitrary limit of 2k bytes for the result of String.Format().
- Fixed calling Character.Animate() during idling state could cause incorrect error, reporting invalid animation loop. (This is regression in 3.6.1)
- Fixed GUI controls get shuffled when restoring saves made by pre-3.6.2 engines (regression since 3.6.2 Beta 3).
- Fixed Game.ScanSaveSlots() erroring on GUI in saves made by pre-3.6.2 engines.
v4.0.0.11 (AGS 4.0 Alpha 15)
This is AGS 4.0 Alpha 15.
Contains all the new features from 3.6.2 Beta 3
Own changes:
Editor:
- The "Watch Variables" panel has an option to automatically enlist local variables (relative to current position in script) when testing the game.
- Added "Add to Watch Panel" command to Script Editor's context menu.
- Support dragging a text from the script window into the "Watch Variables" panel.
- Fixed mistakes occuring when overwriting existing room files by a imported room.
Scripting:
- Managed structs may have constructors. Constructor is a member function which name is identical to the struct's name, and type is "void". Constructor will be called automatically when the managed object is created with "new" command.
- Dialog Scripts dropped support for a number of obsolete commands: "run-script", "new-room", "set-speech-view", "set-globalint", "play-sound", "add-inv", "lose-inv". All of those have contemporary equivalents.
v3.6.2 - Beta 3
This is 3.6.2 - Beta 3
Includes all the fixes from v3.6.1 - P8
Own changes:
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 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.
- In Room Editor, during any area drawing mode Ctrl + LMB now works as area picker regardless of the currently selected tool.
- Editor will now report any missing script functions that are assigned to events but not present in script as warnings when compiling the game.
- Fixed font preview not updating after importing a new font over. (regression in 3.6.2 Beta)
- Fixed editing Color property of multiple selected GUI controls.
Scripting:
- Dynamic arrays now have Length readonly property that returns their number of elements.
Script API:
- Events eEventGUIMouseDown and eEventGUIMouseUp now get additional parameters: mouse button, mouse x and y positions.
- 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 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 SaveGameSortStyle enum and Game.GetSaveSlots() function that returns a dynamic array of save slot indexes, optionally sorted in certain way.
- 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.
- Added optional "fileSortStyle" and "sortDirection" parameters to ListBox.FillDirList().
- Added optional saveSortStyle and sortDirection parameters to ListBox.FillSaveGameList().
- 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 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.
- 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.
Engine:
- 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.
- 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.
- Support calling StopDialog() inside a dialog script, that will schedule dialog's stop command at the end of the current option script.
- Added new config setting to "access" section called "textreadspeed" which lets to override game's text reading speed parameter.
- 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 Character may get stuck in "move without animating" state if Move called before Walk. (regression in 3.6.2 Beta)
- Fixed 8-bit room bgs in 32-bit game are imported filled with "magenta". (regression in 3.6.2 Beta)
- Fixed crash on game quit if there was any queued music. (regression in 3.6.2 Beta)
WinSetup:
- Added "Text reading speed" to "Accessibility" settings tab.
- Fixed setup could save wrong setting values in categories located on other tabs, if player never opened these tabs.
- In "disabled" section of config "access_skipstyle" setting lets disable all options in setup related to the speech and text skipping.
v3.6.1 - P8 (3.6.1.30)
This is a 3.6.1 Patch 8.
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.
(this is regression since 3.6.1 Patch 6) - 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.
v4.0.0.10 (AGS 4.0 Alpha 14)
This is AGS 4.0 Alpha 14.
Contains all the new features from 3.6.2 Betas 1 and 2.
Other changes:
Common:
- Fonts are split into Font Files and Fonts, where multiple Fonts may use same Font File, or not have any Font File assigned at all (for instance, if they are meant to act as placeholders and get replaced by fonts from plugin).
Editor:
- "Fonts" node in the Project Explorer now contains separate "Font Files" and "Fonts" sublists.
- Actual font files on disk are now stored in "Fonts" subfolder in the project when imported, and keep their original names (no longer renamed to "agsfntN.*").
- In General Settings replaced "Use Extended Compiler" option with "Script Compiler" option that acts as a dropdown list, with compiler names to choose from.
- Added "Source FontFile" property to Fonts, this property lets assign a Font File to the Font.
- Fixed GUI controls failing to copy/paste via Clipboard (regression in previous Alpha versions).
Engine:
- Allow to run the game even if it has no fonts (log a warning).
- Allow to continue running the game if any font failed to load on startup. Such font will simply not get drawn, unless replaced by a plugin, for example.
v3.6.2 - Beta 2
Among other things, this update includes few simpler script API additions backported from AGS 4 Alpha release.
Changes in 3.6.2 - Beta 2
Editor:
- Added "WrapText", "TextPaddingHorizontal", "TextPaddingVertical" properties to GUI Button.
- GUI Labels can select full range of Alignment values in their TextAlignment property.
Script API:
- Added global events: eEventDialogStart, eEventDialogStop, eEventDialogRun, eEventDialogOptionsOpen, eEventDialogOptionsClose (these are handled in "on_event").
- Added Button.WrapText, TextPaddingHorizontal, TextPaddingVertical.
- Added DateTime.CreateFromDate() and CreateFromRawTime().
- Added static Dialog.CurrentDialog property and non-static ExecutedOption and AreOptionsDisplayed properties.
- Added File.Copy() and File.Rename().
- Label.TextAlignment has now type Alignment, rather than HorizontalAlignment, and has full alignment range (both horizontal and vertical).
- Added Overlay.SetPosition() and SetSize() functions for convenience.
- Added GetTimerPos() that returns timer's position (remaining time), in ticks.
- Added CopySaveSlot() to complement MoveSaveSlot(), and new File functions.
v3.6.2 - Beta 1
3.6.2 is planned to be a second minor update to 3.6, focusing mostly on convenience of certain Editor and Engine features, and expanding existing script commands.
Changes in 3.6.2 - Beta 1
Common:
- Event handler functions 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 General Settings added "Use old-style voice clip naming rule" which 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).
- 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).
- "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.
- 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.
- Support importing 1-bit (monochrome) and 4-bit images as sprites, room backgrounds and masks (converted to 8-bit).
- Support importing indexed PNGs as room backgrounds and masks.
- Do not alter or clamp palette for 8-bit sprites imported in a 16/32-bit game.
- 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.
- Do not delete previously built game exe from Compiled/Windows folder when testing a game from the editor.
- Added "/maketemplate" command-line option that tells Editor to run, make template out of the said game, and quit.
- Fixed Editor refusing to open a project if one or more of the sections are missing in the file.
- Fixed importing indexed PNG as a sprite, previously Editor would mistakenly treat the source image as 32-bit.
- 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 "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 an unhandled exception occuring when rebuilding rooms if any script's header is missing.
- Fixed double warning message when trying to close the Editor while a game test is running.
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 Character.TurnWhenFacing property.
- Added Character.MoveStraight() complementing WalkStraight().
- 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.GetFileTime() that returns file's modification time.
- Added Game.GetSaveSlotTime() that returns a time this save slot was last written.
- Added FileSortStyle and SortDirection enum, and optional "fileSortStyle" and "sortDirection" parameters to ListBox.FillDirList(). This lets to sort resulting list by name or time, in ascending or descending order.
- ListBox.FillSaveGameList(), RestoreGameDialog() and SaveGameDialog() now let define a range of save slots for display.
- Added Speech.SpeakingCharacter that returns currently speaking character (for blocking speech).
- Added MoveSaveSlot() which renames a savegame.
- 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 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.
- Expanded
on_mouse_click
callback, now supports two more parameters: click x,y coordinates.
Engine:
- Dropped support for pre-3.5.0 game saves.
- Ensure that Character.Speaking returns true when a speech is playing even if the character has no speech view.
- DynamicSprite.CreateFromFile() may now load 1-bit and 4-bit bitmaps, converting to 8-bit.
- 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.
- Implemented video buffering on a separate thread. Allow to drop late video frames.
- Added new accessibility config settings in "access" section: "speechskip" and "textskip". These let player to override game's skipping style for character speech and text messages respectively.
- 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 "--no-plugins" command-line argument that denies loading any plugins; also added respective config option "noplugins" in "override" section.
- Fixed displaying room masks with Debug command in legacy "upscale" mode.
Engine Plugin API:
- 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 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.
WinSetup:
- Redesigned winsetup into a tabbed dialog.
- Added "Accessibility" settings for skipping speech and text messages.
v3.6.1 - P7 (3.6.1.29)
This is a 3.6.1 Patch 7.
Engine:
- Hotfix mouse cursor not being drawn sometimes after changing rooms (regression in 3.6.1 P6).
v4.0.0.9 (AGS 4.0 Alpha 13)
This is AGS 4.0 Alpha 13.
Contains fixes from 3.6.1 Patches 5 and 6 (except ones related to backwards compatibility).
Other changes:
Common:
- Support true 32-bit colors in GUI, text messages and drawing commands in script. Color number properties now correspond to the encoded 32-bit RGB (R8G8B8 format). Older projects will have all Color properties upgraded by the Editor (but not colors in script!).
- Removed support for 16-bit games. Any older 16-bit project will be converted to 32-bit on import by the Editor.
SPECIAL NOTE: 8-bit games are still supported.
Editor:
- Editor will now remember certain window states: "Sprite selector" window and splitter position, splitter position in "Sprite manager".
- Copy, paste and delete commands now apply to all the selected GUI controls in GUI editor.
- Support editing group properties for selected GUI controls.
- When importing room backgrounds of a different size Editor will now let user decide whether to reset, keep or rescale room masks.
- Ensure that Editor exports room backgrounds in their actual color depth.
- Removed obsolete "Copy walkable area mask to regions" command from the Room editor.
- Merged all "***Color" and "***ColorNumber" paired properties into a single "***Color" property. This property is internally saved as a number, but is viewed and edited as RGB combination for 32-bit games, and as a palette index for 8-bit games.
- Added Custom Properties for: Audio Clips, Dialogs, GUI, GUI Controls, Regions, Walkable Areas.
- 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).
- Added "/maketemplate" command-line option that tells Editor to run, make template out of the said game, and quit.
- Fixed "Flood Fill" operation on mask in the room editor for masks of sizes which are not multiples of 4.
- Fixed "Recent games" menu could throw a error if a saved Editor's config contained empty paths for any reason.
- Fixed "Make template" operation was not adding Rooms subfolder to a template.
Compiler:
- Compiler no longer requires explicit pointer declaration for imported global variables of managed types. Now they are always assumed to be pointers by default, and non-pointer imports of builtin managed types are not permitted, unless a backwards compatibility option is set.
- Fixed compiler could cause memory corruption while compiling certain expressions.
- Fixed parsing of bracketed expressions inside ternary operation ( ? : ).
- Fixed a error message reported in case of undefined symbol, now it correctly states that the symbol is undefined, instead of making a vague statement of "unexpected expression".
Script API:
- All ***Color properties and function arguments now require a 32-bit RGB number. Where Game.GetColorFromRGB() is used to create a color number, there the script should continue to work as before, but if a literal number was used in script, these must be updated by hand or wrong colors will be displayed at runtime.
- 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").
- Added Custom Properties interface to types: AudioClip, Dialog, GUI, GUIControl, Region, WalkableArea. This includes functions: GetProperty(), GetTextProperty(), SetProperty() and SetTextProperty().
- Added static Dialog.CurrentDialog property and non-static ExecutedOption and AreOptionsDisplayed properties.
- 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 Overlay.SetPosition() and SetSize() functions for convenience.
- Added Overlay.Tint(), SetLightLevel() and RemoveTint() functions, Overlay.HasTint, HasLightLevel, LightLevel, TintBlue, TintGreen, TintRed, TintSaturation, TintLuminance properties, matching Character and Object tinting functionality.
- Expanded String.IndexOf() with new parameters: "StringCompareStyle", "index" and "count".
- 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 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.
Engine:
- 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.
- Added new accessibility config settings in "access" section: "speechskip" and "textskip". These let player to override game's skipping style for character speech and text messages respectively.
- Fix transformed (scaled or rotated) overlays could look wrong in Software renderer.
WinSetup:
- Redesigned winsetup into a tabbed dialog.
- Added "Accessibility" settings for skipping speech and text messages.
v3.6.1 - P6 (3.6.1.28)
This is a 3.6.1 Patch 6.
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.