Add blood decals, gore, mobile HUD, web start gate + touch/perf tests

Remove tools/fstest.html scratch page used to probe browser
fullscreen/orientation APIs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EznnY8rH2dXhtono1kwsXg
This commit is contained in:
2026-09-04 14:07:57 +03:00
parent 01d6ecf475
commit 981ebf1910
32 changed files with 1536 additions and 113 deletions
+6 -3
View File
@@ -116,9 +116,10 @@ func _ready() -> void:
# The smash/leap clips end held at full scale (Siim only ramped the claw clips back
# down), so snap each effect back to 0 when its clip finishes — keeps them one-shot.
_fx_player.animation_finished.connect(_on_fx_finished)
# Web (Mali/ANGLE) can't run Compatibility vertex-skinning; rebuild the bear as
# non-skinned bone-attached pieces there. Desktop keeps smooth GPU skinning.
if OS.has_feature("web"):
# Native GPU skinning by default (the Mali/ANGLE invisible-skinning bug is fixed in the 4.7
# web templates). The bear is a single dense organic mesh, so the rigid-skin fallback tears
# seam holes as it animates — another reason native is the default. See rigid_skin_enabled().
if Controls.rigid_skin_enabled():
RigidSkin.convert_tree(self)
if _anim_player:
_anim_idle = _resolve_anim(["IDLE_ON4LEGS", "IDLE"])
@@ -883,6 +884,7 @@ func _take_hit(hit_dir: Vector3, strength: float) -> void:
hit_dir.y = 0.0
hit_dir = hit_dir.normalized()
_blood_burst.burst(global_position + Vector3(0.0, 1.4, 0.0), hit_dir)
Gore.splat(global_position, hit_dir, 1.1)
_shake(clampf(strength / 15.0, 0.4, 1.0))
if _hp <= 0:
_die(hit_dir)
@@ -918,6 +920,7 @@ func _die(hit_dir: Vector3) -> void:
_hit_area.monitoring = false
velocity = Vector3.ZERO
_blood_burst.burst(global_position + Vector3(0.0, 1.4, 0.0), hit_dir)
Gore.splat(global_position, hit_dir, 1.4)
_play(_anim_death)
# No death clip on the rig — topple the beast onto its side (about the hit direction,
# so it falls the way it was struck) and sink it away, then free.