AGS 3.6.2 - Release Candidate (RC 3)

Started by Crimson Wizard, Tue 11/02/2025 18:20:38

Previous topic - Next topic

Crimson Wizard

AGS 3.6.2 - RC3
Full release number: 3.6.2.9


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: 13th April 2025

Previous stable version: AGS 3.6.1 P10 forum thread


This release is brought to you by:

- Alan v.Drake (palette fix)
- Crimson Wizard
- edmundito (some fixes)
- eri0o
- homelightgames (scalable images for the wizard dialogs)
- rofl0r (couple of compatibility reports & fixes)


Summary

3.6.2 is planned to be a second update to 3.6, focusing mostly on convenience of existing Editor and Engine features, and expanding existing script commands. For a quick mention, the noteable changes are:
- you may create object event functions in any script of your choosing (except room events);
- a support for loading saves from older versions of the game;
- dynamic arrays have Length pseudo-attribute, letting you to read their length in script;
- dialog events (in "on_event") may let writing custom dialog handling in script easier.
But there's more.

As usual, please refer to "Upgrading to AGS 3.6.2" topic in the manual for further information on most outstanding changes in this version:
https://adventuregamestudio.github.io/ags-manual/UpgradeTo362.html

The full changelog follows.


What is new in 3.6.2

Common:
 - Event handler function are now allowed to be located in any script module.
 - New naming rule for the voice clips: full char name, followed by a number, separated by a dot, e.g. "RogerTheGreat.1234.ogg". The old rule may be enabled again by a switch in "Backwards Compatibility" settings.

Editor:
 - In "Start New Game Wizard" game template selection now displays template's description right in the dialog.
 - "Game statistics" now have Ctrl + F2 shortcut instead of F2.
 - F2 can be used for starting editing names of items in the Project Tree (ones that support that) and folders in the Sprite Manager.
 - Added "Game Speed" property in General Settings.
 - Added "Use old-style voice clip naming rule" property in General Settings, it lets to select whether the game should expect old-style voice clip filenames (4-letter char name followed by number) or the new one (full char name, followed by a number, separated by a dot).
 - GUI selection in settings is now done using drop-down lists which list all eligible GUI types instead of having user to type GUI number. The setting will be automatically fixed if a GUI is removed.
 - Property Grid now displays Custom Properties right in the main properties list for each item that supports them.
 - Added "WrapText", "TextPaddingHorizontal", "TextPaddingVertical" properties to GUI Button.
 - GUI Labels can select full range of Alignment values in their TextAlignment property.
 - Added "TurnWhenFacing" property to Characters.
 - Textual GUI controls can now select "Null Font" as their font: this will prevent any text to be drawn even if one is assigned, and make it have zero size (when it matters).
 - Property Grid and Room's navigation bar now display object's description along with the script name on the drop-down list labels.
 - "Events" tab on the Properties Grid now has "ScriptModule" selection, which lets define in which module should the related script functions be generated and looked for. The GUI Controls use a ScriptModule set in their parent GUI, and Room events always has a fixed room script selected.
 - Added "Open Recent" submenu in the File menu.
 - Sync script editor's commands in Edit menu with the context menu.
 - Added "Toggle Line Comment" command to Edit menu for scripts.
 - More panes in the Editor are DPI-aware (rescale well with the system font scaling).
 - Editor tabs now display icons indicating their contents (may be disabled in Editor Preferences).
 - Room panel tabs now display room names.
 - Editor will now remember certain window states: "Sprite selector" window and splitter position, splitter position in "Sprite manager".
 - Support reordering folders in Project Explorer with drag & drop.
 - Support importing plain script files: ash, asc or both, - besides script modules (*.scm).
 - On "Color Finder" pane also display actual RGB values that the engine will use. They may be different from requested RGB, because historically engine limits drawing color's RGB precision to 16-bit.
 - Font's "SourceFilename" and "Font Size" properties now have buttons that let import another font file, or reimport same font with different size respectively, instead of clicking on a button on the preview window.
 - Added a readonly "ProjectFilename" property to Fonts, which displays their in-project file name.
 - Global Variables panel now allows to declare arrays.
 - Added "Controls transparency" slider to GUI edit pane.
 - Copy, paste and delete commands now apply to all the selected GUI controls in GUI editor.
 - When pasting a copied GUI control, Locked property of a new control will be turned off.
 - Support editing group properties for selected GUI controls.
 - Added a multiline Text edit window for Button and Label controls, that may be called by Ctrl+E, from context menu, or by pressing "..." button of the Text property in the Properties grid.
 - Support reordering folders in Sprite Manager with drag & drop.
 - Added "Replace source paths for sprites..." context menu command in Sprite Manager. This command allows to batch-replace parent folder for all sprite source paths, in case you moved original files from one folder to another.
 - Added "Palette index" selection for sprite's import transparency option.
 - Support importing 32-bit BMP files of extended formats (this support is formal at the moment, and does not guarantee that any of the extended data will be interpreted).
 - Support importing 1-bit (monochrome) and 4-bit images as sprites, room backgrounds and masks (converted to 8-bit).
 - Do not alter or clamp palette for 8-bit sprites imported in a 16/32-bit game.
 - Support importing indexed images which palettes contain translucent alpha as sprites with alpha.
 - Support importing indexed PNGs as room backgrounds and masks.
 - When the room background size changes, reset room edges to defaults.
 - Removed obsolete "Copy walkable area mask to regions" command from the Room editor.
 - Improved scrolling of drop-down lists in the Room's navigation bar: made scroll buttons larger, and support mouse wheel.
 - In Room Editor, during any area drawing mode Ctrl + LMB now works as area picker regardless of the currently selected tool.
 - Added "Change Room Number" context menu command for the Rooms in Project Explorer.
 - Added "Replace source paths for audio clips..." context menu command for the Audio node. This command allows to batch-replace parent folder for all clips' source paths, in case you moved original files from one folder to another.
 - Don't restrict compiling a voice-based lipsync if game has a Lucas-Arts style speech.
 - Do not delete previously built game exe from Compiled/Windows folder when testing a game from the editor.
 - Editor will now report any missing script functions that are assigned to events, but not present in script, as warnings when compiling the game.
 - Editor will now report any script functions that *look like* event functions, but not assigned to corresponding events, as warnings when compiling the game.
 - Added "/maketemplate" command-line option that tells Editor to run, make template out of the said game, and quit.
 - Fixed Project Explorer refreshing when user changes names or descriptions of room objects.
 - Fixed importing indexed PNG as a sprite, previously Editor would mistakenly treat the source image as 32-bit.
 - Fixed importing GIFs with "palette 0 / N" transparency option would refer a palette color from each individual frame's palette rather than the original GIF palette, which could lead to wrong colors used as transparents.
 - Fixed importing 8-bit BMP sprites with no "Remap palette" and "Leave As Is" as a transparency option would still remap palette index 0 to the first found palette entry with Alpha 0, even if that's a filler entry not used by the image.
 - Fixed exporting room backgrounds was always writing a 32-bit image rather than using actual background's color depth.
 - Fixed Autocomplete failing in case of UNIX line endings in script file.
 - Fixed Autocomplete not giving correct results in case of a long chained access, i.e. something like "var[0].member.member".
 - Fixed Autocomplete giving wrong list of choices for wrong syntax cases like: indexed access of a type and non-array struct variable, member access of a static array.
 - Fixed Button getting resized to the image's size when user cancels different sprite assignment.
 - Fixed "Color Finder" and color properties were mapping a color number to RGB values with accuracy mistakes, resulting in slightly different values than the engine would use.
 - Fixed Font preview could crash the Editor with out of memory error in case of a very big font.
 - Fixed Editor refusing to open a project if one or more of the sections are missing in the file.
 - Fixed an unhandled exception occuring when rebuilding rooms if any script's header is missing.
 - Fixed a "unterminated string" error in Dialogs was not pointing to the actual error location.
 - Fixed double warning message when trying to close the Editor while a game test is running.
 - Fixed Editor may display a "save project" confirmation when run with "/compile" command-line parameter.

Scripting:
 - Dynamic arrays now have Length readonly property that returns their number of elements.
 - Support zero-length dynamic arrays. This may be useful if you need to have a dynamic array with no elements, but don't want to bother about checking a null pointer.

Script API:
 - Added eNullFont constant that lets assign or pass a "null font" to any property or function parameter which expects a font's ID. This "null font" will simply make any text not drawn and have no actual measurements (size, spacing, etc).
 - Added global events: eEventDialogStart, eEventDialogStop, eEventDialogRun, eEventDialogOptionsOpen, eEventDialogOptionsClose (these are handled in "on_event").
 - Events eEventGUIMouseDown and eEventGUIMouseUp now get additional parameters: mouse button, mouse x and y positions (relative to the exact GUI).
 - Expanded "on_mouse_click" callback, now supports two more parameters: click x,y coordinates.
 - Added RestoredSaveInfo struct which contains information about game save's contents,
 - Support "validate_restored_save" callback, which lets user to validate restored saves with mismatching data and request cancellation or continuation of restoring this save.
 - Added Button.WrapText, TextPaddingHorizontal, TextPaddingVertical.
 - Added Character.Following property that returns another Character that this one follows after.
 - Added Character.TurnWhenFacing property.
 - Added Character.MoveStraight() complementing WalkStraight().
 - Added DateTime.CreateFromDate() and CreateFromRawTime().
 - Added static Dialog.CurrentDialog property and non-static ExecutedOption and AreOptionsDisplayed properties.
 - Added static Dialog.Stop() function, a OO-style alias to StopDialog().
 - Added RenderLayer enum, and optional "layers" parameter to DynamicSprite.CreateFromScreenShot(), that tells which of the game's render layers to capture when making a screenshot.
 - Added File.Copy() and File.Rename().
 - Added FileSortStyle and SortDirection enum, and File.GetFiles() function that returns a dynamic array of filenames found using certain pattern, and optionally sorted by name or time, in ascending or descending order.
 - Added File.GetFileTime() that returns file's modification time.
 - Added File.ReadFloat(), WriteFloat(), ReadRawFloat(), WriteRawFloat(), ReadRawBytes() and WriteRawBytes().
 - Added Game.InBlockingWait property, that tells whether game is waiting for any blocking action or a Wait* call to complete.
 - Added SaveGameSortStyle enum and Game.GetSaveSlots() function that returns a dynamic array of save slot indexes, optionally sorted in certain way.
 - Added Game.GetSaveSlotTime() that returns a time this save slot was last written.
 - Added Game.ScanSaveSlots() that scans a range of game saves and tests them for compatibility, using "validate_restored_save" too if it's present in user script.
   This action is not run immediately, but is scheduled to be executed after current script ends. It reports of scanning completion by sending eEventSavesScanComplete event.
 - Label.TextAlignment has now type Alignment, rather than HorizontalAlignment, and has full alignment range (both horizontal and vertical).
 - Added optional "fileSortStyle" and "sortDirection" parameters to ListBox.FillDirList().
 - Added optional save slot range (min/max), saveSortStyle and sortDirection parameters to ListBox.FillSaveGameList(). This lets to define the exact range of saves it should fill, and order them in desired way.
 - Added ListBox.FillSaveGameSlots(), which initializes a list of saves from a dynamic array of save slot indexes.
 - Added Object.DestinationX and DestinationY properties, complementing ones in Character.
 - Added Overlay.SetPosition() and SetSize() functions for convenience.
 - Added Room.BackgroundCount readonly property.
 - Added Room.NearestWalkableArea() that returns the nearest found point on a walkable area.
 - Added GetWalkBehindBase() function, complementing SetWalkBehindBase().
 - Added Speech.SpeakingCharacter that returns currently speaking character (for blocking speech).
 - Added GetTimerPos() that returns timer's position (remaining time), in ticks.
 - Added CopySaveSlot() and MoveSaveSlot(), which moves existing save to another slot.
 - Added optional save slot range (min/max) parameters to RestoreGameDialog() and SaveGameDialog().
 - Added optional "sprite" parameter to SaveGameSlot(), that lets to pass a number of an arbitrary sprite to write into this save instead of a standard "screenshot".
 - Added optional "width", "height" and "layer" parameters to SaveScreenShot().
   SaveScreenShot() now accepts paths containing standard file tokens ($SAVEGAMEDIR$ etc).
 - Added SendEvent() function that allows to trigger "on_event" function calls in script.
   Special event value eEventUserEvent may be used as a base index for user-defined events.
 - Added System.DisplayFPS property that toggles FPS counter (a replacement to Debug(4, 1)).
 - Added System.GetEngineInteger() and System.GetEngineString() for returning diagnostic information about engine's runtime state. Possible arguments are defined by EngineValueID enum.
 - Added new game-wide option OPT_SAVEGAMESCREENSHOTLAYER that lets to define which of the game's render layers will be captured when making a standard screenshot for the save game.
 - Add SaveComponentSelection enum and game option OPT_SAVECOMPONENTSIGNORE, which lets to skip certain components when saving or restoring a game. This has dual purpose: reduce number of things in game that may break older saves by simply not having them in a save, and also reducing the size of game saves on disk (e.g. in case of dynamic sprites). Note that all things that were not restored from the save will retain their *current state*.
 - Fixed some script functions in AGS API were declared with "int" return value, while they are supposed to be "void".

Engine:
 - Updated to SDL 2.30.11 and SDL_Sound 2.0.4.
 - Engine now potentially supports reading saves made in older game versions with different content, so long as these saves have *less* data in any given type (i.e. less Characters, or less controls on a certain GUI, or less variables in script, and so forth).
   This feature is enabled by having a special "validate_restored_save" function anywhere in the game script, that accepts an argument of type RestoredSaveInfo. RestoredSaveInfo contains various information about the restored save, and "Cancel" property, that must be explicitly set to "false" in script in order to allow to restore such save.
 - Engine supports returning to previously saved rooms which have less script data.
   It's important to remember though that it does no validation of restored room state on its own.
 - Dropped support for pre-3.5.0 game saves.
 - Increased the cap of simultaneously loaded scripts to 1024 (this includes all regular script modules, a single active dialog script, and a single active room script).
 - Engine no longer quits with error in case a script function assigned to a Room event is missing. Logs warnings about missing script functions assigned to any events.
 - Character.FollowCharacter() can now have a distance parameter up to 32766 (was limited to 255).
 - Ensure that Character.Speaking returns true when a speech is playing even if the character has no speech view.
 - Character.PlaceOnWalkableArea() now does a 1-pixel step scan, ensuring walkable area will be found regardless of how small it is. Optimized the search algorithm to keep it fast enough even in very large rooms.
 - Support voice-based lipsync (Pamela, Papagayo) with Lucas-Arts style speech.
 - DynamicSprite.CreateFromFile() may now load 1-bit and 4-bit bitmaps, converting to 8-bit.
 - Do not alter or clamp palette for 8-bit sprites loaded into a 16/32-bit game at runtime.
 - Assigning InventoryItem.Graphic will no longer reassign CursorGraphic too even if they were identical previously.
 - Calling DeleteSaveSlot() on a slot within 0-50 range will no longer secretly move a save with the topmost number (within the same range) to fill the emptied slot. If you still like to recreate this behavior, then use MoveSaveSlot() command.
 - Support calling StopDialog() inside any regular script and dialog script, and also while dialog options are displayed. That will schedule dialog's stop to be performed after current script finishes.
 - Removed arbitrary limit of 2k bytes for the result of String.Format().
 - Engine will no longer quit with error if any object is assigned a non-existing sprite, but continue, using a sprite 0 as a placeholder instead.
 - Ensure that the objects with identical z-order (baseline) always keep same relative sort order when being drawn (note: engine does not guarantee a predefined order, only a persistent one).
 - Implemented video buffering on a separate thread. Allow to drop late video frames.
 - When mouse is locked in window, confine its position to the game viewport; exclude black border.
 - Added "display" config option to "graphics" section. This is a 1-based display index, where 0 means "use default display".
 - Added new accessibility config settings in "access" section: "speechskip", "textskip", "textreadspeed". These let player to override game's skipping style for character speech and text messages, and text reading speed parameter that controls speech timing.
 - Added "max_save" config option in "override" section: this lets to enforce an arbitrary number of saves displayed in a standard save/restore dialogs in game.
 - Added "--display" command-line argument that lets choose which display to open game window on.
 - Added "--no-plugins" command-line argument that denies loading any plugins; also added respective config option "noplugins" in "override" section.
 - Fixed Software renderer being unable to restore a windowed mode on certain monitors, when switching from a real fullscreen mode.
 - Fixed character may get stuck inside a non-walkable area after Character.WalkStraight().
 - Fixed character may rarely finish walking on a non-walkable pixel.
 - Fixed calling Character.StopMoving() after AddWaypoint() succeeded a regular Walk() call with eWalkableAreas parameter will wrongfully teleport the character to the nearest walkable area, even though AddWaypoint is supposed to ignore walkable areas.
 - Fixed a number of region or hotspot's "Stand on hotspot" events may unexpectedly run after a blocking character's walk, even if character is no longer standing on that region/hotspot.
 - Fixed Lucas-Arts style character speech displaying offscreen if character is standing below the bottom of a room viewport.
 - Fixed calling Dialog.Start() inside a dialog script would create a nested "dialog state", which could eventually lead to internal mistakes and program stack overflow. Dialog.Start() will now schedule a proper dialog topic switch, equivalent to "goto-dialog" command.
 - Fixed displaying room masks with Debug command in legacy "upscale" mode.
 - Fixed a potential lockup that may occur when the engine is run from the editor, and is told to stop at a breakpoint.
 - Fixed 48khz OGG clips may have extra silence added to them in the end, causing "hiccups" when the sound playback is looped.

Engine Plugin API:
 - Updated few callback and function prototypes in order to make them 64-bit compatible (allow pass and receive pointers). This includes AGS_EngineOnEvent for AGSE_TRANSLATETEXT and render stage events, and CallGameScriptFunction which now lets pass a const char* argument.
 - Added IAGSEngine.CreateDynamicArray(), which lets plugins to create dynamic arrays.
 - Added IAGSEngine.GetDynamicArrayLength() and IAGSEngine.GetDynamicArraySize(), which tell the passed array object's number of elements, and total size in bytes respectively.
 - Added IAGSEngine.Log(), which lets plugins to print using engine's log system.

Compatibility:
 - Fixed loading of games made in AGS 2.55-56 which include plugins.
 - Fixed loading of rare games made with AGS 2.5 or higher, which contained deprecated "room animations" (animations themselves are currently not functional).
 - Fixed old rooms with rare x3 resolution not displaying correctly.
 - Fixed old pathfinder imprecision affecting few pre-3.0 games.
 - Allow pre-2.7 games to have RestartGame() command be followed and overridden by a NewRoom().
   This is necessary for some older games to be able to proceed.

Windows:
 - Windows version of AGS is now built with MSVS 2019 and higher.

WinSetup:
 - Redesigned winsetup into a tabbed dialog.
 - Added "Reset To Defaults" button that resets all options to values from the game's default config file.
 - Added "Display" selection, allows to select which display to open the game window on.
 - Added "Accessibility" settings for skipping speech and text messages, for text reading speed.
 - In "disabled" section of config "access_skipstyle" setting lets disable all options in setup related to the speech and text skipping.

Crimson Wizard

I'd like to know, how many people are actually using 3.6.2 to make actual games at the moment?

I understand that more people are switching directly to AGS 4.0 already, which is good, but are there ones who stay at 3.x and try 3.6.2? This is to be aware of how much potentially tested this version is.

RootBound

#2
My last MAGS game was made with 3.6.2.2. I can test this current RC version of 3.6.2 with some of my previous games if that's helpful.

EDIT: My Mode7 game that's in progress was started quite a while ago with 3.6.1.27. I can test that game in 3.6.2 RC 1 as well.
They/them. Here are some of my games:

brushfe

I've recently started a game in 3.6.2 but currently focused on the art. Once I'm back to choice I'll report in if anything comes up!

greg

I've migrated a recently completed game into 3.6.2 and am planning to test and release within that version.

Laura Hunt

Quote from: Crimson Wizard on Wed 12/02/2025 00:22:14I'd like to know, how many people are actually using 3.6.2 to make actual games at the moment?

I understand that more people are switching directly to AGS 4.0 already, which is good, but are there ones who stay at 3.x and try 3.6.2? This is to be aware of how much potentially tested this version is.

I started our latest game on 3.5.1, I think, and I'm now on the latest 3.6.1 version. I will definitely upgrade to 3.6.2 at some point, and keep updating / patching that one as required, but I won't switch to 4.0 for this game.

CaptainD

I'm using 3.6.1 for CD3, so will either stick with that or move to 3.6.2 - for any future project, I will very probably hop over to 4.0.

Quote from: Crimson Wizard on Wed 12/02/2025 00:22:14I'd like to know, how many people are actually using 3.6.2 to make actual games at the moment?

I understand that more people are switching directly to AGS 4.0 already, which is good, but are there ones who stay at 3.x and try 3.6.2? This is to be aware of how much potentially tested this version is.

I'm using the latest version 3.6.1 for my new game. I will be upgrading to 3.6.2 shortly. But I doubt I will use 4.0 for this game.

RootBound

@Crimson Wizard I tried converting my mode7 game from 3.6.1.27 to 3.6.2 RC 1, and there seems to be a regression. The frame rate was significantly reduced on both Direct3d and OpenGL modes, and the game went back to slowing and then crashing when using the software renderer. Is it possible that the change you made to fix this back in 3.6.1 didn't make it into the 3.6.2 branch?

This is the error it gives:
They/them. Here are some of my games:

Crimson Wizard

Quote from: RootBound on Wed 19/02/2025 21:59:45@Crimson Wizard I tried converting my mode7 game from 3.6.1.27 to 3.6.2 RC 1, and there seems to be a regression. The frame rate was significantly reduced on both Direct3d and OpenGL modes, and the game went back to slowing and then crashing when using the software renderer. Is it possible that the change you made to fix this back in 3.6.1 didn't make it into the 3.6.2 branch?

I cannot answer this question, because I do not remember about fixing this game now. Can you link to a relevant discussion?
Is there a way I can download this project or compiled game for a test?

RootBound

Quote from: Crimson Wizard on Wed 19/02/2025 22:31:26I cannot answer this question, because I do not remember about fixing this game now. Can you link to a relevant discussion?
Is there a way I can download this project or compiled game for a test?

Unfortunately I think the discussion must have been on Discord because I can't find it anymore.

I can DM you a link to an uploaded .zip of the project folder or just the .ags file, whichever is preferable.
They/them. Here are some of my games:

Crimson Wizard

#11
I have a memory recollection that the old problem was related to objects not disposed after leaving the camera and increasing in size beyond camera bounds until the engine ran out of memory. This was affecting Software renderer only, because only Software renderer was storing object sprite scaled, while other renderers store it unscaled and only scale the texture on GPU.

But I don't remember if I did any fix to the engine, or it was only fixed in game. Or maybe there were multiple problems.

Quote from: RootBound on Wed 19/02/2025 22:43:40I can DM you a link to an uploaded .zip of the project folder or just the .ags file, whichever is preferable.

A game file built in 3.6.1 would be suitable for starters, then I could test using both 3.6.1 and 3.6.2 engines and compare.

RootBound

@Crimson Wizard my memory is that there were two fixes, one in the mode7 module itself, and one in the engine (I could be wrong).

The fix to the mode7 module is present in my current game build, which prevents the crash if objects are not moving directly toward the screen (though I can occasionally get out-of-memory issues if the object does move directly toward the screen).

Unfortunately, I can no longer find the build of AGS that fixed the software renderer issue, so the crash which I gave a screenshot of in my previous post happens in both 3.6.1 and 3.6.2 unless I do not use the software renderer.

I did find some of the previous discussion, which is in the mode7 module thread, and this was your comment with regard to the engine:
Quote from: Crimson Wizard on Tue 27/08/2024 18:41:00On engine's side this situation may be improved by not preparing new overlay's graphic while it's offscreen. This is easy to do for GUI and screen overlays, but bit more complicated for room objects and room overlays, as these will have to be tested against all existing cameras.

I do not remember if this was actually implemented, but I thought there was a test build somewhere that fixed it.  :-\

I will DM you a link to the game, but this is probably a very unusual case, so if it's not able to be fixed in the engine, 3.6.2 is probably still a stable build for almost all games.
They/them. Here are some of my games:

Crimson Wizard

#13
Quote from: RootBound on Thu 20/02/2025 12:39:33Unfortunately, I can no longer find the build of AGS that fixed the software renderer issue, so the crash which I gave a screenshot of in my previous post happens in both 3.6.1 and 3.6.2 unless I do not use the software renderer.

I did not know what to do to reproduce the crash, so started the game and increased the train's speed.
After few seconds the game crashed with "out of memory" error, trying to allocate a gigantic sprite for an overlay.
EDIT: randomly it may go past the "out of memory" and crash later with 0xC0000005 error, but the reason is likely the same, because it allocates sprites like 50000 x 50000.
So the reason was, and still is, that the game or module does not cull the objects that are past the camera.


Quote from: RootBound on Thu 20/02/2025 12:39:33I did find some of the previous discussion, which is in the mode7 module thread, and this was your comment with regard to the engine:
Quote from: Crimson Wizard on Tue 27/08/2024 18:41:00On engine's side this situation may be improved by not preparing new overlay's graphic while it's offscreen. This is easy to do for GUI and screen overlays, but bit more complicated for room objects and room overlays, as these will have to be tested against all existing cameras.

I do not remember if this was actually implemented, but I thought there was a test build somewhere that fixed it.  :-\

I don't think I've ever did that.

EDIT: checking the mode7 thread, I can see me mentioning some engine bug, but not what it was. I might check changes made around same time...
EDIT: okay, here seem to be the related fix:
https://github.com/adventuregamestudio/ags/commit/203a76d1fe99d76b0b2bfb1156f135c3fe362328

Crimson Wizard

I also tried to compare the game speed between 3.6.1 and 3.6.2 using Direct3D and OpenGL, and I do not see any difference at all. Both play at around 60-70fps with the highest train speed on my computer. If you actually experience difference in framerate, then please give more details about this difference: how much difference, and under which conditions does it happen.

RootBound

Thanks for testing, @Crimson Wizard . After more testing, I think the differences in game speed are probably because of my computer because these differences are inconsistent. It's possible my machine is just slow sometimes.

Regarding the commit with the fix, how do I download and test it? I couldn't find a clear option for this at the link you posted. Or has this already been added to the 3.6.2 download link?
They/them. Here are some of my games:

Crimson Wizard

Quote from: RootBound on Thu 20/02/2025 16:14:05Regarding the commit with the fix, how do I download and test it? I couldn't find a clear option for this at the link you posted. Or has this already been added to the 3.6.2 download link?

This fix is included into both 3.6.1 and 3.6.2 since September 2024.

RootBound

Quote from: Crimson Wizard on Thu 20/02/2025 16:33:49This fix is included into both 3.6.1 and 3.6.2 since September 2024

Thanks for the clarification. In that case, I think I'll just have to not use the software renderer. This leads to a more general question, which is, is it common practice to include acwin.exe with distributed games, or should I leave that out, since players changing the settings can cause problems?
They/them. Here are some of my games:

Crimson Wizard

Quote from: RootBound on Thu 20/02/2025 17:05:57Thanks for the clarification. In that case, I think I'll just have to not use the software renderer.

There's a bug in the module, which can be fixed (I mentioned the fix in the module's thread).
But "Software renderer" is not something that a player would use today without a good reason.

Quote from: RootBound on Thu 20/02/2025 17:05:57This leads to a more general question, which is, is it common practice to include acwin.exe with distributed games, or should I leave that out, since players changing the settings can cause problems?

Maybe you mean winsetup.exe?
It is proper to give player a way to choose the settings.
If you like, you may disable software renderer from selection, it's explained in the manual:
https://adventuregamestudio.github.io/ags-manual/EngineConfigFile.html
in the "[disabled]" section:
Quote[disabled] - special instructions for the setup program hinting to disable particular options or lock some in the certain state. Ignored by the engine.
gfxdrivers = [0; 1] - tells to lock "Graphics driver" selection in a default state;
<gfxdriver id> = [0; 1] - tells to remove particular graphics driver from the selection list;

Besides that you may also add a graphics driver test into the game itself, and quit the game if it's software renderer, for example.
https://adventuregamestudio.github.io/ags-manual/System.html#systemhardwareacceleration


glurex

Quote from: Laura Hunt on Sat 15/02/2025 12:20:58I started our latest game on 3.5.1, I think, and I'm now on the latest 3.6.1 version. I will definitely upgrade to 3.6.2 at some point, and keep updating / patching that one as required, but I won't switch to 4.0 for this game.

Same scenario here. I started two games in 3.5.1 and recently moved to the latest 3.6.1. I'm studying the possibility of moving to 3.6.2, but 4.0 is a no-go, at least for now.

SMF spam blocked by CleanTalk