Case study
3S Decomp: a byte-compared PS2 decompilation of Street Fighter III: 3rd Strike
Decompiles the PlayStation 2 executable of Street Fighter III: 3rd Strike from Street Fighter Anniversary Collection into C that period Metrowerks and EE GCC compilers rebuild, then compares the rebuilt executable word by word with the user’s original. README reports the game code fully decompiled and the CRI middleware partly so. The separate 3SX native port describes itself as this project’s continuation.
Requirements & limits
- README reports the game code fully decompiled and the CRI middleware partly decompiled, with most file-system and sound functions the game uses matching; cri-progress.md checks off 497 of the 503 CRI functions it lists. At the reviewed commit, two game functions (sea_write and mlt_obj_trans_rgb_ext) and 39 of 52 CRI C files still include assembly in the PS2 build, and PS2 SDK and GCC library code is out of scope. The output is the PS2 executable, not a PC port.
- Building needs THIRD_U.BIN from the user’s own copy of the game; the split configuration records its SHA-1 as cf58495054c31ad852175c66e9ca04d5094f000e, and make split derives the assembly and linker script from it. The decompiling guide also relies on the executable’s DWARF debug data, dumped with decomp-toolkit, for signatures and local variables. A separate split_cps3 target for the CPS3 arcade version needs a user-supplied arcade ROM set and has only a code-segment configuration.
- The build guide covers Linux (Debian packages with i386 support, MIPS binutils, and a Python venv with splat64 0.29.0 and spimdisasm 1.35.0) and macOS through the provided Dockerfile. make setup_tools downloads Metrowerks mwccps2 3.0b38 and EE GCC 2.96 from decomp.me’s compiler releases plus the wibo loader for Windows tools; m2c, asm-differ, mwccgap and saturn-splitter are git submodules.
- A successful build ends with compare_bytes.py checking the rebuilt executable against the original from offset 0x80 to 0x478A00 and printing “Files match ✅”. That check tolerates 163 listed words in about 20 game and CRI functions, attributed to register and operand swaps, assert line numbers, string encoding, a misplaced nop and a call misalignment, so equivalence is near-byte-level by the project’s own check rather than a whole-file hash. The latest commit removed the GitHub Actions workflows, and this collection built nothing.
- LICENSE is AGPL-3.0 for the project’s code. The original executable and game content keep their own rights; include/cri carries headers marked “CRI Middleware SDK” and “Copyright (c) … CRI-MW”, and the vendored zlib keeps its own license. The reviewed sources establish no AI or REA use, and no runtime reproduction is claimed.
About this entry
- Type
- Case study
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Targets
- Game
Sources reviewed
The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.
Primary sources
- README.md GitHub · crowded-street/3s-decomp · Revision be9b9bc
- docs/builde-guide.md GitHub · crowded-street/3s-decomp · Revision be9b9bc
- docs/decompiling.md GitHub · crowded-street/3s-decomp · Revision be9b9bc
- Makefile GitHub · crowded-street/3s-decomp · Revision be9b9bc
- config/anniversary/sfiii.anniversary.yaml GitHub · crowded-street/3s-decomp · Revision be9b9bc
- tools/compare_bytes.py GitHub · crowded-street/3s-decomp · Revision be9b9bc
- cri-progress.md GitHub · crowded-street/3s-decomp · Revision be9b9bc
- src/anniversary/sf33rd/Source/Game/end_20.c#L321-L322 GitHub · crowded-street/3s-decomp · Revision be9b9bc
- src/anniversary/sf33rd/Source/Game/MTRANS.c#L1145-L1146 GitHub · crowded-street/3s-decomp · Revision be9b9bc
- config/cps3/sfiii3n.yaml GitHub · crowded-street/3s-decomp · Revision be9b9bc
- tools/requirements-python.txt GitHub · crowded-street/3s-decomp · Revision be9b9bc
- .gitmodules GitHub · crowded-street/3s-decomp · Revision be9b9bc
- include/cri/cri_xpts.h GitHub · crowded-street/3s-decomp · Revision be9b9bc
- LICENSE GitHub · crowded-street/3s-decomp · Revision be9b9bc
- https://github.com/crowded-street/3s-decomp/commit/be9b9bc69dc19822a8eca9ce3e72ba560d5a3835
More in Games
- Halo: Combat Evolved: an incremental re-implementation patched into the original Xbox executable · Case study
- Paper Mario: The Thousand-Year Door: an early matching GameCube decompilation · Case study
- 3SX: a native Street Fighter III: 3rd Strike port continuing the PS2 decompilation · Case study
- re4: a byte-identical decompilation of the Resident Evil 4 GameCube debug build · Case study
- Super Smash Bros. Brawl: an early matching Wii decompilation · Case study
- re-plants-vs-zombies: decompiling and modernizing Plants vs. Zombies GOTY · Case study