Reverse-engineering the 1998 Ultima Online demo server

· design · Source ↗

TLDR

  • 10-year project translating ~5,000 MSVC x86 functions from UoDemo.exe into portable C99, with instruction-by-instruction verification via radare2.

Key Takeaways

  • UoDemo.exe (1998-09-02) bundled the actual production UO server code; only the map was trimmed to Ocllo island and a few features stubbed.
  • Class hierarchy CEntity->CResourceEntity->CItem->CContainer->CMobile->CPlayer was the critical early unlock; vtable slot mapping enabled bulk translation.
  • The retired ecology system (predator/prey/scavenger) was still in the binary but uncalled; re-wiring it restores wolves chasing rabbits and crows eating items.
  • LLMs accelerated the final push after years of stalled progress; each translated function is diff-flagged against the original binary for traceability.
  • The author reconstructed missing world data (doors, spawns, traps, teleporters) and added multi-client support from 1.25.30 through 5.0.9.1 across five encryption schemes.

Hacker News Comment Review

  • Multiple commenters credit the UO emulator scene as their entry point into network programming and PHP/web dev, reflecting how influential the shard ecosystem was.
  • The @skerit thread confirms LLMs are broadly useful for MFC/C++ decompilation projects, not just this one, corroborating the author’s claim.
  • The UO private-server scene is still active; UO Outlands reportedly runs 2,500+ concurrent players, giving the test server at uo.serpent-isle.com a real reference community.

Notable Comments

  • @MacNCheese23: EverQuest Classic dev notes shared file-naming patterns (packet_handler, entitylist) and flags the writeup lacks tooling process detail.
  • @kev009: Argues UO’s emergent economics and building mechanics were never matched by later 3D MMOs.

Original | Discuss on HN