The host names the stakes: classic tennis, or the death match
Three chips under VS A FRIEND — the host's pick rides the room and the start message rebuilds both courts on pairing. In the death match your opponent IS the zombie: their lost points tear its wound stages, their won points draw your blood, and bleeding out crosses the wire as the other phone's win. The same receiver-is-judge verdicts drive the match machinery through resolveInterlude, so the fall, the mop beat and the burst come along unmodified. New: gushProne — the game-winning body bleeds out on the ground, from prone-height anchors, until it bursts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5e80c4e69d
commit
c0b59eee90
10 files changed
+241
-26
No files matched your search
@@ -907,6 +907,20 @@ const BLEED = {
|
||||
g: [[-0.30, 1.95, 1.10], [0.42, 1.90, 1.00], [0.05, 2.35, 2.00], [0.00, 1.20, 0.70]], // arm, both, head, gut
|
||||
k: [[-0.36, 2.30, 1.15], [0.50, 2.24, 1.05], [0.06, 2.80, 2.10], [0.00, 1.50, 0.75]], // the same, a head higher
|
||||
};
|
||||
// the kill fall's bleed-out: low anchors around the corpse itself, thin drops but many — the flow
|
||||
// reads as the body emptying, not as a heavier version of the standing trickle (blood stays thin,
|
||||
// the settled rule; this is more EMISSIONS from where the body actually is)
|
||||
function gushProne(zb) {
|
||||
if (parts.length > 150) return;
|
||||
for (let i = 0; i < TUNE.killGush; i++) {
|
||||
if (Math.random() > 0.75) continue;
|
||||
parts.push({
|
||||
x: zb.x + (Math.random() * 2 - 1) * 0.55, y: 0.22 + Math.random() * 0.3, z: zb.z + (Math.random() * 2 - 1) * 0.3,
|
||||
vx: (Math.random() * 2 - 1) * 0.9, vy: 0.5 + Math.random() * 1.1, vz: (Math.random() * 2 - 1) * 0.5,
|
||||
t: 0.35 + Math.random() * 0.35, dark: Math.random() < 0.55 });
|
||||
}
|
||||
}
|
||||
|
||||
function bleed(zb) {
|
||||
if (parts.length > 90) return;
|
||||
let wounds;
|
||||
@@ -1025,6 +1039,11 @@ export function updateZombies(dt) {
|
||||
// be, two metres above itself. Oliver: "this looks like blood fountains midair." The falling body
|
||||
// is the one G.matchFall owns; every other body on court bleeds as before.
|
||||
if (!(G.matchFall && zb.variant === 'r')) bleed(zb); // open wounds bleed every frame they're standing
|
||||
// ...but a game-winning body BLEEDS OUT where it lies: once the drop has landed it, the prone
|
||||
// hold gushes from ground height until the burst (Oliver: "increased dynamic bleeding before
|
||||
// exploding"). Deliberately NOT bleed() — its anchors are standing heights, and a corpse
|
||||
// spraying from where its neck used to be is the "blood fountains midair" bug fixed above.
|
||||
else if (G.matchFall.kill && G.matchFall.t > 0.25) gushProne(zb);
|
||||
|
||||
if (zb.shieldT > 0) zb.shieldT -= dt; // staggered chair comes back up when this runs out
|
||||
if (zb.hitT > 0) zb.hitT -= dt; // boss contact cooldown (see TUNE.bossHitCool)
|
||||
|
||||
Reference in new issue
Block a user