Skip to content
Juozas Žilys
← All projects

Luna Online — legacy MMORPG modernization

A years-long effort to revive a shuttered 2004 Korean MMORPG: ~37,000-file C++ codebase brought from Visual Studio 2003-era tooling to VS2022, with all core engine and server solutions building.

Role
Solo
Period
Many years – present
Repo
github

C++ · MSBuild / VS2022 · DirectX · SQLite · clang-tidy · Python

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 with NOMINMAX + pragma push/pop), pre-standard for-loop scoping, MultiThreadedDLL vs MultiThreadedDebug runtime-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/BYTE types, 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.