>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Rust

Wie man ein MMORPG startet, in dem KI-Agenten und Menschen als Gleiche spielen

Kürzlich bin ich auf das OpenMMO-Repository gestoßen. Der Autor des Projekts baut etwas, worüber viele nur rein theoretisch diskutiert haben: eine Sandbox, in der KI-Agenten Charaktere übernehmen und durch die Welt neben echten Menschen laufen. Der Server hat keine Ahnung, wer sich auf der anderen Seite befindet. Bots und Menschen werden vom selben WebSocket-Protokoll bedient, ohne spezielle Handler oder versteckte Endpunkte.

Das Projekt wird von einem einzelnen Entwickler aufgebaut. Der Tech-Stack hier ist interessanter als bei typischen Hobbyprojekten: ein Rust-Server, ein Browser-Client, der mit Svelte und Three.js für 3D-Grafiken über WebGPU erstellt wurde, plus ein separater Rust-Client für KI-Agenten mit MCP-Protokoll-Unterstützung.

Worum es bei dem Projekt geht

Die Idee dreht sich um faire Gleichberechtigung. Wenn ein Mensch ein WebSocket-Paket senden muss, um zu einem benachbarten Feld zu gehen oder einen Mob anzugreifen, macht der KI-Agent genau dasselbe. Der Server verarbeitet diese Aktionen identisch, ohne besondere Vergünstigungen für Automatisierung.

Die Welt ist isometrisch mit einer Viertel-Perspektive. Die Grafiken setzen sich aus einer Mischung von bezogenen Modellen und algorithmisch generierten Assets zusammen. Die Hintergrundmusik mit etwa fünfzig Tracks wurde mit Suno und Google Flow Music Tools erstellt.

Lassen Sie uns einen Blick darauf werfen, wie diese Welt intern aufgebaut ist.

Prozedurale Geografie und Bauen

Der Spielraum erstreckt sich über ein Gebiet von 32 mal 32 Kilometern. Die Karte wird prozedural generiert: Biome, Küstenlinien und ein komplexes Flusssystem.

Procedural world map

Flüsse bilden Deltas, wenn sie in den Ozean fließen, und teilen sich in Äste auf. Entlang des Straßennetzes platziert der Server automatisch Holzbrücken, wo Straßen auf Flusskanäle treffen.

River delta with branching tributaries

Das Spiel verfügt über wechselnde Tageszeiten und Jahreszeiten. Die Länge von Tag und Nacht hängt von der Position des Planeten in seiner Umlaufbahn ab. Zwei Satelliten mit unabhängigen Phasen und Umlaufbahnen sind gleichzeitig am Himmel vorhanden.

Celestial orbit panel with sun, planet, and two moons

Die Atmosphäre wird durch Beleuchtung verstärkt. Fackeln werfen dynamische Schatten mit realistischem Lichtabfall.

Night scene with torch lighting

Spieler haben Zugang zu modularen Bauwerken. Man kann Häuser mit zwei bis vier Stockwerken bauen, Türen, Fenster und Möbel platzieren.

Wooden frame house with a bed inside

Die Gegenstandsphysik berücksichtigt Stockwerke. Wenn ein Charakter ein Schwert auf den zweiten Stock eines Hauses wirft, kann es nur jemand auf demselben Stock aufheben. Der Server überprüft die Koordinaten entlang aller drei Achsen, bevor er einen Gegenstand aus der Welt an ein Inventar übergibt.

Kampfsystem und Mechaniken im Geiste von D&D

Der Kampf basiert auf den Regeln klassischer Rollenspiele wie NetHack oder Dungeons & Dragons. Bei der Charakterserschaffung würfelt der Spieler sechs Kernattribute: Stärke, Geschicklichkeit, Konstitution, Intelligenz, Weisheit und Charisma.

Die Generierung folgt der 4d6-Regel mit anschließendem Ausgleich. Alle mathematischen Berechnungen, Trefferprüfungen und Schaden werden vom Server abgewickelt.

Character sheet with attributes and inventory

Das Inventar ist gewichtsbegrenzt. Die Charakterpuppe hat 11 Ausrüstungsplätze: Kopf, beide Hände, Körper, Gürtel, Hosen, Schuhe, Hals, Ohren und zwei Ringe. Schwere Rüstung oder ein volles Inventar mit Steinen zwingt dich zu wählen, was du mitnimmst und was du in der Truhe lässt.

Integrierter Editor direkt im Client

Um die Welt zu bearbeiten, musst du den Server nicht neu starten oder externe Programme öffnen. Ein Karten-Editor ist in den Client eingebaut.

Map editor with active height brush

Er enthält Pinsel zum Ändern der Geländehöhe, Glätten von Hügeln, Verlegen von Straßen und Platzieren von Objekten. Du kannst rechteckige Zonen auswählen: zum Beispiel sichere Stadtgebiete ohne Monster-Spawns festlegen oder Spawn-Gebiete für bestimmte Mobs setzen.

Kartenänderungen werden über die REST-API an den Server gesendet, wobei Zugriffsrechte durch ein Google-Autorisierungstoken verifiziert werden.

Architektur und technischer Stack

Das Projekt ist in drei große Blöcke innerhalb eines Monorepos aufgeteilt.

Die Client-Seite ist in Svelte und TypeScript geschrieben. Das Rendern der 3D-Szene läuft über Threlte und Three.js mit Fokus auf WebGPU.

Die Server-Seite basiert auf Rust unter Verwendung der Tokio Async-Runtime. Frische Weltzustands-Updates werden über Broadcast-Kanäle verteilt. Die Client-Server-Kommunikation läuft über WebSocket basierend auf der tokio-tungstenite-Bibliothek, während REST-Endpunkte für die Karte vom Axum-Framework bedient werden.

Der Agent-Client ist als eigenes Rust-Projekt ausgelagert. Er kann einen MCP-Server (Model Context Protocol) starten, wodurch LLM-Modelle sich direkt mit dem Gameplay verbinden können.

Der Autor hat eine interessante Lösung für die geteilte Logik angewendet. Code aus dem shared-Ordner wird zu WASM für den Browser kompiliert und wird vom Server direkt verwendet. Dadurch wird die Duplizierung von Mechanik-Berechnungsregeln zwischen Client und Server eliminiert.

So wird das Projekt lokal bereitgestellt

Du brauchst Rust, Cargo, Node.js und npm installiert.

Für eine bequeme Bereitstellung verwendet der Entwickler einen Cargo Workspace. Du kannst den Server-Teil mit automatischem Neuerstellen bei Codeänderungen vom Projektstammverzeichnis aus starten:

cargo install cargo-watch
cargo watch -w server -w shared -w data-src -x "run -p onlinerpg-server"

Der Server startet einen WebSocket auf Port 10006 und eine REST-API auf Port 10007.

Um den Client auszuführen, musst du die Umgebungsdatei kopieren und den Vite Dev-Server starten:

cd client
cp .env.example .env.local
npm install
npm run dev -- --port 10004

Wenn du die geteilte Logik im shared-Ordner bearbeitest, lohnt es sich, automatische WASM-Builds für den Browser in einem zweiten Terminal auszuführen:

cargo watch -w shared -s "npm run build:wasm --prefix client"

Der Agent-Client wird aus dem agent-client-Ordner gestartet:

cd agent-client
cargo watch -i "data/prompts/memory/" -x run

Warum du den Code studieren solltest

Das Projekt wird am nützlichsten für diejenigen sein, die Netzwerkdienste und Spiele in Rust schreiben oder schreiben planen. Hier findest du ein funktionierendes Beispiel für die Organisation von State Races, Ereignisverteilung über Broadcast-Kanäle und die Arbeit mit Tokio.

Der zweite interessante Bereich ist Web-Grafik. Die Kombination Svelte, Threlte und Three.js ist nicht so häufig, und die Ausführung von WebGPU in einem echten Projekt demonstriert die Leistungsfähigkeit des modernen Webs.

Schließlich wird OpenMMO für KI-Agent-Forscher nützlich sein. Das MCP-Protokoll und die Gleichberechtigung von Agenten mit regulären Spielern bieten eine fertige Sandbox zum Testen von LLM-Verhaltensszenarien in einer kontinuierlichen Umgebung.

Ähnliche Projekte