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

#101
I completely forgot about this, I added the different Colour Picker for the editor properties earlier this year, but did this in an experimental "ags4" branch.
To elaborate, current Color Picker is almost useless because it provides selection among some standard lists of colours only. The new one is a classic Colour Picker you see in Paint, for example, with full range of colours, and even ability to save colours (except they don't save between Editor launches).

The code changes were rather minor, so I also thought about porting these to 3.5.1 release, but it slipped out of my mind.

I'd like to receive some feedback before doing this though, because existing Picker appears as a non-modal panel below the Color property, but the new one is a modal dialog (requires to press OK).

This is a custom build of a 3.5.1 Editor with this colour picker (you may copy these files over 3.5.1 installation):

https://www.dropbox.com/s/7iyidlbnmeiu8tf/ags-3.5.1--colourpicker.zip?dl=0

If for some reason you think that's a too radical change and improvements are necessary before it may be used, we could also leave this for 3.6.0.
#102
So, I have a object rotation feature in works, as may be seen here.

Currently it adds Rotation property to several object types, which define angle rotation of rotation in degrees. Rotation is performed around the center of the image at the moment, but I also had thought of adding configurable Pivot position at least for some of them.

There are few images demonstrating it in action (includes GIFs, so may take time to load) -
Spoiler







[close]

A working test version:
Spoiler

A working test version, if anyone want to try out how it works:
https://www.mediafire.com/file/zn338ao4mhgtxwu/AGS-3.99.99.0-ROTATION.zip/file

Warning!!!: this is an experimental version of AGS 4 that has number of other changes, and saving game project there will make it incompatible with current official releases.
Also it's not final, so not 100% guaranteed to keep things as they are.


Rotation is done using following properties:
* GUI.Rotation
* Overlay.Rotation
* Camera.Rotation
* Character.GraphicRotation
* Object.GraphicRotation
[close]

Technically all this works, and may be adjusted further. There is a number of problems related to this. I have my own ideas, but would like to know other people opinions too.
But I must explain few things first.



Sprite rotation vs full object rotation

Most of the game objects are more than just a sprite, they contain several "functions".
For example: Room Object displays a sprite, but also can calculate path and move along walkable area, and also block walkable areas and collide with other objects and characters.
Characters can move in walkable areas, they can block and collide, but they may also turn around switching to different loops, have speech, inventory, and so on.

If we take geometrical transformation, such as Scale and Rotation, these may be applied strictly to object's sprite, but they may be also applied to other object's functions where makes sense.
For example, Objects and Characters have a blocking rectangle which tells which part of walkable area they block. When Scaling is applied, this blocking rectangle is also scaled along with the sprite. But what if you don't want blocking to be aligned with the sprite? then you may override that with BlockingWidth/BlockingHeight properties (I'd leave convenience question out in this topic).
So, technically, blocking rectangle and sprite are not same thing, they are separate components of an object, that optionally may be aligned, but not necessarily.
In ideal world we may say that there is a Object's or Character's own scaling which defines its "physical" contact with the room, and there's sprite's scaling which defines only its visual representation.
Spoiler

I say "in ideal world", because in AGS these things are never fully consistent. For example "Object.IsCollidingWithObject" ignores blocking rectangle and test only sprites. "Character.IsCollidingWithChar" tests sprite widths but not heights, and only succeeds if their Y coordinates are close enough.
And "Character.IsCollidingWithObject" is the weirdest of all, because it also tests for object's transparent pixels, which none of above does.
This is why it's difficult to compare what AGS does with contemporary game engines 1:1.
[close]

Now we come to Rotation.
If we take sprite-only rotation, that's seemingly easy case, as we may rotate it as we please and that supposedly should not affect anything but the visuals.
The following image demonstrates rotation of character sprite by 90 degrees around its center.

[imgzoom]https://i.imgur.com/OY6AKAx.png[/imgzoom]
(sorry if it's not precise, I was just making crude mockups to save time)
(NOTE: all images are posted using imgzoom so you may select their zoom multiplier by hovering mouse under them)

Notice the character's "origin" point though - that's the point aligned with Character's own coordinates (x and y). It remains on same place, and if we change character's position that will be position of origin point, not the chacter's feet anymore.
Human-like sprite may not be the simpliest to realize how this works as we used to have its feet aligned to its position in the room. So let's change it to this "wheel" like character that rotates as it moves around (this is just a random example).

[imgzoom]https://i.imgur.com/F19ZfH6.png[/imgzoom]

We may also introduce something called "Pivot". That's a relative point which serves a center of rotation. Good example is this bell object. Compare sprite rotation around its center and around custom pivot:

[imgzoom]https://i.imgur.com/9d3igOQ.png[/imgzoom]
[imgzoom]https://i.imgur.com/AhTsTTv.png[/imgzoom]
Notice still the object's origin does not change, it's positioned same way, then the sprite is positioned relatively to object's origin using pivot and rotation.



Now, above only sprite was rotated. This means that, for example, blocking rectangle won't be. This is a difference between whole object rotation and sprite rotation in practice.
If we rotate whole object then all of its components that have geometric meaning will be affected as well.

But how do we rotate whole object, do we use sprite's center as a point of rotation too? The thing is that sprite's center is an arbitrary point, not really related to object's position.
Previously I mentioned "origin" point - that's the point at object's coordinates. The sprite is aligned to that origin according to engine rules. For example, for Room Object sprite is aligned to origin by its left-bottom corner, for Character sprite is aligned to origin by its middle-bottom point. GUI surface is aligned by left-top corner.

This "origin" is the main point of an object, and all object's geometry is placed around it. Therefore, if we rotate whole object, it should be rotated also around same "origin" point. And there cannot be any custom pivots in this case.
For example, this is how the full rotation of a Character would look like:

[imgzoom]https://i.imgur.com/FPo6Uxz.png[/imgzoom]

Notice blocking rectangle (painted with blue lines) is also rotated.

Continuing, we may actually imagine applying both object rotation and sprite rotation simultaneously. In such case sprite rotation will be applied relative to object rotation.
For example, this is how it would look like if we rotate full object by 90 degrees and then sprite by 90 degrees (using sprite center as a pivot):

[imgzoom]https://i.imgur.com/BhpoWAF.png[/imgzoom]


To sum up, theoretically there may be purpose for separating object own rotation and its sprite rotation, and use cases for both.
In some cases combining these two may look pretty unusual and confusing. One example is GUI. Controls are part of the object itself, therefore their position should depend on GUI own rotation. Thus in case of GUI the "sprite rotation" is perhaps applied not to whole GUI visuals, but only to its background image.
In case of GUI rotation there's another problem though related to its origin, which I discuss separately below.


There's also a question of how to distinct object's own transformation properties and it's sprite transformation properties.
Supposing we already have Character.Scaling and as mentioned above this property results not only in scaled sprite but also in scaled blocking rectangle.
If we keep same naming idea, the Character.Rotation should mean full object rotation.
Then properties for transforming sprite only could be named SpriteScaling and SpriteRotation, or for slightly shorter names - SpriteScale and SpriteRotate (NOTE: actually it could be SpriteScaleX and SpriteScaleY for separate scaling by X and Y axes, but that's another topic).



Object's own pivot problem

As said before each game object has its own "origin" - this is a point that corresponds to its coordinate properties (x,y). Everything else is aligned in relation to this origin somehow.

For historical reasons, and also because AGS was meant to simulate classic P'n'C games, objects are refering to origin like this:
* GUI, gui Controls, Overlays (also Viewport and Camera since AGS 3.5.0): as a left-top corner;
* Room Objects: as a left-bottom corner;
* Characters: as a middle-bottom point.

Or, if we look at it from opposite perspective, object components are positioned:
* GUI etc: right-below from origin;
* Room Objects: right-above from origin;
* Characters: centered horizontally and above origin.

In the example of Character's own rotation posted above I showed what would happen if own rotation was using origin as a pivot. In case of Character, and maybe Object too, that seem to make sense and is convenient at first, as their origin is logically where they touch "floor" in a side-view games. So rotating Character by 90 degrees would make it work like its walking on a vertical wall, and rotating Character by 180 degrees would make it work like its walking on a celing.

Things become bit more complicated if, for instance, we want a top-down game. In such case side-view logic no longer makes sense. Even now without any rotation one would have to adjust sprite relative to character's position to make it centered around it. Vertically this may be done using "z" property which conveniently exists and works as a vertical sprite offset. There's also Character.LockViewOffset that allows to set both X and Y sprite offsets, which would be convenient if we also rotate the object.
Thankfully blocking rectangle is positioned centered on Character's origin, which is very convenient actually (not that rectangle itself is conveniently customized though). So we don't have to worry to offset it also. It even will keep working when rotating. For Room Object situation may be different, as blocking rect is positioned to the right from the origin, just like its sprite.

However, if we take GUI, or Overlay, or even Camera, here rotating around origin becomes quite questionable. Because their origin is at the top-left corner, and this is how we visually imagine them being moved around, rotating around same point would produce... unexpected and inconvenient results. Basically, GUI rotated around origin may suddenly appear above it, or to the opposite side horizontally, which makes its positioning on screen one hell of a job.

This makes me wonder if GUI and GUI-like objects should rather have not their origin, but their geometric center as a pivot of rotation. Conveniently these have explicit Width and Height properties; unlike Character or Room Object which do not have any persistent "size", and depend on their current sprite.
#103
AGS 3.6.0 - Alpha - for Public Test

ACHTUNG!
This is a ALPHA version of AGS 3.6.0.
It's not considered stable yet and must go through extensive testing.
Use at your own risk. Please back up any games before opening them in this version of AGS.
New settings in this version may make your project files unusable in previous versions after saving with this version.


Last update: 14th March 2022


Preword

This release presents a SDL2-based engine. For about 2 decades AGS engine was based on Allegro 4 graphic library, which was discontinued somewhere in the early 2010-ies (only received few patches since). There was an intent to move either to Allegro 5 or SDL (1 or 2) since, but for various reasons this task was continiously postponed. Finally we have a good progress there enough to make a build for public test.
(NOTE: Allegro 5 is very different in everything, therefore it was not trivial to just go from Allegro 4 to 5. In fact it appeared to be easier to change from Allegro 4 to SDL2).

NOTE: contains all the changes from AGS 3.5.1 (Patch 9).


Credits

- SDL2 port mostly done by Nick Sonneveld;
- Improved Android port, and Web/Emscripten port made by eri0o;
- me basically gathered Nick Sonneveld's works together, tidied and fixed where necessary.
+ added more stuff (see below) and some new script commands
+ some stuff added by Alan v. Drake.
+ fernewelten (fixes)
+ panreyes (fixes)


Downloads and instructions

* Full AGS 3.6.0 as installer
* Full AGS 3.6.0 as a .zip archive
* Android game player, aka launcher (APK signed with Debug key), suitable for running any compatible AGS game.


Notable changes related to new backend and ports

Full list of changes now available here (will be posted for the final release on forums too):
https://github.com/adventuregamestudio/ags/blob/v.3.6.0.20/Changes.txt

* Freely resizable window (in desktop windowed mode, obviously).
* Software renderer uses SDL2 as a final output, meaning the actual drawing on screen may be done by anything that your system supports from DirectX to OpenGL. This presumably ensures that it works on any version of Windows.
* Fully rewritten audio playback, now uses OpenAL interface and modern SDL-based sound library.
* On Android supports both "software" and "hardware" types of renderers (they are both OpenGL but use different approaches drawing sprites and effects).
* Removed AVI/MPEG video support (may be temporary...). The main reason is that in the old engine they were implemented using Windows-only DirectX interface and Allegro 4 was already providing access to these. SDL2 does not, and it may be an extra hassle to recreate them. So this is under question now.
* For similar reasons removed support for DirectX-related functions in plugin API. I'm afraid this will break some older plugins that require DirectDraw and similar things. Direct3D plugin maybe will continue working as it wants Direct3D renderer, and that is still present.


Other Notable engine/editor changes

Editor now requires .NET Framework 4.6 (was 4.5). NOTE: the compiled games DO NOT require .NET to run.

Full Unicode support. Editor and engine can work in Unicode mode, allowing practically any human language. ASCII/ANSI mode is still supported for backward compatibility. See "Text format" option in General Settings. Additionally, translations (TRS) have individual setting. More information on translations is here: https://www.adventuregamestudio.co.uk/forums/index.php?topic=59240.0

Improved key input handling, with the purpose for easing unicode input support. This is controlled by the "Use old keyboard handling" option in General Settings: setting it to "false" will use new handling mode with extended features. See "Script API" section below for more information.

New rewritten Android game player (aka "launcher"). Suitable for building for Google Play and similar stores, can read game assets from the android-specific packages (apk, aab).

Introducing Web/Emscripten port capable of running games in browsers.

Build Android and Web/Emscripten games from the Editor.

Editor supports multiple compressions for sprites, which may be selected in General Settings. Currently available: RLE (old default) and LZW.
Also, there's an option to optimize sprite storage format to reduce disk space whenever possible. This option is separate from compression but may be used alongside for the further effect. It's enabled by default in this version.

Editor supports packing multiple speech voxes, using files in the "Speech" subfolders (e.g. "Speech\french" subfolder will produce "sp_french.vox").
Engine can switch to a different speech vox by a script command (see below).

Editor supports packing custom files into the game (General Settings -> Compiler -> Package custom data folder(s)). These may be read in script using File.Open with "$DATA$" path token.

Engine supports "borderless full-screen window" mode in addition to the real (exclusive) fullscreen.

Engine supports scripts using functions and variables (imported) from any other scripts, regardless of the script module order in the project. These still have to be declared as "import" above their use though.

There's "GUI controls clip their contents" option in the General Settings (enabled by default). This clips texts to the control's rectangle.

Configuration for TTF fonts that let display both common TTFs and ones made specifically for AGS in the past as they were meant to be.
Fixed display of certain TTF fonts which previously had their heights calculated wrongly. This could lead to texts being cut of at the bottom due to the graphical surface being not large enough.

Custom font outline thickness and style, works for automatic outlines only. In the font properties you may set how thick outline is in pixels, and choose between "Square" and "Round" style.

Removed a limit of Overlays created at the same time (was 30).

Now has 16 max Audio Channels (was 8).

Select script editor's font in the editor's Preferences.

Zoom controls on almost all panels (sprite manager, cursor, inventory item, and so on).

Debug displays, such as showing room mask and character walk paths, are now implemented as non-blocking translucent overlays, allowing you to keep playing the game while they are on. (See "Debug" script command).


New Script API

- Expanded on_key_press callback, now supports two parameters: key code and key modifier flags: on_key_press(eKeyCode key, int mod); where "mod" argument contains key modifiers (ctrl, alt, shift, etc).
- In the new key handling mode on_key_press is called for each actual key press; e.g. combinations like Ctrl+Z will result in two on_key_press calls, one with eKeyCtrlLeft and second with eKeyZ.
- Implemented new on_text_input(int ch) callback which is called when the engine receives a printable character. This callback is essential for handling unicode chars in script.
- Similarily, expanded dialog_options_key_press with the third mod argument, and implemented dialog_options_text_input callback for receiving unicode chars during the custom dialog options state.
- Added eKey constants for Shift, Control and Alt keys.
- Added eKeyMod enum for key modifiers constants.
- String.AppendChar, ReplaceChar and Chars[] property are now working with the unicode characters.
- String.Format("%c") specifier will now be able to print unicode characters.
- Added Game.ChangeSpeechVox() and Game.SpeechVoxFilename, which work in a similar fashion to Game.ChangeTranslation and Game.TranslationFilename respectively.
- DrawingSurface.DrawImage() and DrawSurface() now accept optional source rect coordinates, so you can draw a chosen part of the sprite directly;
Code: ags
DrawingSurface.DrawImage(int x, int y, int spriteSlot, optional int transparency, optional int width, optional int height,
		optional int cut_x, optional int cut_y, optional int cut_width, optional int cut_height);

- Functions for getting drawing surfaces for room areas and regions, letting you paint them at runtime:
   static Hotspot.GetDrawingSurface(), static Region.GetDrawingSurface(), GetDrawingSurfaceForWalkableArea(), GetDrawingSurfaceForWalkbehind();
- Room.Exists(): tests if the room of certain number is available;
- Every function accepting file path now supports "$DATA$" location token, which lets you read game resources. This was added mainly for reading custom packed files, but will work with any game resource fwiw. Opening files like this will only work in read mode, writing will fail. Examples:
Code: ags
File *f = File.Open("$DATA$/MyDir/myfile.txt", eFileRead);

Code: ags
ListBox.FillDirList("$DATA$/MyDir/*.*");

- WaitMouse(): complements other Wait* functions.
- SkipWait(): skips current Wait (will normally only work from repeatedly_execute_always callback).
- All the Wait* functions now accept "0" as "no timeout", in which case waiting may only be interrupted using either corresponding input or SkipWait.
- All the Wait* functions now return a code telling how they were interrupted:
Quote* positive value means a key code;
* negative value means a -(mouse code);
* 0 means timeout or interrupt with a script command.
- AudioChannel.Pause(), Resume() functions and AudioChannel.IsPaused read-only property.
- AudioClip.PlayOnChannel() lets you play a clip explicitly on a certain channel, disregarding any audio type rules. Works with channels 1-15 now (channel 0 is kept reserved for a speech voice-over).
- Characters now may be scaled freely, not limited to 5 - 200% (new range is 1 - 32767 for technical reasons).
- Added Character.IdleAnimationDelay to let control idle view's animation speed.
- Hotspot.Name and Object.Name may now be set in script.
- Object.SetView() now resets loop and frame to 0 by default. Previously default was -1 which made object retain loop & frame, which was often unexpected, and could cause game errors.
- Object.ManualScaling and Scaling properties, now letting to scale an object by command similar to Character (previously objects were only scaled by the walkable area).
- Added new delay parameter to Mouse.ChangeModeView() to let control cursor's animation speed.
- Game.BlockingWaitSkipped: returns the last reason of the last blocking action interruption: this is same as Wait* function return value, but also works for skipped blocking speech, and so on.
- readonly Overlay.Width and Overlay.Height: let you know the overlay's size;
- Overlay.Transparency lets you change overlay's translucency without recreating its image.
- Overlay.ZOrder lets you to define overlay's drawing order on screen. Overlays are now sorted among GUIs.
- Speech.TextOverlay and Speech.PortraitOverlay: give access to the text and portrait overlays of a current blocking speech. In practice these are only available in repeatedly_execute_always callback. Among other things, these properties allow to detect appearance, removal, and change of the blocking speech; also calling Speech.TextOverlay.Remove() will work as a speech interrupt.
- System.Log(): prints into the engine log.
- Debug(2, 0) command that displayed walkable areas is superceded by Debug(2, n), where "n" is a mask type: 0 - none, 1 - hotspots, 2 - walkbehinds, 3 - walkable areas, 4 - regions. This command also works as a toggle switch, calling it with the same mask index will turn it off.
- Debug(5, n) command that displayed character's walk paths now also works as a toggle switch.


Known problems

...?


Other potential issue

* On Windows we currently build engine dynamically linking to SDL2.dll. This means one have to be put along with the game exe. Because this may be a hassle, I suppose we may later change this to static linking just like Allegro 4 was linked to the engine before.
* On Linux, if you are using our prebuilt binaries you should be fine, if not then you have to install SDL2 runtime libs on your linux system.
* Noticed there may be problems playing MIDI, again need to test more and fix.
* Anything we don't know yet about ....







In regards to building Web version of the game. This only works when you have "Web build component" installed along with the Editor. The new "Web" Build target should become available. If you check it, and rebuild the project, the Editor will deploy necessary files into Compiled/Web folder in your project.

Note that you cannot run index.html directly, it likely won't work. You need to create a web server with these files on it. There is a multitude of ways you can do that. For example I've been testing this using a simple Google Chrome app called Web Server for Chrome. You may find your own way.

For any questions regarding the Web port please refer to and post in dedicated forum thread:
https://www.adventuregamestudio.co.uk/forums/index.php?topic=59164.0
#104
AGS 3.5.1 - Beta 7
Full release number: 3.5.1.6

ACHTUNG!
This is a BETA version of AGS 3.5.1.
It's considered relatively stable but is not thoroughly tested yet and also may have planned additions.
Use at your own risk. Please back up any games before opening them in this version of AGS.
New settings in this version may make your project files unusable in previous versions after saving with this version.



For Editor
Spoiler
For Android
Spoiler

For Engine/Editor developers
Spoiler

Last update: 22th May 2021


Current stable version: AGS 3.5.0 P10 forum thread



This release is brought to you by:

- Alan v. Drake
- Crimson Wizard
- eri0o
- James Duong (implemented "--console-attach" option for Windows)
- Morgan Willcock
- Nick Sonneveld
- rofl0r
- Thierry Crozat (bug fixing)


Summary

3.5.1 is a minor update after 3.5.0, which contains mostly utility additions, fixes and perfomance improvements.
There's one minor change to game project, and one change to savegame format which had to be made to fix one old issue with overlays. This means that you will likely be able to downgrade your project from 3.5.1 to 3.5.0 with a simple manual edit in Game.agf, but saves made with 3.5.1 engine will not be compatible with 3.5.0. (You can still use old saves with 3.5.1 engine of course)

This is likely to be the last full version before transition to SDL2-based engine, which is currently in works and is planned to be released as 3.6.0.


What is new in 3.5.1

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

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

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

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

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

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

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

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

Windows:
- Windows version of the engine now reads global configuration file. It is looked up in "%USERPROFILE%/Saved Games/Adventure Game Studio/acsetup.cfg"
- Default log file location is now also in "%USERPROFILE%/Saved Games/Adventure Game Studio".
- Added "--no-message-box" command line option to hide message boxes when alerts are raised. These messages will be still printed to log (if one is enabled).
- Added "--console-attach" command line option to try attach to the parent process's console. This is useful if you run game from command line and want to see engine's log in the console.

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



More info...

New config and command-line options are documented in OPTIONS.md. They have to be added to manual eventually.

#105
AGS 3.5.0 - Patch 9
Full release number: 3.5.0.31


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 18th March 2021

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 (bug fixes, 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 9:

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

Also: updated Dark Theme with fixed category names in General Settings and link colors on Welcome pane. Download here.
NOTE: The theme files are found in %USERPROFILE%\AppData\Local\AGS\Themes (unfortunately AGS editor still lacks proper way to replace themes of same name afaik).

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

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


Changes in the Patch 8:

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


Changes in the Patch 7:

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

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


Changes in the Patch 6:

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


Changes in the Patch 5:

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

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

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

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


Changes in the Patch 4:

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

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

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



Changes in the Patch 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



#106
DOWNLOAD ObjectPool 1.0.2 MODULE

Latest source code may be found here
Git cloning address: https://github.com/ivan-mogilko/ags-script-modules.git

Requires AGS 3.4.0 or higher.



If you ever found yourself in a need to reuse a number of game objects you know that you must track which of these are currently in use and which are not. This basic module does that for you.

ObjectPool helps to keep track of a list of reusable objects. It does not matter what kind of objects are these so long as they have numeric IDs. It remembers which IDs are free and which are in use. It gives you next free ID by demand, and lets you mark used ID as a free one when you are no longer using it.

For an example of a use-case imagine making an arcade scene in AGS. Because AGS does not support creating objects in script you must create them in the editor and then reuse multiple times. Let's say that you've created 10 Characters to use as killable enemies and they have IDs from 4 to 14.

You put following code in the global script (it could be room script too, except you would probably use "room enter event" to set things up).
Code: ags
ObjectPool EnemyPool;

function game_start()
{
    EnemyPool.AddObjects(4, 14); // register character IDs from 4 to 14
}

Now, when you need a new enemy you ask ObjectPool what is the next free ID like this:
Code: ags
function SpawnEnemy()
{
    int enemy_id = EnemyPool.Acquire();
    if (enemy_id < 0) {
        Display("Whoops! no more dummy characters for enemies!");
        return;
    }
    Character* enemy = character[enemy_id];
    // set up character as necessary...
}

And when you no longer need this character, you mark it as unused like this:
Code: ags
function KillEnemy(Character* enemy)
{
    EnemyPool.Release(enemy.ID);
    // trigger some visual effects, hide character, and so on...
}

That's it.


ObjectPool API reference

Code: ags
    /// Adds a range of IDs into the list. You can keep adding more later and all the previous
    /// ones will be kept unless you call RemoveObjects or RemoveAll.
    void ObjectPool.AddObjects(int from, int to);
    /// Removes a range of IDs from the list.
    void ObjectPool.RemoveObjects(int from, int to);
    /// Removes all IDs.
    void ObjectPool.RemoveAll();

    /// Gives next free ID and marks it as "used". Returns -1 if no more free IDs are available.
    int ObjectPool.Acquire();
    /// Marks given ID as "free".
    void ObjectPool.Release(int id);
    /// Marks all the known IDs as "free".
    void ObjectPool.ReleaseAll();
    
    /// Gets number of acquired ("used") IDs
    int ObjectPool.GetAcquiredNum();
    /// Gets number of available free IDs
    int ObjectPool.GetFreeNum();
    /// Gets total number of registered IDs
    int ObjectPool.GetTotalNum();
    /// Gets pool capacity (may include empty slots!). This is for test purposes only.
    int ObjectPool.GetPoolSize();
#107
AGS 3.5.0 - Patch 8
Full release number: 3.5.0.30


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 16th February 2021

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 (bug fixes, 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 8:

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


Changes in the Patch 7:

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

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


Changes in the Patch 6:

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


Changes in the Patch 5:

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

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

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

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


Changes in the Patch 4:

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

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

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



Changes in the Patch 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



#108
This is a very old problem, but unfortunately old users seem to be not bothered by it, while new users may easily stumble on it.
If you go to the AGS main page here: https://www.adventuregamestudio.co.uk/site/ags/ you will notice "Resources" in the end of the page.
This section has links that lead to lists that are decade+ outdated: mostly from 2006, and actual resources may be even older.

The new users who join ags would use these links and get wrong impression on what is available. Then they try to use these, and get into all kinds of problems (not working at all, or not working out of the box with the newest editor).

Furthermore, the list of modules, plugins and templates presented in AGS Wiki (https://www.adventuregamestudio.co.uk/wiki/Category:Design_resources) is also outdated and not maintained anymore, it seems, as it does not include any of the recent modules. And these modules are not properly categorized in any meaningful way.

Indeed you can find something in Modules & Plugins forum thread, but firstly you have to know to look there, and secondly, searching for what you need there may be pretty complicated, unless you already know the title or correct term to look for.

This makes AGS website look rather weird. If you are an experienced user you may not care as you already know your way around, but if you are a new person, then you are stuck with outdated material and no instructions on how to use or upgrade them whatsoever.

I recall there was a lot of discussion back when AGS went opensource, and among other things people mentioned maintaining and reorganization of the website and resources. Unfortunately, nothing was done in this particular direction.


Therefore my suggestion is to:

1. Remove the outdated links from the homepage. It's better to not have links at all than to have links leading to unmaintained resources from 15 years ago.
Maybe replace this with a link to forum's "Modules & Plugins".
2. Plan a substitution for these lists. Ideally it may be something like a database with modules, plugins and templates uploaded similar to ags games. If that's too complicated, then perhaps organize a new list in the Wiki, keep it well categorized and maintained.
3. Plan on a place to backup the modules. A good option is a github repository, that way there will always be place to download from.

I dont want to suggest all the above should be done by website admins, I believe that looking for volunteers among AGS community is a necessity.
#109
AGS 3.5.0 - Patch 7
Full release number: 3.5.0.29


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 12th January 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 (bug fixes, 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 7:

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

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


Changes in the Patch 6:

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


Changes in the Patch 5:

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

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

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

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


Changes in the Patch 4:

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

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

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



Changes in the Patch 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



#110
Recently I found that "Worked on games" list may be difficult to navigate, and that it rather does not serve its purpose.

For example, take arj0n's: https://www.adventuregamestudio.co.uk/forums/index.php?action=profile;u=8169
90% of the list is "beta testing", which is useful if I wanted to know if a person's a reliable tester, but is a needless clutter if I want to find actual arj0n's games. In the latter case I'd have to scan all list line by line.

Additional problem here also is that anyone can add you to their game as a co-participant, using any wording they like (choice of terms is not regulated).

Wonder if anything could be done about this in the future. For instance, maybe it could be made so that games added by this person to database him/herself are listed first, or separated somehow?

#111
AGS 3.5.0 - Patch 6
Full release number: 3.5.0.28


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 30th December 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 (bug fixes, 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 6:

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


Changes in the Patch 5:

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

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

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

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


Changes in the Patch 4:

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

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

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



Changes in the Patch 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



#112
Hello.

I am looking for an artist to draw 1-2 scenes for a technical demo I was making, and which I hope to resume: https://www.adventuregamestudio.co.uk/forums/index.php?topic=58285.0

Original art was made by Blondbraid in 1280x720, but keeping graphic style 1:1 is not cruicial for this game, as it's a technical demonstration of some AGS features, and may have each scene done in separate styles and even resolutions.

At the moment, I have an idea of one scene that would look good if done in hi-res. Maybe there will be couple of more in the future, but I am not yet sure what they would be, as it mostly depends on whether I have a good idea to script.
So, this is more a per-scene work, not until game is complete.

Because since 3.5.0 AGS allows smaller rooms, and zoom-in rooms, art may be drawn in any resolution in theory. But I'd prefer something in the range of 640x400 to 1280x720.
For the scene in question, I'd need one relatively big background (about 2-3 game screens large), with either a natural or city-scape enviroment, couple of simple objects and also two characters with just enough animation to walk left/right and interact with an object behind them. In the worst case, these two may be "clones" of one.

If you are interested, please PM me and I explain further details (may draw a concept sketch too).
#113
The Problem

In the old times AGS games stored everything in the game folder. Around AGS 3.0 the saves were by default stored in user's docs ("Saved Games" on Windows), but config file remained strictly in game folder. In 3.3.5, I think, user config location was also moved to "saved games folder", by request, because in some circumstances it was not possible to write user config in game folder.
Numerous users did not like having saves in another folder, and around same time (3.3.5 or 3.4.0) an option was introduced to let player customize save game location, and just put saves where they like (even in same dir). Iirc this was primarily done at that time for the sake of Steam releases, as they could only sync saves which were present in steam game folder (maybe?).
However the user config is still written strictly in old save location and currently there's no way to change that. The reason was quite silly: savegame location was written in user config, so it's impossible to, for instance, learn user config location from save location without reading user config first... so at that time I could not figure out a way to resolve this.

This situation creates number of problems, starting simply with ags games cluttering obscure place on disk with their config files, which some users do not like, and followed by users being confused with the general rules of how it works. For example, user may try to edit acsetup.cfg in game folder, only to find out that nothing has changed. This may be especially annoying on Linux, where we still do not have a standard setup program.
I regularily received questions about this in the past, both on forums and in github issue tracker.

Goals

What I'd like to find is a nice way to support two "modes":
1. User config stored in default writable location defined by OS.
2. User config stored in custom location that could be defined by both game author and player. This custom location could be just the game dir itself.

At the same time the working of this system must be clear to players.

Questions and some thoughts

1. How to define the above "mode"? Supposedly this may be a setting in "default config" that comes with a game.
And what actually should be default setting for this mode (game dir or os-specific location)?

2. Is there a nice way to tell that user config is where saves are, thus merging two settings? OTOH someone may like to have user config in the game dir and saves somewhere else - is that also a valid case?

3. Speaking of user config inside the game dir. Suppose the game files could be overwritten, e.g. by installing updates, either by hand or by other system like Steam.
In such case even the config file could be overwritten. And if user config is written to same file as default config, it will likely be lost.

This is where I realized that we might need to make another change and separate default and user config by filenames. I.e. instead of calling everything "acsetup.cfg", call default config "default.cfg" and user config "user.cfg". Then we'll have a nice distinction even if user config is written to the same dir. Additionally, it will be more clear to players what "default config" is, because it will be named so. And it will be possible to "reset to defaults" by deleting user.cfg - even if it's in the game directory.
How will such change affect other problems? maybe it will make certain solutions easier?

One of the vague ideas I had in the past is to detect user.cfg in the game dir, and if it's present then use that, and if it's not then use writable OS-specific location. The problem with this is that the abscence of user.cfg in game dir could mean simply that no user.cfg was yet written, and therefore not really determinative.
#114
So, here's the engine with SDL2 backend, for testing:
http://www.mediafire.com/file/xp8wcfqujkmjp1a/acwin-3.6.0-sdl2-test.zip/file

Repository branch: https://github.com/adventuregamestudio/ags/tree/ags3--sdl2

The updated fix list for SDL2 port: https://github.com/adventuregamestudio/ags/issues/1148

It's based on AGS 3.5.0 with some minor additions, which are probably irrelevant now, and then have Allegro 4 library switched to SDL2.
This is still WIP, and I am interested to know if you can find anything non-working, unexpected, and so on.
If successful, this will become a 3.6.0 release.

EDIT:
The primary reasons for changing libraries were:
* better modern OS support,
* better device support (e.g. Allegro 4 did not have any native touchscreen support, and SDL2 does),
* because Allegro 4 is long discontinued we are stuck with ancient utility libraries based on Allegro 4, or have to write our own.

We still are going to use parts of Allegro 4 embedded into the engine, because SDL2 did not have alternative for everything (Allegro is just a more wholesome library), that's easier approach at the moment.
Raw bitmaps and drawing functions are prime example, as SDL2 has only rudimentary support for that (it's more focused on texture-based gfx).


-----------


Methods to use:
1) Copy to the AGS 3.5.0 Editor directory, backing up old "acwin.exe" (well, or make a full copy of AGS Editor for this test and do it there), rebuild your game, and manually copy SDL2.dll to Compiled/Windows folder (as editor won't do that automatically). Then run resulting game.
2) Copy acwin.exe + SDL2.dll to any existing AGS game, and run acwin.exe. It will use existing setup (except for sound iirc, which will probably be always on).

NOTES:
* SDL2 is currently provided as a separate DLL, which must be present aside with the game exe. But it might be possible to link this library with engine, this is something that I'd look into afterwards.
* Software renderer is now not fully software, to present final game image it will use a method automatically created by SDL2, depending on your system. Which may be DirectX or OpenGL. But you cannot control this now (maybe we will add this to config settings later). Other renderers should work as before.
* This port will potentially support resizable window, but I think I forgot to enable this, so will later.
Will add more notes if remember or find anything noteworthy.
#115
That became apparent long time ago that developing AGS further becomes difficult while keeping the "luggage" of old functionality, which was mostly kept for running old games and easier project upgrade.
So this is overdue, and we are planning to introduce a "break" in the versions, where the updates are split into two "branches". We currently call these branches "ags3" and "ags4", but these are informal names, and may be given proper names later.

"ags3" is going to be a fully backward compatible version, based on the latest AGS 3.5.0. From now on it will only receive bug fixes, perfomance and utility updates. There will be no new script functions or game features whatsoever.
There's at least one planned update currently, which number will probably be AGS 3.6.0, and its main feature will be change from "Allegro 4" to SDL2 library. AGS used "Allegro 4" for nearly two decades, but it's discontinued, and often not very well suited for the contemporary OSes. As this change comes with new potential problems, there may be lesser updates in the middle (like 3.5.1 etc) when necessary, until SDL2 update works well enough to be officially released.

"ags4" will be a breaking change version, also based on AGS 3.5.0, but having all the deprecated functions cut off. It may also have other things removed, such as certain plugin functions support which are not convenient to keep. This will be the main branch to develop AGS further. It will also be updated to SDL2 library.
It's not known at the moment how it will be developed, there are several priority tasks, but it mostly depends on how much time contributors can spare, so it's too early to talk about any new features.
We do not yet know what number will this version use, but probably we'll skip couple of them to reserve for "ags3" branch, so somewhere in the range of AGS 3.7.0 - 3.9.0.


Related short-term roadmap ticket on github: https://github.com/adventuregamestudio/ags/issues/1121
#116
AGS 3.5.0 - Patch 5
Full release number: 3.5.0.27


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 2nd October 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 (bug fixes, 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 5:

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

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

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

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


Changes in the Patch 4:

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

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

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



Changes in the Patch 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



#117
Site & Forum Reports / New AGS releases
Sun 16/08/2020 19:02:15
I've lost posting permissions in the AGS Releases section, which is my own fault, but now there's no one who can post there besides forum admin (probably?).
I had to post new patches in "Engine development" section for now, but I fear people won't notice them there.

Is it possible to move two last 3.5.0 patch threads to Releases?
Patch3: https://www.adventuregamestudio.co.uk/forums/index.php?topic=58276.0
Patch4: https://www.adventuregamestudio.co.uk/forums/index.php?topic=58350.0
#118
AGS 3.5.0 - Patch 4
Full release number: 3.5.0.26


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 16th August 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 (bug fixes, 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 4:

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

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

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



Changes in the Patch 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



#119
AGS Cameras Tech Demo

This game in production is a technical demo meant to illustrate and, perhaps, teach usage of custom Viewports and Cameras, which were introduced in AGS starting from version 3.5.0. It is made in hopes to raise awareness of this new feature and it's potential practical uses.
"Technical demo" means that it's not a real game with a story, but rather a collection of scenes with very simple gameplay elements. The purpose is to demonstrate interesting ways of using viewports/cameras in game.
This game will be released as open source, with possible exception to some of the game art.

Latest WIP version download:
https://www.mediafire.com/file/108lff2fpdscpq5/camdemo.zip/file

The latest source is available here:
https://github.com/ivan-mogilko/ags-camdemo
The project and code is under CC BY license (completely free), but art is under CC BY-NC-ND (non-commercial, personal use only).


Screenshots:




Credits:

* Coding: Crimson Wizard
* Art: Blondbraid, Alan v.Drake, lorenzo

Progress

* Scene 1: practically done, may need polishing.
* Scene 2: practically done, may need polishing.
* Scene 3: it is there, but it has no real interactions (I could not decide if it needs any).
* Scene 4: practically done, may need polishing.
* All game: something around 4/5.
#120
AGS 3.5.0 - Patch 3
Full release number: 3.5.0.25


For Editor
Spoiler

For Android
Spoiler

For Engine/Editor developers
Spoiler

Released: 12th July 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 (bug fixes, 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 3:

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

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

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

Windows:
- Another attempt to fix game becoming minimized when quitting with error from the Direct3D fullscreen.

Templates:
- Verb-Coin template now includes save & load dialog.



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!



SMF spam blocked by CleanTalk