Case study
Final Fantasy VII: a matching PlayStation decompilation
Reconstructs C source for the US PlayStation release of Final Fantasy VII, aiming for code that compiles back to the original main executable and its game overlays. The build splits the user’s disc files with splat, compiles with period cc1-psx compilers and checks every rebuilt file against its SHA-1. A native build against the PsyZ PlayStation-library replacement is compiled in CI but is not documented as a playable port.
- Targets
- Game
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
Requirements & limits
- The project describes itself as a matching decompilation of the PS1 game; config/us.yaml defines the single us version, covering SCUS_941.63 and battle, field, menu, world, minigame, magic and other overlays with 29 SHA-1 entries. Source tables such as the chocobo minigame’s arccosine table are data taken from the game, as is usual for such projects. README states no completion figure; CI uploads a progress report as a build artifact.
- Supply disc 1 of Final Fantasy VII (USA) as BIN/CUE under disks/; README lists the USA Interactive Sampler CD as optional, though the reviewed config builds only us. CONTRIBUTING says the repository includes no original game data and is not a playable or standalone version. CI fetches its disc images from a private dependency repository through a secret token.
- README documents Debian/Ubuntu and Arch Linux with Go, Python 3 (a venv with splat64, spimdisasm and others), ninja, 7zip, bchunk and mipsel-linux-gnu binutils and GCC; CI notes that Ubuntu 24.04’s binutils 2.42 linker does not match the game. Make downloads the cc1-psx-26 and cc1-psx-272 compiler builds from the project’s init release and checks them against committed SHA-256 files; maspsx, m2c, asm-differ and PsyZ come in as submodules, and a Dockerfile is provided.
- make build ends with a ninja rule running sha1sum -c over the expected hashes of every overlay. CI on the upstream repository checks formatting, runs that build, lints for overlapping symbols and compiles the PsyZ build. These checks compare file identity for the US release.
- LICENSE is AGPL-3.0; the game discs, extracted data and downloaded compilers keep separate rights. README says the decompiled code is written by humans and rejects LLM-accelerated decompilation, while allowing LLMs for tooling, permuting hard functions or hunting runtime bugs; CONTRIBUTING forbids autonomously generated pull requests and commit messages.
About this entry
The description was reviewed against primary sources.
Primary sources
- README.md GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- CONTRIBUTING.md GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- Makefile GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- config/us.yaml GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- tools/ninja/gen.py GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- tools/builder/builder/build.go GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- .github/workflows/build.yaml GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- CMakeLists.txt GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- .gitmodules GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- bin/cc1-psx-26.gz.sha256 GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- Dockerfile GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
- LICENSE GitHub · Xeeynamo/ff7-decomp · Revision 37f35a5
More in Games
- GoldenEye 007: matching Nintendo 64 decompilation for three releases · Case study
- Gran Turismo 4: an agent-assisted PS2 engine matching decompilation · Case study
- Halo 2: an agent-assisted matching decompilation of an LTCG Xbox build · Case study
- Himuro: a matching Fatal Frame PS2 decompilation · Case study
- ICO decompilation: byte-identical PAL and Japanese PlayStation 2 boot ELFs · Case study
- Kingdom Hearts 358/2 Days: a matching Nintendo DS decompilation · Case study