Il risveglio non rallenta più il gioco: la nebbia è lo sfondo sfocato disegnato sopra, senza filtri (ctx.filter e il filter CSS sulla tela facevano andare a passo d'uomo tutto, anche dopo), e l'iframe del muro c'è solo a muro aperto; le prove nel browser aspettano la fine del risveglio e l'avvio del gioco

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GiECd9RWGMKV7n3K1mdy8T
This commit is contained in:
2026-10-31 10:59:03 +01:00
co-authored by Claude Opus 5.5
parent c5953f04c0
commit b9bd50c8c3
8 changed files with 60 additions and 41 deletions
+2
View File
@@ -56,6 +56,8 @@ try {
// Il cartello d'apertura, poi da solo il titolo.
assert.match(await page.textContent('#splash'), /Manzolo\s*\(Poca\)\s*Art\s*Presents/);
assert.ok(await page.isHidden('#title'), 'il titolo aspetta la fine del cartello');
// Il gioco parte con un import() dinamico, che l'evento load della pagina non aspetta.
await page.waitForFunction(() => window.jingle, null, { timeout: 10000 });
assert.match(await page.evaluate(() => jingle.src), /assets\/audio\/cartello\.mp3\?v=\d+\.\d+\.\d+$/, 'la musichetta del cartello');
assert.equal(await page.evaluate(() => music.want), null, 'la musica del titolo aspetta il titolo');
await page.waitForTimeout(2800);
+4 -3
View File
@@ -8,9 +8,10 @@ export async function checkMultimedia(browser, port, out, errors) {
await page.click('#splash'); await page.click('#new-game');
await page.click('[data-rione="campomigliaio"]'); await page.click('#skip-intro');
const settle = async () => {
for (let i = 0; i < 200; i++) {
for (let i = 0; i < 600; i++) {
if (await page.evaluate(() => !!game.speech)) await page.keyboard.press('Space');
if (await page.evaluate(() => game.closeup || game.idle)) return;
// Il risveglio dell'inizio è un primo piano che va avanti da solo: si aspetta che finisca.
if (await page.evaluate(() => (game.closeup && game.story.closeups[game.closeup.id].type !== 'risveglio') || game.idle)) return;
await page.waitForTimeout(30);
}
throw new Error('la sequenza non si ferma');
@@ -56,10 +57,10 @@ export async function checkMultimedia(browser, port, out, errors) {
await page.waitForFunction(() => game.closeup?.id === 'fessura');
};
await openTorch();
const saved = await page.evaluate(() => game.savable());
await page.keyboard.press('Escape'); await settle();
assert.equal(await page.evaluate(() => game.state.ended), false, 'uscire presto non vince');
await openTorch();
const saved = await page.evaluate(() => game.savable());
await page.click('#pause-button');
const age = await page.evaluate(() => game.closeup.age);
await page.waitForTimeout(150);
+1 -1
View File
@@ -51,7 +51,7 @@ try {
// «Home» torna alla home del sito sul telefonino.
await frame.locator('.pagerbutton', { hasText: 'Home' }).first().click();
await page.waitForFunction(() => game.closeup.step === 'site', null, { timeout: 5000 });
await page.waitForSelector('#muro', { state: 'hidden', timeout: 3000 });
await page.waitForSelector('#muro', { state: 'detached', timeout: 3000 });
assert.deepEqual(errors, []);
console.log(`ok: schermate in ${out}`);
} finally { await browser?.close(); server.kill(); }