2 Punkte von GN⁺ 2026-03-08 | 1 Kommentare | Auf WhatsApp teilen
  • Open-Source-Projekt, das einen Ultima Online-Server mit .NET 10 und C# vollständig neu implementiert, mit dem Ziel hoher Leistung und stabiler Ausführung auf Basis von AOT (Ahead-of-Time-Kompilierung)
  • Verfügt über eine modulare Architektur, präzise Verarbeitung der Game Loop und Packet-Tooling und unterstützt über Lua-Scripting In-Game-Interaktionen sowie die Steuerung von KI
  • Bietet eine vollständige Server-Infrastruktur einschließlich eines auf MessagePack-CSharp basierenden Persistenzsystems, TCP-Networking, HTTP-Management-Endpunkten sowie Docker- und Monitoring-Stack
  • Durch Skript-Erweiterungsfunktionen wie Lua-basierte Befehle, NPC-KI, visuelle Effekte und ein UI-(Gump-)System lässt sich anpassbares Gameplay umsetzen
  • Ist als Open Source veröffentlicht und gilt als modernes .NET-Server-Framework, das für die Entwicklung leistungsstarker MMO-Server und die Forschung zur Wiederherstellung von Legacy-Spielen nützlich ist

Projektüberblick

  • Moongate v2 ist ein modernes Ultima Online-Serverprojekt, das in .NET 10 geschrieben wurde und durch modulare Struktur und AOT-Kompilierung hohe Leistung und Wartbarkeit erreicht
  • Es wurde mit einer Struktur entworfen, die automatische Generierung von Packet-Definitionen, eine deterministische Game Loop und Testabdeckung umfasst
  • Es kopiert keinen Code bestehender Server wie ModernUO, RunUO oder ServUO, sondern wurde davon inspiriert neu aufgebaut

Hauptziele

  • Aufbau einer wartbaren Server-Basis mit Schwerpunkt auf Genauigkeit und Iterationsgeschwindigkeit
  • Klare Abgrenzung zwischen Networking und Game-Loop-Grenzen sowie Gewährleistung von Thread-Sicherheit
  • Anwendung von typbasierter Packet-Modellierung und quellgenerierter Registrierung
  • Beibehaltung einer AOT-freundlichen Struktur bei gleichzeitiger Sicherung effizienter lokaler Entwicklung

Aktueller Entwicklungsstand

  • Kernfunktionen wie TCP-Server, Packet-Parsing, Event Bus, Session-Management, HTTP-Management-Interface und Lua-Runtime sind implementiert
  • Enthält automatische Generierung von Lua-Metadaten, Konsolen-UI, timerbasierte Game Loop, A-Pfadfindung*, Steuerung von Beleuchtung und Wetter sowie E-Mail-Versand
  • Über ein MessagePack-basiertes Persistenzmodul wird der Spielstatus als Snapshot- und Journal-Dateien gespeichert
  • Stellt Docker-Images und einen Prometheus/Grafana-Monitoring-Stack bereit und erleichtert so das Deployment in Betriebsumgebungen

Skripting- und Befehlssystem

  • Enthält eine eingebaute Lua-Scripting-Engine (auf Basis von MoonSharp) zur Steuerung von NPC-KI, Item-Verhalten, visuellen Effekten und UI (Gump)
  • Unterstützt parallel ein C#-System zur Befehlsregistrierung und dynamische Befehlsregistrierung in Lua
  • Beispiele: GM-Befehle wie .teleport, .add_item_backpack, .set_world_light
  • Über Item-ScriptId-Dispatch lassen sich klickbezogene Ereignisse auf Basis von Lua-Tabellen verarbeiten

Leistung und Benchmarks

  • Laut Leistungsmessungen mit BenchmarkDotNet werden zentrale Aufgaben wie Packet-Parsing und Serialisierung im Bereich von mehreren Dutzend Nanosekunden verarbeitet
  • Im AOT-vs.-JIT-Vergleich zeigen einige Aufgaben eine bis zu 5- bis 6-fache Beschleunigung
  • Die Verarbeitungseffizienz zentraler Spielpfade wie SpatialWorldService und ItemService wurde detailliert gemessen

Deployment und Ausführung

  • .NET SDK 10.0.x erforderlich
  • Standardablauf zum Starten:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Über umgebungsvariablenbasierte Konfiguration (MOONGATE_*) lassen sich Details wie HTTP-Port, Game Loop, E-Mail und Scripting steuern
  • Ein Docker-Compose-Beispiel ist vorhanden; Standardports sind 2593 (Spiel) und 8088 (HTTP)

Lizenz und Mitwirkung

Zusammenfassung der technischen Merkmale

  • MMO-Server-Framework auf Basis von C# + .NET 10 + NativeAOT
  • Unterstützung für Lua-Skriptintegration, MessagePack-Persistenz und Prometheus/Grafana-Monitoring
  • Enthält Docker-Deployment und Automatisierungsskripte
  • Leistungsstarkes, modulares und testorientiertes Design mit einer für moderne Serverentwicklung geeigneten Struktur

1 Kommentare

 
GN⁺ 2026-03-08
Hacker-News-Kommentare
  • Unter den Spielen, die ich gespielt habe, gab es keines, in dem es so sehr „normale Leute“ als Spieler gab wie in UO (Ultima Online)
    Selbst wer keine starke Ausrüstung hatte, konnte viel Spaß haben, und die Top-Spieler waren fast wie Prominente bekannt
    Es war völlig anders als die heutigen Spielewelten, in denen alle wie Superhelden aussehen

    • Dem stimme ich voll zu. In UO gab es eine echte Wirtschaft und soziale Schichtung
      Man konnte Monate als Fischer oder Schneider verbringen und trotzdem eine sinnvolle Erfahrung haben, und starke Krieger und gewöhnliche Händler hatten in derselben Welt jeweils ihren eigenen Spaß
      Heutige MMOs wirken alle wie Themenparks, in denen jeder dieselbe Attraktion fährt, aber UO war eine lebendige Welt, in der Rollen durch die Entscheidungen der Spieler entstanden
    • Mein Ziel war es, ein legendärer Schmied zu werden. Crafting war das eigentliche Endgame, und jede Ausrüstung und jedes Möbelstück kam aus der Hand von irgendwem
      Das Ziel des Spiels war nicht, die Welt zu „besiegen“, sondern in ihr zu leben
      Es gab keine Quests, keine Bösewichte, sondern Gut, Böse und alles dazwischen
      Ich hoffe, dass wieder ein Studio auftaucht, das diese Philosophie umsetzt. Ich glaube, dass Minecraft auch wegen genau dieser Sandbox-Natur erfolgreich wurde
    • UO war das beste Online-Spiel, das ich je erlebt habe. Andere Spiele stehen in seinem Schatten
      EverQuest und WoW mochte ich auch, aber dieses freie, rohe Gefühl hatten sie nie
      Persönlich würde ich auch The Realm als Kandidaten für das beste MMO nennen
    • Eigentlich hatte es sogar ein moderneres Lebensgefühl als vieles heute. Aus einem ähnlichen Grund mag ich auch Stardew Valley und Animal Crossing
    • Ich werde wohl mein ganzes Leben lang dieser reinen Freude hinterherjagen, die ich damals beim Spielen von UO empfunden habe. Ich würde am liebsten sofort kündigen und den ganzen Tag spielen
  • Wirklich beeindruckende Arbeit. Als ich den Beitragsgraphen gesehen habe, war ich erstaunt, dass das tatsächlich alles von einer Person stammt
    Das erinnert mich an das Infantry-Online-Server-Emulator-Projekt, das vor 16 Jahren begann
    Ich habe sogar die ursprünglichen Commits auf SourceForge gefunden; das war ein Projekt, das von mehr als 10 Entwicklern über 15 Jahre lang gepflegt wurde
    Ich frage mich, wie man allein so viel schaffen konnte

    • Ich habe Infrastruktur aus meinem ersten Versuch, Moongate, und aus Prima übernommen, um schnell ein Fundament zu haben
      Das Lua-Scripting hatte ich bereits in Lilly.Engine umgesetzt, und Codex hat bei Tests und Feature-Implementierung geholfen
      Beim Datenimport habe ich mich an der Logik von ModernUO orientiert, und Items wurden per Skript aus POL übernommen
      Möglich wurde das wohl, weil ich mich, wenn ich einmal eintauche, fast obsessiv festbeiße
    • Das Web-Frontend wurde komplett von Codex in React entwickelt. Ich hasse Frontend-Entwicklung
  • Ein wirklich großartiges Projekt. Ich habe früher den C++-basierten UO-Emulator UOX3 gewartet
    Ich habe ihn nicht selbst entwickelt, war aber für Community-Management und Releases zuständig und habe zusammen mit einem kanadischen Freund auch einen privaten Server betrieben
    Zum Glück hat Origin daraus kein rechtliches Problem gemacht

    • Als ich in der Highschool UO gespielt habe, merkte ich, dass ich süchtig wurde, also habe ich meinen Account verkauft und aufgehört
      Ich erinnere mich, dass ich den Account auf eBay für ein paar tausend Dollar und eine MTG Mox Pearl verkauft habe
      Damals habe ich über UOX C++ gelernt und zum ersten Mal die Kraft des Programmierens gespürt
      Mit einem selbstgebauten Mod konnte ich unendlich verbundene Moongates platzieren, und diese Erfahrung hat mich auf den Weg ins Programmieren gebracht
      Später lernte ich Python, was schließlich zu meiner heutigen Karriere führte. Es war wirklich eine lebensverändernde Erfahrung
      (Link zu meiner Vorstellung)
    • Freut mich zu hören! Tatsächlich war UOX3 eine der Inspirationen für Moongate
      Die Serverstruktur und der Ansatz beim Scripting waren spannend und haben auch dieses Projekt beeinflusst
      Solche Projekte sind ein großer Teil der Geschichte der UO-Emulatoren
  • Da werden wirklich Erinnerungen wach. Früher habe ich in der Nähe von Trinsic ein kleines Haus gekauft und eine Bäckerei betrieben
    Ich konnte NPC-Händler anstellen, die auch dann Waren verkauften, wenn ich offline war, und mein Freund lebte in einem dekorierten Turm
    WoW hat 20 Jahre gebraucht, um ein Housing-System einzuführen, aber die Häuser in UO waren wirkliche Orte innerhalb der Welt

  • Ich habe den Architekturartikel zu Moongate gelesen, und ich fand die Struktur beeindruckend, in der DI per Source Generator umgesetzt wird und Lua das Verhalten trennt, ohne dass C# neu kompiliert werden muss
    Es hieß, dass noch NPC-AI fehlt; statt einer klassischen FSM könnte man vielleicht einen LLM-basierten Microservice an Lua anbinden
    So könnten NPCs kontextbezogene Dialoge und Erinnerungen haben und je nach Eingabe des Spielers echte Events auslösen
    Die Packet-Layer- und Lua-Umgebung stehen ja schon gut, deshalb könnte sich das sauber integrieren lassen. Ich würde gern gemeinsam AI-Logik entwerfen

    • Wirklich spannende Idee. NPC-Dialoge könnten sich zu einem System entwickeln, das die Welt selbst verändert
      Zum Beispiel könnte man nach Gerüchten fragen, und diese Gerüchte würden dann tatsächlich als Ereignisse im Spiel entstehen
    • Ich habe Interesse. Bitte melde dich auf GitHub
  • MMO-Server neigen mit der Zeit dazu, strukturell sehr komplex zu werden, deshalb fand ich den Clean-Architecture-Ansatz mit der Trennung von Netzwerk und Spiellogik beeindruckend
    Vor allem würde mich bei der sector-basierten Delta-Sync interessieren, wie beim Betreten stark frequentierter Gebiete ein Packet-Sturm verhindert wird
    Ich würde auch gern wissen, ob NativeAOT nur der einfacheren Bereitstellung dient oder auch der Performance

    • Das war genau die Hauptmotivation. Alte UO-Codebasen haben Netzwerk, Persistenz und Logik eng miteinander verflochten, deshalb wollte ich einen neuen .NET-basierten Ansatz ausprobieren
      Beim Betreten eines Sektors werden Items und Mobiles aus den umliegenden Sektoren synchronisiert, aber Sektoren, die man bereits gesehen hat, werden ausgeschlossen
      Items außerhalb der Sichtweite verwirft der Client, deshalb müssen sie erneut gesendet werden
      Der Packet-Versand läuft über eine Queue, damit die Game-Loop nicht blockiert wird
      Künftig möchte ich noch priorisierten Versand und Tick-Verteilung hinzufügen
      NativeAOT dient auch der einfacheren Bereitstellung, aber entscheidend ist die vorhersagbare Performance. Es gibt keine JIT-Latenz, und das Tick-Timing bleibt konsistent
    • Die Vermeidung von Packet-Stürmen scheint im Kern auf Proximity-Loading zu beruhen
      Ich experimentiere in einem ähnlichen Projekt ebenfalls mit frustum-basiertem Spawning, um Netzwerk-Bursts zu reduzieren, deshalb fand ich das besonders interessant
      Der Code ist gut lesbar und sehr hilfreich als Referenz
  • Zufällig ist auch die von Moongate verwendete Lua-Engine MoonSharp in letzter Zeit wieder aktiver geworden
    Nach 10 Jahren wurde ein v3.0.0-Beta-Release veröffentlicht
    Ich bin nicht der ursprüngliche Entwickler, beteilige mich aber als Maintainer auf GitHub, und auch Tabletop Simulator nutzt diese Engine

  • Ich möchte auf jeden Fall mal einen Server aufsetzen. Vor 15 Jahren war ich SphereServer-Administrator, habe aber alle Skripte und Welt-Daten verloren
    Trotzdem würde ich gern wieder wie früher mit Leuten klassisches UO genießen

    • Dass ich hier noch einmal SphereServer erwähnt sehe!
      Ich habe damals auch viele eigene Skripte geschrieben und alles verloren
      Dank SphereServer war das mein erster Einstieg ins Scripting
  • Das Logo gefällt mir sehr. Ich frage mich, ob es vielleicht ein YouTube-Video gibt, das den Fortschritt zeigt

    • Danke! Das Logo ist eher zufällig entstanden, aber ich wollte das Moongate-Gefühl des Originals einfangen
      Videos gibt es noch nicht, aber Login, Charaktererstellung, Weltbewegung, Lua-Item-Scripting und eine React-basierte Verwaltungs-UI funktionieren bereits
      Bald werde ich im README ein kurzes Demo-Video ergänzen
  • Ich war kürzlich sehr beeindruckt von Majuulars Videoserie zu Ultima auf YouTube
    Dadurch habe ich mir Underworld und VII bei GOG gekauft. Es fühlt sich an, als hätte ich ein Meisterwerk der 90er verpasst
    Mein Bruder hat UO viel gespielt, und ein Freund von ihm war unter dem Namen SirDarkSpell ein berüchtigter Griefer
    Beide würden sich bestimmt freuen, dieses Projekt zu sehen. Dieses Wochenende werde ich wohl in Stygian Abyss versinken

    • Ultima Underworld ist ein fantastisches Spiel