diff --git a/assets/scenes/area-feste-festa.png b/assets/scenes/area-feste-festa.png new file mode 100644 index 0000000..8b09490 Binary files /dev/null and b/assets/scenes/area-feste-festa.png differ diff --git a/assets/scenes/bivio-provinciale.png b/assets/scenes/bivio-provinciale.png new file mode 100644 index 0000000..cff9b6f Binary files /dev/null and b/assets/scenes/bivio-provinciale.png differ diff --git a/assets/scenes/casa-maestro-bacci.png b/assets/scenes/casa-maestro-bacci.png new file mode 100644 index 0000000..575681a Binary files /dev/null and b/assets/scenes/casa-maestro-bacci.png differ diff --git a/assets/scenes/tennis-chiesa.png b/assets/scenes/tennis-chiesa.png new file mode 100644 index 0000000..c1a2027 Binary files /dev/null and b/assets/scenes/tennis-chiesa.png differ diff --git a/assets/voices/andrea-0662772c27.mp3 b/assets/voices/andrea-0662772c27.mp3 deleted file mode 100644 index cfef86e..0000000 Binary files a/assets/voices/andrea-0662772c27.mp3 and /dev/null differ diff --git a/assets/voices/andrea-152567ebc0.mp3 b/assets/voices/andrea-152567ebc0.mp3 deleted file mode 100644 index 435d189..0000000 Binary files a/assets/voices/andrea-152567ebc0.mp3 and /dev/null differ diff --git a/assets/voices/andrea-23640db0da.mp3 b/assets/voices/andrea-23640db0da.mp3 new file mode 100644 index 0000000..2d58954 Binary files /dev/null and b/assets/voices/andrea-23640db0da.mp3 differ diff --git a/assets/voices/andrea-2504f5d277.mp3 b/assets/voices/andrea-2504f5d277.mp3 new file mode 100644 index 0000000..0cadcb9 Binary files /dev/null and b/assets/voices/andrea-2504f5d277.mp3 differ diff --git a/assets/voices/andrea-2de291f241.mp3 b/assets/voices/andrea-2de291f241.mp3 new file mode 100644 index 0000000..9f30028 Binary files /dev/null and b/assets/voices/andrea-2de291f241.mp3 differ diff --git a/assets/voices/andrea-5536ba1bf5.mp3 b/assets/voices/andrea-5536ba1bf5.mp3 new file mode 100644 index 0000000..aa59616 Binary files /dev/null and b/assets/voices/andrea-5536ba1bf5.mp3 differ diff --git a/assets/voices/andrea-57fb036fc1.mp3 b/assets/voices/andrea-57fb036fc1.mp3 new file mode 100644 index 0000000..7388220 Binary files /dev/null and b/assets/voices/andrea-57fb036fc1.mp3 differ diff --git a/assets/voices/andrea-5a4a67c901.mp3 b/assets/voices/andrea-5a4a67c901.mp3 new file mode 100644 index 0000000..4da5b6f Binary files /dev/null and b/assets/voices/andrea-5a4a67c901.mp3 differ diff --git a/assets/voices/andrea-77ebc10cc8.mp3 b/assets/voices/andrea-77ebc10cc8.mp3 new file mode 100644 index 0000000..ddaf70b Binary files /dev/null and b/assets/voices/andrea-77ebc10cc8.mp3 differ diff --git a/assets/voices/andrea-a476aa32a5.mp3 b/assets/voices/andrea-a476aa32a5.mp3 new file mode 100644 index 0000000..68aeebc Binary files /dev/null and b/assets/voices/andrea-a476aa32a5.mp3 differ diff --git a/assets/voices/andrea-aa72a7c40b.mp3 b/assets/voices/andrea-aa72a7c40b.mp3 new file mode 100644 index 0000000..0f09514 Binary files /dev/null and b/assets/voices/andrea-aa72a7c40b.mp3 differ diff --git a/assets/voices/andrea-b1ef0ac758.mp3 b/assets/voices/andrea-b1ef0ac758.mp3 new file mode 100644 index 0000000..e1ee9a6 Binary files /dev/null and b/assets/voices/andrea-b1ef0ac758.mp3 differ diff --git a/assets/voices/andrea-b987450513.mp3 b/assets/voices/andrea-b987450513.mp3 new file mode 100644 index 0000000..d0321bf Binary files /dev/null and b/assets/voices/andrea-b987450513.mp3 differ diff --git a/assets/voices/andrea-cb3bc46e33.mp3 b/assets/voices/andrea-cb3bc46e33.mp3 new file mode 100644 index 0000000..070017d Binary files /dev/null and b/assets/voices/andrea-cb3bc46e33.mp3 differ diff --git a/assets/voices/andrea-d39b7f7e61.mp3 b/assets/voices/andrea-d39b7f7e61.mp3 new file mode 100644 index 0000000..331d68d Binary files /dev/null and b/assets/voices/andrea-d39b7f7e61.mp3 differ diff --git a/assets/voices/andrea-f5d55187e8.mp3 b/assets/voices/andrea-f5d55187e8.mp3 new file mode 100644 index 0000000..dc1ea20 Binary files /dev/null and b/assets/voices/andrea-f5d55187e8.mp3 differ diff --git a/assets/voices/index.json b/assets/voices/index.json index 03a8d85..5234878 100644 --- a/assets/voices/index.json +++ b/assets/voices/index.json @@ -495,6 +495,58 @@ "file": "andrea-7883437f7d.mp3", "sec": 3.46 }, + "andrea|Le case gialle della Provinciale, coi vasi sul marciapiede. Ogni vaso ha la sua padrona, e guai a toccarlo.": { + "file": "andrea-d39b7f7e61.mp3", + "sec": 8.25 + }, + "andrea|Il tennis della chiesa. Di tennis non ci ha mai giocato nessuno: è un campo da bocce, ma il nome è rimasto.": { + "file": "andrea-aa72a7c40b.mp3", + "sec": 7.3 + }, + "andrea|Una scultura di ferro: un omino con la racchetta. Almeno lui a tennis ci gioca.": { + "file": "andrea-2504f5d277.mp3", + "sec": 6.23 + }, + "andrea|Partita?": { + "file": "andrea-b1ef0ac758.mp3", + "sec": 0.57 + }, + "andrea|Mi sa che vince lui ai punti. Non si muove mai.": { + "file": "andrea-2de291f241.mp3", + "sec": 4.09 + }, + "andrea|Laggiù c'è la casa del maestro Bacci. Mezzo paese ha imparato a leggere e scrivere da lui.": { + "file": "andrea-57fb036fc1.mp3", + "sec": 6.54 + }, + "andrea|Lassù in cima, la torre del Trebbio. Da qui sembra piccola come una pedina.": { + "file": "andrea-5536ba1bf5.mp3", + "sec": 5.65 + }, + "andrea|Le vigne in fila. A settembre qui si vendemmia, e tutto il paese ha le mani appiccicose.": { + "file": "andrea-b987450513.mp3", + "sec": 6.09 + }, + "andrea|L'uva a maggio? È ancora un'idea d'uva.": { + "file": "andrea-77ebc10cc8.mp3", + "sec": 3.46 + }, + "andrea|Le tavolate già apparecchiate per la festa. Fra poco qui non si trova un posto nemmeno a pagarlo.": { + "file": "andrea-5a4a67c901.mp3", + "sec": 6.49 + }, + "andrea|Mi siedo a tenere il posto? Me lo hanno già tenuto tre zie, a turno.": { + "file": "andrea-23640db0da.mp3", + "sec": 5.06 + }, + "andrea|Le bandierine colorate da un lampione all'altro. Le montano ogni anno, e ogni anno ne manca una.": { + "file": "andrea-cb3bc46e33.mp3", + "sec": 8.59 + }, + "andrea|Il padiglione coperto: cucina, cassa e il banco della birra. Il cuore della festa.": { + "file": "andrea-a476aa32a5.mp3", + "sec": 6.01 + }, "andrea|Villa Adami. Gialla come un tuorlo, con le persiane verdi.": { "file": "andrea-225e29ed43.mp3", "sec": 5.12 @@ -535,13 +587,9 @@ "file": "andrea-ecc1aee547.mp3", "sec": 6.44 }, - "andrea|Un cancello verde, sempre aperto. Non ho mai capito cosa chiude.": { - "file": "andrea-152567ebc0.mp3", - "sec": 4.83 - }, - "andrea|È già aperto. Più aperto di così non si può.": { - "file": "andrea-0662772c27.mp3", - "sec": 3.74 + "andrea|Il cancello verde, sempre aperto. Di là c'è il tennis della chiesa.": { + "file": "andrea-f5d55187e8.mp3", + "sec": 5.11 }, "andrea|La Carza. A maggio c'è poca acqua: d'estate si scendeva a fare le dighe coi sassi.": { "file": "andrea-91be1de49b.mp3", diff --git a/docs/IDEE.md b/docs/IDEE.md index c7c5fca..77e8294 100644 --- a/docs/IDEE.md +++ b/docs/IDEE.md @@ -35,3 +35,11 @@ si segna qui con la data e il punto di `src/story/story.js` dove sta; le persone - **«La storia infinita»** (2026-10-23): un libro dimenticato sulle tavolate dell'oratorio; si prende, si apre e ha una pagina sola con scritto «FINE». In `story.js`: oggetto `libro`, punto caldo `libro_dimenticato`. Da valutare: una tavola illustrata a tutto schermo con la pagina aperta, quando il motore le avrà. + +- **La vecchia Pizzeria da Baffo** (Andrea, 2026-10-23). Una scena dentro la pizzeria, col grande quadro dipinto + del 1970 (foto in `assets/raw/foto/da-fare/pizzeria-baffo-quadro.png`). Attenzione: nel quadro ci sono personaggi + Disney (Paperone, Paperino, Pippo, Topolino…), che nel gioco non possono comparire. Il quadro va ridisegnato con + animali buffi inventati, nella stessa scena e con le stesse gag (il forno a legna, i salumi appesi, il fumetto + «Una pizza 250 lire?!», il carcerato alla finestrella, la data 1970). +- **La casa del maestro Bacci** (2026-10-23): la stradina fra la Fortezza e i cipressi, da cui si vede il Trebbio + lassù. È il posto dove far comparire il Maestro Bacci, se Francesco è d'accordo (vedi sopra). diff --git a/src/story/story.js b/src/story/story.js index daa2bd0..5921e57 100644 --- a/src/story/story.js +++ b/src/story/story.js @@ -204,7 +204,7 @@ export const story = { }, }, { - id: 'sentiero_trebbio', name: 'sentiero per il Trebbio', box: [0, 200, 90, 160], at: [20, 330], exit: { scene: 'viale_cipressi', at: [300, 350], face: 'up' }, + id: 'sentiero_trebbio', name: 'sentiero per il Trebbio', box: [0, 200, 90, 160], at: [20, 330], exit: { scene: 'casa_maestro_bacci', at: [120, 350], face: 'up' }, }, { id: 'verso_villa_adami', name: 'discesa verso Villa Adami', box: [180, 326, 340, 34], at: [330, 352], exit: { scene: 'salita_villa_adami', at: [330, 300], face: 'left' }, @@ -641,6 +641,9 @@ export const story = { open: [{ say: 'Chiusa. Il mistero resta.' }], }, }, + { + id: 'al_piazzale', name: 'il piazzale coperto delle feste', box: [0, 150, 80, 90], at: [30, 250], exit: { scene: 'area_feste_festa', at: [320, 350], face: 'up' }, + }, { id: 'alla_polisportiva', name: 'in fondo, verso il campo sportivo', box: [360, 168, 110, 34], at: [400, 198], exit: { scene: 'polisportiva', at: [320, 265], face: 'down' }, }, @@ -767,7 +770,7 @@ export const story = { }, }, { - id: 'alla_stazione', name: 'a sinistra, verso la stazione', box: [0, 200, 50, 160], at: [12, 300], exit: { scene: 'stazione', at: [628, 320], face: 'left' }, + id: 'alla_stazione', name: 'a sinistra, verso la stazione e la scuola', box: [0, 200, 50, 160], at: [12, 300], exit: { scene: 'bivio_provinciale', at: [300, 350], face: 'up' }, }, { id: 'alla_pieve', name: 'a destra, verso la Pieve', box: [590, 220, 50, 140], at: [628, 300], exit: { scene: 'pieve', at: [588, 250], face: 'left' }, @@ -803,7 +806,129 @@ export const story = { }, }, { - id: 'al_forno', name: 'a destra, verso il forno', box: [590, 220, 50, 140], at: [628, 320], exit: { scene: 'forno', at: [12, 300], face: 'right' }, + id: 'al_forno', name: 'a destra, verso il forno', box: [590, 220, 50, 140], at: [628, 320], exit: { scene: 'bivio_provinciale', at: [318, 224], face: 'down' }, + }, + ], + }, + // Via Provinciale fra il forno e la stazione: qui si sbuca dalla scuola. + bivio_provinciale: { + name: 'Via Provinciale, al bivio', + map: [78, 64], + background: 'assets/scenes/bivio-provinciale.png', + walk: [[0, 360], [0, 232], [120, 226], [290, 222], [350, 222], [380, 240], [600, 340], [640, 360]], + depth: [[222, 0.35], [360, 1.2]], + entry: [300, 350], + hotspots: [ + { + id: 'case', name: 'case gialle', box: [380, 0, 260, 230], at: [460, 300], face: 'right', + actions: { + look: [{ say: 'Le case gialle della Provinciale, coi vasi sul marciapiede. Ogni vaso ha la sua padrona, e guai a toccarlo.' }], + }, + }, + { + id: 'alla_scuola', name: 'la stradina della scuola', box: [0, 190, 120, 70], at: [40, 300], exit: { scene: 'scuola', at: [600, 320], face: 'left' }, + }, + { + id: 'alla_stazione', name: 'avanti, verso la stazione', box: [280, 196, 80, 40], at: [318, 224], exit: { scene: 'stazione', at: [628, 320], face: 'left' }, + }, + { + id: 'al_forno', name: 'indietro, verso il forno', box: [80, 334, 480, 26], at: [300, 354], exit: { scene: 'forno', at: [12, 300], face: 'right' }, + }, + ], + }, + // «Il tennis della chiesa»: il campo dietro la Pieve, dal cancello verde della Carza. + tennis_chiesa: { + name: 'Il tennis della chiesa', + map: [66, 51], + background: 'assets/scenes/tennis-chiesa.png', + walk: [[0, 360], [0, 300], [200, 290], [420, 268], [640, 258], [640, 360]], + depth: [[258, 0.7], [360, 1.15]], + entry: [320, 350], + hotspots: [ + { + id: 'campo', name: 'campo rosso', box: [300, 248, 340, 40], at: [400, 300], face: 'up', + actions: { + look: [{ say: 'Il tennis della chiesa. Di tennis non ci ha mai giocato nessuno: è un campo da bocce, ma il nome è rimasto.' }], + }, + }, + { + id: 'omino', name: 'omino di ferro', box: [80, 190, 40, 140], at: [130, 320], face: 'left', + actions: { + look: [{ say: 'Una scultura di ferro: un omino con la racchetta. Almeno lui a tennis ci gioca.' }], + talk: [{ say: 'Partita?' }, { say: '...' }, { say: 'Mi sa che vince lui ai punti. Non si muove mai.' }], + }, + }, + { + id: 'alla_carza', name: 'indietro, verso il posticino della Carza', box: [0, 330, 640, 30], at: [320, 354], exit: { scene: 'carza', at: [440, 290], face: 'left' }, + }, + ], + }, + // Fra la Fortezza e i cipressi: la stradina fra le vigne, la casa del maestro Bacci, e lassù il Trebbio. + casa_maestro_bacci: { + name: 'La casa del maestro Bacci', + map: [50, 13], + background: 'assets/scenes/casa-maestro-bacci.png', + walk: [[0, 360], [0, 340], [100, 270], [130, 222], [150, 222], [150, 270], [240, 360]], + depth: [[222, 0.3], [360, 1.2]], + entry: [120, 350], + hotspots: [ + { + id: 'casa', name: 'casa del maestro Bacci', box: [186, 186, 100, 30], at: [140, 240], face: 'up', + actions: { + look: [{ say: 'Laggiù c\'è la casa del maestro Bacci. Mezzo paese ha imparato a leggere e scrivere da lui.' }], + }, + }, + { + id: 'trebbio', name: 'castello del Trebbio', box: [400, 112, 50, 30], at: [140, 240], face: 'up', + actions: { + look: [{ say: 'Lassù in cima, la torre del Trebbio. Da qui sembra piccola come una pedina.' }], + }, + }, + { + id: 'vigne', name: 'vigne', box: [160, 250, 480, 110], at: [190, 320], face: 'right', + actions: { + look: [{ say: 'Le vigne in fila. A settembre qui si vendemmia, e tutto il paese ha le mani appiccicose.' }], + take: [{ say: 'L\'uva a maggio? È ancora un\'idea d\'uva.' }], + }, + }, + { + id: 'ai_cipressi', name: 'avanti, verso i cipressi e il Trebbio', box: [110, 200, 60, 34], at: [138, 226], exit: { scene: 'viale_cipressi', at: [300, 350], face: 'up' }, + }, + { + id: 'alla_fortezza', name: 'indietro, verso la Fortezza', box: [0, 330, 240, 30], at: [120, 354], exit: { scene: 'fortezza', at: [20, 330], face: 'right' }, + }, + ], + }, + // Il piazzale coperto dell'area feste, apparecchiato per la festa. + area_feste_festa: { + name: 'Il piazzale delle feste', + map: [26, 91], + background: 'assets/scenes/area-feste-festa.png', + walk: [[0, 360], [0, 260], [160, 240], [420, 240], [640, 296], [640, 360]], + depth: [[240, 0.55], [360, 1.15]], + entry: [320, 350], + hotspots: [ + { + id: 'tavolate', name: 'tavolate', box: [180, 250, 460, 80], at: [250, 340], face: 'right', + actions: { + look: [{ say: 'Le tavolate già apparecchiate per la festa. Fra poco qui non si trova un posto nemmeno a pagarlo.' }], + use: [{ say: 'Mi siedo a tenere il posto? Me lo hanno già tenuto tre zie, a turno.' }], + }, + }, + { + id: 'bandierine', name: 'bandierine', box: [130, 120, 510, 60], at: [320, 300], face: 'up', + actions: { + look: [{ say: 'Le bandierine colorate da un lampione all\'altro. Le montano ogni anno, e ogni anno ne manca una.' }], + }, + }, + { + id: 'padiglione', name: 'padiglione', box: [0, 110, 120, 140], at: [60, 280], face: 'left', + actions: { + look: [{ say: 'Il padiglione coperto: cucina, cassa e il banco della birra. Il cuore della festa.' }], + }, + }, + { + id: 'al_parco', name: 'indietro, verso il parco', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'area_feste', at: [30, 250], face: 'right' }, }, ], }, @@ -882,10 +1007,9 @@ export const story = { }, }, { - id: 'cancello', name: 'cancello verde', box: [460, 150, 46, 132], at: [440, 290], face: 'right', + id: 'cancello', name: 'cancello verde, verso il tennis della chiesa', box: [460, 150, 46, 132], at: [440, 290], face: 'right', exit: { scene: 'tennis_chiesa', at: [320, 350], face: 'up' }, actions: { - look: [{ say: 'Un cancello verde, sempre aperto. Non ho mai capito cosa chiude.' }], - open: [{ say: 'È già aperto. Più aperto di così non si può.' }], + look: [{ say: 'Il cancello verde, sempre aperto. Di là c\'è il tennis della chiesa.' }], }, }, { @@ -1017,7 +1141,7 @@ export const story = { name: 'La scuola', map: [14, 19], background: 'assets/scenes/scuola.png', - walk: [[110, 360], [118, 226], [140, 222], [268, 220], [290, 232], [520, 360]], + walk: [[110, 360], [118, 226], [140, 222], [268, 220], [290, 232], [470, 330], [620, 300], [640, 300], [640, 360]], depth: [[220, 0.42], [360, 1.32]], entry: [300, 350], hotspots: [ @@ -1048,6 +1172,9 @@ export const story = { look: [{ say: 'Le palazzine gialle accanto alla scuola, con la scala arancione.' }, { say: 'Da lassù la ricreazione si vede tutta.' }], }, }, + { + id: 'al_bivio', name: 'a destra, verso la Provinciale', box: [584, 220, 56, 120], at: [600, 320], exit: { scene: 'bivio_provinciale', at: [40, 300], face: 'right' }, + }, { id: 'alla_salita', name: 'indietro, verso la salita', box: [0, 330, 640, 30], at: [300, 352], exit: { scene: 'salita_villa_adami', at: [40, 336], face: 'right' }, }, @@ -1073,7 +1200,7 @@ export const story = { id: 'al_trebbio', name: 'in fondo, verso il Trebbio', box: [262, 214, 76, 50], at: [300, 256], exit: { scene: 'trebbio', at: [110, 345], face: 'right' }, }, { - id: 'alla_fortezza', name: 'indietro, verso la Fortezza', box: [0, 330, 640, 30], at: [300, 352], exit: { scene: 'fortezza', at: [20, 330], face: 'right' }, + id: 'alla_fortezza', name: 'indietro, verso la casa del maestro Bacci', box: [0, 330, 640, 30], at: [300, 352], exit: { scene: 'casa_maestro_bacci', at: [138, 226], face: 'down' }, }, ], }, diff --git a/tests/browser.mjs b/tests/browser.mjs index f98987f..ba7e1f9 100644 --- a/tests/browser.mjs +++ b/tests/browser.mjs @@ -152,7 +152,7 @@ try { // Una partita a metà riprende da dove era rimasta. await page.click('#restart'); await settle(page); - for (const exit of ['verso_villa_adami', 'su_villa_adami', 'salita', 'su_fortezza', 'sentiero_trebbio', 'al_trebbio']) { + for (const exit of ['verso_villa_adami', 'su_villa_adami', 'salita', 'su_fortezza', 'sentiero_trebbio', 'ai_cipressi', 'al_trebbio']) { await clickScene(page, await hotspotCenter(page, exit)); await settle(page); }