diff --git a/assets/characters/taglia.json b/assets/characters/taglia.json new file mode 100644 index 0000000..c5cf55a --- /dev/null +++ b/assets/characters/taglia.json @@ -0,0 +1,70 @@ +{ + "image": "taglia.png", + "height": 120, + "frames": { + "stand": { + "x": 0, + "y": 0, + "w": 54, + "h": 120, + "ax": 27.7, + "ay": 120 + }, + "blink": { + "x": 56, + "y": 0, + "w": 54, + "h": 120, + "ax": 27.7, + "ay": 120 + }, + "talk": { + "x": 112, + "y": 0, + "w": 75, + "h": 120, + "ax": 32.2, + "ay": 120 + }, + "explain": { + "x": 189, + "y": 0, + "w": 64, + "h": 120, + "ax": 33.6, + "ay": 120 + }, + "laugh": { + "x": 255, + "y": 0, + "w": 59, + "h": 121, + "ax": 25.2, + "ay": 121 + }, + "aim": { + "x": 316, + "y": 0, + "w": 97, + "h": 114, + "ax": 55.6, + "ay": 114 + }, + "shrug": { + "x": 415, + "y": 0, + "w": 91, + "h": 117, + "ax": 44.2, + "ay": 117 + }, + "throw": { + "x": 508, + "y": 0, + "w": 71, + "h": 120, + "ax": 30.3, + "ay": 120 + } + } +} diff --git a/assets/characters/taglia.png b/assets/characters/taglia.png new file mode 100644 index 0000000..dbc598e Binary files /dev/null and b/assets/characters/taglia.png differ diff --git a/assets/voices/andrea-01ecdf3ed8.mp3 b/assets/voices/andrea-01ecdf3ed8.mp3 new file mode 100644 index 0000000..e364bc5 Binary files /dev/null and b/assets/voices/andrea-01ecdf3ed8.mp3 differ diff --git a/assets/voices/andrea-3f77b83f35.mp3 b/assets/voices/andrea-3f77b83f35.mp3 new file mode 100644 index 0000000..40d5196 Binary files /dev/null and b/assets/voices/andrea-3f77b83f35.mp3 differ diff --git a/assets/voices/andrea-3ff6547461.mp3 b/assets/voices/andrea-3ff6547461.mp3 index 9d6a169..7cfeb89 100644 Binary files a/assets/voices/andrea-3ff6547461.mp3 and b/assets/voices/andrea-3ff6547461.mp3 differ diff --git a/assets/voices/andrea-5625b5f1fd.mp3 b/assets/voices/andrea-5625b5f1fd.mp3 new file mode 100644 index 0000000..baddb95 Binary files /dev/null and b/assets/voices/andrea-5625b5f1fd.mp3 differ diff --git a/assets/voices/andrea-5d4d911c06.mp3 b/assets/voices/andrea-5d4d911c06.mp3 new file mode 100644 index 0000000..5880516 Binary files /dev/null and b/assets/voices/andrea-5d4d911c06.mp3 differ diff --git a/assets/voices/andrea-6e4ba77b44.mp3 b/assets/voices/andrea-6e4ba77b44.mp3 deleted file mode 100644 index bb7fb40..0000000 Binary files a/assets/voices/andrea-6e4ba77b44.mp3 and /dev/null differ diff --git a/assets/voices/andrea-99f683209e.mp3 b/assets/voices/andrea-99f683209e.mp3 new file mode 100644 index 0000000..248d4a0 Binary files /dev/null and b/assets/voices/andrea-99f683209e.mp3 differ diff --git a/assets/voices/andrea-f1663e7892.mp3 b/assets/voices/andrea-f1663e7892.mp3 new file mode 100644 index 0000000..46cb0de Binary files /dev/null and b/assets/voices/andrea-f1663e7892.mp3 differ diff --git a/assets/voices/index.json b/assets/voices/index.json index 64df6d0..d760671 100644 --- a/assets/voices/index.json +++ b/assets/voices/index.json @@ -683,6 +683,10 @@ "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 giardino coi cedri e le panchine. All'ombra, d'estate, ci si fa la siesta a turno.": { "file": "andrea-4fd811d0c7.mp3", "sec": 6.43 @@ -2791,6 +2795,54 @@ "file": "pierino_parigi-8104163151.mp3", "sec": 3.3 }, + "andrea|Taglia! Si fa una gara con la Condor?": { + "file": "andrea-99f683209e.mp3", + "sec": 3.41 + }, + "andrea|A cosa si tira?": { + "file": "andrea-3f77b83f35.mp3", + "sec": 0.87 + }, + "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 + }, + "taglia|Io ho già tirato: ora tocca a te. Dodici pallini gialli, e devi fare più di me.": { + "file": "taglia-2658ec8482.mp3", + "sec": 6.05 + }, + "taglia|Come la vuoi?": { + "file": "taglia-32a067db10.mp3", + "sec": 0.62 + }, + "taglia|Il cartone sull'albero, le lattine sulla panchina, le bottigliette sulla porta e il palloncino all'altalena.": { + "file": "taglia-670f9b4ef8.mp3", + "sec": 7.15 + }, + "taglia|E se la vuoi seria, ogni tanto ti tiro una lattina in aria.": { + "file": "taglia-ac012a1066.mp3", + "sec": 4.21 + }, + "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 + }, + "taglia|Seria. Occhio alla lattina in aria.": { + "file": "taglia-06abe0c427.mp3", + "sec": 3.06 + }, + "taglia|A fassi male? Allora tiro più forte, e più spesso.": { + "file": "taglia-4117f6613d.mp3", + "sec": 4.84 + }, "andrea|Si fa una gara alle macchinine?!?!": { "file": "andrea-17216997e2.mp3", "sec": 2.74 @@ -3233,15 +3285,27 @@ }, "andrea|Battuto il Taglia! Con la sua Condor, per giunta.": { "file": "andrea-3ff6547461.mp3", - "sec": 10.2 + "sec": 3.73 + }, + "taglia|Fortuna. Domani la rivinco.": { + "file": "taglia-39627c5b3a.mp3", + "sec": 2.78 }, "andrea|Il Taglia ha la mano ferma. Io ho il fiatone.": { "file": "andrea-6eabf3443c.mp3", "sec": 3.83 }, - "andrea|Pari. Si rifà, tanto i pallini gialli un mancano mai.": { - "file": "andrea-6e4ba77b44.mp3", - "sec": 5.67 + "taglia|Si torna quando vuoi. I pallini gialli un mancano mai.": { + "file": "taglia-bb0a942c0e.mp3", + "sec": 4.42 + }, + "andrea|Pari. Si rifà?": { + "file": "andrea-5625b5f1fd.mp3", + "sec": 2.21 + }, + "taglia|Si rifà.": { + "file": "taglia-18973374a5.mp3", + "sec": 0.76 }, "andrea|La Condor la rendo al Taglia. Per ora.": { "file": "andrea-aba12c5241.mp3", diff --git a/assets/voices/taglia-06abe0c427.mp3 b/assets/voices/taglia-06abe0c427.mp3 new file mode 100644 index 0000000..efd95c2 Binary files /dev/null and b/assets/voices/taglia-06abe0c427.mp3 differ diff --git a/assets/voices/taglia-18973374a5.mp3 b/assets/voices/taglia-18973374a5.mp3 new file mode 100644 index 0000000..04cf20a Binary files /dev/null and b/assets/voices/taglia-18973374a5.mp3 differ diff --git a/assets/voices/taglia-2658ec8482.mp3 b/assets/voices/taglia-2658ec8482.mp3 new file mode 100644 index 0000000..3d69ff9 Binary files /dev/null and b/assets/voices/taglia-2658ec8482.mp3 differ diff --git a/assets/voices/taglia-32a067db10.mp3 b/assets/voices/taglia-32a067db10.mp3 new file mode 100644 index 0000000..1451eef Binary files /dev/null and b/assets/voices/taglia-32a067db10.mp3 differ diff --git a/assets/voices/taglia-39627c5b3a.mp3 b/assets/voices/taglia-39627c5b3a.mp3 new file mode 100644 index 0000000..fb2c776 Binary files /dev/null and b/assets/voices/taglia-39627c5b3a.mp3 differ diff --git a/assets/voices/taglia-4117f6613d.mp3 b/assets/voices/taglia-4117f6613d.mp3 new file mode 100644 index 0000000..3ee9404 Binary files /dev/null and b/assets/voices/taglia-4117f6613d.mp3 differ diff --git a/assets/voices/taglia-670f9b4ef8.mp3 b/assets/voices/taglia-670f9b4ef8.mp3 new file mode 100644 index 0000000..428eb44 Binary files /dev/null and b/assets/voices/taglia-670f9b4ef8.mp3 differ diff --git a/assets/voices/taglia-757564b65e.mp3 b/assets/voices/taglia-757564b65e.mp3 new file mode 100644 index 0000000..44cbb3f Binary files /dev/null and b/assets/voices/taglia-757564b65e.mp3 differ diff --git a/assets/voices/taglia-ac012a1066.mp3 b/assets/voices/taglia-ac012a1066.mp3 new file mode 100644 index 0000000..193e941 Binary files /dev/null and b/assets/voices/taglia-ac012a1066.mp3 differ diff --git a/assets/voices/taglia-bb0a942c0e.mp3 b/assets/voices/taglia-bb0a942c0e.mp3 new file mode 100644 index 0000000..5e9c57a Binary files /dev/null and b/assets/voices/taglia-bb0a942c0e.mp3 differ diff --git a/assets/voices/taglia-d99c875252.mp3 b/assets/voices/taglia-d99c875252.mp3 new file mode 100644 index 0000000..42ee251 Binary files /dev/null and b/assets/voices/taglia-d99c875252.mp3 differ diff --git a/docs/IMMAGINI.md b/docs/IMMAGINI.md index 5307d96..baf795c 100644 --- a/docs/IMMAGINI.md +++ b/docs/IMMAGINI.md @@ -31,6 +31,7 @@ ne è un'opera derivata. Le foto scattate da Andrea non hanno problemi; quelle p | `provinciale-pignone.png`, `piazzetta-cambray-digny.png`, `via-cipriani.png`, `via-massorondinaio.png`, `mozzete.png`, `ponticino-mozzete.png`, `coldaia.png`, `falegnameria-coldaia.png`, `gabbiano.png` | Codex | screenshot di Google Street View | Google | **no**: da rifare con foto di Andrea | | `closeups/micro-parcheggio.png`, `closeups/micro/*.png` (macchinine) | Codex, solo testo | nessuna | — | sì | | `characters/chiaru.png` | Codex | `foto/chiaru.jpg` | Andrea (29 ottobre) | sì (il Chiaru consenziente) | +| `characters/taglia.png` | Codex | `foto/taglia.png` | Andrea (29 ottobre) | sì (il Taglia consenziente) | | `via-liguri-magelli-muro.png` | Codex, ritocco di `via-liguri-magelli.png` con la Ghiacciomobile nel muro | come `via-liguri-magelli.png` | Street View | **no**: come lo sfondo da cui viene | | `characters/zio_mario.png` | Codex | `foto/zio-mario.png` | Andrea (29 ottobre) | sì (famiglia di Andrea) | | `terrazza-cardetole.png` | Codex (dalla foto, poi il terrazzo davanti) | `cardetole-finestra.jpg` | Andrea (29 ottobre) | **da decidere**: come `cardetole.png`, dice dove abita Andrea | diff --git a/docs/STATO.md b/docs/STATO.md index e7a5b96..33c1788 100644 --- a/docs/STATO.md +++ b/docs/STATO.md @@ -24,7 +24,8 @@ Online su 50037.manzolo.it tutto fino agli effetti ambientali di Codex. Aperto, spara, troppo e il colpo parte da solo. Il pallino cala con la distanza (alla porta in fondo si mira sopra). Il cartone sull'albero (10/5/2), le lattine sulla panchina (3), le bottigliette sulla traversa (5), il palloncino all'altalena (6), la lattina tirata in aria dal Taglia a seria e a fassi male (8). Si deve battere il punteggio del - Taglia (22, 34, 44 secondo il livello, ±3). [DA ANDREA] la foto del Taglia per lo sprite, e le battute. + Taglia (22, 34, 44 secondo il livello, ±3). Il Taglia sta al campone (sprite di Codex dalla sua foto, più alto di Andrea); si gareggia + parlandogli. [DA ANDREA] le battute. - **La macchina del tempo e il pokerino del 1997 (29 ottobre)**: dall'Arcu sotto la tenda del Trappola, «Bei tempi quando qui si faceva i pokerini…»: compare la macchina del tempo in Via Liguri Magelli. Dentro, il cruscotto (Codex) compone 10/07/1997 18:30, poi tremori, lampi e il bianco (primo piano `viaggio`, `src/engine/viaggio.js`, tempi in diff --git a/src/story/story.js b/src/story/story.js index fa9febf..fe0983a 100644 --- a/src/story/story.js +++ b/src/story/story.js @@ -276,9 +276,9 @@ export const story = { type: 'condor', picture: 'assets/closeups/campone-condor.png', names: { player: 'Andrea', cpu: 'il Taglia' }, - win: [{ say: 'Battuto il Taglia! Con la sua Condor, per giunta.' }, { set: 'condor_vinta' }], - lose: [{ say: 'Il Taglia ha la mano ferma. Io ho il fiatone.' }], - draw: [{ say: 'Pari. Si rifà, tanto i pallini gialli un mancano mai.' }], + win: [{ say: 'Battuto il Taglia! Con la sua Condor, per giunta.' }, { say: 'Fortuna. Domani la rivinco.', who: 'taglia', pose: 'shrug' }, { set: 'condor_vinta' }], + lose: [{ say: 'Il Taglia ha la mano ferma. Io ho il fiatone.' }, { say: 'Si torna quando vuoi. I pallini gialli un mancano mai.', who: 'taglia', pose: 'laugh' }], + draw: [{ say: 'Pari. Si rifà?' }, { say: 'Si rifà.', who: 'taglia', pose: 'explain' }], quit: [{ say: 'La Condor la rendo al Taglia. Per ora.' }], }, // Le macchinine sulla pista col gesso, sul parcheggio di Cardetole, contro il Chiaru (Andrea, 28 e 29 ottobre). @@ -368,6 +368,8 @@ export const story = { // Lo zio Mario di Andrea (sprite di Codex dalla foto di Andrea, 29 ottobre), alla Ghiacciomobile nel muro. zio_mario: { name: 'Lo zio Mario', color: '#cfe3ff', sprite: 'assets/characters/zio_mario.json' }, chiaru: { name: 'Il Chiaru', color: '#ffd6a0', sprite: 'assets/characters/chiaru.json' }, + // Andrea Tagliaferri, il Taglia (consenso suo, 29 ottobre): sprite di Codex dalla sua foto. + taglia: { name: 'Il Taglia', color: '#ffe36a', sprite: 'assets/characters/taglia.json' }, barondeduke: { name: 'Il BaronDeDuke', color: '#e0c090', sprite: 'assets/characters/barondeduke.json' }, mariano: { name: 'Mariano', color: '#ffb0a3', sprite: 'assets/characters/mariano.json' }, // Non parla: è una cosa, disegnata come un personaggio per stare davanti o dietro ad Andrea. @@ -1337,6 +1339,9 @@ export const story = { walk: [[0, 360], [0, 232], [640, 232], [640, 360]], depth: [[232, 0.55], [360, 1.15]], entry: [580, 340], + speakers: { taglia: [470, 214] }, + // Il Taglia con la sua Condor, più alto di Andrea (che è un metro e ottanta). + people: [{ who: 'taglia', at: [470, 296], facing: -1, size: 1.2, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 3.9 }], hotspots: [ { id: 'giochi', name: 'giochi', box: [196, 120, 330, 100], at: [360, 250], face: 'up', @@ -1367,6 +1372,13 @@ export const story = { { id: 'alla_strada', name: 'indietro, sulla strada della stazione', box: [100, 336, 440, 24], at: [300, 352], exit: { scene: 'viale_stazione', at: [620, 280], face: 'left' }, }, + { + 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.' }], + talk: [{ dialogue: 'taglia' }], + }, + }, ], }, // Via Calimara: dalla Piazza scende alla farmacia, in Via Provinciale. @@ -3910,6 +3922,33 @@ export const story = { }, }, }, + // Il Taglia al campone delle poste, con la Condor (Andrea, 29 ottobre). [DA ANDREA: battute provvisorie] + taglia: { + nodes: { + start: { + options: [ + { text: 'Taglia! Si fa una gara con la Condor?', next: 'livello', then: [ + { say: 'Io ho già tirato: ora tocca a te. Dodici pallini gialli, e devi fare più di me.', who: 'taglia', pose: 'explain' }, + { say: 'Come la vuoi?', who: 'taglia', pose: 'talk' }, + ] }, + { text: 'A cosa si tira?', then: [ + { say: 'Il cartone sull\'albero, le lattine sulla panchina, le bottigliette sulla porta e il palloncino all\'altalena.', who: 'taglia', pose: 'explain' }, + { say: 'E se la vuoi seria, ogni tanto ti tiro una lattina in aria.', who: 'taglia', pose: 'laugh' }, + ] }, + { 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' }, + ], + }, + livello: { + options: [ + { text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona: ti faccio vedere dove arriva il pallino.', who: 'taglia', pose: 'talk' }, { closeup: 'condor', level: 'bona' }] }, + { text: 'Seria.', next: 'end', then: [{ say: 'Seria. Occhio alla lattina in aria.', who: 'taglia', pose: 'explain' }, { closeup: 'condor', level: 'seria' }] }, + { text: 'A fassi male.', next: 'end', then: [{ say: 'A fassi male? Allora tiro più forte, e più spesso.', who: 'taglia', pose: 'laugh' }, { closeup: 'condor', level: 'male' }] }, + { text: 'No, dopo.', next: 'start' }, + ], + }, + }, + }, // Il Chiaru al parcheggio di Cardetole, accanto alla pista col gesso (Andrea, 29 ottobre). [DA ANDREA: battute provvisorie] chiaru: { nodes: { diff --git a/tests/condor.browser.mjs b/tests/condor.browser.mjs index 1cad311..167b8e3 100644 --- a/tests/condor.browser.mjs +++ b/tests/condor.browser.mjs @@ -1,4 +1,4 @@ -// La Condor nel browser vero: al campone delle poste, mira, fiato trattenuto e tiro col mouse e col dito. +// La Condor nel browser vero: dal Taglia al campone delle poste, mira, fiato trattenuto e tiro col mouse e col dito. // npm run browser:condor — schermate in /tmp/regolo-condor. import { chromium } from 'playwright'; import { mkdirSync } from 'node:fs'; @@ -20,7 +20,9 @@ try { await page.evaluate(async () => { const { settle } = await import('/tests/helpers.mjs'); settle(game); game.go('giardini_poste'); settle(game); - game.queue.push({ closeup: 'condor', level: 'seria' }); settle(game); + game.act('talk', 'taglia'); settle(game); + game.choose(game.options().findIndex(o => o.text.startsWith('Taglia! Si fa una gara'))); settle(game); + game.choose(game.options().findIndex(o => o.text === 'Seria.')); settle(game); }); await page.waitForSelector('#bocce-controls:not([hidden])'); await page.waitForFunction(async () => (await import('/src/engine/render.js')).hasBackground('assets/closeups/campone-condor.png')); diff --git a/tests/condor.test.mjs b/tests/condor.test.mjs index 56cb702..3760ce9 100644 --- a/tests/condor.test.mjs +++ b/tests/condor.test.mjs @@ -88,3 +88,16 @@ test('il disegno della Condor non cambia lo stato', () => { assert.ok(calls.some(([op, t]) => op === 'fillText' && t === 'BATTUTO IL TAGLIA!')); assert.ok(MINIGAMES.condor); }); + +test('dal Taglia, al campone delle poste: la gara, il livello e la Condor', () => { + const g = new Game(story); g.go('giardini_poste'); settle(g); + const h = g.hotspot('taglia'); + assert.equal(g.hotspotAt([h.box[0] + h.box[2] / 2, h.box[1] + h.box[3] / 2]).id, 'taglia'); + g.act('talk', 'taglia'); settle(g); + g.choose(g.options().findIndex(o => o.text.startsWith('Taglia! Si fa una gara'))); settle(g); + g.choose(g.options().findIndex(o => o.text === 'A fassi male.')); settle(g); + assert.equal(g.closeup?.id, 'condor'); assert.equal(g.closeup.level, 'male'); + g.closeup.step = 'result'; g.closeup.result = { winner: 'player', points: 50, taglia: 44 }; + g.closeupClose(); settle(g); + assert.ok(g.state.flags.condor_vinta); +}); diff --git a/tools/voci.json b/tools/voci.json index 04120fb..f4a6aa1 100644 --- a/tools/voci.json +++ b/tools/voci.json @@ -70,5 +70,8 @@ "pescatori": { "speaker": "Dionisio Schuyler", "filtro": "asetrate=24000*1.08,aresample=24000,atempo=1.04" + }, + "taglia": { + "speaker": "Aaron Dreschner" } }