SkyTemple

1.8.0

Released on 2024-08-04.

Changelog

This release is packed full with new features and improvements! For this reasons this changelog is structured a bit different from previous changelogs. We will start with new features in SkyTemple, then go over the massive improvements and new features in ExplorerScript, present updates to patches and then all other improvements to SkyTemple.

New SkyTemple Features

Symbols Editor

SkyTemple now has a new section that allows advanced users to change many hardcoded data values of the game. Powered by pmdsky-debug, this section allows you to edit the values of most symbols in the game, across of all of ARM9 and its overlays. It even allows more complicated structured data for some supported data types.

Please note that the symbol editor may not load or work correctly with some patches applied.

Thanks to @Frostbyte0x70!

Sprite Info

SkyTemple 1.8 now automatically corrects all relevant Pokémon infos when sprites are updated, including Body Size. The difference and meaning of Sprite VRAM-Size, Sprite File Size and Body Size is now communicated more clearly and we added some documentation.

There are also two new tools under "Pokémon" in the new tab "Sprite Checker" for checking the sprite info metadata of all Pokémon and performing automatic corrections.

Thanks to an anonymous contributor!

ExplorerScript 0.2

One of the highlights of this release are the improvements to ExplorerScript. We hope you enjoy! You can also find a list of all ExplorerScript features in our updated reference.

Performance Improvements

We have worked hard on making ExplorerScript decompilation and especially compilation much faster. Compiling scripts is now up to 8x faster than before.

Thanks a lot to @tech-ticks for his work on this with me!

New Features

User Constants

You can now define your own constants! These can also be placed in macro files and referenced in scripts that import them. You can also define constants in routines or macros where they only apply to that routine/macro.

const FOOBAR = 12;
const BAZ = "Hello";

def 0 {
    message_Talk(BAZ);
    process_Special(FOOBAR, 0, 0);
}

See the documentation for more details.

Entity Inline-Context

Instead of writing with-blocks you can now add a special "marker" to operation calls to tell the game to execute this operation with the given actor, object or performer. This is now the default for decompilation.

These two routines are equivalent:

// new
def 0 {
    MyOperation<actor ACTOR_HELLO_WORLD>(3, "String", Position<'Name', 20, 20.5>);
}

// "old"
def 1 {
    with (actor ACTOR_HELLO_WORLD) {
        MyOperation(3, "String", Position<'Name', 20, 20.5>);
    }
}

See the documentation for more details.

Thanks to @tech-ticks!

Multiple statements in with-Blocks

You can now put multiple statements in a with-block. They will all be executed after each other as if you have written multiple with-blocks for the same entity. See the documentation for more details.

Thanks to @tech-ticks!

Multiline Strings

You can now define strings that span multiple lines. This works for both language- and constant-strings. The delimiter for them is """ or '''.

{
    languageA='String for lang A',
    languageB="String for lang B",
    languageC="""
      String for lang C
      on multiple lines
    """
}

The indent ("padding") before each line in the string will automatically be removed, so your string doesn't end up with a lot of spaces in a new line. In the above example, the string contents for language3 written in one line are "String for lang C on multiple lines".

See the documentation for more details.

Fixed Point Numbers

You can now used fixed point numbers between -64.0 and 63.996 in your scripts. Since they are fixed-point and not floating-point, their values get rounded to the next actually supported value by the game (the precision is ~.0039). Please note that not all operations may properly support fixed point numbers.

See the documentation for more details.

SsbScript Fallback

If the decompiler can not decompile a script, it will now instead decompile it as SsbScript, an intermediate representation of ExplorerScript and SSB. This representation is harder to work with, but allows you to at least have any chance of working with scripts you lost the source code for that normally can't be decompiled.

The compiler will switch to compiling a script as SsbScript if one of the first lines beginning with //?: contains the special marker //?: is-ssb-script: true.

Important Changes

  • % is now a valid prefix for macro variables. Using $ for macro variables is now deprecated and may be removed in future versions of ExplorerScript. $ is still the prefix for game variables. We made this change to make the distinction between these two more clear.
  • Rejoice QWERTY users: @ can now be used as the prefix for label definitions. Using § is now deprecated and may be removed in future versions of ExplorerScript.
  • The syntax for targeted routine definitions has been simplified. For example def 1 for_actor(ACTOR_PLAYER) can now be written as def 1 for actor ACTOR_PLAYER. The old syntax may be removed in future versions of ExplorerScript.

Bugfixes

  • The forever loop has been fixed. It no longer requires a continue to actually loop. It will now also correctly loop when reaching the end of its block. See the pull request for details.
  • Fix decompilation for scripts that contain jumps to labels in other routines.
  • Fix decompilation for scripts that contain calls.

Internal changes

  • The parser is now implemented in C++ using pybind11.
  • The explorerscript package is now fully typed.

Patches

New Patches

  • RemoveBodySizeCheck: Adds a patch that removes the total body size check the game performs before the player tries to enter a dungeon. (thanks to @Frostbyte0x70)
  • SpriteSizeInMonsterData: Changes Sprite Size and Sprite File Size values to be in each Pokémon's data. - This patch was previously part of ExpandPokeList. It can now be applied on its own and allows modifying the sprite size fields for Pokémon sprites. (thanks to an anonymous contributor)

Improvements

  • ChangeTextSound: Added an optional second parameter to the text tag specifying the volume. If the text tag is used without a volume parameter, it defaults to 256. (thanks to @Adex-8x).
  • BoldText: When characters' widths are read while bold text is active, then it will be increased by 1 to prevent characters from bleeding into one another. (thanks to @Adex-8x).

Bugfixes

  • A small oversight in DisplayScriptVariable was fixed that might have resulted in crashes on hardware (thanks to @Adex-8x).
  • Potential crashes due to misaligned reads have been fixed in the ProvideATUPXSupport and ExpandPokeList patches (thanks to @Adex-8x).

Other Changes

  • The EditExtraPokemon patch has been renamed to EditGuestPokemon (thanks to @Frostbyte0x70).

Other changes to SkyTemple

Improvements

  • Localizations have been updated. Thank you to all contributors on Crowdin helping with translating SkyTemple!
  • SkyTemple is now available for MacOS arm64 (thanks to @tech-ticks)
  • Text string categories have been extended and consolidated across NA/EU/JP regions. JP now is up-to-date with text string categories compared to the other regions (thanks to @in2erval)
  • pmdsky-debug has been updated to 4db258e93a (thanks to all contributors)
  • The performance of SkyTemple Script Engine Debugger has been vastly improved.
  • The debug flags in the Debugger have been re-worded now that we better understand what they (don't) do (thanks to @Frostbyte0x70).
  • The Debugger no longer opens a window when saving small scripts and instead provides a more seamless experience (thanks to @tech-ticks).
  • The new Windows installer now uninstalls old versions first to fix some issues with anti-viruses. The new uninstaller remembers which files were installed by the installer and only removes these.
  • SkyTemple icons have been given a subtle fixup, the Windows icon resolution has been fixed.
  • SkyTemple Nightlies are now available for macOS, Windows and Linux Flatpak.

Removed Features

  • SkyTemple Ssb Debugger no longer supports debugging scripts which have been saved before they have been reloaded in the emulator.
  • The option to select how SkyTemple handles async operations have been removed and replaced by a default which works on all platforms reliably.

Bugfixes

  • Fixed the export of static tiles for map backgrounds not working.
  • Fixed string export not working correctly for strings that contain newlines (thanks to @in2erval).
  • Fixed error message when loading a custom patch fails (thanks to @Frostbyte0x70).
  • Fixed a typo in the instruction dialog for importing portraits (thanks to @Chesyon).
  • Fixed Pokémon sprites not loading in the Pokémon editor.
  • Localizations now work properly under macOS.

Internal

  • Compatibility code for SkyTemple 1.3 has been removed.
  • Dependencies for unsupported Python versions have been removed (thanks to @dotlambda).
  • Additional tests have been added to SkyTemple Files.
  • Various dependencies of SkyTemple have been updated.
  • Python on macOS and Windows now run in UTF-8 mode.

Please note that this version of SkyTemple under Windows now runs the uninstaller before installing a new version. The uninstaller of old SkyTemple versions deletes ALL files within SkyTemple's installation directory, please make sure the installation directory contains no important files before running the installer for 1.8.0

Downloads