moongate :) https://github.com/moongate-community/moongatev2 !
HN user
squidleon
I am curious, ave a passion for retropc
the Hacker News post itself was written by me.
I do use ChatGPT sometimes as a tool while working on the project (similar to using documentation, Stack Overflow, or an IDE assistant), but the post and the project direction are my own. So what?
I am interested please write me on GitHub!
That’s awesome to hear! Actually UOX3 is one of the inspirations behind Moongate. The way it approached the server architecture and scripting was really interesting and it influenced some of the ideas I’m exploring in the project.
Projects like UOX3 are a big part of the history of the Ultima Online emulator scene, so it’s great to hear from someone who helped maintain it.
I build first Web API then create a plan with codex. But I choose Web Api endopoins!
Thank you! And yeah, as a fellow .NET developer I totally agree modern .NET is genuinely impressive. The jump from the old .NET Framework to what we have now with .NET 8/9/10 is massive. NativeAOT, source generators, the performance work the runtime team does every release — it's a great platform that doesn't always get the credit it deserves.
And funny you mention Mangos — the WoW emulation scene was a huge inspiration for UO server development back in the day. Different game, same passion for reverse-engineering and rebuilding these worlds. The
community-driven server scene is one of the best things about MMO gaming in general.
Thanks for the kind words and good luck with your WoW adventures! :*!Thanks! Yeah, one of the main motivations was exactly that — after years working with legacy UO codebases where networking, persistence, and game logic were deeply intertwined, I wanted to see what a clean-slate approach would look like with modern .NET.
On sector sync bursts — this is something I'm actively tuning. Right now when a player enters a new sector, we sync all ground items and mobiles in the surrounding sectors (configurable radius). For busy areas that can mean a lot of packets at once. The current approach is:
- Sector enter sync only sends the delta sectors the player wasn't already seeing, so a simple move into an adjacent sector doesn't resync everything
- Sectors close to the player (within 1 of center) are always resynced because the UO client silently drops items beyond its visual range (~18 tiles), so you need to re-send them when the player comes back
- The outgoing packet queue handles the actual send, so the game loop isn't blocked waiting for network I/O
That said, there's definitely room for prioritization (mobiles first, then nearby items, then distant items) and spreading the sync across multiple ticks instead of one burst. It's on the roadmap.
On NativeAOT — honestly, both. The single-binary deployment is great for Docker (small image, instant startup), but the real win is predictable performance. No JIT warmup, no tiered compilation surprises
mid-session. For a game server where you care about consistent tick timing, eliminating that variable is worth it. The tradeoff is you lose some runtime flexibility, but source generators fill most of that gap
(packet registration, serialization, etc.).hank you! That separation was a very deliberate choice I've seen firsthand how quickly things degrade when packet handling leaks into game logic.
You're touching on a real pain point. Right now the Lua boundary does show measurable overhead under load, especially with per-tick callbacks across many entities (doors, spawners, etc.). MoonSharp's interop cost adds up when you're calling into Lua thousands of times per tick.
I'm actively looking at batching script invocations per tick and capping the budget so a heavy script wave can't blow up tail latency. The goal is to keep the game loop deterministic if Lua eats too much of the tick budget, defer the rest to the next tick rather than letting the whole loop stall.
It's one of those problems where the architecture gives you a clean place to solve it (the boundary is explicit, so you can meter it), but the solution still needs work. Appreciate you calling it out — good toknow others think about the same tradeoffs.
I forgot to mention, the entire web part in React was done by Codex. I hate developing frontends!
So: I took most of the infrastructure from the my first attempt at moongate (https://github.com/moongate-community/moongate, which failed miserably along with https://github.com/tgiachi/Prima). From there, I had a good starting point to quickly build the foundations. I had already done the Lua scripting part in another project (https://github.com/tgiachi/Lilly.Engine). Codex helped me with all the testing, implementing functionality and creating tests, so at least I have a good sparring pattern. For the data import part (which I called FileLoaders), I took the logic from ModernUO. For the items part, I created a script (scripts/dfn_*.sh) to import items from POL! Thanks for the compliments! The way I am, if I fixate on something, it becomes an obsession!
Just update repo and README from server emulator -> server !
I've never heard of Tibia, I'll check it out!
You're right, I just checked , MaNGOS calls itself "a server" now. They probably had the same realization at some point. Maybe I should update my README too and just call it "a modern Ultima Online server" instead!. Less baggage.
Thanks! I've been developing in .NET for 20 years and it's come a long way , from the Windows-only Framework days to what it is now. NativeAOT, cross-platform, incredible performance. And if you've never tried it on Apple Silicon the M4 chips are absolutely insane. The server compiles to a single native binary and runs like a dream on ARM.
Too old for arc raiders :D :D :D !
Outlands is impressive from a technical standpoint, they've put an insane amount of work into it and the player count speaks for itself. I played there for a while.
Personally though, I feel they've overengineered it a bit. So many custom systems layered on top that it starts to feel more like WoW with UO graphics than actual UO. The original charm was in the simplicity you, a sword, and a world that didn't care about your feelings. But that's just my taste, and clearly thousands of players disagree with me, so what do I know. And yes, the fact that official UO is still running in 2026 is both beautiful and insane
This is such a good observation. UO had a real economy and social hierarchy because power wasn't handed to you. You could spend months as a fisherman or tailor and still have a meaningful experience. The gap between a grandmaster swordsman in full plate and a guy selling fish at the Britain bank was enormous, and both of them were having fun.
Modern MMOs are theme parks where everyone gets the same ride (with pay per win). UO was a living world where your role emerged from what you chose to do, not from a quest marker telling you where to go next.
That's a great idea, UO is honestly perfect for playing with kids. The crafting, housing, exploring dungeons together. And who knows, maybe you become the dragon trainer this time around!
Ha, you're absolutely right from a CS perspective! it's a protocol reimplementation, not emulation in the traditional sense. I've thought about this too. "Server emulator" stuck in the UO/MMO (other example Mangos is "Wow emualtor") community because RunUO and similar projects used the term 20 years ago and it just became the standard label. At this point fighting it feels like your Wikipedia edit war, technically correct but practically hopeless. !
That said, I'll take the nitpick as a compliment :) means you actually read the project description. Thanks for the kind words!Thanks! There are still a few active shards out there, mostly us "old guys" in our 40s chasing the nostalgia of our teenage years. UO has a way of never really dying. Combat and skills are still a ways off, but the foundation is solid enough that I'm adding features every week (in spare times,) I'll keep pushing updates!
Same here! tinkering with private servers is what got me into programmig in the first place. There's something about reverse-engineering a game protocol at 15 that hooks you for life. Thanks for the kind words on the name and art!
Thank you! RunUO in 2003 was the golden era. I started little bit early (1999 with 56k). The community is small but still alive, and projects like ModernUO have kept things moving forward. Moongate is my take on rethinking the architecture from scratch while keeping the same spirit. Glad to see people still care about this stuff! :*
Thanks! The logo was a happy accident. I wanted something simple that felt like the moongates (so and so :) from the original game. I'm not really a video person. But here's what's working today: login flow, character creation, world movement with delta sector sync, auto-generated doors from map statics (that actually open), Lua scripting for item behaviors, snapshot persistence, and a React admin UI for server management.
I'll probably add a short demo gif or video to the README at some point, but for now the best way to see it is to clone it and run it