Skip to content

Releases: encounter/decomp-toolkit

v1.4.1

05 Feb 06:57
Compare
Choose a tag to compare

What's Changed

  • Fixed: Auto-split and padding symbol fixes (bb18a4b)

A few issues were causing linker errors:

  • Auto-splits could contain symbols that have a higher alignment than the split itself. Detect this and create a new auto-split at these symbols.
  • The analyzer can miss objects in between other objects if there are no direct relocations to them. In these cases, non-zero data could just get totally lost. Detect and create symbols for these.

Full Changelog: v1.4.0...v1.4.1

v1.4.0

28 Jan 03:09
Compare
Choose a tag to compare

What's Changed

  • Added: Improve split cyclic dependency errors (6c3887c)
    • When a link order is unresolvable, decomp-toolkit now prints out all of the TUs in a cycle, easing debugging.
  • Added: WAD support for object_base (51a7fbd)
    • This allows WAD projects to use the auto-extraction feature: decomp-toolkit will extract all objects from a disc file or WAD file that exists in the configured object_base.
  • Added: dol diff: Conditionally warn on symbol size mismatch (#35, b964232)
    • When a symbol's data matches but the size differs due to padding bytes, print a warning and continue.
  • Added: dol diff: Ignore globalized symbols (#61, e55ade1)
  • Added: Set alignment for floats/doubles in analyzer (#60, 9a6348e)
  • Added: Check for conflicting splits with different file extensions (#81, 93000b2)
  • Added: Treat a branch to the start of a function as a tail call (#74, a22e878)
  • Fixed: vfs ls: Column sizing with Unicode chars (04b60d3)
  • Fixed: Don't emit split alignment warnings for auto-splits (#84, 0c6eff4)
  • Fixed: Warn rather than fail on .note.split/.comment reading (589e59a)
  • Changed: Improve logic for generating padding symbols (6819a8b)
  • Changed: Update Error Messages by @NWPlayer123 in #87
  • Removed: elf split command (a6c7001)
    • This command was an early experiment and only worked correctly on one game. The project system has long superseded it. ELFs are better supported by generating a project config via elf config and using the DOL as the target object.

Full Changelog: v1.3.0...v1.4.0

v1.3.0

07 Nov 16:38
Compare
Choose a tag to compare

What's Changed

  • Add rename field to extract configuration (9fc56d8)
    • Allows renaming, for example, local statics from symbol$1234 to symbol for inclusion in the source function.
  • Add Wii WAD support to dtk vfs & wad commands (1cc38ad)

Examples:

$ dtk vfs ls 'test.wad:'
676 bytes | 000100014e414345.tik     | File       
736 bytes | 000100014e414345.tmd     | File       
2.50 KiB  | 000100014e414345.cert    | File       
225 KiB   | 000100014e414345.trailer | File       
225 KiB   | 00000000.app             | File       
1.62 MiB  | 00000001.app             | File       
4.35 MiB  | 00000002.app             | Archive: U8
2.55 MiB  | 00000003.app             | Archive: U8
2.06 MiB  | 00000004.app             | Archive: U8
33.5 MiB  | 00000005.app             | Archive: U8
257 KiB   | 00000006.app             | File       

$ dtk vfs ls 'test.wad:00000004.app:./HomeButton2/LZ77_homeBtn.arc:nlzss:arc/anim'
300 bytes | th_HomeBtn_b_12btn_on.brlan        | File
3.79 KiB  | th_HomeBtn_b_btry_gry.brlan        | File
2.85 KiB  | th_HomeBtn_b_btry_red.brlan        | File
3.79 KiB  | th_HomeBtn_b_btry_wht.brlan        | File
500 bytes | th_HomeBtn_b_btry_wink.brlan       | File
...

Full Changelog: v1.2.0...v1.3.0

v1.2.0

29 Oct 00:02
Compare
Choose a tag to compare

What's Changed

  • Added: Add header_type and custom_type to extract config

Extract configuration is now emitted in the output config, so tooling can load and perform their own tasks on extracted assets without having to parse YAML.

header_type:

  • symbol (default): Emit a full symbol declaration.
  • raw: Emit raw array data (for wrapping in your own declaration)
  • none: Don't emit a header at all. (For custom processing)

custom_type/custom_data: Passed through to the output config as-is for custom tasks.

Full Changelog: v1.1.4...v1.2.0

v1.1.4

18 Oct 06:50
8823c22
Compare
Choose a tag to compare

What's Changed

  • Added: Follow symlinks when looking for disc images by @cadmic in #78
  • Fixed: Address analysis with negative add operands by @sozud in #76
  • Fixed: ELF processing regressions introduced by object crate upgrade in v1.0.0 (8d8d801, fa5068f)

Full Changelog: v1.1.3...v1.1.4

v1.1.3

13 Oct 19:43
Compare
Choose a tag to compare

What's Changed

  • Fixed: Always check for extracted files in object resolution (bee4570)
    • Resolves an issue where extracted files would not be found after removing the disc image from the orig dir.

Full Changelog: v1.1.2...v1.1.3

v1.1.2

13 Oct 07:05
Compare
Choose a tag to compare

What's Changed

  • Added: Extract files from disc image to object_base (18bd608)
    • When extract_objects is enabled (on by default), objects will be extracted from a disc image into object_base, and then used directly from object_base going forward. This allows users to delete the disc image from their orig directory after the initial build.
  • Fixed: Make selfile relative to object_base (4fe2608)

Full Changelog: v1.1.1...v1.1.2

v1.1.1

11 Oct 04:57
Compare
Choose a tag to compare

What's Changed

  • Added: VFS fixes and command improvements.
    • vfs ls: Now displays size, detected file format, and decompressed size (if applicable).
      -r/--recursive lists files recursively.
      -s/--short prints only filenames.
    • vfs cp: Copies files recursively when the source is a directory.
      --no-decompress disables automatic decompression for Yay0/Yaz0.
      -q/--quiet disables printing copied files.
    • rarc and u8 commands are now thin wrappers over vfs ls and vfs cp.
      For example, rarc list file.arc is now equivalent to vfs ls file.arc:.
      rarc extract file.arc -o out is equivalent to vfs cp file.arc: out.
  • Fixed: VFS layout for Wii discs (disc/sys dirs) (1f4b452)
  • Fixed: VFS path handling on Windows (2e524e6)
  • Changed: Improve cache locality of some internal structures. Minor reduction in memory usage. (b184fee)
  • Removed: Unused metroidbuildinfo command. (64d0491)

Full Changelog: v1.1.0...v1.1.1

v1.1.0

04 Oct 05:13
Compare
Choose a tag to compare

What's Changed

  • Added: Automatically check for invalid extab relocations by @CelestialAmber in #75
  • Added: Decode extab entries as comment in assembly output (281b0f7)
  • Added: Load objects from disc image & vfs module (f91c2a1)

Revamps support for container paths and centralizes logic into a VFS (virtual file system) module.
The new VFS architecture supports disc images and any level of nesting.

For example, the following command now works:
dtk dol info 'Interactive Multi-Game Demo Disc - July 2002 (USA).rvz:files/zz_StarFox051702_e3.tgc:files/default.dol'
This opens a TGC file inside an RVZ disc image, then reads default.dol in the FST.

Another example:
dtk rel info 'Legend of Zelda, The - The Wind Waker (USA).rvz:files/RELS.arc:mmem/f_pc_profile_lst.rel'
This opens a RARC archive inside an RVZ disc image, loads the Yaz0-compressed REL and decompresses it on the fly.

This all operates in memory with minimal overhead, with no need to extract temporary files.

Supported container formats:

  • Disc images (ISO/GCM, WIA/RVZ, WBFS, CISO, NFS, GCZ, TGC)
  • RARC/SZS and U8 (.arc)

Supported compression formats:

  • Yaz0 (SZS)
  • Yay0 (SZP)
  • NLZSS (.lz)

Projects now can utilize a new configuration key object_base:

object: orig/GZLE01/sys/main.dol
modules:
- object: orig/GZLE01/files/RELS.arc:rels/mmem/f_pc_profile_lst.rel

becomes

object_base: orig/GZLE01
object: sys/main.dol
modules:
- object: files/RELS.arc:mmem/f_pc_profile_lst.rel

When loading the objects, decomp-toolkit will automatically check the object_base directory for any disc images. (They can be named anything, but must be in the folder root.) If one is found, all objects will be fetched from the disc image itself, rather than having to extract the files manually.


Two new commands were added: vfs ls and vfs cp.
These commands are very barebones currently, but allow listing directory contents and extracting files from decomp-toolkit's vfs representation:

❯ dtk vfs ls disc.rvz:
files
sys

❯ dtk vfs ls disc.rvz:sys
boot.bin
bi2.bin
apploader.bin
fst.bin
main.dol

❯ dtk vfs cp disc.rvz:sys/main.dol .

Full Changelog: v1.0.0...v1.1.0

v1.0.0

29 Sep 19:52
Compare
Choose a tag to compare

What's Changed

decomp-toolkit has reached v1.0.0! 🎉 While this release contains mostly iterative updates, dozens of projects are successfully using decomp-toolkit. It's time for a stable version number.

Notably, projects using the prebuilt binaries should upgrade for improved overall performance. (See below)

  • Added: map config for generating symbols/splits (cfcd146)
    • Useful for extracting information from map files that aren't fully well-formed, such as ones from existing decompilation projects.
  • Added: Better support for SMG/TP maps (68f4552)
    • These post-processed maps have a lot of issues. This adds a few workarounds to the map parser to make it easier (though still not fully automatic) to parse these into symbols/splits.
  • Changed: dol diff: Loosen @ symbol match criteria (d4f695f)
  • Changed: Use mimalloc for prebuilt dtk binaries. In particular, this improves dtk dol split performance with the prebuilt binaries by ~2x compared to builds using musl's built-in malloc. (c106123)

Full Changelog: v0.9.6...v1.0.0