Case study
vf2-decomp: differentially validated Virtua Fighter 2 recovery
Recovers Virtua Fighter 2 Version 2.1’s Sega Model 2A i960 program into portable, non-matching C17, accepting each recovered path only when it matches a reference i960 executor at controlled boundaries. The repository adds ROM validation, i960 and 68000 analysis tools, a bounded Model 2A hardware model and snapshot-based differential runners. README states that it is not yet a playable port; match flow, combat, physics, AI, rasterization and much of the audio remain open.
- Targets
- Game
- Category
- Independent reconstruction cases
- Relationship
- Independent reconstruction project
- Sources reviewed
Requirements & limits
- Prerequisites: ROM-backed analysis and differential tests need a user-supplied, legally obtained copy of the supported arcade ROM set. config/vf2_v22_roms.csv records only filenames, sizes and hashes, and vf2rom verifies the set. The repository contains no Sega game data, and contributors must not commit ROMs or reconstructed region images.
- Prerequisites: Builds use CMake with a C17 compiler and warnings treated as errors, plus an optional sanitizer configuration. STATUS lists GCC/Clang CI, and README names native Windows MSVC as the canonical agent workflow. Setting VF2_ROM_DIR enables the ROM-backed CTest targets; otherwise only ROM-independent tests run.
- Scope: README describes a clean-room, non-matching recovery whose native runtime preserves CPU, frame, counter and mutable-memory state through repeated scheduler and gameplay dispatches, including a 1,270,824-instruction post-scheduler corridor with no interpreted instructions. It explicitly does not claim complete decompilation, a playable executable, full Model 2/TGP emulation, SCSP DSP audio or every gameplay branch. Unverified paths fail closed with VF2_ERROR_UNSUPPORTED.
- Testing evidence: The vf2i960 native-dispatch commands run the recorded differential milestones, and vf2cycles advances recovered C and the reference executor from a shared snapshot, stopping in strict mode at the first unsupported block, reference failure or state mismatch. STATUS reports MATCH for the third through sixth dispatches. CI runs only ROM-independent tests, so the ROM-backed results remain project-reported.
- License: BSD-3-Clause covers the project’s code; MAME and public Intel i960 documentation serve as cross-references, not included source. docs/LEGAL.md discloses 301 original Sega symbol names, taken from a later Model 2 port DLL, as non-clean-room naming, and an untracked Sonic The Fighters disassembly is used only as a navigation aid. AGENTS.md addresses coding agents.
About this entry
The description was reviewed against primary sources.
Primary sources
- README.md GitHub · celsowm/vf2-decomp · Revision 9a9f727
- LICENSE GitHub · celsowm/vf2-decomp · Revision 9a9f727
- docs/LEGAL.md GitHub · celsowm/vf2-decomp · Revision 9a9f727
- THIRD_PARTY.md GitHub · celsowm/vf2-decomp · Revision 9a9f727
- docs/STATUS.md GitHub · celsowm/vf2-decomp · Revision 9a9f727
- AGENTS.md GitHub · celsowm/vf2-decomp · Revision 9a9f727
- config/vf2_v22_roms.csv GitHub · celsowm/vf2-decomp · Revision 9a9f727
- .github/workflows/ci.yml GitHub · celsowm/vf2-decomp · Revision 9a9f727
More in Games
- Wind Waker HD decompilation: functions verified against the recompiled Wii U game · Case study
- Banjo: Recompiled — an N64Recomp Banjo-Kazooie native port · Case study
- C2C: hybrid recompilation and hand decompilation of Crash Bandicoot 2 · Case study
- Castlevania 64: Recompiled — a beta static-recompilation port · Case study
- Conker's Bad Fur Day: Recompiled — an N64Recomp native port · Case study
- CPS-2 Recomp: static recompilation of Capcom CPS-2 and CPS-1 arcade games · Case study