Case study

Syphon Filter: The Omega Strain — matching PS2 executable decompilation

Reconstructs much of the NTSC-U PlayStation 2 executable of Syphon Filter: The Omega Strain as C; with the remaining functions kept as split assembly, the build reproduces the retail SCUS_972.64 byte for byte. Committed objdiff reports track per-function matching against the user’s own executable. This is a matching-decompilation case, not a PC port; progress figures remain project-reported.

Requirements and limitations

  • Targets only the NTSC-U executable SCUS_972.64; the output is a rebuilt PS2 ELF, not a native PC program. At the reviewed commit, the committed objdiff report and handoff note list 13,413 of 14,331 functions (93.59%), 76.59% of code bytes and 99.92% of data as matched, with the rest still assembly. The dated status table in PROGRESS.md shows older, lower figures, and function totals shift as boundaries are refined.
  • Supply SCUS_972.64 from an independently owned disc or image; configure.py checks its SHA-256 against config/target.sha256 before splitting. No disc data, split assembly, objects or rebuilt executable is committed; derived files are generated in git-ignored folders. Executable data regions are committed as generated C definitions.
  • Setup needs Python 3.10+ with pinned splat 0.50.0 and spimdisasm 1.42.4, ninja, MIPS binutils and objdiff-cli. Windows runs the tools natively; Linux/macOS run the Windows compiler through wibo or wine. The setup script downloads a CodeWarrior PS2 3.0.3 build archived by decomp.me, but the licensed 3.0 build 38 and 3.04 build 22 installations used by per-unit overrides are not supplied; without them those units fall back to retail assembly. Library units use EE-GCC 2.95.3 and 2.96.
  • Verification is a whole-image SHA-256 comparison: ninja fails unless the rebuilt executable matches the retail hash, and the project claims a function match only with that check and objdiff identity. CI cannot build without the executable and only uploads the locally generated report for decomp.dev. The project treats build 38 compatibility as code-generation evidence, not proof of the original compiler; this collection did not rerun any build.
  • No license file is present at the reviewed commit, so reuse terms for the project’s code are unstated; the game, its executable and the proprietary Metrowerks compilers retain separate rights. The handoff note addresses a person or AI agent and the progress log plans parallel agent work, without attributing specific matches; no REA connection is established.

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 · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  2. PROGRESS.md GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  3. docs/HANDOFF.md GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  4. progress/report.json GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  5. DECOMP_DEV.md GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  6. config/target.sha256 GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  7. tools/check_sha256.py GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  8. requirements.txt GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  9. docs/data_gen.md GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc
  10. .github/workflows/report.yml GitHub · zm2283145/syphon-filter-omega-strain-decomp · Revision d41eacc