cristian d39b7013d8 Decompile func_80033B2C to C behind NON_MATCHING; 33FE0 fully C
Model initializer: copies the header block into the model's 0x138 sub-struct,
records the matrix's per-axis scale into position, runs the base transform and
rebuilds the joint command list. This clears the last bare function in 33FE0.c,
which is now entirely C (build-free). Bare GLOBAL_ASM: 40 -> 39.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 15:08:15 -04:00
2026-06-10 10:51:35 -05:00
2026-02-27 15:28:46 -05:00
2026-06-28 17:30:52 -04:00
…
…

Pokemon Stadium (US)

A WIP decomp of Pokemon Stadium (US).

It builds the following ROMs:

  • pokestadium.z64: md5: ed1378bc12115f71209a77844965ba50

Note: To use this repository, you must already have a rom for the game.

Prerequisites

Under Debian / Ubuntu (which we recommend using), you can install them with the following commands:

sudo apt update
sudo apt install make git build-essential binutils-mips-linux-gnu python3 python3-pip python3-venv

Please also ensure that the Python version installed is >3.7.

The build process has a few python packages required that are located in requirements.txt.

To install them simply run in a terminal:

python3 -m pip install -r requirements.txt

macOS

Use Homebrew: brew install make mips-linux-gnu-binutils libiconv (invoke the build as gmake). libiconv is required — macOS's system (BSD) iconv mis-encodes an ASCII backslash as the EUC-JP fullwidth backslash (0xA1C0) when it follows a multibyte character, silently corrupting C escapes like \n inside Japanese string literals and breaking the byte-match. The Makefile auto-detects GNU libiconv from Homebrew (/opt/homebrew or /usr/local) and warns if only the system iconv is found. The host-compiler syntax check also fails under Apple clang (it can't do -m32 and treats -Wint-conversion as an error), so build with gmake RUN_CC_CHECK=0; this does not affect the ROM output.

To use

  1. Place the US Pokemon Stadium 1.0 rom into the repository's "/baseroms/us/" folder as "baserom.z64".
  2. Set up tools and extract the rom: make init
  3. Re-assemble the rom: make

Matching tools (Rust)

A Rust workspace under tools/rust/ provides the tooling for the byte-for-byte matching effort. It is built automatically by make setup (make -C tools) when cargo is available; you can also build it directly:

cargo build --release --manifest-path tools/rust/Cargo.toml

The binaries land in tools/rust/target/release/:

  • ps-status — status of functions still pending decompilation. Runs build-free (no ROM needed), scanning #pragma GLOBAL_ASM in src/:

    ./tools/rust/target/release/ps-status            # summary + per-file counts
    ./tools/rust/target/release/ps-status --list     # every function + address
    ./tools/rust/target/release/ps-status --json     # machine-readable
    

    After make it also runs build-aware (byte progress per folder, like progress.py) when build/pokestadium-us.map exists, or with --build-aware.

  • ps-firstdiff — first difference(s) between the built and expected ROM (like tools/first_diff.py). Requires make + make diff-init:

    ./tools/rust/target/release/ps-firstdiff -c 5
    
  • ps-fdiff — non-interactive per-function asm diff of the built ROM vs the baserom (like ./diff.py -mwo <func>). Requires make:

    ./tools/rust/target/release/ps-fdiff func_80030010
    

Run any tool with --help for options.

Rust ↔ Python equivalence

The Rust tools mirror the existing Python scripts, which are maintained alongside them (not deprecated) — use whichever you prefer:

Rust tool Python equivalent Parity
ps-status progress.py byte-exact totals + per-folder counts
ps-firstdiff tools/first_diff.py same offset / function / decoded bytes
ps-fdiff ./diff.py -mwo <func> same differing instruction located¹

¹ ps-fdiff additionally resolves jal targets to symbol names and is scoped to the function; diff.py keeps its interactive TUI, scoring and wider window.

Parity was verified against a real matching build (ps-status) and an injected one-instruction regression (ps-firstdiff / ps-fdiff). See tools/rust/README.md for the full validation details.

For contacts and other pret projects, see pret.github.io.

Description
Disassembly and decompilation of Pokémon Stadium
Readme 38 MiB
Languages
C 89.6%
Python 5%
Assembly 2.9%
C++ 1.4%
Makefile 0.8%
Other 0.3%