- Klassen-System, Level-System, Equipment-System dokumentiert - GCD/Haste-Formel, Schadensberechnung, DPS erklärt - Inventar-System, Loot-System, Gold-Anzeige dokumentiert - Gegner-Stats, KI-Verhalten, Respawn beschrieben - Geplante Features und Projektstruktur aktualisiert Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
11 KiB
DungeonCrawler – Projektdokumentation
Übersicht
DungeonCrawler ist ein Third-Person Action-RPG entwickelt in Godot 4. Spieler können solo oder in einer Gruppe von bis zu 6 Spielern Dungeons erkunden, Gegner bekämpfen und ihre Charaktere mit verschiedenen Klassen und Ausrüstungen anpassen.
Technologie
- Engine: Godot 4 (GDScript)
- Perspektive: Third-Person
- Plattform: PC (Windows)
Steuerung
| Taste | Aktion |
|---|---|
| W / A / S / D | Bewegen |
| Mausrad | Kamera zoomen (min 5, max 20) |
| RMB gehalten | Kamera drehen, Spieler schaut mit |
| Linksklick auf Gegner | Ziel markieren |
| Rechtsklick auf Gegner | Ziel markieren + Autoattack starten |
| 1 | Autoattack manuell starten |
| 2 | Heavy Strike (starke Attacke) |
| 3 – 9 | Aktionsleiste Slots (noch frei) |
| C | Charakter-Panel (Stats + Equipment) |
| I | Inventar öffnen/schließen |
| Leertaste | Springen |
| T | (Test) 10 Schaden am Spieler |
Szenen-Struktur
world.tscn
Hauptszene der Spielwelt. Zeigt bei Start das Klassenauswahl-Menü.
World (Node3D)
├── Player (player.tscn)
├── Enemy (enemy.tscn)
├── StaticBody3D (Boden)
│ ├── MeshInstance3D
│ └── CollisionShape3D
├── DirectionalLight3D
└── NavigationRegion3D
player.tscn
Der Spielercharakter mit allen UI-Panels.
Player (CharacterBody3D)
├── [Kenney GLB Modell]
├── CollisionShape3D
├── CameraPivot (Node3D)
│ └── Camera3D
├── HUD (hud.tscn)
├── CharacterPanel (character_panel.tscn)
├── InventoryPanel (inventory_panel.tscn)
└── LootWindow (loot_window.tscn)
enemy.tscn
Ein Gegner mit Level-basiertem Stats-System.
Enemy (CharacterBody3D)
├── [Kenney GLB Modell]
├── CollisionShape3D
├── Area3D
│ └── CollisionShape3D
├── NavigationAgent3D
└── HealthLabel (Label3D)
Klassen-System
CharacterClass (character_class.gd)
Resource-Klasse die eine spielbare Klasse definiert.
| Property | Typ | Beschreibung |
|---|---|---|
| class_name_de | String | Deutscher Klassenname |
| main_stat | MainStat | STRENGTH, AGILITY oder INTELLIGENCE |
| base_strength/agility/intelligence/stamina | int | Basis-Stats auf Level 1 |
| strength/agility/intelligence/stamina_per_level | float | Stat-Zuwachs pro Level |
| unarmed_min_damage | int | Unbewaffneter Mindestschaden |
| unarmed_max_damage | int | Unbewaffneter Maximalschaden |
| unarmed_attack_speed | float | Unbewaffnete Angriffsgeschwindigkeit |
Konstanten:
HP_PER_STAMINA = 10— HP pro Stamina-PunktDAMAGE_PER_MAIN_STAT = 0.5— Zusatzschaden pro Main-Stat-Punkt
Verfügbare Klassen (classes/)
| Klasse | Main-Stat | STR | AGI | INT | STA | Unbewaffnet |
|---|---|---|---|---|---|---|
| Krieger | Stärke | 15 | 8 | 5 | 12 | 2-4 Schaden, 1.8s |
| Schurke | Beweglichkeit | 8 | 15 | 7 | 10 | 1-3 Schaden, 1.5s |
| Magier | Intelligenz | 5 | 8 | 15 | 8 | 1-2 Schaden, 2.0s |
Klassenauswahl (class_selection_menu.gd)
Wird bei Spielstart angezeigt. Spieler wählt eine Klasse, danach wird Startausrüstung angelegt.
Level-System
- XP-Kurve: Level N benötigt
100 * NXP (Level 2: 100, Level 3: 200, ...) - Stats pro Level: Basierend auf Klassen-Zuwachsraten
- HP bei Level-Up: Werden vollständig aufgefüllt
- Character Panel: Aktualisiert sich automatisch bei Level-Up
Equipment-System
Equipment (equipment.gd)
Resource-Klasse für alle Ausrüstungsgegenstände.
Slots: HEAD, CHEST, HANDS, LEGS, FEET, WEAPON, OFFHAND
Seltenheiten:
| Seltenheit | Farbe |
|---|---|
| COMMON | Weiß |
| UNCOMMON | Grün |
| RARE | Blau |
| EPIC | Lila |
Stats auf Equipment:
| Property | Typ | Beschreibung |
|---|---|---|
| item_name | String | Name des Items |
| slot | Slot | Equipment-Slot |
| rarity | Rarity | Seltenheitsstufe |
| armor | int | Rüstungswert |
| strength/agility/intelligence/stamina | int | Stat-Boni |
| haste | float | Angriffsgeschwindigkeits-Bonus (0.1 = 10%) |
| min_damage / max_damage | int | Waffenschaden (nur Waffen) |
| attack_speed | float | Angriffsgeschwindigkeit (nur Waffen) |
| weapon_range | float | Reichweite (nur Waffen) |
Vorhandene Equipment-Items (equipment/)
- iron_sword.tres — Eisenschwert (Waffe)
- steel_sword.tres — Stahlschwert (Waffe, besser)
- leather_chest.tres — Lederrüstung (Brust)
- iron_helm.tres — Eisenhelm (Kopf)
- wooden_shield.tres — Holzschild (Nebenhand)
Character Panel (character_panel.gd, C-Taste)
Zeigt zwei Spalten:
- Stats-Spalte: Stärke, Beweglichkeit, Intelligenz, Ausdauer, Rüstung, HP
- Equipment-Spalte: Alle 7 Slots mit ausgerüsteten Items, Waffenschaden + DPS
Unbewaffnet: Zeigt klassenabhängige Schadenswerte.
Inventar-System
Inventory (inventory.gd)
Resource-Klasse für das Spieler-Inventar.
- MAX_SLOTS: 20 Inventarplätze
- Gold: Währung, wird im HUD angezeigt
- Signals:
inventory_changed,gold_changed
Funktionen:
| Funktion | Beschreibung |
|---|---|
| add_item(item) | Item hinzufügen (false wenn voll) |
| remove_item(item) | Item entfernen |
| add_gold(amount) | Gold hinzufügen |
| spend_gold(amount) | Gold ausgeben (false wenn nicht genug) |
| is_full() | Prüfen ob Inventar voll |
Inventory Panel (inventory_panel.gd, I-Taste)
- 5x4 Grid mit Item-Slots
- Gold-Anzeige im Header
- Items in Seltenheitsfarbe
- Tooltips mit vollständigen Item-Stats
- Rechtsklick auf Item: Direkt anlegen (tauscht mit aktuellem Equipment)
Loot-System
LootTable (loot_table.gd)
Resource die mögliche Drops eines Gegners definiert.
| Property | Typ | Beschreibung |
|---|---|---|
| min_gold | int | Minimaler Gold-Drop |
| max_gold | int | Maximaler Gold-Drop |
| possible_drops | Array[LootEntry] | Mögliche Item-Drops |
LootEntry (loot_entry.gd)
Ein einzelner Drop-Eintrag.
| Property | Typ | Beschreibung |
|---|---|---|
| item | Equipment | Das droppbare Item |
| drop_chance | float | Wahrscheinlichkeit (0.0 - 1.0) |
Vorhandene LootTables (loot_tables/)
- goblin_loot.tres — 2-8 Gold, Eisenschwert (15%), Lederrüstung (10%), Eisenhelm (10%)
- skeleton_loot.tres — 5-15 Gold, Stahlschwert (10%), Holzschild (12%), Eisenhelm (15%)
LootWindow (loot_window.gd)
- Erscheint automatisch wenn ein Gegner stirbt
- Zeigt Gold und gedropte Items
- Einzelne Items per Klick aufheben
- "Alles aufheben" Button
- Gold skaliert mit Gegner-Level
Kampfsystem
Global Cooldown (GCD)
Alle Aktionen (Autoattack + Skills) teilen sich einen GCD.
Formel: GCD = Waffen-Attackspeed / (1 + Haste)
Beispiel: Waffe mit 1.5s + 50% Haste → 1.5 / 1.5 = 1.0s
Schadensberechnung
- Basisschaden: Zufällig zwischen Waffen min/max (oder unbewaffnet klassenabhängig)
- Stat-Bonus:
Main-Stat * 0.5 - Rüstungsreduktion (Nahkampf):
Reduktion = Rüstung / (Rüstung + 50) - Level-Differenz:
±10% pro Level, max ±50% - Mindestschaden: Immer mindestens 1
DPS-Berechnung
DPS = (Durchschnittsschaden + Stat-Bonus) / GCD
Skills
Autoattack (Taste 1)
- Schaden: Waffenschaden oder klassenabhängig unbewaffnet + Main-Stat Bonus
- Cooldown: GCD (Waffen-Attackspeed / Haste)
- Reichweite: Waffen-Reichweite oder 3.0 (unbewaffnet)
- Automatisch per Rechtsklick oder manuell per Taste 1
Heavy Strike (Taste 2)
- Schaden: 10-15 + Main-Stat Bonus
- Cooldown: 3 Sekunden (eigener Cooldown, löst auch GCD aus)
- Reichweite: 4.0
- Aktiviert automatisch Autoattack danach
UI & Icons
- Aktionsleiste mit 9 Slots (Taste 1-9)
- Icons werden beim Spielstart geladen
- Cooldown-Anzeige: Dunkle Überlagerung + verbleibende Zeit
- Alle Slots per Maus klickbar
Gegner-System (enemy.gd)
Stats
Level-basiert mit automatischer Skalierung:
| Stat | Formel |
|---|---|
| Stärke | base_strength + (level-1) * 2 |
| Ausdauer | base_stamina + (level-1) * 3 |
| Rüstung | base_armor + (level-1) * 2 |
| HP | Ausdauer * 10 |
| Schaden | Stärke * 0.5 + 2 |
| XP-Belohnung | 25 * Level |
KI-Verhalten (State Machine)
| State | Beschreibung |
|---|---|
| PATROL | Zufällig im Radius um Spawn-Position herumlaufen |
| CHASE | Spieler verfolgen (Aggro-Range: 8.0) |
| ATTACK | Angreifen wenn in Reichweite (1.5) |
Respawn
- Gegner spawnen nach 5 Sekunden am Ursprungsort neu
- Verwaltet durch world.gd
Loot-Drops
- Jeder Gegner hat eine optionale
loot_table(LootTable Resource) - Gold skaliert mit Gegner-Level
- Ohne LootTable: Standard-Gold-Drop (1-3 * Level)
HUD (hud.gd)
| Element | Beschreibung |
|---|---|
| HealthBar | Rote HP-Leiste mit Text "aktuell / max" |
| LevelLabel | "Lv X" Anzeige |
| XPBar | Blaue XP-Leiste |
| GoldLabel | Gold-Anzeige in Goldfarbe |
| ActionBar | 9 Slots mit Icons, Cooldowns, Klick-Support |
Geplante Features
- Mana-System für Magier
- Spell-System (Feuerbälle etc.)
- Schadenstypen (Physical, Fire, Ice, Lightning, Poison)
- Mehrere Gegnertypen
- Dungeon-Level mit Wänden und Räumen
- Multiplayer (bis zu 6 Spieler)
- Boss-Gegner
- Item-Shop / Händler
Projektstruktur
DungeonCrawler/
├── assets/ # 3D-Modelle (Kenney GLB)
├── classes/ # Klassen-Definitionen (.tres)
│ ├── warrior.tres
│ ├── rogue.tres
│ └── mage.tres
├── equipment/ # Equipment-Items (.tres)
│ ├── iron_sword.tres
│ ├── steel_sword.tres
│ ├── leather_chest.tres
│ ├── iron_helm.tres
│ └── wooden_shield.tres
├── loot_tables/ # Loot-Tabellen (.tres)
│ ├── goblin_loot.tres
│ └── skeleton_loot.tres
├── icons/ # Skill-Icons (SVG)
│ ├── autoattack_icon.svg
│ └── heavy_strike_icon.svg
├── camera_pivot.gd # Kamera-Script
├── character_class.gd # CharacterClass Resource
├── character_panel.gd # Charakter-Panel Script
├── character_panel.tscn # Charakter-Panel Scene
├── class_selection_menu.gd # Klassenauswahl Script
├── class_selection_menu.tscn # Klassenauswahl Scene
├── enemy.gd # Gegner-Script
├── enemy.tscn # Gegner-Scene
├── equipment.gd # Equipment Resource
├── hud.gd # HUD-Script
├── hud.tscn # HUD-Scene
├── inventory.gd # Inventar Resource
├── inventory_panel.gd # Inventar-Panel Script
├── inventory_panel.tscn # Inventar-Panel Scene
├── loot_entry.gd # LootEntry Resource
├── loot_table.gd # LootTable Resource
├── loot_window.gd # Loot-Fenster Script
├── loot_window.tscn # Loot-Fenster Scene
├── player.gd # Spieler-Script
├── player.tscn # Spieler-Scene
├── world.gd # Welt-Script
├── world.tscn # Hauptszene
└── PROJEKTDOKU.md # Diese Dokumentation