DungeonCrawler/PROJEKTDOKU.md
Andre 3bdd0780c5 Mixamo Warrior-Modell mit Animationen, Zauberstab-Icon und Magier-Skills
- Kenney-Modelle durch Mixamo Warrior (warrior.fbx) für Player und Enemy ersetzt
- Animations-System: Lädt Walking, Strafe, Jump, Autoattack, Heavy Strike, Dying aus separaten FBX-Dateien
- Player: Bewegungsanimationen (walk/strafe/jump) + Kampfanimationen (autoattack/heavy_strike/die)
- Enemy: Walk-Animation für Patrol/Chase, Autoattack-Animation, Death-Animation mit Verzögerung
- Zauberstab-Icon (wand_icon.svg) erstellt und in Magier-Skills verknüpft
- Frostblitz und Zauberstab als klassenspezifische Magier-Skills dokumentiert
- Castbar-System, Gegner-Aggro bei Schaden und Drag&Drop in Dokumentation ergänzt
- Enemy patrouilliert jetzt auch ohne Spieler-Referenz

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:44:31 +01:00

17 KiB
Raw Blame History

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 9 Aktionsleiste Slots (Skills + Consumables, frei belegbar)
C Charakter-Panel (Stats + Equipment)
I Inventar öffnen/schließen
P Fähigkeiten-Panel (alle Skills, Drag auf Aktionsleiste)
Leertaste Springen
T (Test) 10 Schaden am Spieler

Szenen-Struktur

world.tscn

Hauptszene der Spielwelt. Zeigt bei Start das Hauptmenü (Einstellungen), dann Klassenauswahl.

World (Node3D)
├── Player (player.tscn)
├── Enemy (enemy.tscn)
├── StaticBody3D (Boden)
│   ├── MeshInstance3D
│   └── CollisionShape3D
├── DirectionalLight3D
└── NavigationRegion3D

player.tscn

Der Spielercharakter mit allen UI-Panels.

Player (CharacterBody3D)
├── PlayerModel (warrior.fbx — Mixamo Charakter mit Skeleton + AnimationPlayer)
├── CollisionShape3D
├── CameraPivot (Node3D)
│   └── Camera3D
├── HUD (hud.tscn)
├── CharacterPanel (character_panel.tscn)
├── InventoryPanel (inventory_panel.tscn)
├── LootWindow (loot_window.tscn)
└── SkillPanel (skill_panel.tscn)

enemy.tscn

Ein Gegner mit Level-basiertem Stats-System.

Enemy (CharacterBody3D)
├── EnemyModel (warrior.fbx — Mixamo Charakter mit Skeleton + AnimationPlayer)
├── 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
resource_type ResourceType NONE, MANA, RAGE, ENERGY
base_resource int Basis-Ressource auf Level 1

Konstanten:

  • HP_PER_STAMINA = 10 — HP pro Stamina-Punkt
  • MANA_PER_INT = 5 — Mana pro Intelligenz-Punkt
  • DAMAGE_PER_MAIN_STAT = 0.5 — Zusatzschaden pro Main-Stat-Punkt

Verfügbare Klassen (classes/)

Klasse Main-Stat Ressource STR AGI INT STA Unbewaffnet
Krieger Stärke Keine 15 8 5 12 2-4 Schaden, 1.8s
Schurke Beweglichkeit Energie (100) 8 15 7 10 1-3 Schaden, 1.5s
Magier Intelligenz Mana (100 + INT*5) 5 8 15 8 1-2 Schaden, 2.0s

Hauptmenü (main_menu.gd)

Wird als erstes angezeigt mit Optionen:

  • Spielen — Öffnet Klassenauswahl
  • Einstellungen — Auflösung (720p-4K), Fenstermodus (Fenster/Randlos/Vollbild), VSync, Anti-Aliasing (Aus/2x/4x/8x)
  • Beenden — Spiel schließen

Klassenauswahl (class_selection_menu.gd)

Wird nach dem Hauptmenü angezeigt. Spieler wählt eine Klasse, danach wird Startausrüstung angelegt.


Klassen-Ressourcen-System

Jede Klasse kann eine eigene Ressource haben:

Ressource Farbe Skalierung Klasse
Keine - - Krieger
Mana Blau base_resource + INT * 5 Magier
Energie Gelb Fix (base_resource) Schurke
Wut Rot Fix (base_resource) (geplant)

Die Ressourcen-Leiste wird nur angezeigt wenn die Klasse eine Ressource hat.


Level-System

  • XP-Kurve: Level N benötigt 100 * N XP (Level 2: 100, Level 3: 200, ...)
  • Stats pro Level: Basierend auf Klassen-Zuwachsraten
  • HP bei Level-Up: Werden vollständig aufgefüllt (HP + Klassen-Ressource)
  • 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: Icon-Grid mit Tooltips bei Hover, Waffenschaden + DPS

Unbewaffnet: Zeigt klassenabhängige Schadenswerte.


Consumable-System

Consumable (consumable.gd)

Resource-Klasse für verbrauchbare Items (Tränke, Essen, etc.).

Property Typ Beschreibung
item_name String Name des Tranks
effect_type EffectType HEAL_HP, RESTORE_MANA, HEAL_AND_MANA
amount int Heilungsmenge
cooldown float Cooldown nach Benutzung
icon Texture2D Icon für UI
stack_size int Aktuelle Anzahl im Stack
max_stack int Maximale Stack-Größe (20)

Vorhandene Tränke (consumables/)

  • small_hp_potion.tres — Kleiner Heiltrank (+50 HP, 40% Drop-Chance)
  • small_mana_potion.tres — Kleiner Manatrank (+40 Mana, 25% Drop-Chance)

Benutzung

  • Rechtsklick im Inventar: Trank direkt benutzen
  • Shift+Linksklick im Inventar: Trank auf nächsten freien Aktionsleisten-Slot legen
  • Taste 3-9: Trank über Aktionsleiste benutzen
  • HP-Tränke: Nur wenn HP nicht voll, stellt HP wieder her
  • Mana-Tränke: Nur wenn Mana nicht voll, stellt Ressource wieder her
  • Stacking: Gleichnamige Tränke werden automatisch gestackt (max 20)

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 Resource Das droppbare Item (Equipment oder Consumable)
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%), Heiltrank (40%), Manatrank (25%)
  • 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

  1. Basisschaden: Zufällig zwischen Waffen min/max (oder unbewaffnet klassenabhängig)
  2. Stat-Bonus: Main-Stat * 0.5
  3. Rüstungsreduktion (Nahkampf): Reduktion = Rüstung / (Rüstung + 50)
  4. Level-Differenz: ±10% pro Level, max ±50%
  5. Mindestschaden: Immer mindestens 1

DPS-Berechnung

DPS = (Durchschnittsschaden + Stat-Bonus) / GCD

Skills

Autoattack (Taste 1, Krieger/Schurke)

  • 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
  • Animation: autoattack

Zauberstab (Taste 1, Magier)

  • Schaden: Waffenschaden + INT (magisch, ignoriert Rüstung)
  • Cooldown: GCD
  • Reichweite: 20.0
  • Deaktiviert Autoattack, exklusiver Fernkampf-Modus
  • Animation: autoattack

Frostblitz (Taste 2, Magier)

  • Schaden: 12-20 + INT (magisch)
  • Castzeit: 1.5 Sekunden (unterbrechbar durch Bewegung/Schaden/Springen)
  • Manakosten: 20
  • Cooldown: 2.5 Sekunden
  • Reichweite: 20.0
  • Castbar wird über der Aktionsleiste angezeigt

Heavy Strike (Taste 2, Krieger/Schurke)

  • Schaden: 10-15 + Main-Stat Bonus
  • Cooldown: 3 Sekunden (eigener Cooldown, löst auch GCD aus)
  • Reichweite: 4.0
  • Aktiviert automatisch Autoattack danach
  • Animation: heavy_strike

UI & Icons

  • Aktionsleiste mit 9 Slots (Taste 1-9), frei belegbar mit Skills und Consumables
  • Drag & Drop: Skills/Tränke zwischen Slots verschieben, aus Leiste rausziehen zum Entfernen
  • Fähigkeiten-Panel (P-Taste): Listet alle verfügbaren Skills, per Drag auf Aktionsleiste ziehen
  • Icons werden beim Spielstart geladen
  • Cooldown-Anzeige: Dunkle Überlagerung + verbleibende Zeit
  • Gelber Highlight-Rand beim Drag über Slots

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"
ResourceBar Ressourcen-Leiste (Blau=Mana, Gelb=Energie, Rot=Wut), nur sichtbar wenn Klasse eine Ressource hat
LevelLabel "Lv X" Anzeige
XPBar Blaue XP-Leiste
GoldLabel Gold-Anzeige in Goldfarbe
ActionBar 9 Slots mit Icons, Cooldowns, Klick-Support, Stack-Anzeige für Consumables

Animations-System

Mixamo-Integration

Charaktermodelle stammen von Mixamo (warrior.fbx) und werden mit separaten Animations-FBX-Dateien kombiniert.

Lade-Prozess (player.gd / enemy.gd):

  1. _setup_animations() findet den AnimationPlayer im Modell
  2. Jede Animations-FBX wird als PackedScene geladen
  3. Die Animation wird extrahiert und der AnimationLibrary hinzugefügt
  4. _update_animation() wählt basierend auf Bewegungszustand die passende Animation

Verfügbare Animationen (assets/animations/)

Animation Datei Verwendung
walk Walking.fbx Vorwärts laufen
walk_back Walking Backwards.fbx Rückwärts laufen
strafe_left Left Strafe Walking.fbx Links seitwärts
strafe_right Right Strafe Walking.fbx Rechts seitwärts
jump Jumping.fbx Springen
autoattack Autoattack.fbx Autoattack / Zauberstab
heavy_strike Heavy Strike.fbx Heavy Strike Skill
die Dying Backwards.fbx Tod (Spieler + Gegner)

Offene Punkte

  • Enemy Walk-Animation: Track-Pfade matchen noch nicht korrekt (Debug in Arbeit)
  • Idle-Animation fehlt (kein FBX vorhanden)
  • Cast-Animation fehlt (für Frostblitz)

Geplante Features

  • Wut-Ressource für Krieger
  • Ressourcen-System für Gegner (nicht alle haben Mana)
  • 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 und Animationen
│   ├── models/              # Mixamo Charakter-Modelle (warrior.fbx + Texturen)
│   ├── animations/          # Mixamo Animationen (Walking, Attack, etc.)
│   └── kenney_blocky-characters_20/  # Kenney Block-Chars (nicht mehr aktiv)
├── classes/                 # Klassen-Definitionen (.tres)
│   ├── warrior.tres         # Krieger (Ressource: NONE)
│   ├── rogue.tres           # Schurke (Ressource: ENERGY, 100)
│   └── mage.tres            # Magier (Ressource: MANA, 100)
├── consumables/             # Verbrauchbare Items (.tres)
│   ├── small_hp_potion.tres
│   └── small_mana_potion.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/                   # Icons (SVG)
│   ├── autoattack_icon.svg
│   ├── heavy_strike_icon.svg
│   ├── iron_sword_icon.svg
│   ├── steel_sword_icon.svg
│   ├── leather_chest_icon.svg
│   ├── iron_helm_icon.svg
│   ├── wooden_shield_icon.svg
│   ├── hp_potion_icon.svg
│   ├── mana_potion_icon.svg
│   ├── frostbolt_icon.svg
│   ├── wand_icon.svg
│   └── wooden_staff_icon.svg
├── camera_pivot.gd          # Kamera-Script
├── character_class.gd       # CharacterClass Resource (inkl. ResourceType)
├── character_panel.gd       # Charakter-Panel Script (Icon-Grid)
├── character_panel.tscn     # Charakter-Panel Scene
├── class_selection_menu.gd  # Klassenauswahl Script
├── class_selection_menu.tscn # Klassenauswahl Scene
├── consumable.gd            # Consumable Resource
├── enemy.gd                 # Gegner-Script
├── enemy.tscn               # Gegner-Scene
├── equipment.gd             # Equipment Resource
├── hud.gd                   # HUD-Script (inkl. ResourceBar)
├── 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
├── main_menu.gd             # Hauptmenü Script (Einstellungen)
├── main_menu.tscn           # Hauptmenü Scene
├── player.gd                # Spieler-Script (inkl. Ressourcen, Aktionsleiste)
├── player.tscn              # Spieler-Scene
├── skill_panel.gd           # Fähigkeiten-Panel Script
├── skill_panel.tscn         # Fähigkeiten-Panel Scene
├── world.gd                 # Welt-Script
├── world.tscn               # Hauptszene
└── PROJEKTDOKU.md           # Diese Dokumentation