A childhood-favorite MMORPG (Luna Online / Luna Plus on gPotato) went offline, and I’ve spent years getting it back: hunting down client and server source from multiple historical publishers and community forums, reconciling divergent versions, decompiling binaries where clean source was missing — and then modernizing the result.
The modernization
The recovered codebase is ~37,000 C++ source files across 13 Visual Studio solutions, written for 2004-era compilers. The goal was strict: bring it onto Visual Studio 2022 / modern C++ with zero logic changes — identical game behavior, byte-compatible network protocols, untouched packet structures.
Current state: all 8 core solutions build — the engine, every game server (map, chat, log), the network and utility libraries, and the admin/monitoring/recovery tools. The 5 that don’t are blocked on external SDKs (3ds Max exporters, an MFC patcher, a DirectX-era map editor), not on the C++ itself.
What it took
- Systematic error triage across a codebase nobody alive fully understands: min/max macro wars against
<algorithm>(settled withNOMINMAX+ pragma push/pop), pre-standard for-loop scoping,MultiThreadedDLLvsMultiThreadedDebugruntime-library conflicts in the linker, even Visual Studio’s internal browse-database limits. - A written rulebook before the work: which legacy patterns must be preserved (protocol-critical
DWORD/BYTEtypes, MFC message flow, memory-pool architecture) versus what’s safe to modernize — because “this code looks bad” is not a reason to break a save file. - Tooling, not heroics: a dozen Python codemod scripts for repeated error classes, clang-tidy with a curated
modernize-*profile, and an automation loop driving Claude Code CLI through the error backlog. - A database abstraction layer replacing the hardwired 2004 ODBC/MSSQL setup —
IDatabaseProvider+ factory, SQLite today, PostgreSQL/Redis-ready — so the same servers can run as a single-player install, a LAN host, or a dedicated server from config alone.
This project is where most of my native-binary reverse-engineering and large-scale legacy C++ experience comes from. It moves in bursts when evening hours allow — but it has never stopped.