No description
  • C 61.7%
  • Assembly 36.6%
  • Python 1.4%
  • Shell 0.2%
Find a file
pi automation 0c2efaa2c4 Publish the engine and rebuild the client releases on push [skip ci]
A Forgejo workflow on the VPS runner builds libiggycore.so on each push to
linux-port, replaces the rolling nightly release with it, then starts both
forks' release workflows so their Linux packages use the new engine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 06:57:38 -07:00
.forgejo/workflows Publish the engine and rebuild the client releases on push [skip ci] 2026-11-03 06:57:38 -07:00
docs Fix decompiler bugs found by the warning review 2026-11-01 22:51:21 -07:00
reference Name globals from their bytes and exports' parameters from the SDK 2026-11-01 13:41:53 -07:00
src Fix decompiler bugs found by the warning review 2026-11-01 22:51:21 -07:00
symbols Name globals from their bytes and exports' parameters from the SDK 2026-11-01 13:41:53 -07:00
tools Fix decompiler bugs found by the warning review 2026-11-01 22:51:21 -07:00
.gitignore Move the engine to a readable tree, add the symbol table and rename tool 2026-11-01 11:22:37 -07:00
AGENTS.md Build with CMake and fix the bugs the compiler warnings exposed 2026-11-01 19:20:18 -07:00
CMakeLists.txt Build with CMake and fix the bugs the compiler warnings exposed 2026-11-01 19:20:18 -07:00
CMakePresets.json Build with CMake and fix the bugs the compiler warnings exposed 2026-11-01 19:20:18 -07:00
CONTRIBUTING.md Build with CMake and fix the bugs the compiler warnings exposed 2026-11-01 19:20:18 -07:00
README.md Bring the README up to date 2026-11-02 18:06:43 -07:00

Iggy-RE

Iggy-RE is a native Linux rebuild of the Iggy UI runtime, recovered from iggy_w64.dll. It is plain C that compiles to libiggycore.so, keeps the DLL's API, and runs the game's Flash menus without Wine or any of the DLL's machine code.

The native Linux clients of LCE-Revelations and neoLegacy use it for all their menus, and their nightly Linux releases are built against this repository's linux-port branch.

Status

  • Works: x86-64 Linux. All 198 exported Iggy functions are implemented, and both clients play through their menus on it.
  • Matches the DLL: the behaviour tests run each of 360 menu movies through the engine and through the real DLL under Wine, and compare every draw call. All match except MenuBackground480, a PS3 layout neither PC client loads. The other known differences are listed in tools/regress/known_issues.md.
  • Only proven at -O0. -O1 and -O2 build but fail the tests, and the ASan build does not run yet.
  • Readable, but not finished. Every function has a name from evidence (sub in a name means its purpose is still unknown), and the main structs (the player, the AS3 VM and native call frames, display objects, 25 AS3 classes) have real fields. Many locals and raw offsets still carry decompiler names. docs/architecture.md explains how the DLL's data image is kept and rebound.
  • Not yet run by a test: most AS3 native functions fixed during the warning review, and the JPEG helpers. They follow the DLL's code, but no menu exercises them. See docs/warnings.md.

Other platforms are not supported yet. The engine's allocator assumes heap addresses that fit in 32 bits, which the Linux shim provides with MAP_32BIT. On Windows the clients use the original DLL.

Build

You need clang, cmake, ninja, zlib and the ALSA headers.

cmake --preset default
cmake --build --preset default

The output is build/libiggycore.so. To build a client against it, pass -DLCE_IGGY_REAL_SO=$PWD/build/libiggycore.so when configuring the client's linux-native-client preset.

Check a change

tools/check.sh

This takes about 20 seconds. It rebuilds and compares every function's machine code with the recorded baseline, so a rename or retype that changes nothing passes without further tests. When code does change, it runs the behaviour tests, which need the DLL, Wine and the oracle setup in tools/oracle/README.md. CONTRIBUTING.md explains the gates, how to make each kind of change, and the bugs that keep coming back.

Layout

  • src/engine/<file>/: engine functions, grouped by the DLL source file they came from. unsorted/after_<file>/ holds functions whose file is unknown, by their position in the DLL.
  • src/platform/: the OS and C runtime shim.
  • src/generated/: generated headers, the data image, signatures and fixups, checked in so builds are reproducible.
  • symbols/: names, evidence and struct fields. symbols/iggy.tsv maps every function's DLL address to its name; old commits and reference/ use FUN_<address>.
  • tools/: the build gates (check.sh, verify_identical.sh, regress/), the DLL oracle, and the rename and retype tools.
  • reference/: disassembly, raw decompiler output, old notes and one-off tools. Not built.
  • docs/: architecture and the compiler-warning review.

Development happens on linux-port.

Provenance

Iggy-RE is a reconstruction for compatibility, research and preservation, based on recovered Iggy interfaces, binaries and data. The DLL is the specification: where the two differ, the port is wrong unless tools/regress/known_issues.md says otherwise.