diff --git a/player.gd b/player.gd index 229f0a8..e8bd00e 100644 --- a/player.gd +++ b/player.gd @@ -152,6 +152,9 @@ const BLUTRAUSCH_RAGE: int = 25 const BLUTRAUSCH_DOT_DURATION: float = 8.0 # Blutungsdauer in Sekunden const BLUTRAUSCH_DOT_INTERVAL: float = 1.0 # Schaden alle 1s 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 var is_casting: bool = false @@ -293,6 +296,15 @@ func _init_class_skills(): "cooldown": TEKTONISCHER_SCHLAG_COOLDOWN, "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: available_skills.append({ "id": "blutrausch", @@ -664,6 +676,10 @@ func execute_skill(skill_id: String): if current_resource < BLUTRAUSCH_RAGE: print("Zu wenig Wut!") return + if skill_id == "wirbelwind": + if current_resource < WIRBELWIND_RAGE: + print("Zu wenig Wut!") + return # Cast-Zeit? if skill["cast_time"] > 0: @@ -702,6 +718,8 @@ func _apply_skill(skill_id: String): _do_durchbeissen() "blutrausch": _do_blutrausch() + "wirbelwind": + _do_wirbelwind() # ─── Autoattack ─────────────────────────────────────────────── @@ -770,6 +788,30 @@ func _do_tektonischer_schlag(): trigger_global_cooldown() 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 ──────────────────────── # ─── Blutrausch ───────────────────────────────────────────────