diff --git a/PROJEKTDOKU.md b/PROJEKTDOKU.md new file mode 100644 index 0000000..5b714c5 --- /dev/null +++ b/PROJEKTDOKU.md @@ -0,0 +1,254 @@ +# 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 +```