Case study
Himuro: a matching Fatal Frame PS2 decompilation
Reconstructs Fatal Frame’s PS2 executable as C for the US, EU and Japanese releases, built with the original EE-GCC 2.9 toolchain and checked by SHA-1 against the user’s own executables. Committed objdiff reports list the US and EU code as fully matched and the Japanese code as partial, and a few routines still rely on assembly or byte patches. Porting to modern hardware is a stated later goal, not part of this repository.
- Targets
- Game
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
Requirements & limits
- Prerequisites: Copy the matching main executable from your own disc or ISO into config/<region>/; the README gives the required SHA-1 for each region. Data extraction, splitting and the expected assembly are generated locally, and no game assets are committed.
- Prerequisites: Linux is required: Python 3.8+ in a virtual environment, make, i386 libc/libstdc++ for the committed 32-bit EE-GCC 2.9-991111-01 compiler, and the decompals PS2 binutils v0.10 installed separately; objdiff-cli is also committed. Each region is extracted, configured and built separately.
- Scope: Covers SLUS_203.88 (US), SLES_508.21 (EU) and SLPS_250.74 (JP); the output is a rebuilt PS2 ELF, not a PC port, which the README names only as a later goal. After the project’s own report-adjustment script, the committed objdiff reports list 3,437 of 3,437 US and 3,464 of 3,464 EU functions with all code and data matched, but 2,712 of 3,394 JP functions (73.64% of code). The README’s decomp.dev badges are mutable.
- Testing evidence: The ninja build runs sha1sum against config/<region>/checksum.sha1, so a successful build reproduces the supplied executable. To reach that hash, the build rewrites selected compiler output from asm_patches.json and copies listed byte ranges from the original executable into the built file (PhotoScoreCount in US and EU, DspSpData in EU). CI only uploads the committed reports and cannot build without the executables.
- License: MIT license for the project; Fatal Frame and its executables retain separate rights, and the committed compiler binaries keep their own terms.
About this entry
The description was reviewed against primary sources.
Primary sources
- README.md GitHub · Mikompilation/Himuro · Revision 595b082
- LICENSE GitHub · Mikompilation/Himuro · Revision 595b082
- configure.py GitHub · Mikompilation/Himuro · Revision 595b082
- Makefile GitHub · Mikompilation/Himuro · Revision 595b082
- config/us/checksum.sha1 GitHub · Mikompilation/Himuro · Revision 595b082
- config/us/report.json GitHub · Mikompilation/Himuro · Revision 595b082
- config/eu/report.json GitHub · Mikompilation/Himuro · Revision 595b082
- config/jp/report.json GitHub · Mikompilation/Himuro · Revision 595b082
- config/us/bin_patches.json GitHub · Mikompilation/Himuro · Revision 595b082
- config/eu/bin_patches.json GitHub · Mikompilation/Himuro · Revision 595b082
- config/us/asm_patches.json GitHub · Mikompilation/Himuro · Revision 595b082
- tools/python/fix_bin_matching.py GitHub · Mikompilation/Himuro · Revision 595b082
- tools/python/fix_report.py GitHub · Mikompilation/Himuro · Revision 595b082
- .github/workflows/progress.yml GitHub · Mikompilation/Himuro · Revision 595b082
More in Games
- 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
- LEGO Island: source reconstruction with separately reported exact rebuilds · Case study
- Majora’s Mask: matching US N64 decompilation · Case study
- Mario Kart Wii: an in-progress matching decompilation of the PAL release · Case study
- Mario Kart: Double Dash!!: a matching GameCube decompilation of the debug build · Case study