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.

Requirements and limitations

  • 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.
  • 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.
  • 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.
  • 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; this collection did not rerun anything.
  • MIT license for the project; Fatal Frame and its executables retain separate rights, and the committed compiler binaries keep their own terms. The reviewed sources establish no AI or REA attribution, and the archive link in the reported X post was not used as evidence.

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

  1. README.md GitHub · Mikompilation/Himuro · Revision 595b082
  2. LICENSE GitHub · Mikompilation/Himuro · Revision 595b082
  3. configure.py GitHub · Mikompilation/Himuro · Revision 595b082
  4. Makefile GitHub · Mikompilation/Himuro · Revision 595b082
  5. config/us/checksum.sha1 GitHub · Mikompilation/Himuro · Revision 595b082
  6. config/us/report.json GitHub · Mikompilation/Himuro · Revision 595b082
  7. config/eu/report.json GitHub · Mikompilation/Himuro · Revision 595b082
  8. config/jp/report.json GitHub · Mikompilation/Himuro · Revision 595b082
  9. config/us/bin_patches.json GitHub · Mikompilation/Himuro · Revision 595b082
  10. config/eu/bin_patches.json GitHub · Mikompilation/Himuro · Revision 595b082
  11. config/us/asm_patches.json GitHub · Mikompilation/Himuro · Revision 595b082
  12. tools/python/fix_bin_matching.py GitHub · Mikompilation/Himuro · Revision 595b082
  13. tools/python/fix_report.py GitHub · Mikompilation/Himuro · Revision 595b082
  14. .github/workflows/progress.yml GitHub · Mikompilation/Himuro · Revision 595b082