Work-in-progress decompilation of Turok 2: Seeds of Evil (Nintendo 64, US 1.0).
⚠️ Status: bootstrap verified. Toolchain runs end-to-end; ROM splat-disassembles into ~8.6M lines of MIPS asm. No matched C yet — segment boundaries and data/code separation are next.
This decomp is a stepping stone. The end goals are:
- A native macOS (Apple Silicon) port via N64Recomp + RT64.
- Reusing ~70% of the work to port Armorines: Project S.W.A.R.M., which shares the Acclaim Studios London engine.
- Stretch goal: Android via RT64's Vulkan backend.
If you only want to play Turok 2, an emulator is 100× less work and totally fine. This project exists for native ports, modding (HD textures, real widescreen, 60 FPS), and preservation.
Acclaim Studios London engine — also used by Turok 3, Armorines, Re-Volt, Forsaken, parts of NBA Jam.
baserom.us.z64— ROM dump from your own cartridge. Not committed, never will be.- Expected SHA1:
fb0400f21e3f043939ab56500c7b12a3231006f1 - Internal name:
Turok 2: Seeds of Ev, cartridge IDNT2E, 32 MB.
- Expected SHA1:
# 1. Clone reference projects (gitignored, not part of this repo)
mkdir -p references && cd references
git clone --recursive https://github.com/Drahsid/turok3.git
git clone https://github.com/Drahsid/LibTEngine.git
cd ..
# 2. Pull SN64 toolchain + LibTEngine headers into the working tree
./scripts/setup-from-references.sh
# 3. Build the linux/amd64 container (needed because cc1 is i386 ELF
# and asn64.exe is Win32 — Apple Silicon runs both via Rosetta-for-Linux)
brew install orbstack # or Docker Desktop with Rosetta-for-Linux enabled
docker build --platform=linux/amd64 -t turok2-build .
# 4. Disasm the ROM
docker run --platform=linux/amd64 --rm -it -v "$PWD":/work turok2-build \
bash -c "pip install -r tools/requirements.txt && make setup"- Drahsid/turok3 — in-progress decomp of Turok 3 (same engine). Foundation for the official Turok 3 Remastered.
- Drahsid/LibTEngine — reverse-engineered structs and function signatures for the Turok 2 / Turok 3 engine. Major head start.
- Mr-Wiseguy/N64Recomp + N64ModernRuntime + RT64 — the native-port pipeline.
- ethteck/splat — disassembler / segment splitter.
- matt-kempster/m2c — MIPS → C decompiler for matching.
- Confirm ROM dump (SHA1 verified)
- Toolchain working (Docker linux/amd64 + Rosetta-for-Linux + SN64 binaries)
- First splat pass produces asm + linker script
- Entry point confirmed at
0x80000400(romMain) - Refine segment boundaries (code vs data vs assets vs audio)
- Dump RSP
ucode_text/ucode_dataand diff against stock F3DEX
- Quantify delta vs F3DEX
- Decision: go/no-go on the native-port path
- Import structs from LibTEngine
- First 50–100 matched functions
- Byte-exact
.z64build (sha1sum build/turok2.us.z64 == sha1sum baserom.us.z64)
- N64Recomp on the matched ELF
- First window opens with RT64
This decomp is being developed with the assistance of Claude (Anthropic's Claude Code, Opus 4.7). Reverse-engineering work, splat configuration, toolchain scaffolding, and most of the prose in this repository were produced in collaboration with Claude under human direction.
The ROM is not distributed here. Provide your own dump from a cartridge you own. Original game code and assets are property of the Turok IP rights holders.
The reverse-engineered work in this repository (symbol names, struct definitions, splat configs, Makefiles, scripts) is released under CC0-1.0 — public domain. See LICENSE for the full text.