The friend across the net is no shambler: he just bleeds, and then he bursts
Two retest findings, one root: the death match borrowed the roster's body. Gone — nothing spawns, no walk-on card, the living opponent is the whole picture. His damage reads as blood (bleedO: an anchor per point taken this game, love to game point, thin drops as ever), the game point bursts him where he stands, and IT RISES AGAIN brings him back clean. The heal beat became a card in netplay — a modal freezes this world while the other phone's keeps moving. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c0b59eee90
commit
4c47295a73
6 files changed
+95
-68
No files matched your search
@@ -1283,26 +1283,37 @@ function freshNetDeath(side) {
|
||||
netMsg({ t: 'start', side, death: true });
|
||||
}
|
||||
|
||||
test('netplay death match: the host\'s pick rebuilds the court on pairing', () => {
|
||||
test('netplay death match: the host\'s pick rebuilds the court on pairing — friend, not roster body', () => {
|
||||
freshNetDeath('B');
|
||||
assert.ok(G.net && G.net.ready && G.net.death, 'the wire survives the mode swap');
|
||||
assert.equal(G.mode, 'splatter');
|
||||
assert.ok(G.match && G.interlude, 'the match machinery owns the court');
|
||||
assert.ok(zombies.some(z => z.variant === 'r'), 'the body is on court');
|
||||
assert.ok(!zombies.some(z => z.variant === 'r'), 'NO roster body — the friend IS the opponent');
|
||||
assert.equal(G.hideO, false, 'the living opponent is the picture');
|
||||
assert.equal(G.card, null, 'and no SHAMBLER walk-on card');
|
||||
assert.equal(score.server, 'O', 'the host serves first here too');
|
||||
assert.equal(G.modal, null, 'no popup may eat the first remote serve');
|
||||
});
|
||||
|
||||
test('netplay death match: their verdicts wound the body, mine cost blood — no echo', () => {
|
||||
test('netplay death match: their lost points read as BLOOD, and the game bursts the body', () => {
|
||||
freshNetDeath('A');
|
||||
const rz = zombies.find(z => z.variant === 'r');
|
||||
const hp0 = rz.hp;
|
||||
netMsg({ t: 'pt', win: 'you' }); // their phone judged: my ball beat them
|
||||
assert.ok(rz.hp < hp0, 'my point tears at the body');
|
||||
assert.equal(score.pts[0], 1, 'the point banks — bleedO rides this ramp');
|
||||
assert.ok(!netTest.sent.some(m => m.t === 'pt'), 'applying a verdict does not echo one back');
|
||||
const blood = G.hp;
|
||||
netMsg({ t: 'pt', win: 'me' }); // their phone judged: their ball beat me
|
||||
assert.equal(G.hp, blood - 1, 'their point draws my blood');
|
||||
score.pts = [3, 0]; // game point against them: the flow at full ramp
|
||||
const before = parts.length;
|
||||
for (let i = 0; i < 30; i++) update(DT);
|
||||
assert.ok(parts.length > before, 'a deeply wounded friend bleeds dynamically (bleedO)');
|
||||
netMsg({ t: 'pt', win: 'you' }); // the game-winning point
|
||||
assert.equal(score.games[0], 1, 'game banked');
|
||||
assert.deepEqual(score.pts, [0, 0], 'the blood ramp resets with the body');
|
||||
assert.equal(G.hideO, true, 'the burst took the body');
|
||||
for (let i = 0; i < 60 * 25 && G.hideO; i++) update(DT);
|
||||
assert.equal(G.hideO, false, 'the mop beat hands the court back and the friend rises again');
|
||||
assert.equal(G.match.opp, 1, 'no roster climb — the same friend, every game');
|
||||
});
|
||||
|
||||
test('netplay death match: the receiver judges — an untouched winner draws blood and crosses the wire', () => {
|
||||
@@ -1329,18 +1340,9 @@ test('netplay death match: bleeding out is said on the wire, and the other phone
|
||||
assert.equal(G.match.felled, 3, 'felled = the games that actually burst the body');
|
||||
});
|
||||
|
||||
test('netplay death match: the same friend walks back on — no roster climb', () => {
|
||||
freshNetDeath('A');
|
||||
const opp0 = G.match.opp;
|
||||
for (let i = 0; i < 4; i++) netMsg({ t: 'pt', win: 'you' }); // four points = the game = the burst
|
||||
assert.equal(G.match.opp, opp0, 'the opponent number holds through the game win');
|
||||
for (let i = 0; i < 60 * 25 && !zombies.some(z => z.variant === 'r'); i++) update(DT);
|
||||
assert.ok(zombies.some(z => z.variant === 'r'), 'the body returns after the mop beat');
|
||||
assert.equal(G.match.opp, opp0, 'as the same opponent, not the roster\'s next rung');
|
||||
});
|
||||
|
||||
test('death match: the game-winning body bleeds out on the ground before it bursts', () => {
|
||||
freshNetDeath('A');
|
||||
test('death match (solo): the game-winning body bleeds out on the ground before it bursts', () => {
|
||||
assert.ok(_startMatch(), 'solo match on a clean court');
|
||||
G.modal = null; G.modalQ.length = 0;
|
||||
const rz = zombies.find(z => z.variant === 'r');
|
||||
G.matchFall = { t: 0.3, from: 1, vx: 0, x0: rz.x, kill: true }; // landed, prone, pre-burst
|
||||
const before = parts.length;
|
||||
|
||||
Reference in new issue
Block a user