8 KiB
8 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) |
| 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
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