Reconstruction/disassembly project for the old Supreme Commander: Forged Alliance engine and game binaries. Inspired by Forged Alliance Forever team-work.
Progress snapshot:
- Total FAF functions:
67,170- IDA index, exported
- Progress coverage:
99.69%- Consists of
recovered+skip+external_dependency÷ exported - Total amount of completed tokens:
66,964
- Consists of
Progress DB status breakdown:
recovered:52,831(78.89%)skip:8,349(12.47%) — proven ICF aliases / thunks / EH or static-init glue with no distinct source bodyexternal_dependency:5,784(8.64%) — proven third-party/import-boundary code- libpng, zlib, wxWidgets, LuaPlus/Lua, external Boost internals, WildMagic/Wm3, CRI Sofdec/ADX, undname, bugsplat, CRT imports
needs_evidence:3(0.00%)in_progress:0(0.00%)blocked:322(0.48%)- strict circular/dep-blocked (in-DB literal
status == "blocked") - combined with
needs_evidence, the "not-yet-recovered non-engine-external" bucket is325 - the
statstool'sblocked_countaggregates the same two buckets and reports325— functions previously attempted that depend on an unrecovered subsystem, a not-yet-typed owner class, or a non-trivial call-tree not yet walked bottom-up.
- strict circular/dep-blocked (in-DB literal
Verdicts computed by fa-find-callers across the namespace's SQLite callgraph index and progress statuses. These counts show whether binary callers/dispatch evidence exists and whether caller tokens are marked recovered. They do not parse caller bodies or prove that a matching named call, registration, or virtual source edge exists. Verify real source wiring with scripts/recovery_callgraph_match_audit.py plus manual caller-body inspection.
| Bucket | Count | % of recovered |
|---|---|---|
| Recovered caller token exists (source edge still requires verification) | 17,239 |
32.63% |
| Vtable-anchored (virtual override of a recovered class) | 5,892 |
11.15% |
| Framework dispatch (wx event, EH handler, Lua binding, reflection table, …) | 5,618 |
10.63% |
| No recovered caller token yet (orphan risk) | 1,602 |
3.03% |
| No callsite evidence (no recorded code/data caller in the index) | 22,260 |
42.13% |
| Unclassified data xref (manual review) | 216 |
0.41% |
| RTTI-only | 4 |
0.01% |
| Bucket | Count | % of backlog |
|---|---|---|
Candidate (OK_RECOVERED_CALLER — caller token recovered; inspect its body) |
6 |
1.85% |
| Vtable-anchored (recover with the owning class) | 82 |
25.23% |
| Framework dispatch (wx/EH/Lua/reflection) | 0 |
0.00% |
Caller functions unrecovered (NEEDS_RECOVERED_CALLER — recover the parent first) |
126 |
38.77% |
| No indexed callsite evidence (needs investigation/evidence) | 111 |
34.15% |
| Unclassified data xref (manual review) | 0 |
0.00% |
| RTTI-only | 0 |
0.00% |
Set FAF_README_SKIP_VERDICTS=1 to skip this block during tight worker loops.
Use a Visual Studio developer shell before msbuild:
%comspec% /k "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsamd64_x86.bat"Patch/bootstrap required external dependencies:
powershell -ExecutionPolicy Bypass -File scripts\bootstrap_boost_1_34_1_required.ps1 -BoostRoot "<your external boost path>"
powershell -ExecutionPolicy Bypass -File scripts\bootstrap_wxwindows_2_4_2_required.ps1 -WxRoot "<your external wxWindows-2.4.2 path>"Build:
msbuild src\sdk\main.vcxproj /t:Build /p:Configuration=Debug /p:Platform=Win32Recommended hang-safe build wrapper:
powershell -ExecutionPolicy Bypass -File scripts\build_sdk_with_timeout.ps1 -TimeoutMinutes 120 -NoOutputTimeoutMinutes 10Patch/build details:
- boost_1_34_1_faf_required.md
- luaplus_build1081_faf_required.md
- wildmagic3p8_faf_required.md
- wxwindows_2_4_2_faf_required.md
- Boost
1.34.1 - LuaPlus
5.0build1081 - wxWidgets
2.4.2(MSW) - Wild Magic
3.8(now Geometric Tools) - zlib
1.2.3 - BugSplat
- CRI Middleware (Sofdec + ADX)
- DirectX 9/10 (with XACT audio; DX10 path is partial/non-functional in FA)
inspect-injector: injector/launcher for runtime inspection.inspect: injected DLL.main: reconstructed SDK/game code (primary recovered project).
USE_X87_COMPATIBILITY: keeps x87-compatible floating-point behavior where needed.
Big thanks to all active maintainers and contributors of the FAF project. This work builds on many years of engine inspection and disassembly effort by the FAF community, with special recognition to:
GetVersionExW- deprecated, ignored via disable warning 4996.