Upgrading to AGS 3.4

AGS 3.4 introduces a number of significant enhancements to game creation process.

Building game for multiple platforms

AGS can now compile and deploy your game for more than one target platform. Currently Windows and Linux are officially supported, but other may be added in following updates. Check the "Built target platforms" option in the "Compiler" section of the General Settings.

NOTE: for deploying your game for Linux you need to have a Linux-related utilities to be placed in the "Linux" folder at your AGS Editor installation. Those files are distributed along with the official AGS release.

Custom game resolution

Your native game resolution can now be anything, not limited to predefined variants anymore.

Similarly, the engine is now capable of running any game in any display mode your system supports. To achieve this it uses scaling filter of player's choice, and additional simple image stretching when required. The setup program has been altered to reflect this feature.

Script API selector

You can now choose the variant of Script API (built-in functions and properties available for use) with two switches in the "Backwards Compatibility" section of the General Settings.

One switch is called "Script API version" and defines the topmost level of built-in script content that you want to enable for your project. It is suggested to set this to the highest possible value. However, there may be cases when you load an older project in the newer version of AGS, and new built-in function names conflict with names in some of the scripts you used in your project. In such cases you may decide between fixing your script or lowering AGS API version. The latter will let you compile game scripts without any changes, at the price of not being able to use newer built-in functions.

Second switch is called "Script Compatibility Level" and defines the lowest level of built-in content. It is useful if you wish to keep using some of the old functions that were declared obsolete by newer version of AGS. You do so by setting this switch to version that still had those functions.

NOTE: You may change those two settings anytime if you'd like to experiment, or your plans has changed. It is recommended to do full game rebuild after you do so though.

Mutable custom properties

Since introduction Custom Properties could not be changed at runtime, they had to keep their default values set in the Editor throughout the course of the game. Now this restriction was eliminated and you can change any existing custom property in game script, using appropriate SetProperty and SetTextProperty functions:

Character.SetProperty, Character.SetTextProperty, Hotspot.SetProperty, Hotspot.SetTextProperty, InventoryItem.SetProperty, InventoryItem.SetTextProperty, Object.SetProperty, Object.SetTextProperty, Room.SetProperty, Room.SetTextProperty

Besides, the number of properties is no longer limited by 30, you may make as much of them as you need for your game.

Extended WFN fonts

WFN (bitmap fonts) can now have up to 256 characters (as opposed to previously supported 128). You may need a specialized editor to create such fonts (for example, there is a good Editor plugin around meant for this task), and AGS will properly draw any of the 256 characters.

New script features

First of all, you can now create your own managed structs and objects of their type in script. The difference from common structs is that you use pointers to work with these objects, and can pass them around as function parameters and function return values as well. IMPORTANT: there is a big limitation for user-defined managed structs now, it is that they themselves cannot have members of pointer types (or dynamic arrays). We suppose that this restriction is only temporary and hope to remove it in future updates.

You can now have some new forms of loop in your script, in addition to previously existing while. First is do..while kind of loop that always performs its commands at least once before checking end condition, second is for loop that lets you initialize internal variable, define end condition and write iteration - all in its header. Another introduced command is switch. One switch can replace a long list of if and else if blocks.

See: switch, do..while, for, break, continue, managed, new

Custom Dialog Options rendering extended

In the past the custom dialog rendering was strictly tied to mouse movement and clicks. Now it is extended to give you more freedom in setting it up.

Two more related callbacks are added: dialog_options_repexec - that is an analogue of repeatedly_execute function, but is called only while dialog options are displayed, and dialog_options_key_press function, which is called whenever player presses a key when dialog options are on screen.

The dialog_options_mouse_click will now be called always, even if user clicks on the option, but on other hand option won't be run without explicit command: RunActiveOption.

Along with RunActiveOption, DialogOptionsRenderingInfo struct received another member function: Update. It forces options GUI to redraw itself, hence may be used to implement custom animation, or similar behavior.

IMPORTANT: The dialog_options_get_active callback was deprecated and won't be called, at all. You will need to slightly change the logic of your script. In most cases it may be enough to simply rename dialog_options_get_active to dialog_options_repexec.

NOTE: For backwards compatibility you may use an option in General Settings called "Use old-style custom dialog options API". This will disable all the new stuff, but return dialog_options_get_active and make dialog_options_mouse_click behave as it did before.

For detailed information see: Custom dialog options rendering

Some functions object-ized

obsolete function/variable replace with
GetRoomProperty Room.GetProperty
ProcessClick Room.ProcessClick

REMINDER: you can also use "Script Compatibility Level" switch to enable old functions.

System limits update

The maximal number of GUI Controls per GUI is no longer limited. The maximal number of script modules is no longer limited.