No description
  • C 40.2%
  • Objective-C++ 24.3%
  • Python 16.6%
  • JavaScript 9.4%
  • Objective-C 4.3%
  • Other 5.2%
Find a file
2026-06-02 22:57:40 +00:00
.git-hooks-config Add anonymity guard git hooks 2026-06-02 08:01:31 +00:00
.githooks Add UTC date-normalizing post-commit hook 2026-06-02 08:28:02 +00:00
docs Make the progress page single-source and always fresh 2026-06-02 17:53:40 +00:00
include Condense AGENTS.md, add web search tip, clean up repo 2026-03-15 16:50:45 +00:00
lol-html5 Add HTML5 remaster of League of Legends: Turret Defence 2026-03-17 13:34:24 +00:00
notes Record TouchesBegan spill probe 2026-06-02 22:57:40 +00:00
rizin/src Improve Level::Update matching and add project infrastructure 2026-03-13 11:04:11 +00:00
src Improve LoL::findButtonInView stack layout 2026-06-02 22:55:19 +00:00
tools Improve LoL::Save match 2026-06-02 22:41:28 +00:00
.gitignore Update project documentation and tooling 2026-06-02 12:42:05 +00:00
AGENTS.md Update project documentation and tooling 2026-06-02 12:42:05 +00:00
CLAUDE.md Update project documentation and tooling 2026-06-02 12:42:05 +00:00
configure.py Fix configure.py ObjC per-function .o naming 2026-03-15 15:26:24 +00:00
LoL.ipa Initial commit: raw decompiled source from LoL.app 2026-03-12 00:38:00 +00:00
Makefile Improve Tower::Update match notes 2026-06-02 22:38:21 +00:00
objdiff.json Improve Creeps::Init (44.9% → 83.6%) with struct access and corrected attributes 2026-03-13 23:41:59 +00:00
README.md Update project documentation and tooling 2026-06-02 12:42:05 +00:00

Lords of Lightning iOS Tower Defense Decompilation

A byte-matching decompilation of the 2009 iOS tower-defense game Lords of Lightning. The target is an armv6 Mach-O iPhone OS executable built with Apple GCC 4.2.1.

Current progress: 202/254 functions at 100%.

What Is This

The goal is to reconstruct source that compiles to instruction-identical output against the original binary. Each function is compared with objdiff after the source is compiled with the bundled Apple GCC/xchain toolchain and converted into ELF objects for matching.

The project includes:

  • Decompiled Objective-C++ source under src/
  • Original target slices under build/target/ after make split
  • Rizin pseudocode references under rizin/src/
  • Match notes under notes/
  • Static progress output under docs/

Building

Prerequisites: Python 3, GNU Make, Bash, and common Unix command-line tools. The compiler, SDK, assembler, and objdiff CLI are kept under tools/.

make split      # One-time extraction of target function objects
make            # Compile all source files and refresh objdiff.json
make report     # Generate build/report.json
make progress   # Build, report, and regenerate docs/index.html

For a compact match list:

tools/report.sh
tools/report.sh 80

Contributing

Pick an unmatched function from tools/report.sh, read the matching note in notes/ if one exists, inspect source and pseudocode, then compare the compiled function against the target. The workflow and codegen notes live in docs/.

Keep source natural: model the right types and layout instead of transcribing decompiler temporaries or using raw offsets.

Acknowledgments