# Death and blood effects - Zombie idle/attack/death use AudioStreamPlayer3D with attenuation (unit_size 4m, max_distance 30m). - No original `zo_death*.wav` is available. `zombie/zo_pain2.wav` is deliberately used for the death event; living hurt uses `zo_pain1.wav`. - Player death uses the original Steam `valve/sound/player/pl_pain7.wav`, copied unchanged. This is a pain vocal assigned to death, not a dedicated death sample. - Corpses remain until scene restart. Collision and AI stop, death animation retains its final pose. Window-entry tweens are cancelled on death. - Blood: GPUParticles3D burst and original generated RGBA decal mask. Decals project downward onto static world layer 1. Characters/viewmodel are on visual layer 2. At most 160 stains retained; bodies have no automatic deletion. - Player death is idempotent: gun hidden, shooting/mouse-look blocked, camera falls to 0.22m and rolls; black fade finishes after 2.5s. Restart label is above black overlay. R reloads scene. ## Verification Use Godot 4.7.1: ``` godot --headless --path . --script res://tools/test_death_effects.gd godot --path . --script res://tools/test_death_effects.gd ``` Tests assert corpse survival beyond old four-second lifetime, collision off, one decal, death only once, disabled shooting, camera at floor height and fade alpha 1. Graphical test writes `/tmp/zombie-blood.png`, `/tmp/zombie-corpse.png`, `/tmp/zombie-death-fade.png`. Valve assets are local extracted copyrighted game data, not licensed for redistribution by this project.