I've been building a modern Ultima Online server emulator from scratch. It's not feature-complete (no combat, no skills yet), but the foundation is solid and I wanted to share it early.
What it does today:
- Full packet layer for the classic UO client (login, movement, items, mobiles)
- Lua scripting for item behaviors (double-click a potion, open a door — all defined in Lua, no C# recompile)
- Spatial world partitioned into sectors with delta sync (only sends packets for new sectors when crossing boundaries)
- Snapshot-based persistence with MessagePack
- Source generators for automatic DI wiring, packet handler registration, and Lua module exposure
- NativeAOT support — the server compiles to a single native binary
- Embedded HTTP admin API + React management UI
- Auto-generated doors from map statics (same algorithm as ModernUO/RunUO)
Tech stack: .NET 10, NativeAOT, NLua, MessagePack, DryIoc, Kestrel
What's missing: Combat, skills, weather integration, NPC AI. This is still early — the focus so far has been on getting the architecture right so adding those systems doesn't require rewiring everything.
Why not just use ModernUO/RunUO? Those are mature and battle-tested. I started this because I wanted to rethink the architecture from scratch: strict network/domain separation, event-driven game loop, no
inheritance-heavy item hierarchies, and Lua for rapid iteration on game logic without recompiling.
GitHub: https://github.com/moongate-community/moongatev2
It's very different from modern games, where each player looks like the fantasy version of a Marvel super hero.
reply