# 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 Slot auswählen | | Leertaste | Springen | | T | (Test) 10 Schaden am Spieler | --- ## Szenen-Struktur ### world.tscn Hauptszene der Spielwelt. ``` World (Node3D) ├── Player (player.tscn) ├── Enemy (enemy.tscn) ├── StaticBody3D (Boden) │ ├── MeshInstance3D │ └── CollisionShape3D ├── DirectionalLight3D └── NavigationRegion3D ``` ### player.tscn Der Spielercharakter. ``` Player (CharacterBody3D) ├── [Kenney GLB Modell] ├── CollisionShape3D ├── CameraPivot (Node3D) │ └── Camera3D └── HUD (hud.tscn) ``` ### enemy.tscn Ein Gegner. ``` Enemy (CharacterBody3D) ├── [Kenney GLB Modell] ├── CollisionShape3D ├── Area3D │ └── CollisionShape3D ├── NavigationAgent3D └── HealthLabel (Label3D) ``` ### hud.tscn Die Spieler-UI. ``` HUD (CanvasLayer) └── Control ├── HealthBar (ProgressBar) │ └── HealthLabel (Label) └── ActionBar (HBoxContainer) └── A1 – A9 (Panel) └── Label (1–9) ``` --- ## Scripts ### player.gd Steuert den Spielercharakter. **Variablen:** | Variable | Typ | Beschreibung | |---|---|---| | SPEED | const float | Bewegungsgeschwindigkeit (5.0) | | JUMP_VELOCITY | const float | Sprungkraft (4.5) | | GRAVITY | const float | Schwerkraft (9.8) | | max_hp | int | Maximale HP (100) | | current_hp | int | Aktuelle HP | | can_attack | bool | Angriff möglich (Cooldown-Flag) | | target | Node | Aktuell markierter Gegner | | equipped_weapon | Weapon | Ausgerüstete Waffe (null = unbewaffnet) | **Funktionen:** | Funktion | Beschreibung | |---|---| | take_damage(amount) | Schaden abziehen, HP-Leiste aktualisieren | | heal(amount) | HP heilen | | die() | Spieler gestorben | | get_attack_damage() | Schaden berechnen (Waffe oder 1) | | get_attack_range() | Reichweite (Waffe oder 1.5) | | get_attack_cooldown() | Cooldown (Waffe oder 1.5s) | | set_target(target, start_attack) | Ziel markieren, optional Autoattack starten | | autoattack() | Wiederholt angreifen solange Ziel gültig | | _try_select_target(start_attack) | Raycast von Kamera auf Mausposition | --- ### enemy.gd Steuert den Gegner. **Variablen:** | Variable | Typ | Beschreibung | |---|---|---| | SPEED | const float | Bewegungsgeschwindigkeit (3.0) | | ATTACK_DAMAGE | const int | Schaden pro Angriff (5) | | ATTACK_RANGE | const float | Angriffsreichweite (1.5) | | ATTACK_COOLDOWN | const float | Angriffspause (2.0s) | | max_hp | int | Maximale HP (50) | | target | Node | Ziel des Gegners (Spieler) | **Funktionen:** | Funktion | Beschreibung | |---|---| | take_damage(amount) | Schaden nehmen, bei 0 HP sterben | | die() | Gegner aus Szene entfernen | | show_health() | HP-Label einblenden | | hide_health() | HP-Label ausblenden | | _attack() | Angriff mit Cooldown | --- ### camera_pivot.gd Steuert die Third-Person-Kamera. **Einstellbare Parameter (Export):** | Parameter | Standard | Beschreibung | |---|---|---| | sensitivity | 0.3 | Mausempfindlichkeit | | min_pitch | -40° | Maximale Neigung nach unten | | max_pitch | 20° | Maximale Neigung nach oben | | min_zoom | 5.0 | Minimale Kameraentfernung | | max_zoom | 20.0 | Maximale Kameraentfernung | | zoom_speed | 1.0 | Zoom pro Mausrad-Schritt | --- ### hud.gd Verwaltet die Spieler-UI. **Funktionen:** | Funktion | Beschreibung | |---|---| | update_health(current, max) | HP-Leiste und Text aktualisieren | | set_active_slot(index) | Aktions-Slot 0.1s golden hervorheben | --- ## Ressourcen-Klassen ### Weapon (resources/weapon.gd) Definiert eine Waffe als Godot-Ressource (.tres). | Property | Typ | Beschreibung | |---|---|---| | name | String | Waffenname | | weapon_type | WeaponType | UNARMED, SWORD, AXE, MACE, DAGGER, STAFF, BOW | | min_damage | int | Minimaler Schaden | | max_damage | int | Maximaler Schaden | | attack_speed | float | Angriffsgeschwindigkeit (Cooldown) | | range | float | Angriffsreichweite | | icon | Texture2D | Icon für die Aktionsleiste | ### Attack (resources/attack.gd) Definiert einen Angriff — Schaden kommt von der ausgerüsteten Waffe. | Property | Typ | Beschreibung | |---|---|---| | name | String | Angriffsname | | damage_type | DamageType | PHYSICAL, FIRE, ICE, LIGHTNING, POISON | | icon | Texture2D | Icon für die Aktionsleiste | --- ## Kampfsystem ### Autoattack - Rechtsklick auf Gegner → Ziel markieren + Autoattack startet - Linksklick auf Gegner → nur Ziel markieren - Autoattack läuft automatisch im Takt der Waffen-Angriffsgeschwindigkeit - Ohne Waffe: 1 Schaden, 1.5s Cooldown, 1.5 Reichweite - Mit Waffe: Schaden = zufällig zwischen min/max, Speed und Range von der Waffe ### Schadenstypen (geplant) - **PHYSICAL** – normaler Schaden - **FIRE** – Feuerschaden (z.B. Magier) - **ICE** – Eisschaden - **LIGHTNING** – Blitzschaden - **POISON** – Giftschaden (Schaden über Zeit geplant) --- ## Geplante Features ### Klassen-System Jede Klasse hat unterschiedliche Basis-Stats und verfügbare Skills: | Klasse | Stärken | Waffen | |---|---|---| | Krieger | Hohe HP, hoher physischer Schaden | Schwert, Axt, Streitkolben | | Magier | Hoher Magieschaden, niedrige HP | Stab | | Bogenschütze | Hohe Reichweite, schnelle Angriffe | Bogen, Dolch | ### Weitere geplante Features - [ ] Klassen-System mit unterschiedlichen Stats - [ ] Mana-System für Magier - [ ] Spell-System (Feuerbälle etc.) - [ ] Inventar und Ausrüstungssystem - [ ] Waffen aufheben und ausrüsten - [ ] Erfahrungspunkte und Level-Up - [ ] Mehrere Gegnertypen - [ ] Dungeon-Level mit Wänden und Räumen - [ ] Multiplayer (bis zu 6 Spieler) - [ ] Gegner-Respawn - [ ] Boss-Gegner --- ## Projektstruktur ``` DungeonCrawler/ ├── assets/ # 3D-Modelle (Kenney GLB) ├── resources/ │ ├── attack.gd # Attack-Ressourcen-Klasse │ └── weapon.gd # Weapon-Ressourcen-Klasse ├── basic_attack.tres # Autoattack-Ressource ├── camera_pivot.gd # Kamera-Script ├── enemy.gd # Gegner-Script ├── enemy.tscn # Gegner-Scene ├── hud.gd # HUD-Script ├── hud.tscn # HUD-Scene ├── player.gd # Spieler-Script ├── player.tscn # Spieler-Scene ├── world.gd # Welt-Script ├── world.tscn # Hauptszene └── PROJEKTDOKU.md # Diese Dokumentation ```