feat: Durchbeißen implementiert (Krieger Level 10)
- Mit Schild im Offhand → Schildwall: 85% Schadensreduktion für 4s - Ohne Schild → Trotz: Schadensreduktion skaliert mit fehlendem HP (max 60%) - Cooldown 12s, kein Wut-Kosten (rein defensiv) - Schadensreduktion greift in take_damage() ein Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
217ce63a28
commit
c8ef56d311
1 changed files with 47 additions and 0 deletions
47
player.gd
47
player.gd
|
|
@ -92,6 +92,11 @@ const RAGE_DECAY_DELAY: float = 5.0 # Sekunden nach letztem Kampfkontakt
|
|||
const RAGE_DECAY_RATE: float = 10.0 # Wut pro Sekunde Verfall
|
||||
var _rage_decay_timer: float = 0.0
|
||||
|
||||
# Durchbeißen / Schildwall / Trotz
|
||||
var is_defending: bool = false
|
||||
var _defend_timer: float = 0.0
|
||||
var _defend_mode: String = "" # "schildwall" oder "trotz"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# EQUIPMENT
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
|
@ -132,6 +137,10 @@ const HEAVY_STRIKE_RANGE: float = 2.0
|
|||
const TEKTONISCHER_SCHLAG_COOLDOWN: float = 8.0
|
||||
const TEKTONISCHER_SCHLAG_RADIUS: float = 4.0
|
||||
const TEKTONISCHER_SCHLAG_RAGE: int = 30
|
||||
const DURCHBEISSEN_COOLDOWN: float = 12.0
|
||||
const DURCHBEISSEN_DURATION: float = 4.0
|
||||
const SCHILDWALL_BLOCK: float = 0.85 # 85% Schadensreduktion
|
||||
const TROTZ_MAX_REDUCTION: float = 0.60 # max 60% Reduktion bei 0 HP
|
||||
|
||||
# Cast System
|
||||
var is_casting: bool = false
|
||||
|
|
@ -273,6 +282,16 @@ func _init_class_skills():
|
|||
"cooldown": TEKTONISCHER_SCHLAG_COOLDOWN,
|
||||
"cast_time": 0.0,
|
||||
})
|
||||
if level >= 10:
|
||||
var has_offhand = equipment[Equipment.Slot.OFFHAND] != null
|
||||
available_skills.append({
|
||||
"id": "durchbeissen",
|
||||
"name": "Schildwall" if has_offhand else "Trotz",
|
||||
"description": "Schildwall: Blockiert großen Teil des eingehenden Schadens." if has_offhand else "Trotz: Schadensreduktion skaliert mit fehlendem Leben.",
|
||||
"icon": "res://icons/durchbeissen_icon.svg",
|
||||
"cooldown": DURCHBEISSEN_COOLDOWN,
|
||||
"cast_time": 0.0,
|
||||
})
|
||||
|
||||
CharacterClass.MainStat.INTELLIGENCE: # Magier
|
||||
available_skills.append({
|
||||
|
|
@ -428,6 +447,14 @@ func get_dps() -> float:
|
|||
|
||||
func take_damage(amount: int):
|
||||
var effective = max(1, amount - int(armor * 0.1))
|
||||
if is_defending:
|
||||
if _defend_mode == "schildwall":
|
||||
effective = int(effective * (1.0 - SCHILDWALL_BLOCK))
|
||||
elif _defend_mode == "trotz":
|
||||
var missing_hp = 1.0 - (float(current_hp) / float(max_hp))
|
||||
var reduction = missing_hp * TROTZ_MAX_REDUCTION
|
||||
effective = int(effective * (1.0 - reduction))
|
||||
effective = max(1, effective)
|
||||
current_hp = clamp(current_hp - effective, 0, max_hp)
|
||||
hud.update_health(current_hp, max_hp)
|
||||
_gain_rage(15)
|
||||
|
|
@ -647,6 +674,8 @@ func _apply_skill(skill_id: String):
|
|||
_do_frostbolt()
|
||||
"tektonischer_schlag":
|
||||
_do_tektonischer_schlag()
|
||||
"durchbeissen":
|
||||
_do_durchbeissen()
|
||||
|
||||
# ─── Autoattack ───────────────────────────────────────────────
|
||||
|
||||
|
|
@ -715,6 +744,17 @@ func _do_tektonischer_schlag():
|
|||
trigger_global_cooldown()
|
||||
print("Tektonischer Schlag! %d Gegner getroffen" % hit_count)
|
||||
|
||||
# ─── Durchbeißen / Schildwall / Trotz ────────────────────────
|
||||
|
||||
func _do_durchbeissen():
|
||||
var has_offhand = equipment[Equipment.Slot.OFFHAND] != null
|
||||
_defend_mode = "schildwall" if has_offhand else "trotz"
|
||||
is_defending = true
|
||||
_defend_timer = DURCHBEISSEN_DURATION
|
||||
skill_cooldowns["durchbeissen"] = DURCHBEISSEN_COOLDOWN
|
||||
trigger_global_cooldown()
|
||||
print("Durchbeißen! Modus: " + _defend_mode)
|
||||
|
||||
# ─── Quick Strike (Schurke) ───────────────────────────────────
|
||||
|
||||
func _do_quick_strike():
|
||||
|
|
@ -1037,6 +1077,13 @@ func _physics_process(delta):
|
|||
# ── Wut-Verfall ───────────────────────────────────────────
|
||||
_update_rage_decay(delta)
|
||||
|
||||
# ── Defend-Timer ──────────────────────────────────────────
|
||||
if is_defending:
|
||||
_defend_timer -= delta
|
||||
if _defend_timer <= 0.0:
|
||||
is_defending = false
|
||||
_defend_mode = ""
|
||||
|
||||
# ── Cooldowns herunterzählen ──────────────────────────────
|
||||
var gcd_was_active = global_cooldown > 0
|
||||
if global_cooldown > 0:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue