5.0 KiB
5.0 KiB
MMO Projekt
Überblick
Community-MMO in Godot 4.6 (Forward+, Jolt Physics). Vision in doc/_core.md, Features in doc/features.md.
Sprache
Der User kommuniziert auf Deutsch. Code und Variablen auf Englisch. Kommentare nur wo nötig.
Code-Style
- GDScript mit 2 Spaces Einrückung
- Explizite Typen wo der Inferenzer scheitert (Ergebnisse von Variant-Funktionen, Helper-Returns die Node sein könnten)
- Keine Debug-Prints im finalen Code
- Keine emoji
Architektur
Autoloads (autoloads/)
EventBus— alle Signals (Combat, Wave, Inventory, Dialog, Chat, …)Net— ENet P2P Multiplayer-Manager (Singleplayer = OfflineMultiplayerPeer)Stats— zentrale Registry:register(entity, base_resource)/get_stat/set_statGameState— Wave#, Scene-Pfade, Run-Seed, Pause, Dungeon-SeedSaveLoad— JSON-basierte Persistenz (Stub für später)
Resources (resources/)
stats/— BaseStats + Player/Enemy/Boss/Portal/Gate/Village/Building Statsabilities/— Ability + AbilitySet (3 Klassen × 5 Abilities, im RoleSystem in Code aufgebaut)items/— Item, Recipe (Crafting in CraftingSystem in Code)buildings/— Building Resource (Blueprints in BuildingSystem in Code)npcs/— NpcProfile (Lore + Personality für Ollama)effects/— Effect Resource + Element (NONE, FIRE)
Szenen (scenes/)
menu/— main_menu, lobby, options_menuworld/— world.tscn (Dorf-Welt mit Village + alle Systeme als Children)dungeon/— dungeon.tscn (procedural generation via dungeon_generator.gd)entities/— player, enemy, gate, portal, building, loot, npc, villagehud/— hud.tscn (alles-in-einem: vitals, abilities, chat, minimap, inventory, crafting, build, dialog, map, pause, game over)
Systeme (systems/)
Alle als Children unter World/Systems und Dungeon/Systems instanziert:
- Combat: HealthSystem, ShieldSystem, RespawnSystem, CooldownSystem, AbilitySystem, AutoAttackSystem
- Effects: EffectSystem, ElementSystem, AggroSystem, RoleSystem
- World: SpawnSystem, WaveSystem, InvasionSystem, XpSystem, LootSystem
- Player: InventorySystem, CraftingSystem, BuildingSystem
- Social: NpcSystem, DialogSystem (Ollama HTTP), ChatSystem, MapSystem, AudioSystem
Multiplayer-Pattern
- ENet P2P, Host-Authoritative
- Singleplayer =
Net.host_singleplayer()(OfflineMultiplayerPeer) - Player-Entities tragen Authority des jeweiligen Peers (
_enter_tree() → set_multiplayer_authority(name.to_int())) - Stats/Damage/Spawn/Wave/XP/Inventory laufen nur am Host (
if not multiplayer.is_server() and multiplayer.multiplayer_peer != null: return) - Client-Aktionen via RPC zum Host:
_request_*.rpc_id(1, ...)→ Host validiert + sync viaMultiplayerSpawnerundMultiplayerSynchronizer - Sync-Felder pro Entity über
MultiplayerSynchronizermitSceneReplicationConfig
Input-Map
- WASD + Space: Move + Jump
- 1–4: Abilities (im Build-Mode: Bauteil-Auswahl)
- ALT+1/2/3: Tank/Damage/Healer
- Tab: Cycle target | LMB: Click target | RMB: Camera drag (capture mouse)
- I: Inventory | C: Crafting | B: Build mode | M: Map | Y: Chat | E: Interact (NPC)
- R: Rotate building preview
- Escape: Pause / Cancel UI
Dialog (Ollama)
- HTTP
localhost:11434/api/generate, Modellmistral-nemo - Pro NPC: System-Prompt aus
lore+personality - Fallback:
npc.fallback_textwenn Ollama nicht erreichbar — Spiel bleibt voll spielbar
Bauen
- Grid-Snap 1m, 4 Bauteile (Floor, Wall, Door, Roof)
- LMB im Build-Mode platziert, MMB entfernt
- Material-Verbrauch aus Crafting-Items (alle aus
wood, das ausessencegecrafted wird) - Persistenz via Host (Buildings sind echte Nodes unter
EntityRoot/Buildings, MultiplayerSpawner repliziert)
Wave-Loop
- WaveSystem startet 10-min Timer, spawnt 3 normale + 1 rotes Gate
- Gate stirbt → spawnt Portal an gleicher Position
- Spieler betritt Portal → Dungeon (procedural, 5–8 Räume + Boss)
- Boss-Tod → Welt-Rückkehr; rotes Portal → Wave++ + alle Stats skalieren
- Timer 0 ohne rotes Portal → Invasion (8+wave×2 Mobs zur Village)
- Village 0 HP → Game Over → Hauptmenü
Workflow mit dem User
- Erst planen (
doc/lesen), dann implementieren - Schrittweise, modulares Aufbauen — nicht alles auf einmal umbauen
- Nach Änderungen:
godot-4 --headless --quit-after 60 res://scenes/world/world.tscnum Parse-/Runtime-Fehler zu sehen doc/nicht anfassen — das ist die User-Spec
Smoke-Test
godot-4 --headless --import→ Kein Errorgodot-4 --headless --quit-after 600 res://scenes/world/world.tscn→ Kein Errorgodot-4 --headless --quit-after 600 res://scenes/dungeon/dungeon.tscn→ Kein Error
Bekannte Lücken / TODOs
- Ollama muss installiert werden (Modell
mistral-nemoerwartet) — Stub-Fallback funktioniert sonst - Save/Load Slots im Hauptmenü (Autoload existiert, UI fehlt)
- Multiplayer Late-Join: Building-/Wave-State wird beim spätem Beitritt nicht synchronisiert
- Damage Numbers / Hit FX / Particle Effects fehlen (rein Polish)