Primo capitolo: la torcia nella fessura del bastione mostra il palio e due occhi gialli
- le impronte portano a una fessura nel bastione; con la torcia si vede un angolo del palio (l'omino con la maglia rossa del quadro vero, già descritto sul manifesto) e due occhi gialli: fine del primo capitolo - la soluzione passa per indovinello, oratorio e catena del ghiacciolo; tragitti calcolati dalle uscite - il Trebbio ha un indizio per ogni tappa della torcia - tools/pronuncia.json: le parole che XTTS legge male, riscritte solo per la voce («celo» → «ce l'ho») - voci delle battute nuove Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ApqNBvNbNCwXqR2RLo8QJh
This commit is contained in:
+45
-6
@@ -1,14 +1,53 @@
|
||||
// La soluzione completa, passo per passo: la percorre tests/story.test.mjs a ogni modifica della storia.
|
||||
// Passi: [verbo, bersaglio, oggetto?] oppure ['choose', testo dell'opzione].
|
||||
// La soluzione completa, passo per passo: la percorre tests/story.test.mjs a ogni modifica della storia,
|
||||
// e tests/browser.mjs con clic veri. Passi: [verbo, bersaglio, oggetto?] oppure ['choose', testo dell'opzione].
|
||||
// I tragitti fra le scene (`route`) seguono le uscite più brevi: cambiano da soli se cambia la mappa.
|
||||
import { story } from './story.js';
|
||||
|
||||
// Le uscite che si prendono sempre col Vai a: senza condizioni e senza una battuta che le sostituisce.
|
||||
const exits = id => (story.scenes[id].hotspots ?? []).filter(h => h.exit && !h.when && !h.actions?.walk);
|
||||
|
||||
export function route(from, to) {
|
||||
const back = new Map([[from, null]]), queue = [from];
|
||||
for (let i = 0; i < queue.length && !back.has(to); i++)
|
||||
for (const h of exits(queue[i]))
|
||||
if (!back.has(h.exit.scene)) { back.set(h.exit.scene, [queue[i], h.id]); queue.push(h.exit.scene); }
|
||||
if (!back.has(to)) throw new Error(`nessuna strada da ${from} a ${to}`);
|
||||
const steps = [];
|
||||
for (let at = to; back.get(at); at = back.get(at)[0]) steps.unshift(['walk', back.get(at)[1]]);
|
||||
return steps;
|
||||
}
|
||||
|
||||
export const solution = [
|
||||
// La squama: i vecchietti raccontano del luccichio sotto la panchina.
|
||||
['look', 'colonna'],
|
||||
['talk', 'vecchietti'],
|
||||
['choose', 'Avete notato niente di strano stanotte?'],
|
||||
['choose', 'Ci vediamo dopo.'],
|
||||
['take', 'cosa_luccicante'],
|
||||
['walk', 'verso_villa_adami'],
|
||||
['walk', 'su_villa_adami'],
|
||||
['walk', 'salita'],
|
||||
['walk', 'su_fortezza'],
|
||||
// Le impronte sotto la Fortezza: il Regolo è passato di qui, e le impronte vanno verso il bastione.
|
||||
...route('piazza', 'fortezza'),
|
||||
['use', 'impronte', 'squama'],
|
||||
['look', 'fessura'],
|
||||
// La chiave dell'oratorio: l'indovinello di San Pietro (la risposta la dà il bastione).
|
||||
...route('fortezza', 'pieve'),
|
||||
['talk', 'statua'],
|
||||
['choose', 'Nove.'],
|
||||
['open', 'porta_oratorio'],
|
||||
['take', 'gomma_terra'],
|
||||
// La Tosca: cedrata e ghiacciolo, e resta lo stecco; con la gomma diventa uno stecco che appiccica.
|
||||
...route('oratorio', 'tennis_chiesa'),
|
||||
['talk', 'chiosco'],
|
||||
['choose', 'Una cedrata, da portare via.'],
|
||||
['choose', 'Un ghiacciolo al limone.'],
|
||||
['choose', 'Niente, grazie Tosca.'],
|
||||
['use', 'cedrata', 'ghiacciolo'],
|
||||
['use', 'gomma', 'stecco'],
|
||||
// La chiavetta sotto la griglia del ponticino, la casetta dell'area feste, la torcia.
|
||||
...route('tennis_chiesa', 'ponticino'),
|
||||
['use', 'griglia', 'stecco_gomma'],
|
||||
...route('ponticino', 'area_feste'),
|
||||
['open', 'casetta'],
|
||||
// La torcia nella fessura: il palio, e due occhi gialli. Fine del primo capitolo.
|
||||
...route('area_feste', 'fortezza'),
|
||||
['use', 'fessura', 'torcia'],
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user