Byte-accurate decompilation of the League of Legends v4.17 macOS client.
  • C 44.5%
  • C++ 36.3%
  • Ruby 9.5%
  • Objective-C 5.1%
  • Python 1.8%
  • Other 2.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
anon 378394f487 Match respawn point visibility update
Ratified-Regressions: 42 (ledger)
Ratified-Regressions: 42 (ledger)
2026-08-23 11:55:15 +00:00
.claude Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00
.codex/skills Initial public snapshot 2026-05-19 00:00:00 +00:00
.git-hooks-config Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00
.githooks Shard the durable event log into 512KiB segments 2026-08-19 14:05:07 +00:00
build Match respawn point visibility update 2026-08-23 11:55:15 +00:00
docs Match respawn point visibility update 2026-08-23 11:55:15 +00:00
LICENSES Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00
notes Match respawn point visibility update 2026-08-23 11:55:15 +00:00
orig Initial public snapshot 2026-05-19 00:00:00 +00:00
src Match respawn point visibility update 2026-08-23 11:55:15 +00:00
tools Fix literal relocation naming and match FirstBlood card 2026-08-23 08:19:11 +00:00
.gitattributes Shard the durable event log into 512KiB segments 2026-08-19 14:05:07 +00:00
.gitignore Shard the durable event log into 512KiB segments 2026-08-19 14:05:07 +00:00
AGENTS.md Initial public snapshot 2026-05-19 00:00:00 +00:00
CLAUDE.md Add standing goal contract for the symbol loop 2026-08-16 08:54:35 +00:00
configure.py Fix ComputeSlidePos scorer attribution 2026-08-11 15:10:43 +00:00
Dockerfile Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00
GOAL.md Add standing goal contract for the symbol loop 2026-08-16 08:54:35 +00:00
Makefile Make compiler-byte-identity the single entry point for the byte-identity gate 2026-08-19 14:32:43 +00:00
README.md Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00
requirements.txt Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00
THIRD_PARTY_NOTICES.md Harden repository audit and reproducibility tooling 2026-07-09 22:35:05 +00:00

League of Legends Mac Client Decompilation

A byte-matching decompilation of the League of Legends Mac game client (Patch 4.17, Season 4, ~2013).

View Progress

Project chat: Matrix room, or DM @riotzed:matrix.org.

What Is This

The goal is to reconstruct the first-party Riot game code from source so it recompiles to a byte-perfect match against the original Mach-O i386 binary. Every decompiled function is verified instruction-by-instruction against the original using objdiff.

The ~14 MB binary is roughly half Riot code and half statically-linked third-party middleware — Scaleform/GFx (~31%), CryptoPP (~6%), Wwise audio (~4%), plus FreeType, Lua, boost, and tinyxml. The project does not decompile that middleware: it reuses those functions unmodified from the original binary via the static-bake / hybrid-link path (see docs/hybrid-link.md). So the realistic from-source target is the Riot code plus the incidental STL the compiler emits from it — about 46% of the binary, not 100%.

What is decompiled from source:

  • Riot game code + incidental STL — ~46% of the binary, the part with repo sources under src/Game/ and src/UnityFiles/. This is the work.

What is reused unmodified (not decompiled):

  • Third-party middleware — ~44% of the binary, baked in from the original.
  • Compiler-generated glue and orig-internal helpers, likewise baked in.

The public progress headline is a percentage over a curated first-party subset, not over the whole binary. The live progress page has current values; for exactly what each number measures and the full Riot-vs-third-party breakdown, see docs/metrics.md.

The binary ships with a full DWARF dSYM — function names, parameter types, struct layouts, source file paths, and line numbers. The project skeleton was generated directly from this debug info.

Game Version 4.17.0.244 (September 2014)
Compiler Clang 3.3 (i686-apple-darwin10)

Compilation and scoring use an exact content-locked Linux toolchain. Its identity, non-reproducible historical build, and replacement gate are recorded in docs/toolchain-provenance.md.

This public tree currently includes original game/debug artifacts, vendor libraries, replay captures, an Apple SDK, and prebuilt tools. No permission to redistribute the game/vendor artifacts is asserted, and the replay captures contain third-party identifiers. See the factual inventory and unresolved bring-your-own-artifact/history decisions in docs/redistribution.md before mirroring or redistributing the repository. Known tool notices and provenance gaps are in THIRD_PARTY_NOTICES.md.

Building

Prerequisites: Python 3, pip install -r requirements.txt. On a fresh clone, configure the repository guards before doing any work:

make setup-hooks        # then fill the local wordlist and rerun once

The game executable, matching dSYM, and MacOSX10.6 SDK are content-locked inputs. Verify user-supplied copies with make verify-artifacts; the complete artifact-free linking and derivation procedure is in docs/artifact-setup.md. The current tip still tracks these inputs pending the documented migration/history decision.

make                    # Compile all source files
make report             # Generate match report
make progress           # Report + update progress page
make doctor             # Diagnose a broken build environment

Or use the bundled Docker image (avoids host-toolchain setup; verified on Linux x86_64, expected to work on Intel macOS and WSL2, untested on Apple Silicon):

docker build -t lol-decomp .
docker run --rm --user "$(id -u):$(id -g)" \
    -v "$PWD:/workspace" -w /workspace lol-decomp make

The --user flag makes build outputs owned by your host user instead of root. On SELinux hosts (Fedora/RHEL), append :Z to the volume mount (-v "$PWD:/workspace:Z"). On Windows, run from WSL or Git Bash.

Contributing

The repository does not yet have a license or inbound contribution agreement. Contributions are paused until that policy is resolved. Do not submit patches, third-party binaries, SDK files, captures, or game assets. The progress page and docs/ remain available for local research.

Acknowledgments

  • objdiff by encounter — instruction-level diff tool
  • decomp.dev — inspiration for the progress treemap