5c1e881a53
Bull charge damage: - Tunnel-proof swept detection (prev→now segment) for matador gore and bear ram, so a 66 m/s dash no longer skips clean over the thin HitArea. - Horns-first cone (bull_gore_arc): running into an enemy only wounds it when charging roughly at it, not a sideways brush. - Dash is a committed lunge: bypasses the horns cone AND the survival roll, so a dash connect is a guaranteed kill. Cruise charges keep a speed-scaled roll (mat_charge_pierce). Roll ability defers to its own pop (is_rolling guard). Bear: - Horns-first swept ram detection (edge-triggered: one charge = one wound); a tunnelling or point-blank charge now lands where body_entered wouldn't. - Overhead smash lane extends faster (0.1s) and further (20 m). - Leap slam launches the bull from anywhere in the circle (ring_frac 0). - Removed stray-quote syntax errors that broke the script. Matador: - Collider-driven stab (BladeHitbox) with recovery beat + taunt-after-hit so it stops machine-gunning the bull. - A taunting matador answers a charge: spear from range, sword up close. Spear projectile masks the BULL layer so throws connect. Tests: matador_charge/stab/spear/taunt_react, bear_ram/hitbox/fx (+ unified _fake_bull stand-in). Trimmed verbose comments. Note: bear claw-emitter/death work is still WIP (3 bear_boss_test failures). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
26 lines
645 B
GDScript
26 lines
645 B
GDScript
extends CharacterBody3D
|
|
## Stand-in bull for the combat tests. As a TARGET it records hitbox callbacks (hits / knock-up);
|
|
## as an ATTACKER it exposes the ability-state interface (is_dashing / is_rolling) the matador and
|
|
## bear query. Ability flags default off = an ordinary charge.
|
|
|
|
var hits: int = 0
|
|
var knocked_up: float = 0.0
|
|
var dashing: bool = false
|
|
var rolling: bool = false
|
|
|
|
|
|
func take_sword_hit(_cause: String = "", _hit_pos: Vector3 = Vector3.ZERO) -> void:
|
|
hits += 1
|
|
|
|
|
|
func apply_knock_up(v: float) -> void:
|
|
knocked_up = maxf(knocked_up, v)
|
|
|
|
|
|
func is_dashing() -> bool:
|
|
return dashing
|
|
|
|
|
|
func is_rolling() -> bool:
|
|
return rolling
|