Evidence at a glance
Loading source evidence…
What was done
NosCore.ClientLab is a project that statically recompiles the 32-bit x86 NosTale client into portable C and WebAssembly, enabling the client to run in a browser for automated end-to-end testing against a NosCore server without requiring Windows or emulators.
NosCore.ClientLab performs a static recompilation of the NosTale client, a 32-bit x86 Windows program originally written in Delphi 7, into portable C and WebAssembly. This allows the client to execute within a browser tab, facilitating automated end-to-end testing of the NosCore server. The project utilizes a lifter (recomp/lift.py) to perform recursive descent from a Ghidra-generated function list, with a Unicorn-based differential tester (recomp/difftest) used to verify instruction semantics. The implementation includes a portable host (recomp/port) that maps Windows-specific APIs—such as Direct3D 9, GDI, and Miles audio—to browser primitives like WebGL2, OffscreenCanvas, and WebAudio. A native host is also provided for debugging purposes. The author reports that the client achieves approximately 50-60 frames per second in town. Recent development, co-authored by Claude Opus 5.5, has focused on optimizing frame pacing, texture uploads, and implementing remaining Direct3D device methods and Windows-style event semantics. The project documentation notes that while most functions are recompiled, certain components remain open for further development. Detailed status and progress are tracked in docs/STATUS.md.
Reproduce it
./tools/decompile.ps1 -ClientExe "C:\Program Files (x86)\Nostale\NosCore.exe"; python recomp\lift.py C:\tools\re\work\input\NosCore.exe C:\tools\re\work\functions.txt C:\tools\re\work\recomp\gen --seeds symbols\51bbff3ec09d67c8425f88d74c6d5df5\recomp_seeds.txt; python recomp\wasm\compile_all.py --web; python recomp\web\serve.py --game "C:\Program Files (x86)\Nostale" --user <account> --password <password>
Community
Ask a question, share what worked, or follow the next milestone.