diff --git a/assets/closeups/manifesto-smarronata.png b/assets/closeups/manifesto-smarronata.png new file mode 100644 index 0000000..dd288b6 Binary files /dev/null and b/assets/closeups/manifesto-smarronata.png differ diff --git a/assets/scenes/smarronata-1993.png b/assets/scenes/smarronata-1993.png new file mode 100644 index 0000000..252ace3 Binary files /dev/null and b/assets/scenes/smarronata-1993.png differ diff --git a/assets/scenes/smarronata-tendone.png b/assets/scenes/smarronata-tendone.png new file mode 100644 index 0000000..4fe23c9 Binary files /dev/null and b/assets/scenes/smarronata-tendone.png differ diff --git a/assets/voices/andrea-01ecdf3ed8.mp3 b/assets/voices/andrea-01ecdf3ed8.mp3 deleted file mode 100644 index e364bc5..0000000 Binary files a/assets/voices/andrea-01ecdf3ed8.mp3 and /dev/null differ diff --git a/assets/voices/andrea-0bbc838103.mp3 b/assets/voices/andrea-0bbc838103.mp3 new file mode 100644 index 0000000..ca4f3e4 Binary files /dev/null and b/assets/voices/andrea-0bbc838103.mp3 differ diff --git a/assets/voices/andrea-111de2600b.mp3 b/assets/voices/andrea-111de2600b.mp3 new file mode 100644 index 0000000..6c64416 Binary files /dev/null and b/assets/voices/andrea-111de2600b.mp3 differ diff --git a/assets/voices/andrea-11b952f96c.mp3 b/assets/voices/andrea-11b952f96c.mp3 new file mode 100644 index 0000000..611be98 Binary files /dev/null and b/assets/voices/andrea-11b952f96c.mp3 differ diff --git a/assets/voices/andrea-2603f4db73.mp3 b/assets/voices/andrea-2603f4db73.mp3 new file mode 100644 index 0000000..c250587 Binary files /dev/null and b/assets/voices/andrea-2603f4db73.mp3 differ diff --git a/assets/voices/andrea-27b72f57db.mp3 b/assets/voices/andrea-27b72f57db.mp3 new file mode 100644 index 0000000..cd33049 Binary files /dev/null and b/assets/voices/andrea-27b72f57db.mp3 differ diff --git a/assets/voices/andrea-2a97a4b77d.mp3 b/assets/voices/andrea-2a97a4b77d.mp3 new file mode 100644 index 0000000..dddd2d2 Binary files /dev/null and b/assets/voices/andrea-2a97a4b77d.mp3 differ diff --git a/assets/voices/andrea-2bf6da91a7.mp3 b/assets/voices/andrea-2bf6da91a7.mp3 new file mode 100644 index 0000000..b311696 Binary files /dev/null and b/assets/voices/andrea-2bf6da91a7.mp3 differ diff --git a/assets/voices/andrea-2db7b567b2.mp3 b/assets/voices/andrea-2db7b567b2.mp3 new file mode 100644 index 0000000..8cf76c0 Binary files /dev/null and b/assets/voices/andrea-2db7b567b2.mp3 differ diff --git a/assets/voices/andrea-2e2fac8aa0.mp3 b/assets/voices/andrea-2e2fac8aa0.mp3 new file mode 100644 index 0000000..04867ae Binary files /dev/null and b/assets/voices/andrea-2e2fac8aa0.mp3 differ diff --git a/assets/voices/andrea-3bec487739.mp3 b/assets/voices/andrea-3bec487739.mp3 new file mode 100644 index 0000000..2f82b02 Binary files /dev/null and b/assets/voices/andrea-3bec487739.mp3 differ diff --git a/assets/voices/andrea-3ed6165062.mp3 b/assets/voices/andrea-3ed6165062.mp3 deleted file mode 100644 index 35acddc..0000000 Binary files a/assets/voices/andrea-3ed6165062.mp3 and /dev/null differ diff --git a/assets/voices/andrea-40a22ff371.mp3 b/assets/voices/andrea-40a22ff371.mp3 new file mode 100644 index 0000000..a9e3fca Binary files /dev/null and b/assets/voices/andrea-40a22ff371.mp3 differ diff --git a/assets/voices/andrea-4266372068.mp3 b/assets/voices/andrea-4266372068.mp3 new file mode 100644 index 0000000..98f7e02 Binary files /dev/null and b/assets/voices/andrea-4266372068.mp3 differ diff --git a/assets/voices/andrea-4289b64bed.mp3 b/assets/voices/andrea-4289b64bed.mp3 new file mode 100644 index 0000000..6466197 Binary files /dev/null and b/assets/voices/andrea-4289b64bed.mp3 differ diff --git a/assets/voices/andrea-4f096d64c3.mp3 b/assets/voices/andrea-4f096d64c3.mp3 new file mode 100644 index 0000000..50d2da1 Binary files /dev/null and b/assets/voices/andrea-4f096d64c3.mp3 differ diff --git a/assets/voices/andrea-5446c68481.mp3 b/assets/voices/andrea-5446c68481.mp3 new file mode 100644 index 0000000..47a09c8 Binary files /dev/null and b/assets/voices/andrea-5446c68481.mp3 differ diff --git a/assets/voices/andrea-57348082a9.mp3 b/assets/voices/andrea-57348082a9.mp3 new file mode 100644 index 0000000..4313ac6 Binary files /dev/null and b/assets/voices/andrea-57348082a9.mp3 differ diff --git a/assets/voices/andrea-5b5dfdda13.mp3 b/assets/voices/andrea-5b5dfdda13.mp3 new file mode 100644 index 0000000..708a7f7 Binary files /dev/null and b/assets/voices/andrea-5b5dfdda13.mp3 differ diff --git a/assets/voices/andrea-5b86ac34b1.mp3 b/assets/voices/andrea-5b86ac34b1.mp3 new file mode 100644 index 0000000..1031ad9 Binary files /dev/null and b/assets/voices/andrea-5b86ac34b1.mp3 differ diff --git a/assets/voices/andrea-5deea0bdab.mp3 b/assets/voices/andrea-5deea0bdab.mp3 new file mode 100644 index 0000000..b1a4ca1 Binary files /dev/null and b/assets/voices/andrea-5deea0bdab.mp3 differ diff --git a/assets/voices/andrea-675499a046.mp3 b/assets/voices/andrea-675499a046.mp3 new file mode 100644 index 0000000..61f2065 Binary files /dev/null and b/assets/voices/andrea-675499a046.mp3 differ diff --git a/assets/voices/andrea-6bf926ffc1.mp3 b/assets/voices/andrea-6bf926ffc1.mp3 new file mode 100644 index 0000000..5574d2b Binary files /dev/null and b/assets/voices/andrea-6bf926ffc1.mp3 differ diff --git a/assets/voices/andrea-72789f9ee3.mp3 b/assets/voices/andrea-72789f9ee3.mp3 new file mode 100644 index 0000000..af98c5f Binary files /dev/null and b/assets/voices/andrea-72789f9ee3.mp3 differ diff --git a/assets/voices/andrea-81cad76b69.mp3 b/assets/voices/andrea-81cad76b69.mp3 new file mode 100644 index 0000000..024d8b4 Binary files /dev/null and b/assets/voices/andrea-81cad76b69.mp3 differ diff --git a/assets/voices/andrea-8b02e08972.mp3 b/assets/voices/andrea-8b02e08972.mp3 new file mode 100644 index 0000000..c60484a Binary files /dev/null and b/assets/voices/andrea-8b02e08972.mp3 differ diff --git a/assets/voices/andrea-8dbfa9b147.mp3 b/assets/voices/andrea-8dbfa9b147.mp3 new file mode 100644 index 0000000..2f71147 Binary files /dev/null and b/assets/voices/andrea-8dbfa9b147.mp3 differ diff --git a/assets/voices/andrea-9476090301.mp3 b/assets/voices/andrea-9476090301.mp3 new file mode 100644 index 0000000..ebb0a92 Binary files /dev/null and b/assets/voices/andrea-9476090301.mp3 differ diff --git a/assets/voices/andrea-94ed1f96a3.mp3 b/assets/voices/andrea-94ed1f96a3.mp3 new file mode 100644 index 0000000..dda6664 Binary files /dev/null and b/assets/voices/andrea-94ed1f96a3.mp3 differ diff --git a/assets/voices/andrea-9a8297b134.mp3 b/assets/voices/andrea-9a8297b134.mp3 new file mode 100644 index 0000000..e1d6b06 Binary files /dev/null and b/assets/voices/andrea-9a8297b134.mp3 differ diff --git a/assets/voices/andrea-b4b5507b6e.mp3 b/assets/voices/andrea-b4b5507b6e.mp3 new file mode 100644 index 0000000..6f72cfc Binary files /dev/null and b/assets/voices/andrea-b4b5507b6e.mp3 differ diff --git a/assets/voices/andrea-c6d4afc066.mp3 b/assets/voices/andrea-c6d4afc066.mp3 new file mode 100644 index 0000000..a6e9ef8 Binary files /dev/null and b/assets/voices/andrea-c6d4afc066.mp3 differ diff --git a/assets/voices/andrea-db4aff7e68.mp3 b/assets/voices/andrea-db4aff7e68.mp3 new file mode 100644 index 0000000..f8d2540 Binary files /dev/null and b/assets/voices/andrea-db4aff7e68.mp3 differ diff --git a/assets/voices/andrea-e55ffcecfb.mp3 b/assets/voices/andrea-e55ffcecfb.mp3 new file mode 100644 index 0000000..27f9c3d Binary files /dev/null and b/assets/voices/andrea-e55ffcecfb.mp3 differ diff --git a/assets/voices/andrea-e573417a26.mp3 b/assets/voices/andrea-e573417a26.mp3 new file mode 100644 index 0000000..9f68e81 Binary files /dev/null and b/assets/voices/andrea-e573417a26.mp3 differ diff --git a/assets/voices/andrea-ebba87b32c.mp3 b/assets/voices/andrea-ebba87b32c.mp3 new file mode 100644 index 0000000..2539d21 Binary files /dev/null and b/assets/voices/andrea-ebba87b32c.mp3 differ diff --git a/assets/voices/andrea-f1663e7892.mp3 b/assets/voices/andrea-f1663e7892.mp3 deleted file mode 100644 index 46cb0de..0000000 Binary files a/assets/voices/andrea-f1663e7892.mp3 and /dev/null differ diff --git a/assets/voices/andrea-f2486823cd.mp3 b/assets/voices/andrea-f2486823cd.mp3 new file mode 100644 index 0000000..ba3125c Binary files /dev/null and b/assets/voices/andrea-f2486823cd.mp3 differ diff --git a/assets/voices/andrea-f55b749652.mp3 b/assets/voices/andrea-f55b749652.mp3 new file mode 100644 index 0000000..bbc836a Binary files /dev/null and b/assets/voices/andrea-f55b749652.mp3 differ diff --git a/assets/voices/andrea-f940d1cc48.mp3 b/assets/voices/andrea-f940d1cc48.mp3 new file mode 100644 index 0000000..da5e68f Binary files /dev/null and b/assets/voices/andrea-f940d1cc48.mp3 differ diff --git a/assets/voices/andrea-fd9e22e01d.mp3 b/assets/voices/andrea-fd9e22e01d.mp3 new file mode 100644 index 0000000..caec64a Binary files /dev/null and b/assets/voices/andrea-fd9e22e01d.mp3 differ diff --git a/assets/voices/index.json b/assets/voices/index.json index df35bf7..f22617b 100644 --- a/assets/voices/index.json +++ b/assets/voices/index.json @@ -675,9 +675,9 @@ "file": "andrea-c716ab2381.mp3", "sec": 7.95 }, - "andrea|Il Taglia. Io sono un metro e ottanta, e lui mi guarda dall'alto. Con la Condor in mano.": { - "file": "andrea-f1663e7892.mp3", - "sec": 8.52 + "andrea|Il Taglia, con la Condor in mano. Chi lo batte al campone si merita un monumento.": { + "file": "andrea-5446c68481.mp3", + "sec": 6.49 }, "andrea|Il giardino coi cedri e le panchine. All'ombra, d'estate, ci si fa la siesta a turno.": { "file": "andrea-4fd811d0c7.mp3", @@ -959,6 +959,30 @@ "file": "andrea-bd95e65b0a.mp3", "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.": { "file": "andrea-9c0935dc77.mp3", "sec": 5.48 @@ -1899,6 +1923,98 @@ "file": "andrea-d32e1a2a87.mp3", "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.": { "file": "andrea-baa95acb36.mp3", "sec": 4.41 @@ -2883,10 +2999,6 @@ "file": "andrea-595df0a426.mp3", "sec": 2.23 }, - "andrea|Ma quanto sei alto, Taglia?": { - "file": "andrea-01ecdf3ed8.mp3", - "sec": 1.96 - }, "andrea|Ci si vede, Taglia.": { "file": "andrea-5d4d911c06.mp3", "sec": 1.42 @@ -2915,10 +3027,6 @@ "file": "taglia-c00be84faf.mp3", "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.": { "file": "taglia-757564b65e.mp3", "sec": 3.12 @@ -3419,13 +3527,13 @@ "file": "taglia-1e6660932d.mp3", "sec": 3.34 }, - "andrea|Il Taglia, su un piede solo, è più alto di me su due.": { - "file": "andrea-3ed6165062.mp3", - "sec": 3.31 + "andrea|Il Taglia salta come un grillo. Io come un sacco di patate.": { + "file": "andrea-94ed1f96a3.mp3", + "sec": 4.54 }, - "taglia|È questione di gambe lunghe.": { - "file": "taglia-9782816264.mp3", - "sec": 1.71 + "taglia|È questione di allenamento.": { + "file": "taglia-1335b18858.mp3", + "sec": 1.43 }, "andrea|Il gesso lo lascio lì. Ci giocherà qualche bambino, che è più in allenamento di me.": { "file": "andrea-356a1afe8d.mp3", @@ -3487,6 +3595,34 @@ "file": "andrea-69337973d0.mp3", "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!!!": { "file": "andrea-5694cd3779.mp3", "sec": 3.74 diff --git a/assets/voices/taglia-1335b18858.mp3 b/assets/voices/taglia-1335b18858.mp3 new file mode 100644 index 0000000..d058425 Binary files /dev/null and b/assets/voices/taglia-1335b18858.mp3 differ diff --git a/assets/voices/taglia-9782816264.mp3 b/assets/voices/taglia-9782816264.mp3 deleted file mode 100644 index fd59358..0000000 Binary files a/assets/voices/taglia-9782816264.mp3 and /dev/null differ diff --git a/assets/voices/taglia-d99c875252.mp3 b/assets/voices/taglia-d99c875252.mp3 deleted file mode 100644 index 42ee251..0000000 Binary files a/assets/voices/taglia-d99c875252.mp3 and /dev/null differ diff --git a/docs/IDEE.md b/docs/IDEE.md index cee021b..c58c91e 100644 --- a/docs/IDEE.md +++ b/docs/IDEE.md @@ -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 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. +- **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 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). diff --git a/docs/STATO.md b/docs/STATO.md index ca38eb1..1594199 100644 --- a/docs/STATO.md +++ b/docs/STATO.md @@ -18,6 +18,18 @@ Online su 50037.manzolo.it tutto fino agli effetti ambientali di Codex. Aperto, ## 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 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 diff --git a/package.json b/package.json index 1f3bd84..883902e 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "browser:tressette": "node tests/tressette.browser.mjs", "browser:scopa": "node tests/scopa.browser.mjs", "browser:briscola": "node tests/briscola.browser.mjs", + "browser:smarronata": "node tests/smarronata.browser.mjs", "browser:telefono": "node tests/telefono.browser.mjs", "browser:risveglio": "node tests/risveglio.browser.mjs", "browser:effects": "node tests/ambient.browser.mjs", diff --git a/src/engine/game.js b/src/engine/game.js index 1186c2a..b79f5eb 100644 --- a/src/engine/game.js +++ b/src/engine/game.js @@ -645,6 +645,8 @@ export class Game { const sc = this.story.scenes[scene]; 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; + // 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); return true; } diff --git a/src/main.js b/src/main.js index e5b6985..27f0f7f 100644 --- a/src/main.js +++ b/src/main.js @@ -336,7 +336,7 @@ function openPause() { voices.pause(); ambience.configure({ active: false }); 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; } 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 }); // 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. setProp($('back-button'), 'hidden', !running || !game.scene?.back || !!game.dialogue || !!game.closeup); setText($('back-button'), game.scene?.back?.label ?? ''); diff --git a/src/story/story.js b/src/story/story.js index 2d26f96..f02a106 100644 --- a/src/story/story.js +++ b/src/story/story.js @@ -60,6 +60,16 @@ const RITORNO_2007 = [ { 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 = { title: 'La Leggenda del Regolo', // 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', 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 // ritorno dal 1997 (Andrea, 30 ottobre; la macchina da dietro e davanti è di Codex). partenza: { @@ -327,7 +356,7 @@ export const story = { picture: 'assets/closeups/campone-campana.png', 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' }], - 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: [], 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.' }, ], }, + // 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. ingorgo: { 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', 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' }], }, }, @@ -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]], depth: [[202, 0.4], [360, 1.15]], 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: [ + { + // 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', 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]): // 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: { name: 'Il Barrettino, 10 luglio 1997', // 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: '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' }, ], }, diff --git a/tests/smarronata.browser.mjs b/tests/smarronata.browser.mjs new file mode 100644 index 0000000..d6cf0ee --- /dev/null +++ b/tests/smarronata.browser.mjs @@ -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(); } diff --git a/tests/story.test.mjs b/tests/story.test.mjs index 50d768e..20f2694 100644 --- a/tests/story.test.mjs +++ b/tests/story.test.mjs @@ -3,7 +3,7 @@ import assert from 'node:assert/strict'; import { backgroundOrder } from '../src/engine/render.js'; import { story } from '../src/story/story.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 { existsSync, readFileSync } from 'node:fs'; 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); 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)) ?? []; - 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); 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'); +});