- Python 70.1%
- C++ 21%
- Shell 5%
- C 3.8%
- Java 0.1%
| .git-hooks-config | ||
| .githooks | ||
| docs | ||
| progress | ||
| replays | ||
| spec | ||
| src | ||
| tools | ||
| vendor_stubs | ||
| .gitattributes | ||
| .gitignore | ||
| CLAUDE.md | ||
| README.md | ||
lol-decomp
Verifiable source recovery of the League of Legends client, anchored on the RiotLOL_Client_AB
build (the build we hold a full private PDB for). The PDB is ground truth; the goal is
recompilable C++ that is functionally identical to Riot's original, built with the original
VS2005 SP1 toolchain.
This binary was built with /GL + /LTCG (whole-program optimization), so there is no per-TU
byte target and the old per-TU /O2 "logical score" was invalid. Instead we delink the
shipped image into one relocatable object (PDB names + relocations restored) and override
functions one at a time from recovered C++, byte-matching each against its original body in
the delinked obj (objdiff 100%) while the image stays runnable. Symbolic/behavioral checks
(symdiff/diffexec) are the fallback for what byte-match can't target (fully-inlined,
ICF-folded, non-standard-ABI). See spec/delink_relink_methodology.md (why),
spec/delink_implementation_plan.md (how), docs/delink_workflow.md (per-function steps),
docs/grind_workflow.md (agent loop), and CLAUDE.md for the entrypoint/doc map.
Layout
| Path | Contents |
|---|---|
orig/ |
Ground truth: RiotLOL_Client_AB.exe + .pdb |
compilers/ |
Exact original toolchain (MSVC VS2005 SP1, 14.00.50727) |
vendor/ |
Third-party reference source (boost, jpeg-6b, lua, cryptopp, scaleform, zlib, …) |
vendor_stubs/ |
Link stubs for commercial libs (FMOD, Scaleform, Cg, …) |
replays/ |
Game replay(s) for behavioral testing |
spec/ |
Extracted PDB ground truth (pdb_modules.txt, icf_folds.json) + the delink docs |
src/ |
Recovered source (Perforce tree); src/_delink/delink.h = override macros |
tools/ |
Delink pipeline (coffdrop.c, comments2coffdrop.py, dibs.c, phase0_delink_spike.sh, ghidra/) + fallback gates (symdiff.py, diffexec.py, funcdiff.py) |
docs/ |
Agent/workflow docs plus the generated progress page (index.html) |
.git_old_backup/ holds the previous repo history (local only) — recoverable, safe to
delete once no longer referenced. Large asset dirs (orig/ compilers/ vendor/ build/) are
gitignored pending an LFS/hosting decision; they live on disk.