DungeonCrawler/PROJEKTDOKU.md
2026-03-15 00:38:53 +01:00

281 lines
8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) |
| 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 (19)
```
---
## 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
### Skills
#### Autoattack (Taste 1)
- **Schaden**: 1 (unbewaffnet) oder Waffenschaden
- **Cooldown**: 1.5s (unbewaffnet) oder Waffengeschwindigkeit
- **Reichweite**: 1.5 (unbewaffnet) oder Waffenreichweite
- **Icon**: Faust mit grünem Kreispfeil
- Manuell per Taste 1 starten oder automatisch per Rechtsklick
#### Heavy Strike (Taste 2)
- **Schaden**: 10-15 (zufällig)
- **Cooldown**: 3 Sekunden
- **Reichweite**: 2.0
- **Icon**: Schwert mit roten Schlaglinien
- Manuell aktivierbare starke Attacke für höheren Schaden
### UI & Icons
- Aktionsleiste zeigt Icons für Skills an
- Icons werden dynamisch beim Spielstart geladen
- Slot 1: Autoattack Icon (Faust)
- Slot 2: Heavy Strike Icon (Schwert)
- Slots 3-9: Verfügbar für weitere Skills
- **Mausklick**: Alle Slots sind per Maus klickbar
- **Cooldown-Anzeige**: Dunkle Überlagerung mit verbleibender Zeit in Sekunden
### 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
```