- C 61.7%
- Assembly 36.6%
- Python 1.4%
- Shell 0.2%
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> |
||
|---|---|---|
| .forgejo/workflows | ||
| docs | ||
| reference | ||
| src | ||
| symbols | ||
| tools | ||
| .gitignore | ||
| AGENTS.md | ||
| CMakeLists.txt | ||
| CMakePresets.json | ||
| CONTRIBUTING.md | ||
| README.md | ||
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 intools/regress/known_issues.md. - Only proven at
-O0.-O1and-O2build but fail the tests, and the ASan build does not run yet. - Readable, but not finished. Every function has a name from evidence
(
subin 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.mdexplains 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.tsvmaps every function's DLL address to its name; old commits andreference/useFUN_<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.