The most complete tool for modding, decompiling and unpacking Undertale (and other GameMaker games!)
Main Features:
Can read every single byte from the data file for latest versions of Undertale, Deltarune, and most other GameMaker games, and then recreate a byte-for-byte exact copy from the decoded data.
Properly handles all of the pointers in the file so that if you add/remove stuff, make things longer/shorter, move them around, etc., the file format won't break.
An editor which lets you change (almost) every single value, including unknown ones.
Includes a simple room/level editor.
Allows for GML VM code editing. This means you can add any custom code to a game, either using the built-in GML compiler or GML assembly. (YYC is not supported for this.)
High-level GML decompiler and compiler. Supports a large range of GameMaker versions, and most important GML features (still missing a few).
Support for running scripts that automatically modify your data file (or perform other nefarious tasks). This can be used for mod distribution, aside from other methods such as file patches/project systems.
All core functionality extracted into a library for use in external tools.
Can generate a .yydebug file for the GM:S debugger so that you can edit variables live! (see here)
Automatic file associations for all GameMaker related data files. This is opt-in at the first boot of the tool, and can also be disabled by having a dna.txt file next to the executable.
What's new in 0.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. - Added an AudioGroup macro 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 arguments variable 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.Regex option to GameSpecificResolver by @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 --overwrite flag to the load command 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 RuntimeVersion struct in UndertaleGeneralInfo for convenience by @BioTomateDE in #2406. - Enabled usage of custom IGlobalFunctions implementations in GlobalDecompileContext by @skirlez in #2454. …