Releases: UnderminersTeam/UndertaleModTool
Release list
UndertaleModTool v0.9.2.0
This is the 0.9.2.0 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a minor release. To see the changes in major release 0.9.0.0, click here. To see the changes in minor release 0.9.1.0, click here.
Added
- Added support for compiling/decompiling GML template strings by @natroute in #2412.
- This means that, in many cases,
string/@@string@@will no longer appear, and$"{example}"syntax will/can be used instead.
- This means that, in many cases,
- Added an
AudioGroupmacro type for game-specific type data by @setupwitch in #2418.- This allows audio group names to get resolved in GML decompilation, when applicable.
- Added support for more asset types for the "Find all references" feature (and other related changes/fixes) by @VladiStep in #2179.
- Reference searching support was added for fonts within texture groups.
- New "Room object instances" types for code have been added (create/pre-create code entries).
- A new button has been added to Game objects, to search for the children of that object.
- The irrelevant
argumentsvariable no longer shows up when searching for unreferenced assets. - There is now better handling for varying GameMaker versions, including LTS 2022.
- Added support for GameMaker 2026.1 betas, for both file format and some rare GML code generation changes (with nullish compound assignments).
- Added support for optimizing
variable_get_hash()during GML compilation, when possible. - Added a
Name.Regexoption toGameSpecificResolverby @InvoxiPlayGames in #2438.- Effectively, this allows for DELTARUNE to be detected more accurately across console versions.
- Added native macOS arm64 build support for the CLI by @jjezewski in #2417.
- Added a new
--overwriteflag to theloadcommand in the CLI, improving consistency across commands by @IruzzArcana in #2439.
Changed
- Built-in GameMaker functions used for GML compilation are now more accurately available based on GameMaker version by @BioTomateDE in #2428.
- Multiple dependencies updated, including some (more) mostly-irrelevant security patches in ImageMagick.
Technical Changes
- Added a new
RuntimeVersionstruct inUndertaleGeneralInfofor convenience by @BioTomateDE in #2406. - Enabled usage of custom
IGlobalFunctionsimplementations inGlobalDecompileContextby @skirlez in #2454. - Marked
UndertaleDataasDynamicallyAccessedMembersby @ngyikp in #2452.- This improves support for using UndertaleModLib in projects with trimming enabled.
- Optimized the
UnescapeTextmethod usingStringBuilderby @y114git in #2389.
Fixed
- Fixed a situation where UndertaleModLib allowed empty/null object events to be serialized (which could cause crashes) by @BioTomateHP in #2376.
- Fixed two room editor crashes observed in a test room within DELTARUNE Chapter 5.
- Attempted a fix for loading projects in the project system, when modding a YYC game.
- Fixed creating a new extension within the GUI not providing reasonable defaults for several string fields, which could cause crashes.
New Contributors
- @natroute made their first contribution in #2412
- @InvoxiPlayGames made their first contribution in #2438
- @y114git made their first contribution in #2389
- @jjezewski made their first contribution in #2417
Full Changelog: 0.9.1.2...0.9.2.0
Nightly (bleeding edge)
This is the latest version of UndertaleModTool. Also listed on this page are stable releases, but this is an automatically updating bleeding edge build. If you encounter any bugs, please make an issue on GitHub or join the Underminers Discord for help.
UndertaleModTool v0.9.1.2
This is the 0.9.1.2 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a patch release. To see the changes in major release 0.9.0.0, click here. To see the changes in minor release 0.9.1.0, click here.
Changed
- Multiple dependencies updated, including some mostly-irrelevant security patches in ImageMagick.
Fixed
- Fixed
Debug.csxnot supporting updated versions of DELTARUNE Chapter 5. - Fixed tile instance IDs not being assigned by the project system, which could lead to strange issues and occasional crashes in-editor.
- Fixed the CLI version number not being correct.
Full Changelog: 0.9.1.1...0.9.1.2
UndertaleModTool v0.9.1.1
This is the 0.9.1.1 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a patch release. To see the changes in major release 0.9.0.0, click here. To see the changes in minor release 0.9.1.0, click here.
Changed
- Dumping all code from the CLI no longer exports sub-function code entries, which was pointless and could result in filename length errors. Performance has been optimized and parallelized, as well.
- Missing
mb_side1andmb_side2mouse button constants are now included, usable in GameMaker 2.3.3 games and above. - Missing room asset resolutions for
scr_84_add_menu_itemin older DELTARUNE chapters added by @vrad-exe in #2411. - Some miscellaneous dependencies updated.
Fixed
- Fixed
Debug.csxnot supporting DELTARUNE Chapter 5 by @break-core in #2409. - Fixed
ExportSpritesAsGIF.csxfailing on some modern GameMaker games with unused asset removal enabled. - Fixed prefab-generated scripts compiling in a way that would cause function resolution errors (only a mitigation for now, full support may come later).
- Fixed compilation warnings of UndertaleModLib/UndertaleModTool due to
PropertyChanged.Fodynot being a private dependency. - Fixed detection of Spine sprite format changes introduced in GameMaker 2023.1, so that it no longer breaks on 2022 LTS games.
New Contributors
- @break-core made their first contribution in #2409
- @vrad-exe made their first contribution in #2411
Full Changelog: 0.9.1.0...0.9.1.1
UndertaleModTool v0.9.1.0
This is the 0.9.1.0 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a minor release. To see the changes in major release 0.9.0.0, click here.
Added
- Added a project system build option to the CLI by @luizzeroxis in #2355.
- Added support for directly dumping sprites (without a script) to the CLI by @ephoton in #2380.
- Added the ability to disable sprite cropping (via manual JSON only, for now) in the project system.
- Added (simple) shader asset support to the project system.
- "Simple" means that it works similarly to how
ImportShaders.csxdoes, still. You can't yet directly author shaders in the GUI, but you can transfer them between games or UTMT projects.
- "Simple" means that it works similarly to how
Changed
- Updated dependencies in general.
- Updated Underanalyzer, fixing an edge case in decompilation of some modern GML code gen.
Fixed
- Fixed several issues in
ImportShaders.csxthrough a refactor, allowing it to be used in modern GameMaker games, and with the project system. - Fixed tileset assets erroneously getting cropped upon getting imported in the project system.
- Fixed
ImportFonts.csxnot compiling. - Fixed certain cases where
ImportGraphics.csxcould corrupt the data file it was operating on.
New Contributors
Full Changelog: 0.9.0.0...0.9.1.0
UndertaleModTool v0.9.0.0
This is the 0.9.0.0 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Added
- Added an optional project system, designed to be a more resilient and collaborative method of creating mods.
- Has the ability to export and reimport assets of many types, in a manner that is friendly to source control such as Git. This both makes collaboration much easier and allows easy version history.
- Similar to the now-obsolete profile mode, GML edits are retained in plaintext, meaning that comments and formatting are preserved. External editors can also be used on all asset types, including code.
- Theoretically can be used as a mod installation process, with the ability to manage external data files, create backups when installing, apply file patches (using BPS), verify game versions, and execute scripts.
- In the GUI, asset changes are detected when you change them in their respective editors, which marks them to be exported when you later save the project. This works for the majority of supported assets, but some features are only supported via manual editing of JSON files, such as the main project file itself, and general info (such as changing the game window title).
- The system is not yet feature-complete, and has room to grow to reach its full potential - see #2350. Currently, it is only accessible from the GUI and from the library itself, although it should have no issue being extended to the CLI in the future.
- Added zoom functionality to the code editor by @Cheesecake2960 in #2141
- Added partial support for automatically resolving collision event names in
CodeImportGroup, which affectsImportGML.csxand other scripts that import code.- Specifically, an event name such as
gml_Object_obj_example_a_Collision_obj_example_b, which appears in GameMaker Studio 2.3 and beyond, is supported. (As long as neither object name contains_Collision_/Collision_within its name, which becomes ambiguous.)
- Specifically, an event name such as
- Added support for piped input in the CLI by @danielpancake in #2312
- Improved support for OGG/MP3 file types in the embedded audio editor by @HighFlyer-222 in #2084
- Added additional game-specific data for Deltarune by @ImDigas in #2353
- Added a message for when the Windows CLI is launched outside of the command line, to help new users.
Changed
ExportAllSprites.csxhas been refactored, improving memory usage by exporting sprites on the same texture together by @setupwitch in #2340- README updates contributed by @YarTom in #2336
- Underanalyzer updated, including support for some recent GameMaker 2024.14.4 code generation, and some miscellaneous fixes.
- Following path refactors from the project system, many scripts will now enforce that their input/output is confined to folders selected by the user.
- Profile mode has been entirely removed from the tool and library, as it has been superseded by the project system. Old profiles can be manually migrated into a project by simply copying over the GML files.
Fixed
- Fixed a mathematical error during parsing of Spine texture entries by @Aipako in #2344
- Fixed newly-added rooms being corrupted in GameMaker 2024.13+ games.
- Fixed tile rendering errors not showing properly.
- Fixed concurrency issues in
ReduceEmbeddedTexturePages.csx. - Fixed a mistake in the GameMaker 2024.14.1 version check (thanks @luizzeroxis for pointing out the problem!).
- Fixed
Underanalyzer.pdbgetting unnecessarily included in builds. - Fixed some issues with launching processes, e.g. when using Temp Run or when opening an audio group. Loading games from a Temp Run should now be faster due to debug logs being disabled.
- Fixed thread safety issues in some scripts, where race conditions could rarely occur (more on that in the technical changes section...).
Other Technical Changes
- With the integration of the project system, multiple utilities have been added to UndertaleModLib:
BPS: Support for applying BPS patch files, with a native C# implementation.Paths: Support for joining paths and verifying that they reside within expected directories.ScriptingUtil: Some helpers that are used for scripting, including the builder for the options that UndertaleModTool/CLI use for scripts.TextureGroupPacker: Support for rectangle-packing textures that are part of a single texture group, onto potentially multiple textures.
- Various dependencies have been updated. Particularly, the Magick.NET (ImageMagick) library has undergone version upgrades with breaking changes.
- Switched to using
Extent()instead ofComposite()for padding images inTextureWorker, which is faster by @setupwitch in #2335 - In order to have proper thread safety,
SyncBinding()andDisableAllSyncBindings()have been removed from the scripting API.- These methods essentially covered up the root problem, rather than fix it. Now, scripts should use
MainThreadAction, a new addition to the scripting API, in order to make changes to game data from an asynchronous context.
- These methods essentially covered up the root problem, rather than fix it. Now, scripts should use
- Cleanup of some enums, variables, and documentation by @setupwitch in #2322
- Small code cleanup, improved
FancyRoomSelect.csxby @BioTomateHP in #2236 - Improved formatting and removed redundancy in
BuiltinList.csby @BioTomateDE in #2321
New Contributors
- @Cheesecake2960 made their first contribution in #2141
- @HighFlyer-222 made their first contribution in #2084
- @Aipako made their first contribution in #2344
- @YarTom made their first contribution in #2336
- @ImDigas made their first contribution in #2353
- @danielpancake made their first contribution in #2312
Full Changelog: 0.8.4.1...0.9.0.0
UndertaleModTool v0.8.4.1
This is the 0.8.4.1 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a patch release. To see the changes in major release 0.8.0.0, click here. To see the changes in minor release 0.8.4.0, click here.
Added
- Implemented a failsafe so that DDS textures are still able to be loaded when they use unsupported features.
- Implemented support for loading/saving unknown (or otherwise unsupported and/or proprietary) texture formats. These won't convert to other formats, nor display properly, but their data will be retained.
Fixed
- Fixed the import button for newly-created textures causing a crash by @ELBROWN777 in #2303
- Fixed support for DDS textures with mipmaps by @luizzeroxis in #2305
- Updated compilation instructions to mention that the .NET 10 SDK is now required for building, as well as recursively cloning using Git.
Other Technical Changes
- Optimized variable lookups in the UndertaleModLib side of the GML compiler. (Apparently, this was a bigger performance issue than previously thought, saving several seconds of time in a reported case.)
- Texture parsing is now aware of the texture block length field that appears in newer GameMaker versions.
Full Changelog: 0.8.4.0...0.8.4.1
UndertaleModTool v0.8.4.0
This is the 0.8.4.0 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a minor release. To see the changes in major release 0.8.0.0, click here. To see the changes in minor release 0.8.3.0, click here.
Added
- Added support for GM 2024.14 and 2024.14.1 games by @Dobby233Liu in #2277, and @colinator27
- Added various option flags that are used in more recent GameMaker versions.
- Added support for games that use DDS textures by @luizzeroxis in #1929
- Added the ability to open code search results in a new tab with MMB by @VladiStep in #2238
- Added a multiline regex option for code searching by @zivmaor in #2270
- Added ability to move game objects (from all layers) in room editor (allowing room creation order to be configured in GMS2+ games) by @luizzeroxis in #2187
- Added time source functions' arguments and constants to the decompiler and compiler by @ners-xd in #2295 and #2269
- Added
external_defineconstants for call and argument types in the decompiler by @Genouka in #2281 - Added builtin variable
audio_bus_mainto the compiler by @ELBROWN777 in #2294 - Added scale transform to tiles in rooms (improving visual accuracy in some games) by @luizzeroxis in #2204
- Underanalyzer compiler: Added ability to use internal GML functions that use
@in their names (as a workaround to missing decompiler features)
Changed
- Labeled individual size, margin, and origin fields within the sprite editor by @Jacky720 in #2288
- Updated to .NET 10.
- Various dependencies updated to their latest versions.
Fixed
- Fixed room editor crashes with grid size of one by @BenjaminUrquhart in #2209
- Fixed several issues with the
ImportSounds.csxscript by @GFOXSH in #2258 - Fixed CLI documentation not being correct by @techy804 in #2218
- Fixed additional issues with
ExportSpritesAsGIF.csxnot working with sprites with 0 frames. - Fixed a crash that could occur in certain (modified) games when viewing textures, due to image depth not being specified as 8.
- Fixed a possible infinite loop that could occur when opening a file with invalid alignment.
Other Technical Changes
- Updated AnimCurve documentation and
CurveTypeenum by @misternebula in #2210 - Added missing header chunk flag, correct save location flag name, name unknown fields in options by @yokimklein in #2252
- Renamed
RoomEntryFlags.ShowColortoRoomEntryFlags.ClearViewBackground, NameGraphTypeEnumvalues inUndertaleAnimationCurveby @yokimklein in #2257 GlobalDecompileContext.PrepareForCompilation()has now been made a public API.
New Contributors
- @techy804 made their first contribution in #2218
- @Genouka made their first contribution in #2281
- @ners-xd made their first contribution in #2269
- @ELBROWN777 made their first contribution in #2294
Full Changelog: 0.8.3.0...0.8.4.0
UndertaleModTool v0.8.3.0
This is the 0.8.3.0 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a minor release. To see the changes in major release 0.8.0.0, click here. To see the changes in minor release 0.8.2.0, click here.
Added
- Added code name filtering to the "Search in code" window by @VladiStep in #2152.
- (The script which was previously capable of this,
SearchLimited.csx, has now been removed.)
- (The script which was previously capable of this,
- Added functionality for using currently-selected code editor text as the default search text in the "Search in code" window by @VladiStep in #2154.
- Underanalyzer: CSX scripts can now take advantage of the newly-added
EnumerateChildren()on AST nodes that are produced by the decompiler, which can be useful for programmatically analyzing code, recursively.
Changed
- Game-specific data updated for base GameMaker functions and Deltarune functions updated, through multiple contributions by @colinator27, @Jacky720, and @VladiStep.
- New all-in-one Undertale/Deltarune debug script added,
Debug.csx, with new support for the recently-released Deltarune chapters.- (Special thanks to folks from the community for figuring out crash fixes.)
- All of the UTDR (Undertale/Deltarune) scripts have been renamed/recategorized to make it obvious which ones apply to which game.
- Code for sequence asset handling has been cleaned up, now properly supports color tracks, and has added support for audio effect tracks by @colinator27 in #2123.
- Added
os_switch2constant to the GML compiler and decompiler. - GML decompiler settings: "Allow leftover data on VM stack" is now enabled by default, which turns its exception into a warning.
- (This makes a decompiler error in some games no longer occur.)
- Small room asset instance ID deserialization performance boost and cleanup by @BioTomateDE in #2195.
- Strip metadata before writing auto-generated images by @Dobby233Liu in #2206.
Fixed
- Fixed
ExportSpritesAsGIF.csxfor sprites with no frames by @babro1 in #2139. - Fixed the GML VM disassembler producing Windows newlines, which was inconsistent with the GML decompiler (it will now always use Unix newlines) by @VladiStep in #2153.
- Fixed tileset grid size in the room editor not properly depending on the tileset asset size (leading to incorrect results in some cases) by @CST1229 in #2155.
- Fixed
ExportAllSounds.csxnot properly creating directories in some cases of exporting external sounds. - Fixed a crash that could occur when right-clicking some blank spots in the Game Object event grid by @VladiStep in #2177.
- Fixed the "Update range" button layout in font editor by @VladiStep in #2181.
- Fixed the loop condition for the CLI's
PromptLoadFilescripting method, similarly to howPromptChooseDirectorywas fixed in a previous release, by @ancientstraits in #2199. - Fixed
ImportGML.csxnot properly filtering for only GML files, and not properly supporting no-link imports. - Underanalyzer: Fixed compilation and decompilation of local function references from within a function declaration's argument list (default values), or within its inheritance call arguments.
Full Changelog:
UndertaleModTool v0.8.2.0
This is the 0.8.2.0 UndertaleModTool release, for 64-bit Windows. Downloads can be found at the bottom of this release.
("UTMT_CLI" is the command-line interface version with no GUI, supported for Windows, Ubuntu, and macOS.)
Changelog
Note: This is a minor release. To see the changes in major release 0.8.0.0, click here. To see the changes in minor release 0.8.1.0, click here.
Changed
- Updated 17 scripts to no longer be Windows-only (and thus now usable from the CLI) by @Eliandro4 in #2125.
- In addition to the above scripts,
ExportFontData.csxhas been functionally changed toExportAllFonts.csx, and is now cross-platform. - All scripts have been slightly renamed and recategorized, hopefully in a more intuitive manner. A few ancient and obsolete scripts have been removed outright.
- A myriad of small changes/improvements have been made to a number of scripts for consistency. Most notably, all of the exporter scripts now allow choosing the output directory, rather than forcing an arbitrary one. Some corresponding importer scripts have been updated to reflect this.
- The CLI (command-line interface) version of the tool now comes bundled with all of the built-in scripts that the main tool does.
- (Note: Not every script is supported with the CLI. Check
SCRIPTS.mdfor details on this.)
- (Note: Not every script is supported with the CLI. Check
- The documentation contained within
SCRIPTS.mdis no longer years out of date. It now accurately contains basic information on what every built-in script does.
Fixed
- Fixed some built-in script compilation errors.
- Fixed errors sometimes caused when copying certain text by @luizzeroxis in #2129.
- Fixed function resolution for newly-defined global functions during a batch GML code import.
- (On a technical note, this means that the compiler now parses all global scripts in a batch before any bytecode gets generated.)
- Fixed the
PromptLoadFileimplementation in the CLI, so that it no longer loops incorrectly.- (A small change was made to the behavior for this method and
PromptChooseDirectory. Now, it's possible to specify nothing, which is consistent with the ability to cancel in the GUI.)
- (A small change was made to the behavior for this method and
- Fixed some built-in GML constants that were missing from the compiler, but were present in the decompiler.
- Fixed buggy behavior when using
CodeImportGroupafter it threw an exception during an import; it will now always clear its queue. - Fixed missing constant resolution for
scr_debug_keycheck's argument in the game-specific data for Deltarune. - Fixed some behavior in
ImportSingleSound.csx(previouslyImportASound.csx),ImportSounds.csx(previouslyImportSoundsBulk.csx), andImportMasks.csx.