La Smarronata del 1993: dal vecchio cartello sul lampione del Ponte sulla Sieve, coi ricordi di Andrea, la macchina del tempo porta alla festa delle castagne degli alpini sotto il ponte, col bruciatore delle bruciate, gli stand e il tendone giallo con le tavolate; dalle scene del viaggio la mappa non porta più via; tolte le battute sull'altezza del Taglia (Andrea)

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 12:13:55 +01:00
co-authored by Claude Opus 5.5
parent f57a91ca74
commit b07a1e4941
56 changed files with 457 additions and 24 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+153 -17
View File
@@ -675,9 +675,9 @@
"file": "andrea-c716ab2381.mp3", "file": "andrea-c716ab2381.mp3",
"sec": 7.95 "sec": 7.95
}, },
"andrea|Il Taglia. Io sono un metro e ottanta, e lui mi guarda dall'alto. Con la Condor in mano.": { "andrea|Il Taglia, con la Condor in mano. Chi lo batte al campone si merita un monumento.": {
"file": "andrea-f1663e7892.mp3", "file": "andrea-5446c68481.mp3",
"sec": 8.52 "sec": 6.49
}, },
"andrea|Il giardino coi cedri e le panchine. All'ombra, d'estate, ci si fa la siesta a turno.": { "andrea|Il giardino coi cedri e le panchine. All'ombra, d'estate, ci si fa la siesta a turno.": {
"file": "andrea-4fd811d0c7.mp3", "file": "andrea-4fd811d0c7.mp3",
@@ -959,6 +959,30 @@
"file": "andrea-bd95e65b0a.mp3", "file": "andrea-bd95e65b0a.mp3",
"sec": 4.77 "sec": 4.77
}, },
"andrea|Qui sotto, fra il fiume e la strada del campo, gli alpini facevano la Smarronata.": {
"file": "andrea-2db7b567b2.mp3",
"sec": 5.13
},
"andrea|E la macchina del tempo è sempre lì, con la data pronta.": {
"file": "andrea-11b952f96c.mp3",
"sec": 3.63
},
"andrea|Sul lampione di là c'è ancora un cartello vecchio, mezzo sbiadito.": {
"file": "andrea-111de2600b.mp3",
"sec": 4.01
},
"andrea|Lo lascio dov'è: dopo tutti questi anni, ormai fa parte del lampione.": {
"file": "andrea-4289b64bed.mp3",
"sec": 4.32
},
"andrea|La macchina del tempo, ferma sulla strada del ponte. Sul cruscotto c'è già ottobre 1993.": {
"file": "andrea-0bbc838103.mp3",
"sec": 7.34
},
"andrea|Imposto: 17 ottobre 1993, la domenica della Smarronata.": {
"file": "andrea-4f096d64c3.mp3",
"sec": 6.91
},
"andrea|Il tabernacolo del ponte, con l'Annunciazione di Antonio Berti, scultore sanpierino.": { "andrea|Il tabernacolo del ponte, con l'Annunciazione di Antonio Berti, scultore sanpierino.": {
"file": "andrea-9c0935dc77.mp3", "file": "andrea-9c0935dc77.mp3",
"sec": 5.48 "sec": 5.48
@@ -1899,6 +1923,98 @@
"file": "andrea-d32e1a2a87.mp3", "file": "andrea-d32e1a2a87.mp3",
"sec": 3.45 "sec": 3.45
}, },
"andrea|Si torna nel 2007. Arrivederci, alpini: e grazie delle bruciate.": {
"file": "andrea-2e2fac8aa0.mp3",
"sec": 5.63
},
"andrea|Tutto come prima. Solo le mani, che sanno ancora di castagne.": {
"file": "andrea-57348082a9.mp3",
"sec": 4.44
},
"andrea|La Smarronata! Ottobre 1993. Si sente già l'odore delle bruciate.": {
"file": "andrea-5b5dfdda13.mp3",
"sec": 7.47
},
"andrea|Il cilindro delle bruciate: si gira la manovella sopra il fuoco, e le castagne ci ballano dentro.": {
"file": "andrea-2603f4db73.mp3",
"sec": 5.93
},
"andrea|Si gira piano, sennò le bruciate si bruciano davvero.": {
"file": "andrea-675499a046.mp3",
"sec": 3.07
},
"andrea|Una bruciata calda, presa al volo. Scotta! Ma è buonissima.": {
"file": "andrea-ebba87b32c.mp3",
"sec": 5.87
},
"andrea|Sacchi di marroni del Mugello, pronti per il fuoco.": {
"file": "andrea-5b86ac34b1.mp3",
"sec": 3.57
},
"andrea|Un sacco intero? Gli alpini mi rincorrono fino al ponte.": {
"file": "andrea-f55b749652.mp3",
"sec": 4.21
},
"andrea|La legna per il fuoco delle bruciate. Ce n'è per tutto il pomeriggio.": {
"file": "andrea-f940d1cc48.mp3",
"sec": 5.31
},
"andrea|La Smarronata del Gruppo Alpini di San Piero a Sieve: 16 e 17 ottobre.": {
"file": "andrea-c6d4afc066.mp3",
"sec": 5.44
},
"andrea|Il tendone giallo, con le tavolate e le tovaglie verdi.": {
"file": "andrea-fd9e22e01d.mp3",
"sec": 4.32
},
"andrea|Di lassù si torna alla strada del ponte, e alla macchina del tempo.": {
"file": "andrea-27b72f57db.mp3",
"sec": 3.86
},
"andrea|La polenta degli alpini, tagliata col filo sul tagliere.": {
"file": "andrea-e573417a26.mp3",
"sec": 3.47
},
"andrea|Una fetta di polenta. Ci vorrebbe un po' di sugo, ma va bene così.": {
"file": "andrea-72789f9ee3.mp3",
"sec": 5.58
},
"andrea|Il vino degli alpini, nelle damigiane impagliate. Sul cartello c'era scritto «gratis».": {
"file": "andrea-3bec487739.mp3",
"sec": 6.52
},
"andrea|Un bicchiere solo. Poi mi tocca guidare la macchina del tempo.": {
"file": "andrea-9a8297b134.mp3",
"sec": 3.95
},
"andrea|Il ponte sulla Sieve, visto da sotto. Di lassù, nel 2007, la macchina del tempo mi aspetta.": {
"file": "andrea-e55ffcecfb.mp3",
"sec": 7.28
},
"andrea|Tovaglie verdi di carta, le tovagliette, l'acqua e il vino. Fra poco qui non ci sarà un posto libero.": {
"file": "andrea-9476090301.mp3",
"sec": 7.86
},
"andrea|Mi siedo un attimo ad aspettare la polenta.": {
"file": "andrea-8dbfa9b147.mp3",
"sec": 2.32
},
"andrea|...Macché: sono le dieci e mezzo, la polenta arriva a mezzogiorno.": {
"file": "andrea-2a97a4b77d.mp3",
"sec": 4.23
},
"andrea|In fondo il bancone, coi piatti in pila e il vino. Da lì escono i vassoi.": {
"file": "andrea-6bf926ffc1.mp3",
"sec": 5.62
},
"andrea|Altre tavolate, apparecchiate fino in fondo. Gli alpini fanno le cose in grande.": {
"file": "andrea-f2486823cd.mp3",
"sec": 5.75
},
"andrea|Le sedie di legno, quelle pieghevoli che si chiudono sulle dita.": {
"file": "andrea-40a22ff371.mp3",
"sec": 4.27
},
"andrea|Si torna nel 2007. Ciao Vannino, ciao Pierino.": { "andrea|Si torna nel 2007. Ciao Vannino, ciao Pierino.": {
"file": "andrea-baa95acb36.mp3", "file": "andrea-baa95acb36.mp3",
"sec": 4.41 "sec": 4.41
@@ -2883,10 +2999,6 @@
"file": "andrea-595df0a426.mp3", "file": "andrea-595df0a426.mp3",
"sec": 2.23 "sec": 2.23
}, },
"andrea|Ma quanto sei alto, Taglia?": {
"file": "andrea-01ecdf3ed8.mp3",
"sec": 1.96
},
"andrea|Ci si vede, Taglia.": { "andrea|Ci si vede, Taglia.": {
"file": "andrea-5d4d911c06.mp3", "file": "andrea-5d4d911c06.mp3",
"sec": 1.42 "sec": 1.42
@@ -2915,10 +3027,6 @@
"file": "taglia-c00be84faf.mp3", "file": "taglia-c00be84faf.mp3",
"sec": 11.54 "sec": 11.54
}, },
"taglia|Abbastanza da vedere i pallini arrivare prima di te.": {
"file": "taglia-d99c875252.mp3",
"sec": 2.57
},
"taglia|Alla bona: ti faccio vedere dove arriva il pallino.": { "taglia|Alla bona: ti faccio vedere dove arriva il pallino.": {
"file": "taglia-757564b65e.mp3", "file": "taglia-757564b65e.mp3",
"sec": 3.12 "sec": 3.12
@@ -3419,13 +3527,13 @@
"file": "taglia-1e6660932d.mp3", "file": "taglia-1e6660932d.mp3",
"sec": 3.34 "sec": 3.34
}, },
"andrea|Il Taglia, su un piede solo, è più alto di me su due.": { "andrea|Il Taglia salta come un grillo. Io come un sacco di patate.": {
"file": "andrea-3ed6165062.mp3", "file": "andrea-94ed1f96a3.mp3",
"sec": 3.31 "sec": 4.54
}, },
"taglia|È questione di gambe lunghe.": { "taglia|È questione di allenamento.": {
"file": "taglia-9782816264.mp3", "file": "taglia-1335b18858.mp3",
"sec": 1.71 "sec": 1.43
}, },
"andrea|Il gesso lo lascio lì. Ci giocherà qualche bambino, che è più in allenamento di me.": { "andrea|Il gesso lo lascio lì. Ci giocherà qualche bambino, che è più in allenamento di me.": {
"file": "andrea-356a1afe8d.mp3", "file": "andrea-356a1afe8d.mp3",
@@ -3487,6 +3595,34 @@
"file": "andrea-69337973d0.mp3", "file": "andrea-69337973d0.mp3",
"sec": 5.94 "sec": 5.94
}, },
"andrea|La Smarronata del 1993! Gli alpini, sotto il ponte: le bruciate, la polenta, il vino, la fanfara...": {
"file": "andrea-4266372068.mp3",
"sec": 10.39
},
"andrea|La macchina del tempo è sempre lì che aspetta.": {
"file": "andrea-81cad76b69.mp3",
"sec": 3.49
},
"andrea|Quanto lo aspettavo, da ragazzino, quel fine settimana di ottobre!": {
"file": "andrea-db4aff7e68.mp3",
"sec": 4.49
},
"andrea|Gli alpini che sfilavano per il paese suonando, col cappello e la penna: che bellezza.": {
"file": "andrea-8b02e08972.mp3",
"sec": 6.38
},
"andrea|E a scuola ci facevano disegnare i ricci delle castagne. Un ricordo meraviglioso.": {
"file": "andrea-2bf6da91a7.mp3",
"sec": 5.69
},
"andrea|Quanto ci tornerei, a una Smarronata!": {
"file": "andrea-5deea0bdab.mp3",
"sec": 2.59
},
"andrea|Ma quella... è la macchina del tempo!": {
"file": "andrea-b4b5507b6e.mp3",
"sec": 2.78
},
"andrea|Mahhh... è l'INGORGOOOO!!!": { "andrea|Mahhh... è l'INGORGOOOO!!!": {
"file": "andrea-5694cd3779.mp3", "file": "andrea-5694cd3779.mp3",
"sec": 3.74 "sec": 3.74
Binary file not shown.
Binary file not shown.
Binary file not shown.
+12
View File
@@ -99,6 +99,18 @@ si segna qui con la data e il punto di `src/story/story.js` dove sta; le persone
- **Le mutande del Barone** (Andrea, 25 ottobre; ci pensa ancora): si ritrovano e gli si riportano, e lui in cambio - **Le mutande del Barone** (Andrea, 25 ottobre; ci pensa ancora): si ritrovano e gli si riportano, e lui in cambio
dà qualcosa che serve alla storia. Proposta: appese come trofeo all'insegna del circolino di Campomigliaio dà qualcosa che serve alla storia. Proposta: appese come trofeo all'insegna del circolino di Campomigliaio
(l'Arcu ci scherza), e in cambio due pile per la torcia della casetta, scarica. (l'Arcu ci scherza), e in cambio due pile per la torcia della casetta, scarica.
- **La Smarronata del 1993** (Andrea, 31 ottobre): la festa delle castagne del Gruppo Alpini di San Piero (16-17 ottobre
1993, con la Misericordia; manifesto col riccio-alpino col cappello e la penna). Una macchina del tempo anche per lì.
Il posto: sotto, a diritto al ponte di Sieve, fra il fiume e la strada per andare al campo. Gli alpini col cappello
e la penna e le camicie a quadri; le «bruciate» fatte nel cilindro a rete girato sul fuoco; gli stand gialli
(vino gratis, polenta, col bollino dell'Ass. Naz. Alpini); lo striscione «Gli Alpini di S. Piero a Sieve
ringraziano». Dal programma: marroni, bruciate, merenda o cena alla maniera antica, ristorante alpino, dolci casalinghi,
polenta, crostini, ciambelline, ballo liscio, folklore alpini, fanfara, cori alpini, messa al campo la domenica.
Sotto il tendone giallo le tavolate: tavole lunghe con le tovaglie verdi, le tovagliette di carta, le bottiglie
d'acqua, le sedie di legno (seconda scena, dentro il tendone).
Partenza (Andrea, 31 ottobre): dal Ponte sulla Sieve, guardando lo spiazzo lì sotto Andrea ricorda e compare la
macchina del tempo, come col 1997 dall'Arcu.
Riferimenti (fotogrammi di un video del 1993 e il manifesto) in `assets/raw/smarronata/`.
- **Il sito del Barone e il Muro del Sanpierino** (Andrea, 31 ottobre): parlando col Barone, «Hai visto cosa hanno - **Il sito del Barone e il Muro del Sanpierino** (Andrea, 31 ottobre): parlando col Barone, «Hai visto cosa hanno
scritto oggi sul muro del Sanpierino?»; si apre la home di sanpiero50037.it (schermata in arrivo da Andrea) e scritto oggi sul muro del Sanpierino?»; si apre la home di sanpiero50037.it (schermata in arrivo da Andrea) e
cliccando sul Muro si apre il muro. Il muro vero è riesumato in `~/Workspaces/misc/spswall` (solo in locale). cliccando sul Muro si apre il muro. Il muro vero è riesumato in `~/Workspaces/misc/spswall` (solo in locale).
+12
View File
@@ -18,6 +18,18 @@ Online su 50037.manzolo.it tutto fino agli effetti ambientali di Codex. Aperto,
## Dove siamo arrivati ## Dove siamo arrivati
- **La Smarronata del 1993 (31 ottobre)**: la festa delle castagne degli alpini di San Piero, sotto il ponte sulla
Sieve fra il fiume e la strada del campo. Al Ponte sulla Sieve, sul lampione di destra, un vecchio cartello: si apre
ingrandito (primo piano `manifesto_smarronata`, Codex dal manifesto vero, senza lo sponsor), e toccandolo i ricordi di
Andrea (l'attesa, gli alpini che sfilavano suonando, i ricci disegnati a scuola) e la macchina del tempo. Il
cruscotto (17/10/1993), la partenza sulla strada del ponte, e la festa (`smarronata_1993`: il bruciatore delle
bruciate, i sacchi, la legna, gli stand della polenta e del vino, il cartellone, il ponte) e dentro il tendone giallo
(`smarronata_tendone`, le tavolate). Sfondi di Codex dai fotogrammi del video del 1993 (`assets/raw/smarronata/`).
«Torna al 2007» o la scaletta riportano al ponte, e la macchina sparisce. Dalle scene del viaggio (anche il
Barrettino) la mappa non porta più via. Test in `story.test.mjs`, prova `npm run browser:smarronata`.
[DA ANDREA] le battute; gli alpini (sprite di Codex: col cappello e la penna, la camicia a quadri); un minigioco
delle bruciate (girare il cilindro sul fuoco); la fanfara.
- **Il Taglia (31 ottobre)**: tolte le battute sulla sua altezza (Baldoria: non gli fa piacere).
- **Il Muro del Sanpierino sul telefonino del Barone (31 ottobre)**: il Barone ora ha un dialogo a scelte (le - **Il Muro del Sanpierino sul telefonino del Barone (31 ottobre)**: il Barone ora ha un dialogo a scelte (le
mutande, oppure «Hai visto cosa c'era sul muro del Sanpierino?»). Col muro tira fuori il telefonino, che sale dal mutande, oppure «Hai visto cosa c'era sul muro del Sanpierino?»). Col muro tira fuori il telefonino, che sale dal
basso come il libro (primo piano `muro_sanpierino`, `src/engine/telefono.js`, telefonino di Codex); nello schermo la basso come il libro (primo piano `muro_sanpierino`, `src/engine/telefono.js`, telefonino di Codex); nello schermo la
+1
View File
@@ -16,6 +16,7 @@
"browser:tressette": "node tests/tressette.browser.mjs", "browser:tressette": "node tests/tressette.browser.mjs",
"browser:scopa": "node tests/scopa.browser.mjs", "browser:scopa": "node tests/scopa.browser.mjs",
"browser:briscola": "node tests/briscola.browser.mjs", "browser:briscola": "node tests/briscola.browser.mjs",
"browser:smarronata": "node tests/smarronata.browser.mjs",
"browser:telefono": "node tests/telefono.browser.mjs", "browser:telefono": "node tests/telefono.browser.mjs",
"browser:risveglio": "node tests/risveglio.browser.mjs", "browser:risveglio": "node tests/risveglio.browser.mjs",
"browser:effects": "node tests/ambient.browser.mjs", "browser:effects": "node tests/ambient.browser.mjs",
+2
View File
@@ -645,6 +645,8 @@ export class Game {
const sc = this.story.scenes[scene]; const sc = this.story.scenes[scene];
if (!sc?.map || !this.state.flags['visto:' + scene] || scene === this.state.scene) return false; if (!sc?.map || !this.state.flags['visto:' + scene] || scene === this.state.scene) return false;
if (this.busy || this.walking || this.dialogue || this.state.ended) return false; if (this.busy || this.walking || this.dialogue || this.state.ended) return false;
// Dalle scene del viaggio nel tempo (il Barrettino del 1997, la Smarronata) si torna solo con la macchina.
if (this.scene.viaggio) return false;
this.go(scene, sc.entry); this.go(scene, sc.entry);
return true; return true;
} }
+2 -2
View File
@@ -336,7 +336,7 @@ function openPause() {
voices.pause(); voices.pause();
ambience.configure({ active: false }); ambience.configure({ active: false });
command.reset(); command.reset();
$('pause-map').hidden = !!game.closeup || game.mapPlaces().length < 2; $('pause-map').hidden = !!game.closeup || !!game.scene?.viaggio || game.mapPlaces().length < 2;
$('pause').hidden = false; $('pause').hidden = false;
} }
function closePause() { function closePause() {
@@ -1090,7 +1090,7 @@ function updateUi() {
} }
if (mg || c?.events) for (const event of c.events.splice(0)) ambience.play(event.kind, { pan: 0, strength: event.power }); if (mg || c?.events) for (const event of c.events.splice(0)) ambience.play(event.kind, { pan: 0, strength: event.power });
// Il pulsante della mappa c'è solo in partita, fuori dai dialoghi, e quando c'è almeno un altro posto dove andare. // Il pulsante della mappa c'è solo in partita, fuori dai dialoghi, e quando c'è almeno un altro posto dove andare.
setProp($('map-button'), 'hidden', !running || !!game.dialogue || !!game.closeup || game.mapPlaces().length < 2); setProp($('map-button'), 'hidden', !running || !!game.dialogue || !!game.closeup || !!game.scene?.viaggio || game.mapPlaces().length < 2);
// «Torna al 2007»: nelle scene fuori dal tempo, finché non si parla con qualcuno. // «Torna al 2007»: nelle scene fuori dal tempo, finché non si parla con qualcuno.
setProp($('back-button'), 'hidden', !running || !game.scene?.back || !!game.dialogue || !!game.closeup); setProp($('back-button'), 'hidden', !running || !game.scene?.back || !!game.dialogue || !!game.closeup);
setText($('back-button'), game.scene?.back?.label ?? ''); setText($('back-button'), game.scene?.back?.label ?? '');
+189 -3
View File
@@ -60,6 +60,16 @@ const RITORNO_2007 = [
{ say: 'Riportata dove l\'ho presa. Se ti riviene voglia di pokerini, chiedi.', who: 'arcu', pose: 'explain' }, { say: 'Riportata dove l\'ho presa. Se ti riviene voglia di pokerini, chiedi.', who: 'arcu', pose: 'explain' },
]; ];
// Il ritorno dalla Smarronata del 1993 (Andrea, 31 ottobre): come dal 1997, la macchina riporta al Ponte sulla Sieve
// e sparisce; per tornarci si riguarda lo spiazzo sotto il ponte. [DA ANDREA: le battute]
const RITORNO_1993 = [
{ say: 'Si torna nel 2007. Arrivederci, alpini: e grazie delle bruciate.' },
{ go: 'ponte_sieve', at: [250, 320], face: 'down' },
{ closeup: 'arrivo_1993' },
{ unset: 'macchina_ponte' },
{ say: 'Tutto come prima. Solo le mani, che sanno ancora di castagne.' },
];
export const story = { export const story = {
title: 'La Leggenda del Regolo', title: 'La Leggenda del Regolo',
// La mappa (pulsante «Mappa»): ogni scena con `map: [x, y]` (percentuali della pianta) ci compare quando è // La mappa (pulsante «Mappa»): ogni scena con `map: [x, y]` (percentuali della pianta) ci compare quando è
@@ -278,6 +288,25 @@ export const story = {
date: '10/07/1997 18:30', date: '10/07/1997 18:30',
complete: [{ closeup: 'partenza' }], complete: [{ closeup: 'partenza' }],
}, },
// Il viaggio alla Smarronata del 1993, dal Ponte sulla Sieve (Andrea, 31 ottobre): lo stesso cruscotto, un'altra data;
// la partenza e l'arrivo sulla strada del ponte.
viaggio_1993: {
type: 'viaggio',
picture: 'assets/closeups/cruscotto-tempo.png',
display: [220, 158, 212, 62],
date: '17/10/1993 10:30',
complete: [{ closeup: 'partenza_1993' }],
},
partenza_1993: {
type: 'corsa', mode: 'parti', scene: 'ponte_sieve', ...MACCHINA_CORSA,
path: [[250, 350, 1], [325, 205, 0.05]],
complete: [{ go: 'smarronata_1993', at: [320, 330], face: 'up' }],
},
arrivo_1993: {
type: 'corsa', mode: 'arriva', scene: 'ponte_sieve', ...MACCHINA_CORSA,
path: [[150, 470, 2.2], [325, 205, 0.05]],
complete: [],
},
// La partenza vista da fuori: giù per Via Liguri Magelli, il fulmine e le sgommate di fuoco; e l'arrivo, al // La partenza vista da fuori: giù per Via Liguri Magelli, il fulmine e le sgommate di fuoco; e l'arrivo, al
// ritorno dal 1997 (Andrea, 30 ottobre; la macchina da dietro e davanti è di Codex). // ritorno dal 1997 (Andrea, 30 ottobre; la macchina da dietro e davanti è di Codex).
partenza: { partenza: {
@@ -327,7 +356,7 @@ export const story = {
picture: 'assets/closeups/campone-campana.png', picture: 'assets/closeups/campone-campana.png',
names: { player: 'Andrea', cpu: 'il Taglia' }, names: { player: 'Andrea', cpu: 'il Taglia' },
win: [{ say: 'Dalla 1 fino in cima, e ritorno. A ventisett\'anni, davanti alle poste.' }, { say: 'Te lo dico io: se ti vede qualcuno, domani lo sa tutto il paese.', who: 'taglia', pose: 'laugh' }, { set: 'campana_vinta' }], win: [{ say: 'Dalla 1 fino in cima, e ritorno. A ventisett\'anni, davanti alle poste.' }, { say: 'Te lo dico io: se ti vede qualcuno, domani lo sa tutto il paese.', who: 'taglia', pose: 'laugh' }, { set: 'campana_vinta' }],
lose: [{ say: 'Il Taglia, su un piede solo, è più alto di me su due.' }, { say: 'È questione di gambe lunghe.', who: 'taglia', pose: 'explain' }], lose: [{ say: 'Il Taglia salta come un grillo. Io come un sacco di patate.' }, { say: 'È questione di allenamento.', who: 'taglia', pose: 'explain' }],
draw: [], draw: [],
quit: [{ say: 'Il gesso lo lascio lì. Ci giocherà qualche bambino, che è più in allenamento di me.' }], quit: [{ say: 'Il gesso lo lascio lì. Ci giocherà qualche bambino, che è più in allenamento di me.' }],
}, },
@@ -391,6 +420,25 @@ export const story = {
{ say: 'La festa è domani: se nessuno lo ritrova, salta tutto. Tocca a me.' }, { say: 'La festa è domani: se nessuno lo ritrova, salta tutto. Tocca a me.' },
], ],
}, },
// Il vecchio cartello della Smarronata sul lampione del ponte, ingrandito (Codex dal manifesto vero del 1993, senza lo
// sponsor): toccandolo, il ricordo e la macchina del tempo. [DA ANDREA: le battute]
manifesto_smarronata: {
type: 'poster',
picture: 'assets/closeups/manifesto-smarronata.png',
hint: 'Tocca il cartello',
tap: [
{ say: 'La Smarronata del 1993! Gli alpini, sotto il ponte: le bruciate, la polenta, il vino, la fanfara...' },
{ if: 'macchina_ponte', then: [{ say: 'La macchina del tempo è sempre lì che aspetta.' }], else: [
// I ricordi di Andrea (31 ottobre).
{ say: 'Quanto lo aspettavo, da ragazzino, quel fine settimana di ottobre!' },
{ say: 'Gli alpini che sfilavano per il paese suonando, col cappello e la penna: che bellezza.' },
{ say: 'E a scuola ci facevano disegnare i ricci delle castagne. Un ricordo meraviglioso.' },
{ say: 'Quanto ci tornerei, a una Smarronata!' },
{ set: 'macchina_ponte' },
{ say: 'Ma quella... è la macchina del tempo!' },
] },
],
},
// L'incantesimo dell'Ingorgo Sonoro, dal manifesto in piazza: luci, cassa, lampo, ed è la notte della festa. // L'incantesimo dell'Ingorgo Sonoro, dal manifesto in piazza: luci, cassa, lampo, ed è la notte della festa.
ingorgo: { ingorgo: {
type: 'incanto', type: 'incanto',
@@ -1518,7 +1566,7 @@ export const story = {
{ {
id: 'taglia', name: 'il Taglia', box: [448, 224, 44, 72], at: [430, 306], face: 'right', default: 'talk', id: 'taglia', name: 'il Taglia', box: [448, 224, 44, 72], at: [430, 306], face: 'right', default: 'talk',
actions: { actions: {
look: [{ say: 'Il Taglia. Io sono un metro e ottanta, e lui mi guarda dall\'alto. Con la Condor in mano.' }], look: [{ say: 'Il Taglia, con la Condor in mano. Chi lo batte al campone si merita un monumento.' }],
talk: [{ dialogue: 'taglia' }], talk: [{ dialogue: 'taglia' }],
}, },
}, },
@@ -2031,7 +2079,41 @@ export const story = {
walk: [[0, 360], [0, 252], [180, 226], [300, 202], [342, 202], [380, 214], [330, 238], [330, 300], [460, 330], [640, 318], [640, 360]], walk: [[0, 360], [0, 252], [180, 226], [300, 202], [342, 202], [380, 214], [330, 238], [330, 300], [460, 330], [640, 318], [640, 360]],
depth: [[202, 0.4], [360, 1.15]], depth: [[202, 0.4], [360, 1.15]],
entry: [300, 350], entry: [300, 350],
// La macchina del tempo per la Smarronata del 1993, dopo il ricordo dello spiazzo (Andrea, 31 ottobre).
people: [{ who: 'macchina', when: 'macchina_ponte', at: [250, 300], size: 1.5, idle: 'stand', talk: [] }],
hotspots: [ hotspots: [
{
// Sotto, a diritto al ponte, fra il fiume e la strada per andare al campo: lì gli alpini facevano la
// Smarronata (Andrea, 31 ottobre). Guardandolo, Andrea ricorda, e compare la macchina del tempo.
// [DA ANDREA: le battute sono provvisorie]
id: 'spiazzo_smarronata', name: 'lo spiazzo sotto il ponte', box: [190, 196, 60, 20], at: [250, 236], face: 'up',
actions: {
look: [
{ say: 'Qui sotto, fra il fiume e la strada del campo, gli alpini facevano la Smarronata.' },
{ if: 'macchina_ponte', then: [{ say: 'E la macchina del tempo è sempre lì, con la data pronta.' }],
else: [{ say: 'Sul lampione di là c\'è ancora un cartello vecchio, mezzo sbiadito.' }] },
],
},
},
{
// Il vecchio cartello della Smarronata legato al lampione sopra lo spiazzo (Andrea, 31 ottobre): si apre
// ingrandito come il manifesto dell'Ingorgo, e toccandolo parte il ricordo e arriva la macchina del tempo.
id: 'cartello_smarronata', name: 'il vecchio cartello della Smarronata', box: [528, 168, 26, 32], at: [352, 212], face: 'right',
art: [{ rect: [535, 175, 12, 17], fill: '#e9e2cc' }, { rect: [536, 176, 10, 2], fill: '#2f6b32' }, { rect: [536, 179, 5, 5], fill: '#5b4a2a' },
{ rect: [542, 180, 4, 5], fill: '#2f6b32' }, { rect: [536, 186, 10, 1], fill: '#b7342e' }, { rect: [536, 188, 8, 1], fill: '#3b3b44' }],
actions: {
look: [{ closeup: 'manifesto_smarronata' }],
take: [{ say: 'Lo lascio dov\'è: dopo tutti questi anni, ormai fa parte del lampione.' }],
},
},
{
id: 'macchina_ponte', name: 'macchina del tempo', box: [190, 262, 120, 50], at: [250, 326], face: 'up', default: 'use', when: 'macchina_ponte',
actions: {
look: [{ say: 'La macchina del tempo, ferma sulla strada del ponte. Sul cruscotto c\'è già ottobre 1993.' }],
use: [{ say: 'Imposto: 17 ottobre 1993, la domenica della Smarronata.' }, { closeup: 'viaggio_1993' }],
open: [{ say: 'Imposto: 17 ottobre 1993, la domenica della Smarronata.' }, { closeup: 'viaggio_1993' }],
},
},
{ {
id: 'tabernacolo', name: 'tabernacolo dell\'Annunciazione', box: [138, 148, 36, 60], at: [180, 236], face: 'up', id: 'tabernacolo', name: 'tabernacolo dell\'Annunciazione', box: [138, 148, 36, 60], at: [180, 236], face: 'up',
actions: { actions: {
@@ -3600,6 +3682,111 @@ export const story = {
}, },
// Il Barrettino il 10 luglio 1997 alle 18:30 (Andrea, 29 ottobre; l'interno è una proposta di Codex, [DA ANDREA]): // Il Barrettino il 10 luglio 1997 alle 18:30 (Andrea, 29 ottobre; l'interno è una proposta di Codex, [DA ANDREA]):
// Vannino e Pierino Parigi con la tavola apparecchiata da poker. Si torna nel 2007 dalla porta. // Vannino e Pierino Parigi con la tavola apparecchiata da poker. Si torna nel 2007 dalla porta.
// La Smarronata del 1993 (Andrea, 31 ottobre): la festa delle castagne del Gruppo Alpini di San Piero, sotto il ponte
// sulla Sieve, fra il fiume e la strada del campo. Sfondo di Codex dai fotogrammi del video del 1993
// (assets/raw/smarronata). Ci si arriva solo con la macchina del tempo. [DA ANDREA: battute, alpini, minigioco]
smarronata_1993: {
name: 'La Smarronata, 17 ottobre 1993',
viaggio: true,
back: { label: 'Torna al 2007', actions: RITORNO_1993 },
background: 'assets/scenes/smarronata-1993.png',
walk: [[125, 245], [330, 232], [590, 238], [600, 262], [420, 292], [400, 360], [250, 360], [240, 276], [125, 276]],
depth: [[232, 0.55], [360, 1.2]],
entry: [320, 340],
enter: [{ if: '!visto_1993', then: [{ set: 'visto_1993' }, { say: 'La Smarronata! Ottobre 1993. Si sente già l\'odore delle bruciate.' }] }],
// Il cartellone sopra la festa, e i cartelli degli stand (come nel video: vino gratis, polenta).
art: [
{ text: 'LA SMARRONATA', at: [191, 134], size: 5, fill: '#2f6b32' },
{ text: 'ALPINI S.PIERO', at: [191, 144], size: 4, fill: '#b7342e' },
],
hotspots: [
{
id: 'bruciatore', name: 'il cilindro delle bruciate', box: [192, 188, 68, 54], at: [226, 262], face: 'up',
actions: {
look: [{ say: 'Il cilindro delle bruciate: si gira la manovella sopra il fuoco, e le castagne ci ballano dentro.' }],
use: [{ say: 'Si gira piano, sennò le bruciate si bruciano davvero.' }],
take: [{ say: 'Una bruciata calda, presa al volo. Scotta! Ma è buonissima.' }],
},
},
{
id: 'sacchi', name: 'i sacchi di castagne', box: [110, 202, 58, 40], at: [150, 262], face: 'up',
actions: { look: [{ say: 'Sacchi di marroni del Mugello, pronti per il fuoco.' }], take: [{ say: 'Un sacco intero? Gli alpini mi rincorrono fino al ponte.' }] },
},
{
id: 'legna', name: 'la catasta di legna', box: [262, 206, 48, 34], at: [286, 254], face: 'up',
actions: { look: [{ say: 'La legna per il fuoco delle bruciate. Ce n\'è per tutto il pomeriggio.' }] },
},
{
id: 'cartellone', name: 'il cartellone della festa', box: [153, 122, 76, 31], at: [226, 262], face: 'up',
actions: { look: [{ say: 'La Smarronata del Gruppo Alpini di San Piero a Sieve: 16 e 17 ottobre.' }] },
},
{
id: 'tendone', name: 'il tendone giallo', box: [330, 146, 260, 86], at: [430, 244], face: 'up', default: 'walk',
actions: {
look: [{ say: 'Il tendone giallo, con le tavolate e le tovaglie verdi.' }],
walk: [{ walk: [430, 244] }, { go: 'smarronata_tendone', at: [320, 340], face: 'up' }],
open: [{ walk: [430, 244] }, { go: 'smarronata_tendone', at: [320, 340], face: 'up' }],
},
},
{
// La scaletta del terrazzino, in basso a sinistra: si risale alla strada, e alla macchina del tempo.
id: 'scaletta_1993', name: 'su, alla strada: si torna nel 2007', box: [0, 280, 110, 80], at: [250, 340], face: 'left', default: 'walk',
actions: { look: [{ say: 'Di lassù si torna alla strada del ponte, e alla macchina del tempo.' }], walk: RITORNO_1993, open: RITORNO_1993 },
},
{
id: 'stand_polenta', name: 'lo stand della polenta', box: [504, 175, 74, 80], at: [520, 262], face: 'up',
actions: { look: [{ say: 'La polenta degli alpini, tagliata col filo sul tagliere.' }], take: [{ say: 'Una fetta di polenta. Ci vorrebbe un po\' di sugo, ma va bene così.' }] },
},
{
id: 'stand_vino', name: 'lo stand del vino', box: [579, 158, 61, 104], at: [570, 262], face: 'right',
actions: {
look: [{ say: 'Il vino degli alpini, nelle damigiane impagliate. Sul cartello c\'era scritto «gratis».' }],
take: [{ say: 'Un bicchiere solo. Poi mi tocca guidare la macchina del tempo.' }],
},
},
{
id: 'ponte_1993', name: 'il ponte sulla Sieve', box: [14, 132, 186, 76], at: [150, 262], face: 'up',
actions: { look: [{ say: 'Il ponte sulla Sieve, visto da sotto. Di lassù, nel 2007, la macchina del tempo mi aspetta.' }] },
},
],
},
// Sotto il tendone giallo della Smarronata: le tavolate con le tovaglie verdi (Andrea, 31 ottobre; sfondo di Codex
// dal fotogramma del video del 1993). [DA ANDREA: le battute, e chi c'era a tavola]
smarronata_tendone: {
name: 'Il tendone della Smarronata, 1993',
viaggio: true,
back: { label: 'Torna al 2007', actions: RITORNO_1993 },
background: 'assets/scenes/smarronata-tendone.png',
indoor: true,
walk: [[0, 360], [0, 262], [150, 262], [165, 175], [215, 175], [225, 262], [400, 262], [640, 270], [640, 360]],
depth: [[175, 0.5], [360, 1.3]],
entry: [320, 340],
hotspots: [
{
id: 'tavolata', name: 'la tavolata', box: [218, 140, 182, 122], at: [320, 290], face: 'up',
actions: {
look: [{ say: 'Tovaglie verdi di carta, le tovagliette, l\'acqua e il vino. Fra poco qui non ci sarà un posto libero.' }],
use: [{ say: 'Mi siedo un attimo ad aspettare la polenta.' }, { say: '...Macché: sono le dieci e mezzo, la polenta arriva a mezzogiorno.' }],
},
},
{
id: 'bancone_tendone', name: 'il bancone', box: [330, 132, 170, 34], at: [300, 270], face: 'up',
actions: { look: [{ say: 'In fondo il bancone, coi piatti in pila e il vino. Da lì escono i vassoi.' }] },
},
{
id: 'tavole_sinistra', name: 'le tavole', box: [0, 140, 160, 112], at: [120, 290], face: 'left',
actions: { look: [{ say: 'Altre tavolate, apparecchiate fino in fondo. Gli alpini fanno le cose in grande.' }] },
},
{
id: 'tavole_destra', name: 'le tavole', box: [400, 140, 240, 128], at: [480, 300], face: 'right',
actions: { look: [{ say: 'Le sedie di legno, quelle pieghevoli che si chiudono sulle dita.' }] },
},
{
id: 'fuori_tendone', name: 'fuori, alla festa', box: [0, 336, 640, 24], at: [320, 354], default: 'walk',
actions: { walk: [{ go: 'smarronata_1993', at: [430, 250], face: 'down' }], open: [{ go: 'smarronata_1993', at: [430, 250], face: 'down' }] },
},
],
},
barrettino_1997: { barrettino_1997: {
name: 'Il Barrettino, 10 luglio 1997', name: 'Il Barrettino, 10 luglio 1997',
// Ci si arriva solo con la macchina del tempo: niente mappa, niente strade (la porta riporta nel 2007). // Ci si arriva solo con la macchina del tempo: niente mappa, niente strade (la porta riporta nel 2007).
@@ -4193,7 +4380,6 @@ export const story = {
{ say: 'A campana? Alla nostra età?', who: 'taglia', pose: 'laugh' }, { say: 'A campana? Alla nostra età?', who: 'taglia', pose: 'laugh' },
{ say: 'Va bene: il gesso ce l\'ho in tasca, il sassolino lo scelgo io. Sul vialetto, dalla 1 alla 8, e chi pesta la riga passa la mano.', who: 'taglia', pose: 'explain' }, { say: 'Va bene: il gesso ce l\'ho in tasca, il sassolino lo scelgo io. Sul vialetto, dalla 1 alla 8, e chi pesta la riga passa la mano.', who: 'taglia', pose: 'explain' },
] }, ] },
{ text: 'Ma quanto sei alto, Taglia?', then: [{ say: 'Abbastanza da vedere i pallini arrivare prima di te.', who: 'taglia', pose: 'laugh' }] },
{ text: 'Ci si vede, Taglia.', next: 'end' }, { text: 'Ci si vede, Taglia.', next: 'end' },
], ],
}, },
+57
View File
@@ -0,0 +1,57 @@
// La Smarronata del 1993 nel browser vero: lo spiazzo sotto il Ponte sulla Sieve, la macchina del tempo, il cruscotto,
// la festa sotto il ponte, il tendone e il ritorno al 2007. npm run browser:smarronata — schermate in /tmp/regolo-smarronata.
import { chromium } from 'playwright';
import { mkdirSync } from 'node:fs';
import assert from 'node:assert/strict';
import { staticServer } from './helpers.mjs';
const out = process.env.OUT ?? '/tmp/regolo-smarronata';
mkdirSync(out, { recursive: true });
const server = await staticServer();
let browser;
const errors = [];
try {
browser = await chromium.launch({ args: ['--autoplay-policy=no-user-gesture-required', '--use-gl=angle', '--use-angle=swiftshader', '--enable-unsafe-swiftshader'] });
const page = await browser.newPage({ viewport: { width: 1280, height: 860 } });
page.on('pageerror', e => { errors.push(e.message); console.log('ERR', e.message); });
await page.goto(`http://127.0.0.1:${server.port}/`);
await page.click('#splash'); await page.click('#new-game'); await page.click('#rione [data-rione="campomigliaio"]'); await page.click('#skip-intro');
const settle = () => page.evaluate(async () => { const { settle } = await import('/tests/helpers.mjs'); settle(game); });
// Si salta tutto quello che si può: viaggio, corse, battute (il tempo nel gioco va veloce).
const run = () => page.evaluate(async () => {
const { settle } = await import('/tests/helpers.mjs');
for (let i = 0; i < 3000 && (game.closeup || game.speech || game.queue.length || game.walking); i++) { if (game.speech) game.skip(); else game.update(0.1); }
settle(game);
});
await run();
await page.evaluate(() => { game.go('ponte_sieve', [250, 320]); });
await run();
// Il cartello sul lampione si apre ingrandito; un tocco, e arriva la macchina.
await page.evaluate(() => game.act('look', 'cartello_smarronata'));
await page.waitForFunction(() => game.closeup?.id === 'manifesto_smarronata' && game.closeup.t > 0.6, null, { timeout: 15000 });
await page.screenshot({ path: `${out}/0-cartello.png` });
await page.evaluate(() => game.closeupTap());
await run();
assert.ok(await page.evaluate(() => game.state.flags.macchina_ponte), 'la macchina compare');
await page.waitForTimeout(800);
await page.screenshot({ path: `${out}/1-ponte-macchina.png` });
await page.evaluate(() => game.act('use', 'macchina_ponte'));
await page.waitForFunction(() => game.closeup?.id === 'viaggio_1993', null, { timeout: 15000 });
await page.waitForTimeout(1500);
await page.screenshot({ path: `${out}/2-cruscotto.png` });
await run();
assert.equal(await page.evaluate(() => game.state.scene), 'smarronata_1993');
await page.waitForTimeout(1200);
await page.screenshot({ path: `${out}/3-smarronata.png` });
await page.evaluate(() => game.act('walk', 'tendone'));
await run();
assert.equal(await page.evaluate(() => game.state.scene), 'smarronata_tendone');
await page.waitForTimeout(1200);
await page.screenshot({ path: `${out}/4-tendone.png` });
await page.evaluate(() => game.goBack());
await run();
assert.equal(await page.evaluate(() => game.state.scene), 'ponte_sieve');
assert.ok(!await page.evaluate(() => game.state.flags.macchina_ponte), 'tornati, la macchina sparisce');
assert.deepEqual(errors, []);
console.log(`ok: schermate in ${out}`);
} finally { await browser?.close(); server.kill(); }
+29 -2
View File
@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
import { backgroundOrder } from '../src/engine/render.js'; import { backgroundOrder } from '../src/engine/render.js';
import { story } from '../src/story/story.js'; import { story } from '../src/story/story.js';
import { solution } from '../src/story/solution.js'; import { solution } from '../src/story/solution.js';
import { Game, VERBS, checkSave, introText, shuffledCredits, matchPlace, reelPictures } from '../src/engine/game.js'; import { Game, VERBS, checkSave, introText, shuffledCredits, matchPlace, reelPictures, POSTER_READY } from '../src/engine/game.js';
import { inside } from '../src/engine/geometry.js'; import { inside } from '../src/engine/geometry.js';
import { existsSync, readFileSync } from 'node:fs'; import { existsSync, readFileSync } from 'node:fs';
import { settle, exploreTorch } from './helpers.mjs'; import { settle, exploreTorch } from './helpers.mjs';
@@ -350,7 +350,8 @@ test('le strade vanno e tornano: niente sensi unici, e ogni posto si raggiunge d
const text = JSON.stringify(story); const text = JSON.stringify(story);
assert.ok(text.includes(`"go":"${id}"`), `${id}: nessun viaggio ci porta`); assert.ok(text.includes(`"go":"${id}"`), `${id}: nessun viaggio ci porta`);
const back = JSON.stringify(sc.hotspots).match(/"go":"([a-z_0-9]+)"/g)?.map(m => m.slice(6, -1)) ?? []; const back = JSON.stringify(sc.hotspots).match(/"go":"([a-z_0-9]+)"/g)?.map(m => m.slice(6, -1)) ?? [];
assert.ok(back.some(b => seen.has(b)), `${id}: non si torna indietro`); // Si torna in una scena vera, o in un'altra del viaggio (il tendone della Smarronata riporta alla festa).
assert.ok(back.some(b => seen.has(b) || story.scenes[b]?.viaggio), `${id}: non si torna indietro`);
} }
}); });
@@ -691,3 +692,29 @@ test('i file che il Docker copia sono leggibili da tutti (nginx gira con un altr
dirs.forEach(walk); dirs.forEach(walk);
assert.deepEqual(closed, [], 'file non leggibili da nginx (chmod 644)'); assert.deepEqual(closed, [], 'file non leggibili da nginx (chmod 644)');
}); });
test('la Smarronata del 1993: lo spiazzo sotto il ponte fa comparire la macchina, il viaggio, la festa, il tendone e il ritorno', () => {
const g = new Game(story);
settle(g); g.go('ponte_sieve', [250, 320]); settle(g);
assert.ok(!g.hotspot('macchina_ponte'), 'prima del ricordo la macchina non c\'è');
// Il vecchio cartello sul lampione: si apre ingrandito, e toccandolo arriva la macchina del tempo.
g.act('look', 'cartello_smarronata'); settle(g);
assert.equal(g.closeup?.id, 'manifesto_smarronata');
g.update(POSTER_READY); assert.ok(g.closeupTap()); settle(g);
assert.ok(g.state.flags.macchina_ponte && g.hotspot('macchina_ponte'));
g.act('use', 'macchina_ponte'); settle(g);
assert.equal(g.closeup?.id, 'viaggio_1993');
// Il cruscotto, poi la partenza vista da fuori: due primi piani di fila.
for (let i = 0; i < 4000 && (g.closeup || g.queue.length || g.speech); i++) { g.skip(); g.update(0.05); }
settle(g);
assert.equal(g.state.scene, 'smarronata_1993');
assert.ok(!g.travel('piazza'), 'dal 1993 la mappa non porta via: si torna con la macchina');
g.act('walk', 'tendone'); settle(g);
assert.equal(g.state.scene, 'smarronata_tendone');
g.act('walk', 'fuori_tendone'); settle(g);
assert.equal(g.state.scene, 'smarronata_1993');
assert.ok(g.goBack()); for (let i = 0; i < 4000 && (g.closeup || g.queue.length || g.speech); i++) { g.skip(); g.update(0.05); }
settle(g);
assert.equal(g.state.scene, 'ponte_sieve');
assert.ok(!g.state.flags.macchina_ponte, 'tornati nel 2007 la macchina sparisce');
});