Version 2024.4.0 (IDE 137/Runtime 168)
Download Links: Windows - macOS - Ubuntu (Betas Only)
This release focuses on fixing lots of issues found in earlier GameMaker versions and increasing general performance and stability in various parts of the product.
The IDE has an emphasis on saving and loading fixes, plus hotkeys and UI/UX workflow issues. This release will be especially important for Windows IDE users who find they encounter saving/build issues because their project source code is managed by OneDrive.
There are also a number of important “submission” fixes/additions on the runtime side, including new privacy manifests required by Apple, a new build stage on Android, and several SDK versions being raised to match the current requirements on different platforms, so please do read all of these notes carefully!
It’s worth also saying to avoid any confusion: 2024.4 does not contain the new code editor. If you want to try that, you must install a Beta release and then enable the code editor in Preferences.
IDE Featured Changes
- Changes to where Windows IDE saves your projects
- The Preferences default for where GameMaker stores your projects has now been moved, as Windows IDE users are increasingly opting-in (sometimes unknowingly) to OneDrive managing their “My Documents” folder and so OneDrive is causing problems when trying to save changes to a project or when trying to do builds later on #4372
- Carrying on from the change above, if GameMaker detects your project is still being stored in a folder which is managed by OneDrive/Dropbox/Google Drive/iCloud (which we have had documented for a long time that you should not do), then you will get dialogs on save/load which advise you that you really should move your projects to the new, safe location #2859
-
Note: If you have not previously set a custom home path in Preferences then you will automatically update to this new value when you start GameMaker; if you have previously customised your home path in Preferences, then you should check now that it is not inside OneDrive, etc.
- Updated Release Notes Process
- Release Notes links on the Help menu and the “Update Available” notification are now updated to point at these new release notes pages #5204
- Redefine Keys and other misc UI/UX changes
- A large number of Redefine Keys issues and general “hotkeys” bugs have been fixed, so please do see the milestone page for the full list, but here’s a handful of the top-reported or most important ones…
- Debugger: F2 to rename a watch no longer instead renames the “Variables” dock tab #5080
- Room Editor: Shift-clicking no longer cancels “select from any layer” mode every time you do the command #2463
- Room Editor: F2 to rename a layer in the panel no longer instead renames the Inspector tab #2665
- UI/UX: [Mac IDE] File > Recent Projects when another project is already open now/again reliably opens the chosen project #5508
- Stability and Performance
- Game Options: Fixed a GM crash when setting a .gif file as Windows splash screen and clicking Apply (note that you will not get an animated splash screen if you supply a .gif - only the first frame will be used!) #5048
- Preferences: Fixed a GM crash on startup if any “Paths” field was left blank and saved in the last IDE session (Preferences now also blocks adding a blank path and will revert the path back to the default) #5488
- Room Editor: Removed unexpected extra project autosaves whenever pressing “delete” and “copy” shortcuts (which can greatly improve performance/productivity in larger projects) #5320
- Project Save/Load Fixes
- A very important project-saving fix for converting a pre-2024.2 project in 2024.2 (or 2024.400 Beta 1) when your “Default” configuration is not the active one in the IDE would overwrite your Default configuration’s Game Options
- Project Saving: Fixed an issue which was reported as duplicated Sequences were sometimes empty and could not be edited thereafter, but this was later found to affect AnimCurves, regular Sprites, and Objects also, so this is a very important fix! #4990
- Project Save: Only in “Blank Game” templates on the Start Page is the default room in that project resized to match your Preferences value for the default size of a new room, as this caused the other Templates to not look/work correctly #5808
- Project Save: Renamed resources are now resorted alphabetically in the .yyp #5035
- Project Save: Stopped adding the “…_stripN” suffix onto the new Sprite assets created when dropping strip images onto GameMaker #2963
- Project Load: Project no longer gets corrupted when .yyp is renamed to something other than the internal project name #2890
- Git Ignore Files When Creating Projects
- Default .gitignore and .gitattributes files are now added into new projects when you create them (including Importing), so that the files which are only intended to be per-user within teams are not checked into your repositories #2922 / #4559
- Hotkey Chords
- The IDE now supports setting hotkey “Chords” in your Preferences > Redefine Keys values, which allows you to create more keyboard shortcut combinations than previously possible.
- Hotkey Chords let you execute a command by holding multiple shortcuts one after another, e.g. CTRL + R -> CTRL + U -> CTRL + N.
- In this example, the modifier key CTRL is held all the way through, while R, U and N are pressed and released one after another.
- Your intended command is then performed once the modifier key (CTRL in this example) is released.
- Note that this feature is primarily aimed at the new code editor, and the current code editor will only support it to a lesser extent; however, the ability is there for you to use now if you wish.
- Misc Editor Changes
- Game Options: [iOS] No longer rejects icon images which contain transparency #4617
- Image Editor: Auto-Trim command now also adjusts the sprite’s collision mask to maintain the original relative position #4873
- Local Packages can now be created even when logged-out (when using a “guest” account) #4417
- Preferences: Can now define the default Animation Speed value for Sprites on an Asset layer in a room #2931
- Texture Group Editor: Changing values for “Custom Options” now correctly forces the asset compiler to rebuild those textures (so be aware your next build may take longer, etc.) #5603
- Bug Reporter Tweaks
- If you do need to send us a “Building A Project” or “In-Game” bug, you will now see you’re also asked to kindly tell us which platform(s) you have confirmed are affected by the issue you want to report
- Also, in order to avoid continued confusion around how to send us bug samples, the Public/Private “Visibility” dropdown has now been removed - all files sent via the bug-reporter inside GameMaker have always been uploaded privately (and you can send much larger projects than you could send to the old tickets system), so you do not need to send us files via any other method
Runtime Featured Changes
- SDK Updates (Please be aware before doing any builds, as you will need to change your setup!)
- Support for Texture Compression on multiple targets
- This release brings support for the new GPU Texture Compression extension available on its own GitHub repo now #5495
- Texture Groups can now set custom texture compression values.
- These values can be used along with the extension to allow your Texture Groups to be decompressed on the GPU instead of the CPU.
- This should result in improved performance, and we have seen a 10 to 100 times increase in rendering speed (depends on the individual project and what it draws) - however, be aware these are lossy compression options, so there may be some compromise in quality.
- Note that using GPU decompression may make your final game package larger, as textures targeted for GPU decompression are larger on disk.
- In-IDE and also in-game errors will also advise when you have set incompatible settings for the current target, so please do be aware of these #5604
- iOS Privacy Support
- Added support for complying with Apple’s new privacy requirement (ITMS-91053) through PrivacyInfo.xcprivacy #5122
- Android “Pre-Gradle Step” added
- Android has a new pre_gradle_step stage so you can modify the generated project before gradlew is run #4825
- New and improved Blend Modes
- You can now change the Blend Mode equation used when drawing. Previously, you could only change the factors, which are the values that the Source and Destination pixels are multiplied with and after that step, both pixels would always be added together.
- The Source pixel is the pixel you are currently drawing, and the Destination pixel is the pixel that is already on the screen at the position where you are drawing.
- However, you can now change the equation - so you could tell GameMaker to perform a subtraction (subtract Destination from Source) for example, or vice-versa, or choose either the smaller value or the larger value.
- Read all about Blend Modes in the GM manual (a little bit of this you can see lower down this page).
- And some of the existing modes have had a number of changes to fix issues since Runtime 2023.11.0.157 #4859
- Stability and Performance
- Garbage Collector: [VM] Allocating tens of thousands of arrays per frame no longer causes lengthy stalls #5677
- HTML5: Various array_…() and string_…() functions no longer crash if any optional argument is left empty, but then subsequent args are supplied #5593
- macOS: show_debug_message()/show_message() in a Cleanup event no longer causes a crash when using Cmd+Q to quit the game #5571
- Ubuntu YYC: AppImages built using 2024.2.0.132 could segfault at launch on distos which have libpulse/libopenal already installed - this has now been fixed so x86 VM/YYC consistently links with the AppImage’s copies of these libraries and ARM VM/YYC consistently tries to load them off the OS at runtime (but then will have no audio if the libraries are missing) #5070
- Command Line Builds: [Ubuntu IDE] Extension scripts referencing “/of” flag (e.g., Steamworks) no longer fail to build #4339
- Misc changes you should be aware of
- audio_get_recorder_count() now correctly includes devices which contain non-Latin characters in their name (also, the Audio Recording event is now surpressed if the data failed to be read - instead, you now get an error logged telling you this) #5124
- HTML5: event_perform_async() now performs the Social async event, so no longer differs from Windows, etc. #5078
- gpu_set_depth() now affects the depth at which subsequent calls to draw_tilemap() will draw that tilemap #4741
- Better Vertex corner ID support has been added #4744
- Stack traces shown on in-game code error dialogs are now more easily parsable #4927
- Updated the gamepad database to incorporate latest gamepad definitions (and also some new button constants, which you can see lower down this page) - #4735
Milestone Page
Misc New Functions
dbg_view_exists(view)
- Check to see if a dbg_view still exists.
dbg_section_exists(section)
- Check to see if a dbg_section still exists
gpu_get_blendequation()
- This function can be used to retrieve the current blend equation being used for drawing. The returned value will be one of the following constants (the default value is bm_eq_add):
gpu_get_blendequation_sepalpha()
- This function can be used to retrieve the current blend and alpha blend equations being used for drawing. The function returns a 2 element 1D array with the following elements in it:
gpu_set_blendequation(equation)
- When GameMaker goes to draw a pixel there is a source colour (the colour of the pixel we’re going to draw) and a destination colour(the colour that’s already in the pixel we’re drawing to), so when determining the new colour of the pixel, the source and destination colours are calculated according to the chosen blend mode. Each component of the colours is stored as a floating point value between 0 and 1, and the new colour is calculated by multiplying each component of the source colour by some factor and by multiplying each component of destination colour by some other factor and then combining the results together component by component using a configurable equation.
gpu_set_blendequation_sepalpha(equation,equation_alpha)
- When GameMaker goes to draw a pixel there is a source colour (the colour of the pixel we’re going to draw) and a destination colour(the colour that’s already in the pixel we’re drawing to), so when determining the new colour of the pixel, the source and destination colours are calculated according to the chosen blend mode. Each component of the colours is stored as a floating point value between 0 and 1, and the new colour is calculated by multiplying each component of the source colour by some factor and by multiplying each component of destination colour by some other factor and then combining the results together component by component using a configurable equation.
gamepad_enumerate()
- Currently only functional on Android, this function will enumerate gamepads to detect any newly added gamepads and remove any recently removed ones without the need for BLUETOOTH_CONNECT permission.
Misc Changed Functions
skeleton_animation_clear(track)
changed to skeleton_animation_clear(track,[reset],[track])
Misc New Constants
bm_min
- Min blending (Takes the minimum value for each colour component).
bm_reverse_subtract
- Subtractive blending where the destination colour is subtracted from the source colour.
bm_eq_add
- Additive blending. Luminosity values of light areas are added.
bm_eq_subtract
- Subtractive blending where the source colour is subtracted from the destination colour.
bm_eq_max
- Max blending (Takes the maximum value for each colour component).
bm_eq_min
- Min blending (Takes the minimum value for each colour component).
bm_eq_reverse_subtract
- Subtractive blending where the destination colour is subtracted from the source colour.
gp_home
- The gamepad’s Home button
gp_extra1
- A gamepad button used for mapping extra buttons on a device
gp_extra2
- A gamepad button used for mapping extra buttons on a device
gp_extra3
- A gamepad button used for mapping extra buttons on a device
gp_extra4
- A gamepad button used for mapping extra buttons on a device
gp_extra5
- A gamepad button used for mapping extra buttons on a device
gp_extra6
- A gamepad button used for mapping extra buttons on a device
gp_paddler
- A gamepad button used for mapping paddle right button on a device
gp_paddlel
- A gamepad button used for mapping paddle left button on a device
gp_paddlerb
- A gamepad button used for mapping paddle right bottom button on a device
gp_paddlelb
- A gamepad button used for mapping paddle left bottom button on a device
gp_touchpadbutton
- A gamepad button used for mapping the touchpad button on a device (i.e. PS4 and PS5)