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

Messages - Crimson Wizard

#2601
I finally had time to test this properly, and I confirm that DynamicSprite.CreateFromFile does not work on Linux, regardless of the path.

File.Open does work for exactly same file path.

This means that either:
- DynamicSprite.CreateFromFile does or does not do something that File.Open does (to path or to file);
- The bitmap loading is broken on Linux/OSX.

The script I used for the test:
Code: ags
// room script file

function TestLoadImage(String filename)
{
	if (File.Exists(filename)) {
		Display(String.Format("%s detected", filename));
	} else {
		Display(String.Format("%s NOT detected", filename));
	}

	File *f = File.Open(filename, eFileRead);
	if (f != null) {
		Display("Opened %s", filename);
		f.Close();
	} else {
		Display("Failed to open %s", filename);
	}

	DynamicSprite *dspr = DynamicSprite.CreateFromFile(filename);
	if (dspr != null) {
		Display(String.Format("Sprite was created from %s", filename));
		dspr.Delete();
	} else {
		Display(String.Format("Failed to create sprite from %s", filename));
	}
}

function room_AfterFadeIn()
{
	TestLoadImage(String.Format("saveHD%d.bmp", 0));
	TestLoadImage(String.Format("$SAVEGAMEDIR$/saveHD%d.bmp", 0));
}

First test tries to open file / create image in the game's directory, another in the save dir. Result is the same (assuming you have bmps in both).

For both paths the Windows results:
- saveHD0.bmp detected
- Opened saveHD0.bmp
- Sprite was created from saveHD0.bmp

The Linux results:
- saveHD0.bmp detected
- Opened saveHD0.bmp
- Failed to create sprite from saveHD0.bmp
#2602
So, it's a question of whether CreateFromFile is working properly on Linux and Mac; whether it a) works at all and whether it b) works with particular paths.
I guess the easier test could be to use File.Open.

Speaking of system differences, besides from being unix systems, Linux and Mac have case-sensitive filepaths, so that might also affect file reading.



Quote from: Dualnames on Mon 17/10/2022 05:59:52So the issue from what i can tell is besides being able to access the savegamesdir (I have cloud saves so it was trying to access the directories and files)
Is that it's unable to save into the $SAVEGAMEDIR$.

When there is a space on MAC, the Application Support part should be Application\ Support, otherwise it won't be able to read it.
So when the files are not there, it doesn't crash, but when they are it crashes being unable to read from the directory.

So, this is a problem with incorrect $SAVEGAMEDIR$ path on MAC?

When you say "crashes being unable to read from the directory" here are you still referring to the same "null pointer" error when accessing the dynamic sprite pointer, or is it another error?
#2603
Quote from: Khris on Mon 17/10/2022 01:08:45You say the file exists but have you checked the result of Display("$SAVEGAMEDIR$")?

These tokens are not resolved to a path in Display command, only in File commands (and ListBox's FillDir).
There is an open feature suggestion for giving a function that returns these resolved values, but it has not been implemented yet.

You may find out what is the paths are by reading the engine logs, or running the engine or game executable with "--tell-filepath" command arg.
this page mentions how to do this: https://github.com/adventuregamestudio/ags/blob/master/OPTIONS.md

#2604
Quote from: Dualnames on Sun 16/10/2022 23:48:46This crashes. No matter what.

Do I guess correctly that the crash is at bigSave.Resize() because of null pointer, and you get the "null pointer" script error on that line?

Have you tried testing for CreateFromFile return value right after it is called?

Testing if sprite was loaded correctly is a right approach anyway. CreateFromFile returning "null" is a valid behavior, this may happen in case the file does not exist, or could not be read for any reason (corrupted etc). Game script should not rely on this always succeeding.

Quote from: Dualnames on Sun 16/10/2022 23:48:46The wait doesn't exist on my end.

Could you please clarify what does that mean, what is "your end"?
#2605
Quote from: Dualnames on Sun 16/10/2022 10:46:17it is reading the correct file, for a second even the sprite is properly assigned to the UI button, and then it goes back to no graphic and then when the script reaccesses it it returns null. Which is absolutely weird.

If the bigSave variable is assigned properly first, then this means that the CreateFromFile call succeeded, at least  the first call.

Do you have bigSave variable reassigned anywhere else in script? How often, under which conditions do you have this line called? In which context do you have this line in your script?

E.g. do you call it in a loop? or repeatedly over time perhaps?
#2606
Since I've been doing some tech support for a while now, I noticed that many users cannot find "Beta" download easily.

If you go to the Downloads page, you will see the latest stable download as a big blue button. However the Beta version link is hidden under the "Other downloads and resources" below, where it's not marked in any special way but looks like another regular link under "AGS Work in Progress Releases", below several other links. I think this makes this link not easy to find, and require user to actually go investigating further without knowing what they may find at all.

In overall this page unfortunately presents a collection of links as a "wall of text" without having more important links to stand out.

My proposal is to redesign the page and how the editor downloads are presented.

For example, the latest stable download may be left as a button as-is, but then all the available recent editor versions could be presented in a table right below. Something like:
* Latest stable version | download installer | download zip | forum thread
* Upcoming beta version | download installer | download zip | forum thread
* Previous stable version | download installer | download zip | forum thread
* Nightly builds | a link to the currently active build server, which points to the active branch


EDIT: perhaps "previous stable version" is not really necessary there. Maybe instead it's better to have a separate table of older versions, including 3.2.1 and 2.72 etc.
#2607
Quote from: eri0o on Fri 14/10/2022 13:01:58Uhm, linked audios, I had not understood that. I need to check but I think maybe audio is referenced in the linked audio frames, in the project files, by "ID" instead of the script name, and if you delete an audio and reimport with the same script name, it will still change the "ID".

The frames do not reference a real ID, but the generated "semi-unique" clip index, that does not change even when you are reordering items, if I remember correctly.

But that's not the main point IMO; even if it were mentioning a script name, logically the frames should loose that reference as soon as the clip is deleted. Because editor does not know that you are going to replace the clip, it thinks that you are deleting it for good. So normally it would have to remove all the references.

The proper usage would be to not delete clips and do the replacement, either automatic or manual (with a command, if automatic does not work correctly).
#2608
Quote from: eri0o on Thu 13/10/2022 21:13:04I had an idea for refactor here, instead of the type being a thing, having different versions of this class from the same interface that each implemented their own behavior instead of all those IFs per type.

Are you speaking of a virtual inheritance? In such case these objects would have to be allocated dynamically too, one at a time, and accessed through a pointer to a base class.

Alternatively you could have a pointer to vtable in each object; then the object itself could be same struct, allocated regularily, but have a pointer to table of functions that may be different (this is C-style of override, seen, for example, in a Allegro4 BITMAP struct).

Quote from: eri0o on Thu 13/10/2022 21:13:04I don't know if this helps yet, but was looking at it and in theory this would reduce the branches.

In theory, majority if not all of these if branches may be removed by replacing if/else with a switch, similarily to how it was done with ReadValue:
https://github.com/adventuregamestudio/ags/blob/master/Engine/script/runtimescriptvalue.h#L316

I tried that recently, but found that it actually reduced the fps a little in a project I've been testing with, so I decided to leave for later.
Maybe I did something wrong, or the test was wrong. Or this particular branching was not the main problem for that particular project.

EDIT:
My belief is that ideally there should not be any branching or behavior switch at all, and all the memory access implemented similarly, somehow.
One major reason this was written in the first place was because AGS compiled script assumes 32-bit pointer size, so it won't work with 64-bit systems. Couple of people have suggested to implement a virtual memory instead, and use virtual 32-bit addresses instead of the real ones, which might fix this issue.
I suppose this is what Nick Sonneveld started to write in one of his experimental branches few years ago.
#2609
Use a big background object with a sky and move it along with a camera. This is generally how parallax is done in AGS.

If it makes it difficult to edit the room:
- set a small dummy sprite to that object in the editor;
- set a proper sprite in script, in room_Load event.

OR

- the modern editor allows you to hide certain objects in the room, by finding them in a topbar's drop list, and unticking "eye" icon.

Alternatively you may draw the sky upon the room's actual background, and redraw as camera moves, but that will make performance somewhat slower; thus I still recommend the object.
In case you are wondering, drawing is performed using DrawingSurface, which you may get for the room background:
https://adventuregamestudio.github.io/ags-manual/DrawingSurface.html
https://adventuregamestudio.github.io/ags-manual/Room.html#roomgetdrawingsurfaceforbackground

#2610
First of all, to clarify, this "crash" is not a program crash, but engine reports a "null pointer" error in script because bigSave was not assigned? So, the issue is not really that it crashes (it errors logically), but that it cannot create a sprite from the file?

Where the file is located, and what is the save game dir? The engine log should print the game paths, including save dir, could you double check that?

How is the file supposed to appear in the save game dir in the first place?
#2611
Quote from: Baguettator on Sun 09/10/2022 12:13:57is AGS editor going to work with PNG files for functions like DrawImage or DynamicSprites.CreateFromFile ? As far as I know, CreateFromFile can't use alphachannels, and sometimes it is a problem.

This is of course a good idea to switch to/support using PNGs everywhere, so likely in the future.

Quote from: Baguettator on Sun 09/10/2022 12:13:57Another question was in my mind : is it convenient if we get the possibility to have items in listboxes that are cut if the items' text is too long, ending with a "..." ? It could be very nice to have this feature independantly of the "Guicontrol cut their content" option, because for listboxes it's a special case.

Again for listboxes : could we have directly in the editor a way to "change" the visuals for their arrows ? And eventually for a slider to scroll them ? It could minimize the scripting, because for now we have to script and create tons of buttons for that.

I don't know, but all of the above is possible to implement by scripting custom list box controls, using DrawingSurface (without any extra buttons too).
#2612
Quote from: Wiggy on Fri 07/10/2022 20:07:20Having done a few translations I think I can help. If your translated string is longer than the original string, AGS will not substitute the text. For designers, if you want translations for your games then add about 10 spaces after every dialog          like that. For translators keep it short. :grin:

This is not true, the way AGS is substituting translations is not related to the differences in strings' lengths in any way. If that were the case, I imagine this would have been reported like a bug long time ago. The only condition is to have a key string in TRS identical to the string in the game.

This is very easy to test if you make a dummy game with translations from one of the templates (takes 5 minutes to try).
#2613
For the reference, which version of AGS are you using?

I don't remember when we did this, but in recent versions AGS supposed to save acsprset.spr to a temp file first, and replace the actual file only if writing was successful.

Another thing, in the most recent AGS 3.6.0 you can completely restore acsprset.spr if you still have got all the sprite source files you used in same locations (AGS saves the paths to these source files when you import them). This is done using a command in File menu.

But of course, making your own backups regularily is a good idea.
#2614
Updated to RC 1
The update is posted in a new forum thread here:
https://www.adventuregamestudio.co.uk/forums/ags-engine-editor-releases/ags-3-6-0-release-candidate-rc1

Changes since the last beta:

Editor:
- Expanded UI color theme format, support global color options and allow missing entries.
- In Preferences replaced "Import Color Theme" with a "Open Theme Folder", as a temporary solution for managing theme files.
- Fixed autocomplete crashing the editor if there was an import declared with type and variable having identical names, and user tries to type that variable's name and a dot to access its members.
- Fixed matching or mismatching braces were not highlighted consistently at all times in regular and dialog scripts.
- Fixed object selection combobox on a property grid was not working correctly if any color theme is applied.
- Fixed blurry sprites in the sprite list (usually happened with high-res sprites).
- Fixed editor plugins might cause errors if calling Script.SaveToDisk() (e.g. SpeechCenter plugin).

Engine:
- Added missing "DrawSprite" function for "agsblend" plugin stubs.
- Fixed loading pre-3.5.0 games on big endian systems.
- Fixed parser's textbox not drawn on the correct position in dialog options.
- Fixed AudioChannel.PositionMs incorrectly returning 0 right after Seek.
- Fixed voice-over becoming disabled if Game.ChangeSpeechVox() was called again with the active vox's name.
- Fixed ListBox.FillSaveGameList() for games with custom save extension.
- Fixed Overlay.SetText() could lead to errors and unexpected behavior.
- Fixed overlays drawn as textwindows could be displayed with offset after restoring a save (again).
- Fixed Software renderer displaying a game frame misaligned in fullscreen, if there are black side borders.
- Fixed mouse cursor could leave the game screen on some systems, and mouse.x, y values reporting offscreen coordinates.

Android:
- Implemented two touch-to-mouse control scheme (selectable in config), for one finger emulating LMB only, and for two fingers emulating LMB and RMB.
- Support relative motion speed setting for touch-to-mouse emulation.
- Fixed on-screen keyboard wasn't printing characters.

OSX:
- Restored Ctrl+LMB working as a RMB on Mac.
#2615
AGS 3.6.0 - RC11
Full release number: 3.6.0.46


For Editor
Spoiler

For Android
Spoiler
NOTE: the Editor now includes Android build component letting you prepare your own games for Android
[close]

For Engine/Editor developers
Spoiler

Released: 25th March 2023

Previous stable version: AGS 3.5.1 P19 forum thread


This release is brought to you by:

- sonneveld (porting engine to SDL2)
- Alan v. Drake (improvements, fixes)
- Cameron Cawley [ccawley2011] (fixes, improvements to SpriteFont plugin)
- Crimson Wizard (stuff :))
- Dominik Mierzejewski (fix)
- Donovan Watteau (fix)
- eri0o (updated Android port, Web port, Editor improvements, etc)
- fernewelten (new fonts outlining, improvements to script compiler, fixes)
- Francesco Ariis (fixes)
- Morgan Willcock (improving templates, help with CI)
- Pablo Navarro [panreyes] (fixes)
- ChamberOfFear (improvements)
- rofl0r (fixes, suggestions)
- Thierry Crozat (fixes, plugin update)
- vga256 (fixes)



What is new in 3.6.0

AGS 3.6.0 is another big change to AGS.
First of all, 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 continuously postponed.
Secondly the Editor and Engine now have full Unicode support. This means that you may use any language whatsoever in scripts, object descriptions and custom properties, as well as translations; so long as you also provide proper unicode fonts.
Third, we finally have expanded a list of platforms that the Editor can build for: now this includes Android and Web (Emscripten) port.

For more information please make sure to read "Upgrading to AGS 3.6" topic in the manual: https://adventuregamestudio.github.io/ags-manual/UpgradeTo36.html


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

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

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

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

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

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

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

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

OSX:
- OpenGL renderer is now supported on MacOS.

Web / Emscripten:
- Initial port release.

Windows:
- Installer will create program links with three-digit version in the name.

Plugins:
- Added SpriteFont plugin to the list of builtins, for ports that use ones. SpriteFont plugin is updated to support custom "Clifftop Games" font variants.

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



KNOWN ISSUES
* MIDI no longer plays on its own on Windows. For MIDI you (and your players) must install "sound banks" (also known as "sound font"). Please refer to this article: https://github.com/adventuregamestudio/ags-manual/wiki/MIDI-playback
* AudioChannel.Position and AudioChannel.Seek do not work for MIDI and MOD sounds. Try sticking to PositionMs and SeekMs for now.
* There are reports about Direct3D not being able to restore the fullscreen mode after alt+tabbing occasionaly.
#2616
So, this basically stops working correctly when moving from 3.5.0 to 3.5.1?

Note that I haven't yet looked into the issue, only want to gather more details about possible regression.
#2617
Quote from: arj0n on Thu 06/10/2022 15:37:25I'm not sure if this is related to me having switched to v3.5.1.21, but I'm sure it did work correct before

Please also clarify, what did you switch from?
#2618
I have this unusual usability problem, likely because I have mod rights in certain threads, "Quick edit" button also shows for me on other peoples posts, and I keep clicking on it occasionally when trying to reply... Good thing I was able to notice what i do wrong before saving the post.
Is there a way to make it more distinct when it's not on my own posts perhaps? I don't want to remove someones text by mistake...
#2619
Quote from: glurex on Wed 05/10/2022 05:49:31I don't know why, but in this version (3.5.1.22) I can't access to debug via keyboard (for example, ctrl + x for teleport to any room). Obviously the option is setted True in General Settings. Anyway I made some gui buttons with "(Debug, x, x)" to solve this so it's not a big issue.

Someone else has the same problem?

It works for me. Could you post a script you were using for keyboard controls?
#2620
Quote from: grahfmusic on Mon 03/10/2022 22:43:14Unfortunately, it is using the Ogg Theora video, considering it has become an obsolete codec since VP8 and VP9.   Is it difficult to integrate more modern open-source codecs into AGS?

The video playback is fully implemented inside the plugin, it's not using AGS own functionality to play them. So there are two separate questions:
* video support in this plugin,
* video support in AGS itself.

I guess it's easier to do in plugin first, since it already has a non-blocking playback. AGS would require to reimplement video controls, and add more sophisticated playback script API to support the same thing.

Unfortunately, I have no idea what codecs VP8 and VP9 are, what are they played with. I understand the principles of programming video, but do not know alot about formats and codecs.
SMF spam blocked by CleanTalk