- 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
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
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
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
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
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
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
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
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
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)
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
Zum Beispiel könnte man nach Gerüchten fragen, und diese Gerüchte würden dann tatsächlich als Ereignisse im Spiel entstehen
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
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
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
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
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