OBS plugin that exposes pixel data from any scene to Lua scripts
Replaces brittle screen-grab hacks with direct render pipeline access for OBS Lua scripts.
Moongate is modern Ultima Online server built from scratch in C# with AOT compilation for high performance and nostalgic gameplay experience.
NativeAOT UO server with Lua scripting and hot-reload—early but genuinely solid foundation.
Retro MMO enthusiasts, UO private server operators, game engine builders
ModernUO · RunUO · ServUO
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.
Replaces brittle screen-grab hacks with direct render pipeline access for OBS Lua scripts.
TimeShift CLI without GUI baggage, but rsync scripts already exist.
Hand-built Spectrum emulator running real 1980s games; nostalgia meets genuine technical depth.
jq and yq already do this—Lua embedding is nice but doesn't justify switching from established tools.
Express syntax compiled to native binaries, but Tsonic is unproven and requires .NET SDK.
Live reload without losing game state beats Love2D's restart workflow for rapid prototyping.