From 00e9f7c4d7095a04e083319179a2c5145677ba2f Mon Sep 17 00:00:00 2001 From: Andrea Manzi Date: Sun, 1 Nov 2026 00:21:49 +0100 Subject: [PATCH] =?UTF-8?q?Il=20flipper:=20chiuso=20il=20canale=20dietro?= =?UTF-8?q?=20la=20Pieve=20fra=20la=20parete=20e=20il=20dorso=20dei=20bers?= =?UTF-8?q?agli,=20dove=20la=20pallina=20scendeva=20dritta=20nell'uscita?= =?UTF-8?q?=20sinistra=20(Andrea:=20=C2=ABa=20sinistra=20esce=20troppo=20f?= =?UTF-8?q?acile=C2=BB);=20due=20raccordi=20inclinati,=20disegnati=20come?= =?UTF-8?q?=20le=20altre=20sponde;=20test=20(Andrea)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01GiECd9RWGMKV7n3K1mdy8T --- docs/STATO.md | 3 ++- src/engine/flipper.js | 4 ++++ tests/flipper.test.mjs | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/STATO.md b/docs/STATO.md index c661848..6ec37e2 100644 --- a/docs/STATO.md +++ b/docs/STATO.md @@ -70,7 +70,8 @@ Online su 50037.manzolo.it tutto fino agli effetti ambientali di Codex. Aperto, - Completare una serie di bersagli alza il moltiplicatore jackpot fino a ×3, azzerato alla perdita di una vita. Restano PONTI (+50.000 alternando le rampe entro 12 secondi), PALIO (+30.000), respingenti, bersagli e Regolo. Traguardi 60.000/120.000/200.000: una pallina premio una sola volta, vittoria acquisita anche uscendo prima. - - Uscite laterali da 14/12 pixel, corsie di ritorno alle palette più ampie. Valvola inclinata alla corsia di + - Uscite laterali da 14/12 pixel, corsie di ritorno alle palette più ampie. Il canale di 10 pixel dietro la + Pieve, che portava la pallina dritta nell'uscita sinistra, è chiuso da due raccordi inclinati (1 novembre). Valvola inclinata alla corsia di lancio: il lancio passa, i ritorni dal campo vengono deviati a sinistra. Ogni pallina ha contatti, scia e anti-incastro propri; urti fra palline, palette mosse una sola volta per passo. Pausa ferma anche i timer. - Luci che scorrono sulle rampe attive, frecce e spie 1/3–2/3–LOCK, rampa SUPER che si alza, fasci luminosi, diff --git a/src/engine/flipper.js b/src/engine/flipper.js index 7f2a7fc..7158b27 100644 --- a/src/engine/flipper.js +++ b/src/engine/flipper.js @@ -54,6 +54,10 @@ export function layout() { walls.push(seg([404, 246], [404, 284]), seg([404, 284], [378, 290]), seg([404, 246], [378, 290], { sling: true })); // I bersagli a caduta: la Pieve a sinistra, la torre a destra, con la sponda dietro. walls.push(seg([210, 146], [210, 198]), seg([429, 146], [429, 198])); + // Dietro la Pieve, fra la parete e la sponda, restavano 10 pixel: la pallina (larga 9) che scivolava lungo la + // parete sinistra ci entrava e scendeva dritta nell'uscita laterale (Andrea: «a sinistra esce troppo facile»). + // A destra il canale è di 3 pixel e non esiste. Due raccordi inclinati lo chiudono sopra e sotto. + walls.push(seg([200, 136], [210, 146], { e: 0.5 }), seg([210, 198], [200, 208], { e: 0.5 })); const targets = []; for (const [bank, x] of [['pieve', 216], ['torre', 423]]) for (let i = 0; i < 3; i++) targets.push({ bank, i, a: [x, 150 + i * 16], b: [x, 162 + i * 16], down: false, touching: false }); const bumpers = [[281, 120], [360, 120], [320, 153]].map(([x, y]) => ({ x, y, r: 12, hit: 0, touching: false })); diff --git a/tests/flipper.test.mjs b/tests/flipper.test.mjs index f89dccb..1a8c9b3 100644 --- a/tests/flipper.test.mjs +++ b/tests/flipper.test.mjs @@ -459,3 +459,13 @@ test('al River: un clic sul bar (o «Usa», «Apri»), il livello, la partita; u g.choose(g.options().findIndex(o => o.text === 'A fassi male.')); settle(g); assert.equal(g.closeup?.level, 'male'); }); + +test('dietro la Pieve non c\'è più il canale che portava dritto all\'uscita sinistra (Andrea: «a sinistra esce troppo facile»)', () => { + const c = m.newFlipper(31); m.launch(c, 0.8); c.saveUntil = 0; + // Una pallina che scivola lungo la parete sinistra, sopra la Pieve: viene rimandata in campo, non nel canale. + put(c, { x: 205, y: 120, vx: 0, vy: 150, ramp: null }); + let inChannel = false; + for (let i = 0; i < 120; i++) { m.update(c, 1 / 60); if (c.ball.x < 210 && c.ball.y > 146 && c.ball.y < 198) inChannel = true; } + assert.ok(!inChannel, 'mai fra la parete e il dorso dei bersagli'); + assert.ok(c.ball.x > 210 || c.ball.y < 146, `in campo (${Math.round(c.ball.x)}, ${Math.round(c.ball.y)})`); +});