Il cartello d'apertura: online, su un sito mai visitato, il browser bloccava la musichetta senza un gesto (in locale no, ci si gioca da giorni); ora in quel caso il cartello aspetta un tocco («Tocca per cominciare») e poi parte coi suoi tempi. La Ghiacciomobile non ripete più le battute due volte (la scelta la dice già Andrea). Licenza (codice MIT, storia e grafica CC BY-NC-SA, eccezioni per persone vere, palio, Suno, voci XTTS con la CPML, font OFL, Wikipedia), README riscritto, scripts/check-public.sh e make check-public dentro make verify. Prove nel browser con l'autoplay permesso, più una per il caso bloccato

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A1dxvtsZx8NE9fwjXUNDBr
This commit is contained in:
2026-10-26 23:30:48 +01:00
co-authored by Claude Opus 5.5
parent c2cb9b0194
commit 0e7a50493c
21 changed files with 313 additions and 84 deletions
+12 -8
View File
@@ -946,7 +946,7 @@ $('restart').addEventListener('click', () => {
// incrociata, senza intravedere la piazza nel mezzo. I tempi partono da qui, non dal primo disegno della pagina.
const SPLASH_FADE = 4300, SPLASH_END = 5000;
function showSplash() {
let done = false, revealed = false;
let done = false, revealed = false, waiting = false;
const reveal = () => { if (!revealed) { revealed = true; showTitle(); $('splash').classList.add('out'); } };
const end = () => {
if (done) return;
@@ -954,18 +954,22 @@ function showSplash() {
$('splash').hidden = true;
jingle?.pause(); // saltato il cartello, si salta anche la musichetta
reveal();
removeEventListener('keydown', onKey);
};
// La musichetta: senza un gesto del giocatore il browser può non lasciarla partire, e allora il cartello resta muto.
const schedule = () => { setTimeout(reveal, SPLASH_FADE); setTimeout(end, SPLASH_END); };
// La musichetta: su un sito mai visitato il browser non la fa partire senza un gesto (in locale si fida, perché ci
// si gioca da giorni: Andrea, 26 ottobre, «online non sento gli effetti»). Allora il cartello aspetta il primo clic
// o tasto, che fa partire musichetta e conto alla rovescia; il secondo lo salta, come sempre.
const jingle = story.music?.splash ? new Audio(versioned(story.music.splash)) : null;
const begin = () => { waiting = false; $('splash').classList.remove('wait'); jingle.play().catch(() => {}); schedule(); };
const onKey = () => { if (waiting) begin(); else end(); };
if (jingle) {
jingle.volume = music.muted ? 0 : music.volume;
jingle.play().catch(() => {});
jingle.play().then(schedule).catch(() => { waiting = true; $('splash').classList.add('wait'); });
window.jingle = jingle; // per i test nel browser
}
setTimeout(reveal, SPLASH_FADE);
setTimeout(end, SPLASH_END);
$('splash').addEventListener('click', end);
addEventListener('keydown', end, { once: true });
} else schedule();
$('splash').addEventListener('click', () => { if (waiting) begin(); else end(); });
addEventListener('keydown', onKey);
}
for (const el of document.querySelectorAll('.version')) el.textContent = `v${VERSION}`;
+3 -2
View File
@@ -2197,8 +2197,9 @@ export const story = {
ghiacciomobile: {
nodes: {
start: { options: [
{ text: 'Mi ricordi come avete fatto quella volta a tornare illesi dopo aver lasciato una fiancata a Campolungo?', then: [{ say: 'Mi ricordi come avete fatto quella volta a tornare illesi dopo aver lasciato una fiancata a Campolungo?' }, { say: '...' }] },
{ text: 'Ho sentito dire dal Trappola che pensavi di poter attraversare i muri.', then: [{ say: 'Ho sentito dire dal Trappola che pensavi di poter attraversare i muri. Ti stimo tanto.' }, { say: '...' }] },
// La scelta la dice già Andrea (game.choose): dopo, solo il silenzio della macchina.
{ text: 'Mi ricordi come avete fatto quella volta a tornare illesi dopo aver lasciato una fiancata a Campolungo?', then: [{ say: '...' }] },
{ text: 'Ho sentito dire dal Trappola che pensavi di poter attraversare i muri.', say: 'Ho sentito dire dal Trappola che pensavi di poter attraversare i muri. Ti stimo tanto.', then: [{ say: '...' }] },
{ text: 'Riposa, Ghiacciomobile.', next: 'end' },
] },
},