Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Crimson Wizard

#121
AGS 3.5.0 - Patch 2
Full release number: 3.5.0.24


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 25th February 2020

Previous stable version: AGS 3.4.3 P1 forum thread


This release is brought to you by:

- Alan v. Drake
- BigMC (fixes to building on some Linux systems)
- ChamberOfFear (Editor's Color Themes)
- Crimson Wizard
- John Steele Scott (OpenGL support on Linux)
- eri0o (documentation updates and work on CI system)
- Martin Sedlak (new pathfinding)
- Matthew Gambrell (better threaded audio support and bug fixes)
- monkey0506 (steam/gog plugin stubs)
- morganw
- rofl0r (bug fixes)
- scottchiefbaker (fixes to building on some Linux systems)
- sonneveld
- tzachs (new navigation bar for the Room Editor)



Foreword

AGS 3.5.0 has brought a number of completely new features and changed few older things. Make sure to read "Upgrade to AGS 3.5" topic (and corresponding topics for previous versions) in the manual to learn more about these changes. If something is not clear or missing, please tell about it and we will add necessary information. (Online version: https://github.com/adventuregamestudio/ags-manual/wiki/UpgradeTo35)
Note that now we have a new manual project, where the source is in Wiki format that everyone with github account can edit here: https://github.com/adventuregamestudio/ags-manual/wiki . We will appreciate any help in expanding and improving the manual, because AGS documentation had been lacking clear info about many things for too long.
We may be updating this release with patches to manual too as it is being amended.



Changes in the Patch 2:

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.



Changes in the Patch 1:

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.

Templates:
- Updated Tumbleweed template to v1.3.



What is new in 3.5.0

NOTE: Following list also contains changes made in AGS 3.4.4, they are fully integrated into 3.5.0, of course. 3.4.4 version was never formally released on forums, because it was mainly quick update for Linux port (and there were some other issues with the release process).


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 work with the "Say" checkbox. The workaround is to duplicate option text as a first cue 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.
- 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.
- Build autocomplete table a little faster.
- Disabled sending crash reports and anonymous statistics, because of the AGS server issues.
- Disabled screenshot made when sending a crash report, for security reasons.
- 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).
- 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.

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.
- Fixed increased CPU load when displaying built-in dialogs (save, restore etc).
- 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.
- 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.





Thanks to everyone who contributed to and tested this version!



#122
Quote from: fernewelten on Fri 24/01/2020 20:11:10
Quote from: Monsieur OUXX on Fri 24/01/2020 16:05:48
There's so many options, I feel completely overwhelmed.

And you're dead right in this, too:

This year, we have a whooping 78 games to evaluate. If we try to play all of them and only use one hour on average for each and can dedicate on average four hours to the task each day in the evenings after work, then this will take around 20 evenings. And then we'll have to make up our minds about what to nominate in 15 categories. If there are only some games among them where the puzzles are any good, then “twenty evenings plus” will be a very conservative estimate.

Let's face it: This really is objectively overwhelming. We've bitten off much more than we can realistically chew. The more so if we want to do this conscientiously.

Perhaps we've staved off to much work to the end of the year? Perhaps we can learn something from the crowd over at the Maggies awards: They only need to make up their minds aboud 12 adventures. And the reason is that only the monthly winners are in the race.

So for the AGS Awards of next year, I'd like to suggest  something similar as the Maggies crowd does:

Let's do Quarterly Nominations in April, July, October, and January about the games of the preceding quarter. For each category, anybody can nominate any game(s) that has been entered in the Games database in that quarter. Everyone gets one ballot, and on that ballot, they may nominate as many games as they like per category. The nomination votes are counted, and the games with the highest three votes are nominated for the AGS Award of the respective category of the whole year.

So when February rolls around, the nominations are in and the field has been narrowed to just twelve games in each category.  Additionally there's bound to be some overlap, some games are bound to be nominated for several categories -- so in effect, the overall number of the games that we need to vote on will become manageable. We will then do our usual procedures, starting with the phase after the nomination phase and ending with the grand award ceremony.


  • Advantage: The "mountain of work" at the end of the year is decimated.
  • Disadvantage: If at least _four_ hot contenders for some category are released in the same quarter, then some of them will drop through the cracks.
  • Disadvantage: More work throughout the years, might feel like “eternal nomination time“.

What do you think?

In response to fernewelten's idea, what if the awards are held not in the beginning of next year, but 6 months from year's end, or even next year?

This also will give all games better opportunity, because now the game released in the beginning of the year will have more players and playthroughs than the game released in the end of the year.

There was a similar change to MAGS organization, for similar reasons: because people were creating more games, it was hard to play them all in few days after deadline, so they changed it to have a prolonged voting period in parallel to the next MAGS month.
#123
AGS 3.5.0 - Patch 1
Full release number: 3.5.0.23


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 30th December 2019

Previous stable version: AGS 3.4.3 P1 forum thread


This release is brought to you by:

- Alan v. Drake
- BigMC (fixes to building on some Linux systems)
- ChamberOfFear (Editor's Color Themes)
- Crimson Wizard
- John Steele Scott (OpenGL support on Linux)
- eri0o (documentation updates and work on CI system)
- Martin Sedlak (new pathfinding)
- Matthew Gambrell (better threaded audio support and bug fixes)
- monkey0506 (steam/gog plugin stubs)
- morganw
- rofl0r (bug fixes)
- scottchiefbaker (fixes to building on some Linux systems)
- sonneveld
- tzachs (new navigation bar for the Room Editor)



Foreword

AGS 3.5.0 has brought a number of completely new features and changed few older things. Make sure to read "Upgrade to AGS 3.5" topic (and corresponding topics for previous versions) in the manual to learn more about these changes. If something is not clear or missing, please tell about it and we will add necessary information. (Online version: https://github.com/adventuregamestudio/ags-manual/wiki/UpgradeTo35)
Note that now we have a new manual project, where the source is in Wiki format that everyone with github account can edit here: https://github.com/adventuregamestudio/ags-manual/wiki . We will appreciate any help in expanding and improving the manual, because AGS documentation had been lacking clear info about many things for too long.
We may be updating this release with patches to manual too as it is being amended.



Changes in the Patch 1:

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.

Templates:
- Updated Tumbleweed template to v1.3.



What is new in 3.5.0

NOTE: Following list also contains changes made in AGS 3.4.4, they are fully integrated into 3.5.0, of course. 3.4.4 version was never formally released on forums, because it was mainly quick update for Linux port (and there were some other issues with the release process).


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 work with the "Say" checkbox. The workaround is to duplicate option text as a first cue 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.
- 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.
- Build autocomplete table a little faster.
- Disabled sending crash reports and anonymous statistics, because of the AGS server issues.
- Disabled screenshot made when sending a crash report, for security reasons.
- 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).
- 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.

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.
- Fixed increased CPU load when displaying built-in dialogs (save, restore etc).
- 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.
- 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.





Thanks to everyone who contributed to and tested this version!




KNOWN ISSUES

1. Dictionary and Set script classes can cause game to crash when writing a save.
Here's a hotfixed version of the engine, to replace the acwin.exe in the Editor's program folder: https://www.dropbox.com/s/wxij0bx9w82q3da/acwin-3.5.0-p2--fix-dict-set.zip?dl=0
There should be an official patch released soon.
#124
Hate to mention this again, but I still have troubles accessing AGS file server , and therefore unable to upload recent release and change download links on the front page. I had this problem for a pretty long time, and once was able to connect, but it stopped working again shortly after.
I am using FileZilla 3.46.0 on Windows 7, if that matters, and all I get in an output window is "Server unexpectedly closed network connection".
Unfortunately, I am not very knowledgeful in networking, so don't know how to diagnose this.

Are there any alternate variants?
Right now all downloads are hosted on github. The links are in 3.5.0 forum post, and also on github release page: https://github.com/adventuregamestudio/ags/releases/tag/v.3.5.0.22

In the worst case, guess someone else could upload them to AGS server, and fix XML that controls front page links.
#125
AGS Engine & Editor Releases / AGS 3.5.0
Sat 14/12/2019 18:26:13
AGS 3.5.0
Final release number: 3.5.0.22


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 14th December 2019

Previous stable version: AGS 3.4.3 P1 forum thread


This release is brought to you by:

- Alan v. Drake
- BigMC (fixes to building on some Linux systems)
- ChamberOfFear (Editor's Color Themes)
- Crimson Wizard
- John Steele Scott (OpenGL support on Linux)
- Martin Sedlak (new pathfinding)
- Matthew Gambrell (better threaded audio support and bug fixes)
- monkey0506 (steam/gog plugin stubs)
- morganw
- rofl0r (bug fixes)
- scottchiefbaker (fixes to building on some Linux systems)
- sonneveld
- tzachs (new navigation bar for the Room Editor)


What is new in 3.5.0

AGS 3.5.0 has brought a number of completely new features and changed few older things. Make sure to read "Upgrade to AGS 3.5" topic (and corresponding topics for previous versions) in the manual to learn more about these changes. If something is not clear or missing, please tell about it and we will add necessary information. (Online version: https://github.com/adventuregamestudio/ags-manual/wiki/UpgradeTo35)
Note that now we have a new manual project, where the source is in Wiki format that everyone with github account can edit here: https://github.com/adventuregamestudio/ags-manual/wiki . We will appreciate any help in expanding and improving the manual, because AGS documentation had been lacking clear info about many things for too long.
We may be updating this release with patches to manual too as it is being amended.

NOTE: Following list also contains changes made in AGS 3.4.4, they are fully integrated into 3.5.0, of course. 3.4.4 version was never formally released on forums, because it was mainly quick update for Linux port (and there were some other issues with the release process).


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 work with the "Say" checkbox. The workaround is to duplicate option text as a first cue 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.
- 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.
- Build autocomplete table a little faster.
- Disabled sending crash reports and anonymous statistics, because of the AGS server issues.
- Disabled screenshot made when sending a crash report, for security reasons.
- 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).
- 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.

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.
- Fixed increased CPU load when displaying built-in dialogs (save, restore etc).
- 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.
- 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.




Thanks to everyone who contributed to and tested this version!




KNOWN ISSUES:
(to be fixed in following patches)

1. Unfortunately, there's a serious regression found in AGS 3.5.0 related to use of sounds in ViewFrames.
In 3.5.0 audio clips were added explicit ID property, similar to everything else, but now when you delete sounds these IDs shift. In previous versions there was an internal index used to reference clips from ViewFrames and few other properties, and that index was not changed when you delete clips, but now these places use clip ID, which is a mistake.
This is a big  oversight, and may break your ViewFrame sound references when you modify audio clip list in the middle.
PS. To put simply, don't delete audio clips , or do "Change ID" on them until the patch!

UPDATE: Above was fixed in AGS 3.5.0 Patch 1
#126
AGS 3.5.0 - RC 5
Current release number: 3.5.0.21


For Editor
Spoiler

For Android
Spoiler

For AGS developers
Spoiler

Released: 28th November 2019

Previous stable version: AGS 3.4.3 P1 forum thread


This release is brought to you by:

- Alan v. Drake
- BigMC (fixes to building on some Linux systems)
- ChamberOfFear (Editor's Color Themes)
- Crimson Wizard
- John Steele Scott (OpenGL support on Linux)
- Martin Sedlak (new pathfinding)
- Matthew Gambrell (better threaded audio support and bug fixes)
- monkey0506 (steam/gog plugin stubs)
- morganw
- rofl0r (bug fixes)
- scottchiefbaker (fixes to building on some Linux systems)
- sonneveld
- tzachs (new navigation bar for the Room Editor)



What is new in 3.5.0

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.

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.
- 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 "Custom Say/Narrate function in dialog scripts" options to General Settings which determine what functions are used when converting character lines in dialog scripts to real script.
- 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.
- 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. This is a backward compatible option that supposed to be False by default.
- 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.
- Sync variable type selector in Global Variables pane with the actual list of supported script types.
- 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.
- 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.
- Disabled screenshot made when sending a crash report, for security reasons.
- Fixed "Script Compatibility Level" was not correctly set when importing projects made in AGS 3.4.* versions.
- 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 Audio folders were displaying internal "AllItemsFlat" property on property grid.
- 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).
- Fixed crash when editor was updating file version in compiled EXE but failed and tried to report about that.

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.
- Try to create all subdirectories when calling File.Open() for writing, DynamicSprite.SaveToFile() and Game.SetSaveGameDirectory().
- 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 support for multiple custom room viewports and cameras.
- Removed limits on built-in text wrapping (was 50 lines of 200 chars max each).
- Removed 200 chars limit for DoOnceOnly token length.
- 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 IsMusicVoxAvailable() not working correctly in old games which use 'music.vox'.
- Fixed a bug in mp3/ogg decoder where it assumed creating an audiostream succeeded without actually testing one.
- 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.
- Fixed increased CPU load when displaying built-in dialogs (save, restore etc).
- Restored legacy InventoryScreen() behavior which picked sprites 0, 1, 2 for inventory dialog buttons when predefined 2041, 2042 and 2043 were not available.
- 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.
- 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.





On color themes

After launching the Editor, go to File - Preferences. In the "Editor Appearance" group box you will find "Color Theme" setting. If you haven't installed any themes yet the selection list will be empty. Press "Import Color Theme" and select appropriate JSON file, containing theme configuration.
Sample color theme: Dark UI Theme.

There is no specification on theme creation yet, but I hope there will be one at some point. For now you may copy and modify existing one. Themes are in JSON format, which you may edit in most simple text editors. If the theme is broken, the editor will report an error and reset to Default theme on startup.
ChamberOfFear also suggested creating a repository for the themes to let people upload their own and improve existing ones, which we may do in a future.



On new navigation bar in the room editor

This was made by tzachs back in 2014, but got into the editor only now. The feature is working, but may need polishing.

Screenshots (warning - big size):
Spoiler




[close]

Quoting tzachs (from his old thread) -

- Room Layers

This feature allows you to view (and edit) walkable areas/walk-behinds/hotspots/regions/characters/objects/edges in the same time (as opposed to only seeing one of them at a time, like we've seen before).
Well, not entirely though: walkable areas/walk-behinds/hotspots/regions still can't be seen together (as they use masks and is part of the natives dll so I skipped it for now) but they can be seen along objects, characters, and edges.

- Visibility

Each layer can be made visible/hidden by the push of a button. In addition, for the objects/characters/edges layers each item in the layer can also be made visible/hidden by the push of a button. This will only affect the editor, not the actual game.

- Locking

Each layer can be locked/unlocked by the push of a button. In addition, for each layer, each item in the layer can also be locked/unlocked by the push of a button.
A locked item cannot be moved until it is unlocked, useful to prevent mistakes when designing the room. This will only affect the editor, not the actual game.


On Dictionary and Set script types

AGS 3.5.0 introduces two new script classes Dictionary and Set. Both are containers (like special kinds of a list) that store Strings in them. Unfortunately AGS script does not support "generic" code which would allow to create these container classes for any type, so we decided to make ones with String support for the time being, and because Strings are pretty universal type that may store many things in itself.

Dictionary is a container that stores key/value pairs. The existing analogue is "custom properties". It lets you define a name for some value and attach value in it, then later read or change that value using same key.
Code: ags

Dictionary *dict = Dictionary.Create();
dict.Set("name", "Roger");
dict.Set("health", String.Format("%d", 10));
...
int health = dict.Get("health").AsInt;


Set is a container that stores just lone strings, and it mainly has a use of describing a list of unique items. The existing analogue is "Game.DoOnceOnly" function.
Code: ags

Set *myTasks = Set.Create();
myTasks.Add("bought milk");
myTasks.Add("pressed button");
myTasks.Add("locked door");
myTasks.Remove("pressed button");
...
if (myTasks.Contains("bought milk"))
{ // do something
}


Both Dictionary and Set may be created in 4 different forms, combining two properties: a) sorted/unsorted mode and b) case-sensitive/case-insensitive mode. Note you cannot change their behavior after creation, but you may copy their contents to another Dictionary or Set. Both classes provide GetItemsAsArray() method which lets you get their current contents in same order as they store it (sorted or not).


On new room viewport and camera commands

This release changes the way AGS handles room viewport. Originally room view was covering whole screen and always drawn 1:1. 3.5.0 separates old viewport into viewport and camera, also changing the meaning of viewport term. Additionally, 3.5.0 now supports multiple viewports and cameras.

In 3.5.0:
Viewport is a place on screen where room is drawn, defined in game coordinates (e.g. 0,0 - 320x200).
Camera is a place in room which is being drawn, defined in room coordinates.

The part of the room "seen" by camera is being copied to the viewport on screen, scaled up or down if necessary.
For example, if you set camera's size twice as small than the viewport, then room will appear zoomed in x2. If you set camera's size twice as big than the viewport, room will appear zoomed out x2.
NOTE: you cannot set camera size larger than the room's background.

To access viewport and camera use new properties: Screen.Viewport and Game.Camera. These are primary viewport and primary camera that are always present and cannot be removed.
Screen.AutoSizeViewportOnLoad boolean value turns automatic viewport adjustment on room load. It is ON by default which corresponds to normal room view you are used to.
As extra, there are Screen.Viewports array and Screen.ViewportCount property that tells that array's size, as well as Game.Cameras array and Game.CameraCount. These arrays may come useful when working with multiple viewports/cameras.

In regards to viewports/cameras, note that they currently are belong to the global Game state and automatically transit to a new room along with player. You would have to remember to clean unnecessary ones up either in "room leave" or "room enter before fade-in" events.

Since the relation between screen and room is now more complicated new functions were added to help convert between screen and room coordinates: Screen.ScreenToRoomPoint(), Viewport.ScreenToRoomPoint() and Viewport.RoomToScreenPoint(). These functions return an object of Point type containing (x,y) coordinates.
Screen.ScreenToRoomPoint() returns null if there is no Viewport on screen under these coordinates. This is because if there will be multiple viewports supported in the future then engine simply won't know which to choose having none under these coords.
Both Viewport.ScreenToRoomPoint() and Viewport.RoomToScreenPoint() have 'clipViewport' parameter which tells whether they should return null if the coordinates lie outside of the visible part of the room.


Old viewport functions are now deprecated, they may still be enabled if you set "Script compatibility level" to v3.4.1 or lower.
Here's correspondence between old and new functions:




Old commandNew command(s)
SetViewport(x, y);Game.Camera.SetAt(x, y);
ReleaseViewport();Game.Camera.AutoTracking = true;
GetViewportX();Game.Camera.X;
GetViewportY();Game.Camera.Y;

As you may see, what was known as "viewport" earlier is now called "camera", and "new viewport" is something that was never supported before.
#127
As I was working on a multiple viewport/camera prototype initially I thought that drawing will be the most complicated part, but now when it's working for one viewport/camera it may be expanded into multiple ones relatively easily.

Instead it appears I did not think the organizational matter through.

By default there should be 1 viewport and 1 camera which I called "primary" and which always exist.
Assuming user can create more viewports and cameras in script at will,

1) What does Viewport and Cameras belong to, Game or Room? Viewport may belong to game, while Camera to the room for example, or both belong to game or room.
2) Should Cameras reset when the room changes? Should viewports?
3) Or should cameras and or viewports remember their state in rooms and restore themselves when player enters them?


UPD As a default plan I could make they fully rely on script control, that at least would allow users to script them whichever the like.
#128
AGS 3.4.3 released
Current release number: 3.4.3.1



For Android
Spoiler

For developers
Spoiler


Released: 12th February 2019

Previous stable version: AGS 3.4.1 forum thread


PLEASE TAKE A NOTE: In this version "Default" template is now named "Sierra-style".
(Need to make this warning, because several people have asked where did "Default" template go.)


This release is brought to you by:

- BigMC (updates to Linux scripts)
- Crimson Wizard
- morganw


General notes

AGS 3.4.3 is mainly a bug-fixing release, it contains fixes both critical and minor accumulated for the last year. Some of them were part of 3.5.0 development, but since former was taking too long I decided to create an update to 3.4.* branch.
Version number "3.4.2" is skipped because it was used during early development of 3.5.0.

Since this release AGS distribution no longer includes "no-MP3" engine variant and "Demo Game" project source.
1. MP3's patent has expired, which means you no longer should have issues if releasing a commercial game with mp3 audio:
QuoteThe basic MP3 decoding and encoding technology is patent-free in the European Union, all patents having expired there by 2012 at the latest. In the United States, the technology became substantially patent-free on 16 April 2017. MP3 patents expired in the US between 2007 and 2017.
(https://en.wikipedia.org/wiki/MP3#Licensing,_ownership_and_legislation)
2. "Demo Quest" game is an ancient project which has not been updated for many years. It does not look that good either. I recommend searching for contemporary open-sourced AGS games instead, for now.


Changes in the Patch 1:

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.


What is new in 3.4.3

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 its title rather than its 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.

Templates:
- Updated 9-verb MI-style to 1.6.3.
#129
As I am packaging new release it reminded me again of a "Demo Game" issue. I guess people who are continiously using AGS for many years are not bothered by this since they don't need demos anymore, otherwise I cannot explain how there's no much incentive to replace it. It may be however the first game source seen by new users. This issue was raised by several first-time users in the past.

Current "Demo Game" is severely outdated in terms of script and parameters, it looks bizzare (my subjective opinion) and not much fun to actually play.

Perhaps we could simply remove it from the installation package until better times to prevent confusion. IDK if anyone's learning from it today. If someone wants to simply see a showcase they may download existing free games.

For the future, I once proposed to create a new Demo Game, but did not see much interest in the end. There were also few p&c open sourced games, one of which probably could be distributed with AGS if its license is okay. I recall "Open Quest" and community made "Draculator II".
#130
UPDATE from 13th December 2018:
This is the practically working WIP version of a custom room viewport, built on top of AGS 3.5.0 (alpha 7):
Build: https://www.dropbox.com/s/lk7b25a8kwj9jfz/ags-3.5.0--roomviewport-wip5.zip?dl=0
The feature is discussed here on github: https://github.com/adventuregamestudio/ags/issues/473
Pull request: https://github.com/adventuregamestudio/ags/pull/535
Source branch: https://github.com/ivan-mogilko/ags-refactoring/tree/ags3--roomviewport

In short, this feature lets you to change the way ROOM (and all inside it) is shown on game screen. This is done by setting up Room Viewport and Camera.
Camera is an "eye" inside the room, that has certain size and position in room coordinates. The existing "viewport" commands in current AGS serve for the same purpose.
Viewport is a surface on game screen where what camera "sees" gets drawn to. It also has a size and position, but in screen coordinates.
You may imagine a piece of room (the size of camera) is cut out and pasted in the viewport, resized if necessary.

If the Camera is smaller than the viewport, then the room will appear scaled up on screen. If the Camera is larger than the viewport, the room will appear scaled down.

Note, that with the smaller Camera size you may get a scrolling room even with rooms that are equal to game's size.


Extra consequence is that from now on you may have room backgrounds (and essentially - rooms) of any size. For example, 320x120 room in a 320x200 game.
This may be useful if part of your game screen is constantly covered by GUI, or if you want to make one room which is smaller than others.


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


Script API:
Code: ags

builtin managed struct Camera
{
  /// Gets/sets the X position of this camera in the room.
  import attribute int X;
  /// Gets/sets the Y position of this camera in the room.
  import attribute int Y;
  /// Gets/sets the camera's capture width in room coordinates.
  import attribute int Width;
  /// Gets/sets the camera's capture height in room coordinates.
  import attribute int Height;
  /// Gets/sets this camera's room horizontal scaling relative to the viewport it is displayed in.
  import attribute float ScaleX;
  /// Gets/sets this camera's room vertical scaling relative to the viewport it is displayed in.
  import attribute float ScaleY;

  /// Gets/sets whether this camera will follow the player character automatically.
  import attribute bool AutoTracking;
};

builtin managed struct Viewport
{
  /// Gets/sets the X position on the screen where this viewport is located.
  import attribute int X;
  /// Gets/sets the Y position on the screen where this viewport is located.
  import attribute int Y;
  /// Gets/sets the viewport's width in screen coordinates.
  import attribute int Width;
  /// Gets/sets the viewport's height in screen coordinates.
  import attribute int Height;
  /// Gets the room camera displayed in this viewport.
  import readonly attribute Camera *Camera;
};


Viewport is a place on screen where room is drawn, defined in game coordinates (e.g. 0,0 - 320x200).
Camera is a place in room which is being drawn. Camera size may be determined in two ways:
a) explicitly setting Width and Height, which tells actual rectangle in the room;
b) setting ScaleX and ScaleY properties to automatically adjust displayed room relative to the viewport's size.
For example, if you set ScaleX/Y to 2.0, then room will appear zoomed in twice as large as the viewport's size. If you set ScaleX/Y to 0.5, it will appear twice as small (zoomed out).
NOTE: you cannot set camera size larger than the room's background, and it generally does not support "seeing" beyond room's background, same as before.

You access viewport and camera using commands:
Code: ags

Viewport *Game.RoomViewport;
Camera *Room.Camera;



Also:
Code: ags

/// Gets/sets whether the viewport should automatically adjust itself and camera to the new room's background size
Game.AutoSizeViewportOnLoad;


Old viewport functions are now deprecated, they may still be enabled if you set "Script compatibility level" to v3.4.1 or lower.
Here's correspondence between old and new functions:

* SetViewport(x, y); ===> Room.Camera.X = x; Room.Camera.Y = y; Room.Camera.Auto = false;
* ReleaseViewport(); ===> Room.Camera.Auto = true;
* GetViewportX(); ===> Room.Camera.X;
* GetViewportY(); ===> Room.Camera.Y;


Little demonstration:
https://www.dropbox.com/s/l9783w8t1i8qk3t/roomcameramadness.mp4?dl=0

At this point nothing of above is set in stone, and I'd very much appreciate any functionality tests and thoughts on script commands.


KNOWN ISSUES:
* because of a bug the AGS script does not let you write "Room.Camera.X = 10"; instead you have to do something like:
Code: ags

Camera *cam = Room.Camera;
cam.X = 10;

   this is very inconvenient indeed, and I think we need to fixing this issue, or change something in the above script API to make it simplier.
* some possible optimization issues with software renderer when you change camera size too often.



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




The purpose of these features are:
1) Display room in a custom rectangle on screen;
2) Add zoom in/out effects in your game.
3) Potentially - also add rotation to the room view (if I am able to make it work correctly).

This also have a potential to have multiple room cameras in the future, although that may not be easy to add so I don't really plan to do that for AGS 3.5.0. The problem here is not so much in drawing them on screen, but rather in resolving interactions. Right now all the logic in AGS is based on the single viewport into the room: clicks, finding objects on screen, etc. Multiple viewports would demand a good thought and possibly script redesign.
Spoiler
But like I said, drawing them alone is not a problem:
[imgzoom]https://i.imgur.com/Kum2M2b.gif[/imgzoom]
[close]
#131
AGS 3.4.1 - Patch 4 released
Current release number: 3.4.1.15



For Android
Spoiler

For developers
Spoiler


Released: 10th September 2018

Previous stable version: AGS 3.4.0 forum thread


PLEASE TAKE A NOTE: In this version "Default" template is now named "Sierra-style".
(Need to make this warning, because several people have asked where did "Default" template go.)


This release is brought to you by:

- Alan v. Drake
- ChamberOfFear
- Crimson Wizard
- Gurok
- monkey0506
- Ryan O'Connor (one bug fix contribution)
- Scorpiorus (improvements to plugin drawing system)

And artists of the new Sierra-style template:
- CaesarCub
- Hobo
- Jim Reed
- ProgZmax
- Selmiak


Changes in the Patch 4:

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


Changes in the Patch 3:

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.


Changes in the Patch 2:

Templates:
1. Now includes new "Sierra-style" template which substitutes elderly "Default" template and contains new age graphics.
Template topic: http://www.adventuregamestudio.co.uk/forums/index.php?topic=54703.0
2. Made small fixes to the Verb Coin template to make it compatible with 3.4.1 out of the box.

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

Engine:
- Removed limit on maximal asset files in a game package. (Now you may have over 10k voice files in speech.vox)
- 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).



Changes in the Patch 1:

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.



What is new in 3.4.1

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. (NOTE: it was always enabled for Direct3D in the past, but now you can set it to your liking)
- Implemented VerticalOffset and LineSpacing properties for fonts.
- Removed limit on Dialog Topics (was 500 topics per game).
- Removed length limit on the names of Inventory, GUI and GUI Controls.
- Removed length limit on the 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.
- 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).
- 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.

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.
- Added support for switching between fullscreen and windowed modes at runtime using Alt+Enter key combination.
- All supported hardware-accelerated graphic drivers (Direct3D and OpenGL) now run every game in 32-bit display mode by default, and convert game's graphics on load if that is required. This fixes loss of green hue precision in 16-bit games and allows to run 8-bit games, although latter is only partially supported: there are color mismatches and dynamic palette cycling is not working.
- Partial support for plugins drawing on screen for hardware-accelerated renderers (Direct3D, OpenGL).
- 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 Character.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.




KNOWN ISSUES (to be updated)

- iOS port is probably still not working with this version.
- When using Direct3D, game misses 1 bottom row and 1 rightmost column of pixels of game image when "Render sprites at screen resolution" is OFF. This also might cause slight image distortion. There's a suspicion that that is a bug in Microsoft's Direct3D driver since Windows 7.
- When running game in OpenGL fullscreen system cursor may be visible when over black borders.
#132
In the past years I've seen a number of reports about crashes related to dynamic sprites that acted as if they suddenly dissapeared.
Not 100% sure if this is the same one, but recently I've found an error in AGS that can with certain chance lead to DynamicSprite or Overlay getting destroyed after loading a savegame.

The technical details are explained here:
https://github.com/adventuregamestudio/ags/issues/502#issuecomment-418365544
but I warn that these won't be very useful to most people.

In more general terms, the error has a chance to occur if -
1. You have a dynamic array of DynamicSprites or Overlays, in other words something like this:
Code: ags

DynamicSprite *LotsOfSprites[];

function game_start()
{
    LotsOfSprites = new DynamicSprite[100];
    LotsOfSprites[0] = DynamicSprite.Create();
    <... and so on ...>
}


2. You save the game while it has this array and sprites created.
3. You restore that game during same game session.
4. If the slot numbers of dynamic sprites you had in your game just before loading the save match any slot numbers of dynamic sprites restored from the save, then there is a pretty high chance that these sprites will get deleted and your game crashes when trying to draw these sprites or do anything else with them.

I say "chance" because in practice there is a bit of random involved here. The larger is the array the higher the chance is.

This bug exists at least since AGS 3.2.1, did not see reason to test earlier versions.

I think we know actual reasons now, so hopefully next version will have a fix. But keep this in mind if you continue to work with older versions.
#133
My background is large complicated software which writes and reads lots of files some of which may happen to be years old, and I guess my brain keeps working inside this scheme.
I've spent a lot of time inventing a savegame format for the engine that would be easy to update, where each component (Characters / rooms / etc) has its own version, and so in theory one could support reading saves made by older engines as much as they want.
With AGS in "normal" conditions people probably rarely load up saves from older versions of the engine, but such situation sometimes happened with ports: someone was playing original Windows version of the game released with e.g. AGS 3.3.3, then loaded it up in latest Linux port of AGS 3.4.0, or maybe just moved from the buggy version of the engine to play the game on newer one, and wants same saves keep working.
Another idea I keep having is that since program is popular and used by many people (both developers and players), the "documents" it creates should have format that is easy to decypher and proper distinct versioning in case someone wants to parse them for any reason.

But the problem is that... I start having doubts in rationality of my decisions. Maybe this is all because I was working alone for too long and had no one to discuss things with properly, or maybe that's because I constantly feel pressure of having to answer to people having issues with the program all the time. On one hand I want program to work consistent and have certain "discipline" in it, on another I am no longer sure if the requirements I set for it are valid.

Because the simpliest way would certainly be to just have savegame bound to the engine version and refuse to load anything else even though in theory it could, and if someone complains just say "sorry we dont support anything else".
#134
Recently morganw found an issue that would be easier to solve if AGS Editor would run on .NET Framework 4.5, but that would make it totally incompatible with Windows XP. If I understood correctly, this is not the only way, but over time such situations will happen more often.

Here is the table of Windows XP share among all AGS uses built from anonymouse user statistics: https://github.com/adventuregamestudio/ags/issues/489#issuecomment-413011191

It shows decline of Windows XP percentage in the past several years, but few people are still using it (unfortunately it does not show which versions of AGS).
There are also couple of anomalies, like the one around 2016-06 when Windows XP share suddenly rised from 3.64% to 71.50%, and 2017-04 when it rised to 12% for one month, but I cannot explain these.

I am also curious about people running AGS on Wine under Linux, which versions of .NET it supports?
#135
AGS 3.4.1 - Patch 3 released
Current release number: 3.4.1.14



For Android
Spoiler

For developers
Spoiler


Released: 11th July 2018

Previous stable version: AGS 3.4.0 forum thread


PLEASE TAKE A NOTE: In this version "Default" template is now named "Sierra-style".
(Need to make this warning, because several people have asked where did "Default" template go.)


This release is brought to you by:

- Alan v. Drake
- ChamberOfFear
- Crimson Wizard
- Gurok
- monkey0506
- Ryan O'Connor (one bug fix contribution)
- Scorpiorus (improvements to plugin drawing system)

And artists of the new Sierra-style template:
- CaesarCub
- Hobo
- Jim Reed
- ProgZmax
- Selmiak


Changes in the Patch 3:

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.


Changes in the Patch 2:

Templates:
1. Now includes new "Sierra-style" template which substitutes elderly "Default" template and contains new age graphics.
Template topic: http://www.adventuregamestudio.co.uk/forums/index.php?topic=54703.0
2. Made small fixes to the Verb Coin template to make it compatible with 3.4.1 out of the box.

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

Engine:
- Removed limit on maximal asset files in a game package. (Now you may have over 10k voice files in speech.vox)
- 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).



Changes in the Patch 1:

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.



What is new in 3.4.1

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. (NOTE: it was always enabled for Direct3D in the past, but now you can set it to your liking)
- Implemented VerticalOffset and LineSpacing properties for fonts.
- Removed limit on Dialog Topics (was 500 topics per game).
- Removed length limit on the names of Inventory, GUI and GUI Controls.
- Removed length limit on the 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.
- 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).
- 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.

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.
- Added support for switching between fullscreen and windowed modes at runtime using Alt+Enter key combination.
- All supported hardware-accelerated graphic drivers (Direct3D and OpenGL) now run every game in 32-bit display mode by default, and convert game's graphics on load if that is required. This fixes loss of green hue precision in 16-bit games and allows to run 8-bit games, although latter is only partially supported: there are color mismatches and dynamic palette cycling is not working.
- Partial support for plugins drawing on screen for hardware-accelerated renderers (Direct3D, OpenGL).
- 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 Character.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.




KNOWN ISSUES (to be updated)

- iOS port is probably still not working with this version.
- When using Direct3D, game misses 1 bottom row and 1 rightmost column of pixels of game image when "Render sprites at screen resolution" is OFF. This also might cause slight image distortion. There's a suspicion that that is a bug in Microsoft's Direct3D driver since Windows 7.
- When running game in OpenGL fullscreen system cursor may be visible when over black borders.
#136
First of all, I'd like to ask to not assume that me, or anyone else, will jump into doing this right away (this is to prevent premature expectations).

It's well know to anyone who has every worked with contemporary AGS audio system, that its design is somewhat lacking (to say the least), causes lots of confusion, and feels clunky even if you know how it works.

There is an issue with unreliable audio clip index, which make it impossible to reference particular clips when using a formula or saved data (without creating additional arrays to store clip pointers in the wanted order). I am still aware of that, but personally think it's a separate issue, more related to resource organization in game (you will have same problem with any other item in game, such as characters or views).

What I'd like to discuss is, what a good audio API should be.

In the past there was a suggestion to introduce new type, something like "AudioPlayback", which is returned from AudioClip.Play instead of the channel. By assumption, that would reduce the problems people have when storing AudioChannel pointer for a long time, which may later get other clip played on it. Is it a good idea?

Other questions that come to mind, if there are properties that control sound, such as speed, volume, and so on, should they be a property of AudioPlayback or a channel? Should the user be able to set up a volume of the channel, perhaps?
Should channels be created by user in the project tree? If yes, then should there be a general list of channels, or channels per audio type?

Even if you cannot or do not want to consider how this should look like in script, from the user's perspective, what would you like to be able to do there, what items or parameters are essential to control for a game developer?


PS. I know that tzachs is designing an audio system in MonoAGS too, although he took the abstraction further compared to AGS. For example, in his system there is no such thing as "audio type", instead there are "tags" which are used to setup rules for playing a clip, such as how to choose a channel, and so on. While that approach is more flexible, idk if it will be used often to full degree. AGS could have simplier built-in behavior, but provide sufficient API to let users script their own playback rules. For example: let user to explicitly set clip to the particular channel.
#137
AGS 3.4.1 - Patch 2 released
Current release number: 3.4.1.13



For Android
Spoiler

For developers
Spoiler


Released: 13th May 2018

Previous stable version: AGS 3.4.0 forum thread


This release is brought to you by:

- Alan v. Drake
- ChamberOfFear
- Crimson Wizard
- Gurok
- monkey0506
- Ryan O'Connor (one bug fix contribution)
- Scorpiorus (improvements to plugin drawing system)

And artists of the new Sierra-style template:
- CaesarCub
- Hobo
- Jim Reed
- ProgZmax
- Selmiak



Changes in the Patch 2:

Templates:
1. Now includes new "Sierra-style" template which substitutes elderly "Default" template and contains new age graphics.
Template topic: http://www.adventuregamestudio.co.uk/forums/index.php?topic=54703.0
2. Made small fixes to the Verb Coin template to make it compatible with 3.4.1 out of the box.

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

Engine:
- Removed limit on maximal asset files in a game package. (Now you may have over 10k voice files in speech.vox)
- 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).



Changes in the Patch 1:

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.



What is new in 3.4.1

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. (NOTE: it was always enabled for Direct3D in the past, but now you can set it to your liking)
- Implemented VerticalOffset and LineSpacing properties for fonts.
- Removed limit on Dialog Topics (was 500 topics per game).
- Removed length limit on the names of Inventory, GUI and GUI Controls.
- Removed length limit on the 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.
- 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).
- 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.

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.
- Added support for switching between fullscreen and windowed modes at runtime using Alt+Enter key combination.
- All supported hardware-accelerated graphic drivers (Direct3D and OpenGL) now run every game in 32-bit display mode by default, and convert game's graphics on load if that is required. This fixes loss of green hue precision in 16-bit games and allows to run 8-bit games, although latter is only partially supported: there are color mismatches and dynamic palette cycling is not working.
- Partial support for plugins drawing on screen for hardware-accelerated renderers (Direct3D, OpenGL).
- 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 Character.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.




KNOWN ISSUES (to be updated)

- Need to make mobile ports (Android, iOS) work with this version.
- When using Direct3D, game misses 1 bottom row and 1 rightmost column of pixels of game image when "Render sprites at screen resolution" is OFF. This also might cause slight image distortion.
NOTE: there's a suspicion that that is a bug in Microsoft's Direct3D driver since Windows 7.
- When running game in OpenGL fullscreen system cursor may be visible when over black borders.
#138
Site & Forum Reports / Updating online manual
Mon 09/04/2018 10:45:28
Alright, since my post in the other thread was kind of hidden by discussing changes to wiki, I will repost the issue separately.

So, after AGA gave me permissions (or maybe I had them before, idk), I tried to upload new manual content to the website, but some issues were found, so I had to revert.

1. Pages on website use styles from external css file. While pages generated in repository have embedded css, and they are different (background, font, etc).
2. Pages on website have some additional script for toolbar display.
3. Website manual has additional html pages for contents, index etc. Manual in repository does not generate html pages for these. This means that even if I upload new topic pages, the contents tree will remain 3.2.1, and links won't match.

Would it be possible to find out who have created this online manual, and how?


For the reference:
Existing manual (corresponding to AGS 3.2.1): http://www.adventuregamestudio.co.uk/manual/
Archive containing both versions of html pages for comparison: https://www.dropbox.com/s/v958t0938w76cyk/AGS--manualpages.zip?dl=0
#139
I was not sure how to best put this, so the post may be bit awkward. But I wanted to ask for an advice.

Back in 2016 I quit my office job because of AGS... partially hoping that would let me improve situation with the project, and partially because of stress. Probably I was not thinking straight, because it was AGS that caused all the stress. Some time later it became fully clear that the project is going nowhere, and I decided to return to the old job, but did not manage to stay on it for long. Don't know why exactly, but I literally was not able to get any kind of satisfaction anymore. I was constantly stressed out, and even being in the office with other people around made me frustrated. So after six months I quit again.
Since then it is about a full year as I am officially unemployed. During this time I participated in a small commercial project for couple of months, and was able to get some money, but quit eventually too, partially because AGS and related stuff still dominated my thoughts. It was the time when 3.4.1 was supposed to be released, and I could not stop thinking about that.
That took too much time to break away from this project that drained me from all the energy, and now I begin to realize something that was bothering me subconsciously these years. The thing is, I no longer could answer why I was even working on it all the time. This is not what I wanted to be doing. I remember dreaming of making games, not recoding someone else's engine for six years.

I fear this could have been a terrible mistake for me. I could have spent those six years learning contemporary engines and game development, instead I spent all that time for something that is barely useful anywhere else.

Right now I must be searching for a real job again and keep wondering would it be possible to find one in game development. The problem is, on one hand, that it does not anymore seem a good idea to just get a "normal" office job while trying to practice game projects in a free time. I'm afraid that would just cause more frustration, and I'll loose several years more without any achievement. On another hand, I have barely anything to "showcase", after spending years on AGS engine I was too stressed to actually work on any game, and just afraid that I won't be able to handle another work simultaneously. So this makes a stupid dilemma.
There are few projects I worked on in the past, which were kind of finished in the past, which could be mentioned just to give an idea, but idk if that means anything.
Spoiler

* Many years ago I worked on an indie multiplayer deathmatch game (back when word "indie" was probably not used yet), based on Doom-like engine port. For that I wrote much of the gameplay logic and bot AI (also designed few maps).
https://www.koraxheritage.com/korax-arena/ (there are some gameplay videos)
* Something I did recently was a 3D volleyball game made on Babylon.js engine. I was not making everything from scratch, but probably most of it (used other similar game for a reference). AI was the main part again. Actually the game was just with AI, without actual player controls. It was meant to simulate ongoing match for a bookmaking website, so had relatively unusual requirements. It is a bit difficult to demonstrate, because on a real website you have to find and open it at correct match time to see the simulation (and the website itself is pretty confusing). I would probably be able to make a video on local host though.
* I made this silly racing game in AGS you probably heard about. One of the few AGS games that are actually complete to certain degree... (there were couple of adventure games, but they are too simple to mention).
* Know a bit of Unity3D and Babylon.js (a 3D javascript web engine), and I know AGS rather well, if that matters, although I do not think I'd like to make games with latter.
This is all I can think of right now.
[close]


Today I would not even know what or where to begin with to start searching for any game-related jobs. Are there any sites or communities where one could find a job for someone with limited gamedev-specific experience?
Another issue is money... in the past I was involved in couple of game projects where I was supposed to be paid in the end, but unfortunately these projects never reached the point at which anything could be earned. I'd really rather not become a part of a game with vague perspectives again, at least not now.
So, frankly, how realistic that may be to get a position in a project with guaranteed payment in a sensible time period, like being paid monthly (even if a little bit), or at least once during the course of the year?
#140
Hello.

I am very curious about whether classic walk-behind masks has any practical advantage, even if in particular situations, over making multi-layered rooms (e.g. using objects). And whether such advantage is related to how AGS deals with masks (specific to workflow).

The main reason I am asking is that I noticed that tzachs's new developed engine supports walk-behind masks as an option, although the engine itself has 3d-texture rendering, so this seem to be a support of "legacy method" rather than actual necessity. So this is both a concern and curiosity on my side (not a big deal, but supporting extra features means spending extra effort).

AFAIK, the origin of this method comes from peculiarities of software rendering and system limits of old times. Walk-behinds could be used to optimize drawing a bit, and also save some space both on disk and memory.
But in a contemporary engine which uses textures it has zero advantage over adding extra layer to the room (as an object of sorts): it still has to be a separate texture to be drawn above characters.
Even in AGS, when you run game with Direct3D or OpenGL renderer, the engine "cuts out" the "walk-behind" piece of background onto a separate image, partially duplicating room image in memory.

So, there is seem to be no benefit from the program's or perfomance perspective anymore.

Is there any benefit from game designer's or artist's perspective?

I don't have much experience here, so my view on this is mostly speculative. One good thing about walk-behind maks I know is that you can make one fast assuming you have a right tool to do so , which may be useful if you are prototyping room with a flat background. On the bad side, annoying thing about masks is that you have to constantly keep it updated with background graphic: if an object on background changes in shape even by a pixel - the mask has to be synchronized again; so this might be counter-productive in the long run. Another thing is that walk-behind masks don't work with antialiasing or half-transparency.
In the abscence of a tool that allows you to draw masks and save them in engine's format, you would have to keep mask as a separate image (or as a layer in your background image document), so you are having multiple images anyway.

What is your view on walk-behind masks?
SMF spam blocked by CleanTalk