Splatter: thinner wound blood + a bare rally tap also serves
- Bleed dialed way down — thin, steady trickles (a fine spurt from the neck stump) instead of the gushing cloud; tighter spread, shorter-lived, capped low. - Rapid serve is easier to reach: a plain tap MID-RALLY now fires at the auto-target too (not only flick/drag/hold), so you can pump the screen while the last ball's still up. Pretoss keeps its toss ritual; the duel stays tennis. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
df4eaf6e39
commit
52ba796d32
2 files changed
+15
-11
No files matched your search
@@ -573,6 +573,9 @@ export function keyPressed(code) {
|
|||||||
&& (G.phase === 'pretoss' || G.phase === 'rally')) {
|
&& (G.phase === 'pretoss' || G.phase === 'rally')) {
|
||||||
const flick = takeFlickAim();
|
const flick = takeFlickAim();
|
||||||
if (flick) { dragServe(flick); return; } // dragServe handles GUN (burst) and the live-ball banish
|
if (flick) { dragServe(flick); return; } // dragServe handles GUN (burst) and the live-ball banish
|
||||||
|
// a bare tap MID-RALLY serves at the auto-target too — pump the screen to keep the balls
|
||||||
|
// coming while the last one's still up. (pretoss keeps its toss ritual, handled below.)
|
||||||
|
if (G.phase === 'rally') { dragServe(null); return; }
|
||||||
}
|
}
|
||||||
if (G.phase === 'pretoss' && score.server === 'P') {
|
if (G.phase === 'pretoss' && score.server === 'P') {
|
||||||
if (tryGunBurst()) return; // GUN selected: the serve gesture pops a burst, no ball
|
if (tryGunBurst()) return; // GUN selected: the serve gesture pops a burst, no ball
|
||||||
|
|||||||
+12
-11
@@ -155,21 +155,22 @@ export function explode(x, z) {
|
|||||||
if (G.idleT - G.lastOrderT > 3) { voice('order', 0.35); G.lastOrderT = G.idleT; } // the umpire loses composure
|
if (G.idleT - G.lastOrderT > 3) { voice('order', 0.35); G.lastOrderT = G.idleT; } // the umpire loses composure
|
||||||
}
|
}
|
||||||
|
|
||||||
// wounded zombies gush blood — continuously and absurdly — from every open wound. Anchors are
|
// wounded zombies bleed from every open wound — a thin, steady trickle (a spurt from the
|
||||||
// approximate body-height offsets (drawStatic never mirrors, so a fixed side stays put); the
|
// neck stump on the headless boss). Anchors are approximate body-height offsets [x, y, rise,
|
||||||
// parts loop's gravity arcs each spurt into a spray. Bounded so the geyser self-regulates.
|
// count] (drawStatic never mirrors, so a fixed side stays put); the parts loop's gravity arcs
|
||||||
|
// each drop. Tight spread keeps the streams thin; bounded so it stays subtle.
|
||||||
function bleed(zb) {
|
function bleed(zb) {
|
||||||
if (parts.length > 520) return; // absurd, but not unbounded
|
if (parts.length > 220) return;
|
||||||
let wounds;
|
let wounds;
|
||||||
if (zb.variant === 'g' && zb.hp < TUNE.bruteHp) wounds = [[-0.3, 1.95, 3.2]]; // brute: torn-off arm
|
if (zb.variant === 'g' && zb.hp < TUNE.bruteHp) wounds = [[-0.3, 1.95, 1.8, 1]]; // brute: torn-off arm
|
||||||
else if (zb.variant === 'r' && zb.hp <= 1) wounds = [[0.05, 1.5, 6.5], [0.4, 1.15, 2.6]]; // headless: neck geyser + torn arm
|
else if (zb.variant === 'r' && zb.hp <= 1) wounds = [[0.05, 1.5, 3.6, 1], [0.4, 1.15, 1.4, 1]]; // headless: neck spurt + torn arm
|
||||||
else if (zb.variant === 'r' && zb.hp === 2) wounds = [[0.4, 1.2, 3]]; // racket: torn-off arm
|
else if (zb.variant === 'r' && zb.hp === 2) wounds = [[0.4, 1.2, 1.6, 1]]; // racket: torn-off arm
|
||||||
else return;
|
else return;
|
||||||
for (const w of wounds)
|
for (const w of wounds)
|
||||||
for (let k = 0; k < 4; k++) parts.push({
|
for (let k = 0; k < w[3]; k++) parts.push({
|
||||||
x: zb.x + w[0] + (Math.random() * 2 - 1) * 0.12, y: w[1] + (Math.random() * 2 - 1) * 0.1, z: zb.z + (Math.random() * 2 - 1) * 0.12,
|
x: zb.x + w[0] + (Math.random() * 2 - 1) * 0.05, y: w[1] + (Math.random() * 2 - 1) * 0.04, z: zb.z + (Math.random() * 2 - 1) * 0.05,
|
||||||
vx: (Math.random() * 2 - 1) * 1.9, vy: w[2] * (0.5 + Math.random() * 0.7), vz: (Math.random() * 2 - 1) * 1.4,
|
vx: (Math.random() * 2 - 1) * 0.6, vy: w[2] * (0.6 + Math.random() * 0.6), vz: (Math.random() * 2 - 1) * 0.5,
|
||||||
t: 0.5 + Math.random() * 0.6, dark: Math.random() < 0.45 });
|
t: 0.4 + Math.random() * 0.35, dark: Math.random() < 0.5 });
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updateZombies(dt) {
|
export function updateZombies(dt) {
|
||||||
|
|||||||
Reference in new issue
Block a user