feat: Wirbelwind implementiert (Krieger Level 20)

- AoE Drehangriff, Radius 3.5m, kostet 40 Wut
- Schaden: 15-25 + 70% Stärke an alle Gegner im Radius
- Kein Slow — pure DPS, Counterpart zu Tektonischem Schlag
- Cooldown 6s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Andre 2026-03-19 21:34:59 +01:00
parent 76e17cefa9
commit c81ba9760b

View file

@ -152,6 +152,9 @@ const BLUTRAUSCH_RAGE: int = 25
const BLUTRAUSCH_DOT_DURATION: float = 8.0 # Blutungsdauer in Sekunden const BLUTRAUSCH_DOT_DURATION: float = 8.0 # Blutungsdauer in Sekunden
const BLUTRAUSCH_DOT_INTERVAL: float = 1.0 # Schaden alle 1s const BLUTRAUSCH_DOT_INTERVAL: float = 1.0 # Schaden alle 1s
const BLUTRAUSCH_DOT_DAMAGE: int = 4 # Schaden pro Tick const BLUTRAUSCH_DOT_DAMAGE: int = 4 # Schaden pro Tick
const WIRBELWIND_COOLDOWN: float = 6.0
const WIRBELWIND_RADIUS: float = 3.5
const WIRBELWIND_RAGE: int = 40
# Cast System # Cast System
var is_casting: bool = false var is_casting: bool = false
@ -293,6 +296,15 @@ func _init_class_skills():
"cooldown": TEKTONISCHER_SCHLAG_COOLDOWN, "cooldown": TEKTONISCHER_SCHLAG_COOLDOWN,
"cast_time": 0.0, "cast_time": 0.0,
}) })
if level >= 20:
available_skills.append({
"id": "wirbelwind",
"name": "Wirbelwind",
"description": "Drehangriff mit voller Wucht. Trifft alle Gegner in der Nähe für hohen Schaden.",
"icon": "res://icons/wirbelwind_icon.svg",
"cooldown": WIRBELWIND_COOLDOWN,
"cast_time": 0.0,
})
if level >= 15: if level >= 15:
available_skills.append({ available_skills.append({
"id": "blutrausch", "id": "blutrausch",
@ -664,6 +676,10 @@ func execute_skill(skill_id: String):
if current_resource < BLUTRAUSCH_RAGE: if current_resource < BLUTRAUSCH_RAGE:
print("Zu wenig Wut!") print("Zu wenig Wut!")
return return
if skill_id == "wirbelwind":
if current_resource < WIRBELWIND_RAGE:
print("Zu wenig Wut!")
return
# Cast-Zeit? # Cast-Zeit?
if skill["cast_time"] > 0: if skill["cast_time"] > 0:
@ -702,6 +718,8 @@ func _apply_skill(skill_id: String):
_do_durchbeissen() _do_durchbeissen()
"blutrausch": "blutrausch":
_do_blutrausch() _do_blutrausch()
"wirbelwind":
_do_wirbelwind()
# ─── Autoattack ─────────────────────────────────────────────── # ─── Autoattack ───────────────────────────────────────────────
@ -770,6 +788,30 @@ func _do_tektonischer_schlag():
trigger_global_cooldown() trigger_global_cooldown()
print("Tektonischer Schlag! %d Gegner getroffen" % hit_count) print("Tektonischer Schlag! %d Gegner getroffen" % hit_count)
# ─── Wirbelwind ───────────────────────────────────────────────
func _do_wirbelwind():
if not _spend_rage(WIRBELWIND_RAGE):
return
var space_state = get_world_3d().direct_space_state
var shape = SphereShape3D.new()
shape.radius = WIRBELWIND_RADIUS
var query = PhysicsShapeQueryParameters3D.new()
query.shape = shape
query.transform = global_transform
query.exclude = [self]
var hits = space_state.intersect_shape(query)
var hit_count = 0
for hit in hits:
var body = hit.collider
if body.has_method("take_damage"):
var damage = randi_range(15, 25) + int(strength * 0.7)
body.take_damage(damage)
hit_count += 1
skill_cooldowns["wirbelwind"] = WIRBELWIND_COOLDOWN
trigger_global_cooldown()
print("Wirbelwind! %d Gegner getroffen" % hit_count)
# ─── Durchbeißen / Schildwall / Trotz ──────────────────────── # ─── Durchbeißen / Schildwall / Trotz ────────────────────────
# ─── Blutrausch ─────────────────────────────────────────────── # ─── Blutrausch ───────────────────────────────────────────────