Files
leggenda-del-regolo/src/story/story.js
T

3392 lines
223 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Storia del prototipo: le scene del paese a gradini (docs/PROGETTO.md, «La mappa») per collaudare il motore.
// Testi, personaggi ed enigmi sono provvisori e verranno sostituiti con i ricordi di Andrea (docs/PROGETTO.md).
// Le forme in `art` sono segnaposto disegnati sopra lo sfondo (vecchietti, squama, catena) in attesa degli sprite.
import { ambience } from './ambience.js';
import { piloti } from './piloti.js';
// Gli indizi del Trebbio per la catena della torcia (dopo le impronte, finché la torcia non c'è): uno per tappa,
// dalla più avanti alla prima.
const castello = say => [{ say, who: 'castello' }];
// Prima del GP di Fortezza l'Arcu va a prendere il Betino in cima alla salita (Andrea, 28 ottobre).
const rincorsa = level => [{ say: 'Aspettate: prendo la rincorsa, che il Betino s\'accende solo in discesa.', who: 'arcu', pose: 'point' }, { closeup: 'gara', level }];
const torchHints = [{
if: 'has:chiavetta',
then: castello('Una chiavetta piccola apre una cosa piccola. All\'area feste c\'è una casetta che aspetta.'),
else: [{
if: 'has:stecco_gomma',
then: castello('Uno stecco che appiccica pesca dove le mani non arrivano. Al ponticino, sotto la griglia, qualcosa luccica.'),
else: [{
if: ['has:stecco', 'has:gomma'],
then: castello('Lo stecco e la gomma, da soli, non servono a niente. Insieme, chissà.'),
else: [{
if: 'has:stecco',
then: [{
if: 'oratorio_aperto',
then: castello('Allo stecco serve qualcosa che appiccica. Guarda per terra all\'oratorio: i ragazzi lasciano sempre qualcosa.'),
else: [{
if: 'has:chiave_oratorio',
then: castello('Hai una chiave in tasca, e alla Pieve c\'è una porta che la aspetta.'),
else: castello('San Pietro tiene le chiavi, e un indovinello per chi le vuole. La risposta è dentro la sua Pieve: guarda il fonte battesimale.'),
}],
}],
else: [{
if: ['has:ghiacciolo', 'has:cedrata'],
then: castello('Ghiacciolo e cedrata in tasca, e li tieni lì? Il ghiacciolo nella cedrata: guarda cosa resta in mano.'),
else: [{
if: 'has:ghiacciolo',
then: castello('Un ghiacciolo da solo si scioglie e basta. Alla Tosca chiedi anche una cedrata.'),
else: castello('Per il buio ci vuole una luce. Comincia dal fresco: la Tosca, al tennis della chiesa, ha un ghiacciolo che fa al caso tuo.'),
}],
}],
}],
}],
}],
}];
export const story = {
title: 'La Leggenda del Regolo',
// La mappa (pulsante «Mappa»): ogni scena con `map: [x, y]` (percentuali della pianta) ci compare quando è
// stata visitata; le strade sono le uscite fra scene. Un posto nuovo entra con la sua riga `map`.
start: { scene: 'piazza', at: [250, 320] },
// Le fasi del giorno (idea di Andrea, 24 ottobre): seguono la storia, non l'orologio. Il primo capitolo comincia
// di pomeriggio; con le impronte del Regolo viene il tramonto, e quando Andrea ha la torcia è sera. Sulle scene
// all'aperto un velo di colore (`tint`); luci ed effetti possono valere solo in certe fasi (`phase`).
phases: [
{ id: 'pomeriggio' },
{ id: 'tramonto', when: 'indizio_regolo', tint: 'rgba(255, 110, 40, 0.16)' },
{ id: 'sera', when: 'casetta_aperta', tint: 'rgba(24, 28, 90, 0.42)', music: 'assets/audio/sera.mp3' },
],
// Il taccuino (pulsante «Taccuino», tasto N): le tappe del capitolo in ordine. Una tappa è fatta quando la sua
// condizione `done` è vera; la prima non fatta è l'obiettivo di adesso. Solo testo: non si sente a voce.
notebook: [
{ done: 'luccichio', text: 'Il palio è sparito dalla scuola, dove lo tenevano: stamani se n\'è accorta la Gianna. La festa è domani. Chiedo in giro: i vecchietti in piazza sanno sempre tutto.' },
{ done: 'squama_presa', text: 'La vecchietta ha visto luccicare qualcosa sotto la panchina, in piazza.' },
{ done: 'indizio_regolo', text: 'Una squama, grossa e luccicante. Chi l\'ha persa avrà lasciato altre tracce: lassù sotto la Fortezza, magari.' },
{ done: 'casetta_aperta', text: 'Le tracce finiscono in una fessura del bastione, buia pesta. Mi serve una torcia: nella casetta dell\'area feste ce n\'è una, ma è chiusa col lucchetto.' },
{ done: 'palio_trovato', text: 'Ho la torcia: di corsa alla fessura sotto la Fortezza!' },
],
notebookHelp: 'Se non so più cosa fare: al Trebbio, la torre dà sempre un consiglio.',
// I quattro rioni del Palio: dopo «Nuova partita» si sceglie per chi corre Andrea, e la partita lo ricorda col
// flag `rione:<id>`. Le battute che parlano del rione di Andrea lo controllano con `if`.
// Per ora si corre solo per Campomigliaio (decisione di Andrea, 24 ottobre: ogni rione vuol dire battute e voci
// in più); gli altri si vedono chiusi (`locked`) e si sbloccano togliendo la riga.
rioni: {
piazza: { name: 'Piazza', colors: 'i rossi', color: '#d0453a', locked: true },
pieve: { name: 'Pieve', colors: 'i bianchi', color: '#f2eee2', locked: true },
cardetole: { name: 'Cardetole', colors: 'i verdi', color: '#3fa34d', locked: true },
campomigliaio: { name: 'Campomigliaio', colors: 'i blu', color: '#2f6fd0' },
},
// Le righe dell'introduzione, sopra il panorama del paese, prima della prima scena.
intro: [
'San Piero a Sieve, nel Mugello. Fine maggio 2007.',
'In paese si prepara il Palio della Fortezza: i quattro rioni si sfidano, e chi vince si porta a casa il palio, il quadro dipinto dai ragazzi delle medie.',
// La riga del rione: quella del rione scelto dopo «Nuova partita» (story.rioni).
{ rione: {
piazza: 'Io corro per la Piazza, i rossi.',
pieve: 'Io corro per la Pieve, i bianchi.',
cardetole: 'Io corro per Cardetole, i verdi: gioco in casa.',
campomigliaio: 'Io corro per Campomigliaio, i blu.',
} },
'E stamattina, in piazza, è successo qualcosa...',
],
// Colonna sonora di Andrea (fatta con Suno): titolo, paese, ricordi (fine e Trebbio).
// splash: la musichetta del cartello d'apertura (tools/jingle.py), suonata una volta sola.
music: { splash: 'assets/audio/cartello.mp3', title: 'assets/audio/titolo.mp3', game: 'assets/audio/paese.mp3', ending: 'assets/audio/ricordi.mp3' },
// I crediti, schermata «Crediti» dal titolo e dalla fine: un ruolo e chi l'ha fatto. Arriveranno man mano.
// Un nome può avere il suo ritratto a pixel (face): nei Ringraziamenti si tocca il nome e compare il volto.
credits: [
{ role: 'Un gioco di', names: [{ name: 'Manzolo (Andrea Manzi)', face: 'assets/credits/manzolo.png' }] },
{ role: 'Idee e consigli', names: [{ name: 'Baldoria (Yuri Baldi)', face: 'assets/credits/baldoria.png' }, { name: 'BaronDeDuke (Gabriele Rossi)', face: 'assets/credits/barondeduke.png' }, { name: 'Tozzino (Francesco Tozzi)', face: 'assets/credits/tozzino.png' }, { name: 'l\'Arcu (Marco Arcuri)', face: 'assets/credits/arcu.png' }, { name: 'Eriketta (Erika Fenaroli)', face: 'assets/credits/eriketta.png' }] },
{ role: 'Storia e aneddoti di San Piero', names: [{ name: 'Francesco Bacci', face: 'assets/credits/bacci.png' }, 'Fabrizio Berti, «Memorie di sport e di paese»'] },
{ role: 'Musica', names: ['Manzolo, con Suno'] },
{ role: 'Sfondi', names: ['dalle fotografie di San Piero di Andrea'] },
// Chi ci ha mandato foto, ricordi o idee: una riga per contributo, si allunga man mano.
{ role: 'Fotografie', names: [{ name: 'Mariano Mirannalti (l\'interno della Pieve)', face: 'assets/credits/mariano.png' }] },
{ role: 'Opere d\'arte nel gioco', names: [{ name: 'il palio del 2007, dipinto dai ragazzi delle medie', face: 'assets/credits/palio.png' }, 'Simone Rocchi (l\'omino di ferro del tennis della chiesa)'] },
{ role: 'Voci', names: ['XTTS-v2 di Coqui'] },
{ role: 'Carattere', names: ['Press Start 2P di CodeMan38 (licenza OFL)'] },
{ role: 'Programmazione', names: ['Manzolo, con Claude e Codex'] },
],
// Primi piani interattivi: libro dell'oratorio e ricerca con la torcia nella fessura.
// Le immagini (Codex, assets/closeups/) hanno l'etichetta e le pagine vuote: titolo e «FINE» li scrive il codice.
closeups: {
// [DA ANDREA: chi è] Partita facoltativa; battute provvisorie.
briscola: {
type: 'briscola', music: 'assets/audio/carte.mp3', names: { player: 'Andrea', cpu: 'Il giocatore' }, decks: { napoletane: 'carte_napoletane' },
win: [{ set: 'briscola_vinta' }, { set: 'briscola_giocata' }, { say: 'Oh, bravo! Ora però rimescolo io.', who: 'giocatore_carte', pose: 'laugh' }],
lose: [{ set: 'briscola_giocata' }, { say: 'I carichi portali qui, mica alla stazione! Rivincita quando vuoi.', who: 'giocatore_carte', pose: 'laugh' }],
draw: [{ set: 'briscola_giocata' }, { say: 'Sessanta pari. Un si litiga nemmeno sul conto!', who: 'giocatore_carte', pose: 'talk' }],
quit: [{ say: 'Vai, ti tengo il posto. Le carte mica scappano.', who: 'giocatore_carte' }],
},
// I tre tavoli da carte suonano il valzer della balera (tools/valzer_carte.py, Andrea: «una sua melodia»).
// Il tressette a coppie ai 21 (idea di Andrea): busso, striscio, volo e accuse. [DA ANDREA: chi sono il socio e l'altro]
tressette: {
type: 'tressette', music: 'assets/audio/carte.mp3', names: { player: 'Andrea', cpu: 'Il giocatore' }, decks: { napoletane: 'carte_napoletane' },
seats: ['Andrea', 'Il giocatore', 'Il socio', 'L\'altro'],
win: [{ set: 'tressette_vinto' }, { say: 'Ventuno per primi. Bella coppia, voi due!', who: 'giocatore_carte', pose: 'laugh' }],
lose: [{ say: 'Ventuno! Il tressette è un\'arte: si studia da piccini.', who: 'giocatore_carte', pose: 'laugh' }],
draw: [],
quit: [{ say: 'Vai, ti tengo il posto. Le carte mica scappano.', who: 'giocatore_carte' }],
},
// La scopa ai 11 (idea di Andrea): carte, mattoni (o denari), settebello, primiera e scope.
scopa: {
type: 'scopa', music: 'assets/audio/carte.mp3', names: { player: 'Andrea', cpu: 'Il giocatore' }, decks: { napoletane: 'carte_napoletane' },
win: [{ set: 'scopa_vinta' }, { say: 'Settebello, primiera e pure le scope. Oggi l\'hai vista bene.', who: 'giocatore_carte', pose: 'talk' }],
lose: [{ say: 'Undici! Il settebello lo sento arrivare da lontano.', who: 'giocatore_carte', pose: 'laugh' }],
draw: [],
quit: [{ say: 'Vai, ti tengo il posto. Le carte mica scappano.', who: 'giocatore_carte' }],
},
// Le bocce al pallaio contro Mariano, il campione (idea di Andrea, 25 ottobre): solo per gloria.
bocce: {
type: 'bocce', music: 'assets/audio/bocce.mp3', // la polka del pallaio (tools/polka_bocce.py, Andrea: «un sound suo»)
picture: 'assets/closeups/pallaio.png',
names: { player: 'Andrea', cpu: 'Mariano' },
win: [
{ say: 'Aspetta, ci vuole il metro...', who: 'mariano', pose: 'measure' },
{ say: 'Hai vinto, ti ci porto!', who: 'mariano', pose: 'laugh' },
{ set: 'bocce_vinte' },
],
lose: [
{ say: 'Bocciato! Al pallaio comando io.', who: 'mariano', pose: 'cheer' },
{ say: 'Quando vuoi la rivincita, sono qui.', who: 'mariano' },
],
quit: [{ say: 'Già stanco? Il pallaio ti aspetta.', who: 'mariano', pose: 'laugh' }],
draw: [{ say: 'Quando vuoi la rivincita, sono qui.', who: 'mariano' }],
},
// «Fai due tiri» al campo da basket del Circolo 4 Maggio (idea di Andrea, 27 ottobre): da solo, dieci palloni,
// si arretra a ogni canestro. La gloria dipende dal livello (basket.LEVELS). [DA ANDREA: le sue battute]
basket: {
type: 'basket',
picture: 'assets/closeups/basket-campo.png',
names: { player: 'Andrea', cpu: 'il canestro' },
win: [
{ say: 'Che mano! Jordan, fatti da parte.' },
{ set: 'basket_vinto' },
],
lose: [
{ say: 'Il ferro oggi era stretto. Riprovo dopo.' },
],
quit: [{ say: 'Lascio il pallone lì. Tanto lo sanno tutti che è mio.' }],
draw: [],
},
// La pesca al lago dell'Anatre coi ragazzi delle canne (idea di Andrea, 28 ottobre): sei lanci, da solo con la
// canna di bambù; la gloria dipende dal livello (pesca.LEVELS). [DA ANDREA: le sue battute]
pesca: {
type: 'pesca',
picture: 'assets/closeups/lago-anatre.png',
names: { player: 'Andrea', cpu: 'il lago' },
win: [
{ say: 'Oh, hai visto? Mica male, per una canna di bambù.', who: 'pescatori', pose: 'laugh' },
{ say: 'Stasera si frigge. Ma prima il palio.' },
{ set: 'pesca_vinta' },
],
lose: [
{ say: 'I pesci c\'erano. Eri te che non c\'eri.', who: 'pescatori', pose: 'talk' },
{ say: 'Si rifà. Dopo il palio.' },
],
quit: [{ say: 'Lascio la canna ai ragazzi. Il lago non scappa, il palio sì.' }],
draw: [],
},
// Il GP di Fortezza (idea di Andrea, 28 ottobre): tre giri coi cinquantini attorno alle mura, gas e sterzo come
// nelle vecchie gare da sala giochi viste dall'alto. Chi corre sta in piloti.js. [DA ANDREA: le battute; la musica]
gara: {
type: 'gara', music: 'assets/audio/gara.mp3', // di Andrea (Suno)
picture: 'assets/closeups/gp-fortezza.png', // Codex, dalla planimetria di Andrea; la strada è il tracciato
// Corre solo chi ha dato il consenso (`consenso: null` vuol dire «da chiedere»: per ora Puntella).
riders: piloti.filter(p => p.consenso !== null),
names: { player: 'Andrea', cpu: 'gli altri' },
win: [
{ say: 'Primo! E col Fifty di serie, o quasi.' },
{ say: 'Si rifà! Questa un vale, avevo la catena lenta.', who: 'arcu', pose: 'shrug' },
{ set: 'gara_vinta' },
],
lose: [
{ say: 'Ho preso tutta la polvere di quelli davanti.' },
{ say: 'Il Fifty è bono. È chi ci sta sopra.', who: 'arcu', pose: 'laugh' },
],
quit: [{ say: 'Lascio stare. Il Fifty mi serve intero, per il palio.' }],
draw: [],
},
// Il biliardo del Circolo 4 Maggio contro l'Ing. Tozzi: cinque birilli, un colpo a testa, si va a 20. [DA ANDREA: le sue battute]
biliardo: {
type: 'biliardo',
picture: 'assets/closeups/biliardo-tavolo.png',
names: { player: 'Andrea', cpu: 'L\'Ing. Tozzi' },
win: [
{ say: 'Venti. Hai vinto te, stasera il caffè lo pago io.', who: 'ing_tozzi' },
{ set: 'biliardo_vinto' },
],
lose: [
{ say: 'Venti! Al biliardo ci vuole la mano ferma, mica la corsa.', who: 'ing_tozzi' },
{ say: 'Quando vuoi, il tavolo è qui.', who: 'ing_tozzi' },
],
quit: [{ say: 'Lasci a metà? Ti segno la sconfitta a tavolino, eh.', who: 'ing_tozzi' }],
draw: [],
},
rinquarto: {
type: 'rinquarto',
picture: 'assets/closeups/biliardo-tavolo.png',
names: { player: 'Andrea', cpu: 'Trappizzio Berti' },
// Andrea contro Trappizzio Berti, sulle stesse posizioni; nell'allenamento il risultato è sempre «pari». [DA ANDREA: le battute]
win: [{ say: 'M\'hai battuto ai rinquarti. Però un lo dire a nessuno.', who: 'bertovo', pose: 'shrug' }, { set: 'rinquarti_vinti' }],
lose: [{ say: 'Le sponde ci sono per qualcosa! Basta chiederglielo per bene.', who: 'bertovo', pose: 'laugh' }],
quit: [{ say: 'Questo me lo tengo per la prossima.' }],
draw: [{ say: 'Visto? Geometrie celestiali. Si riprova quando vuoi.', who: 'bertovo', pose: 'explain' }],
},
// Le macchinine sulla pista col gesso, sul parcheggio di Cardetole, contro il Chiaru (Andrea, 28 e 29 ottobre).
// [DA ANDREA: le battute sono provvisorie]
micro: {
type: 'micro',
picture: 'assets/closeups/micro-parcheggio.png',
names: { player: 'Andrea', cpu: 'Chiaru' },
cars: { player: 'assets/closeups/micro/rossa.png', cpu: 'assets/closeups/micro/blu.png' },
win: [{ say: 'Hai vinto te. Ma la mia aveva le ruote piene di gesso, sia chiaro.', who: 'chiaru', pose: 'shrug' }, { set: 'micro_vinto' }],
lose: [{ say: 'Visto? La blu non perde mai. Mai.', who: 'chiaru', pose: 'cheer' }],
quit: [{ say: 'Ti ritiri? Allora la vinco a tavolino.', who: 'chiaru', pose: 'laugh' }],
draw: [{ say: 'Pari. Si rifà, ma la pista la ridisegno io.', who: 'chiaru', pose: 'shrug' }],
},
fessura: {
type: 'torch',
picture: 'assets/closeups/palio-2007.jpg',
crop: [82, 36, 220, 331], // la tela nella foto fornita da Andrea, senza il muro intorno
targets: [
{ at: [185, 195], radius: 52, hint: 'Esamina la pietra a sinistra…', lines: [] },
{ at: [348, 225], radius: 55, hint: 'Qualcosa riflette la luce, più in basso…', lines: [
{ say: 'Laggiù, appoggiato al muro, c\'è un angolo di tela dipinta: una strada bianca, e un omino con la maglia rossa e le braccia alzate.' },
{ say: 'È il palio! Il quadro dei ragazzi delle medie!' },
] },
{ at: [462, 138], radius: 45, hint: 'Un rumore nel buio, a destra…', lines: [
{ say: 'E quelli... sono due occhi gialli!' },
] },
],
complete: [
{ say: 'Spariti nel buio.' },
{ set: 'palio_trovato' },
{ say: 'Il Regolo. E ha il nostro palio.' },
{ say: 'Però non l\'ha portato via: l\'ha messo proprio lassù, in Fortezza. Dove domani portiamo i mattoni col passamano.' },
{ say: 'Il palio è già pronto ad aspettarci. Torno giù a dirlo a tutti: la festa si fa!' },
{ end: true },
],
},
libro: {
closed: 'assets/closeups/libro-chiuso.png',
open: 'assets/closeups/libro-aperto.png',
title: 'La storia infinita',
last: 'FINE',
comment: [{ say: 'Mi ricordavo un finale diverso.' }],
// Chiuso dopo aver visto l'ultima pagina (idea di Andrea, 25 ottobre).
closing: [{ say: 'Il «Nulla» sta viaggiando troppo velocemente nell\'animo umano, devo darmi una mossa!' }],
// Dove scrivere, in pixel delle due immagini: l'etichetta della copertina, le due pagine, la piega.
label: [78, 48, 104, 54],
pages: { left: [56, 26, 96, 194], right: [163, 12, 101, 204], spine: 157 },
paper: '#fbe6bc',
},
},
// I video «Come si gioca» (video/SCALETTA-CARTE.md): il pulsante «Guarda il video» nell'aiuto di ogni gioco.
tutorials: {
briscola: { title: 'Come si gioca: la briscola', src: 'assets/video/briscola.mp4', poster: 'assets/video/briscola.jpg' },
tressette: { title: 'Come si gioca: il tressette ai 21', src: 'assets/video/tressette.mp4', poster: 'assets/video/tressette.jpg' },
scopa: { title: 'Come si gioca: la scopa', src: 'assets/video/scopa.mp4', poster: 'assets/video/scopa.jpg' },
bocce: { title: 'Come si gioca: le bocce', src: 'assets/video/bocce.mp4', poster: 'assets/video/bocce.jpg' },
biliardo: { title: 'Come si gioca: il biliardo', src: 'assets/video/biliardo.mp4', poster: 'assets/video/biliardo.jpg' },
},
characters: {
// [DA ANDREA: chi è] Figura inventata, nessuna persona reale.
giocatore_carte: { name: 'Il giocatore di carte', color: '#edc476', sprite: 'assets/characters/giocatore-carte.json' },
andrea: { name: 'Andrea', color: '#ffffff', sprite: 'assets/characters/andrea.json' },
// Andrea col pallone, per «Fai due tiri» (foglio di Codex dal suo sprite): non parla, lo disegna basket-render.
andrea_basket: { name: 'Andrea', sprite: 'assets/characters/andrea-basket.json' },
andrea_pesca: { name: 'Andrea', sprite: 'assets/characters/andrea-pesca.json' },
// Quattro ragazzi inventati (sprite di Codex, idea di Andrea del 27 ottobre): nessuna persona reale.
pescatori: { name: 'I ragazzi delle canne', color: '#b8f08a', sprite: 'assets/characters/pescatori.json' },
vecchietta: { name: 'Vecchietta', color: '#ffd27a', sprite: 'assets/characters/vecchietta.json' },
vecchietto: { name: 'Vecchietto', color: '#9fe3ff', sprite: 'assets/characters/vecchietto.json' },
castello: { name: 'Lo spirito del Trebbio', color: '#c8f0ff' },
leone: { name: 'Il leone', color: '#f0a070' },
san_pietro: { name: 'San Pietro', color: '#e8e0c8' },
tosca: { name: 'La Tosca', color: '#ffb0d0' },
arcu: { name: 'L\'Arcu', color: '#7fb2ff', sprite: 'assets/characters/arcu.json' },
// L'Ing. Tozzi, il campione del biliardo al Circolo 4 Maggio (sprite da fare con Codex: prompts/personaggi/ing-tozzi-sheet.txt).
// Trappizzio Berti (Fabrizio Berti, consenso dato ad Andrea il 28 ottobre), il re dei rinquarti (sprite di Codex dalla sua foto).
bertovo: { name: 'Trappizzio Berti', color: '#9fd0ff', sprite: 'assets/characters/bertovo.json' },
ing_tozzi: { name: 'L\'Ing. Tozzi', color: '#d9c48a', sprite: 'assets/characters/ing-tozzi.json' },
tozzino: { name: 'Il Tozzino', color: '#c8f5b0', sprite: 'assets/characters/tozzino.json' },
// Il Chiaru (Matteo Chiarusi, consenso dato ad Andrea il 29 ottobre), alla pista col gesso di Cardetole: sprite di
// Codex dalla foto di Andrea.
chiaru: { name: 'Il Chiaru', color: '#ffd6a0', sprite: 'assets/characters/chiaru.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.
fra_peppino: { name: 'Fra Peppino', color: '#e8c89a', sprite: 'assets/characters/fra-peppino.json' },
macchina: { name: 'La macchina del tempo', color: '#c8d8e8', sprite: 'assets/characters/macchina-tempo.json' },
betino: { name: 'il Betino', sprite: 'assets/characters/betino.json' },
ghiacciomobile: { name: 'la Ghiacciomobile', sprite: 'assets/characters/ghiacciomobile.json' },
},
items: {
squama: {
name: 'squama',
icon: { src: 'assets/icons/squama.svg', fill: '#4fae5e' },
actions: {
look: [{ say: 'Una squama verde, grande come una moneta da due euro. Puzza di cantina.' }],
use: [{ say: 'Potrei usarla come plettro. Ma prima scopro di chi è.' }],
},
},
// Lo scherzo del libro (idea di Andrea, 2026-10-23): «La storia infinita» ha una pagina sola.
libro: {
name: 'libro',
icon: { src: 'assets/icons/libro.svg', fill: '#c46a3a' },
droppable: true, // non serve alla storia: si può buttare
actions: {
drop: [{ say: 'Una pagina sola, e pure con la fine. Lo lascio qui per il prossimo lettore.' }, { drop: 'libro' }],
look: [{ say: '«La storia infinita». Bello spesso: questo mi tiene compagnia fino a settembre.' }],
// Il primo piano (story.closeups.libro): la battuta la scopre chi guarda, nessuno la racconta.
open: [{ closeup: 'libro' }],
use: [{ closeup: 'libro' }],
},
},
// La catena del ghiacciolo (idea di Andrea, 2026-10-24): la Tosca dà ghiacciolo e cedrata; il ghiacciolo inzuppato
// nella cedrata lascia lo stecco; stecco più gomma (dall'oratorio) ripesca la chiavetta dalla griglia del
// ponticino; la chiavetta apre la casetta dell'area feste, dove c'è la torcia.
ghiacciolo: {
name: 'ghiacciolo',
icon: { src: 'assets/icons/ghiacciolo.svg' },
actions: {
look: [{ say: 'Un ghiacciolo al limone. Si scioglie a guardarlo.' }],
use: [{ say: 'Da solo? No: il ghiacciolo al limone va inzuppato nella cedrata. È la regola.' }],
},
with: {
cedrata: [
{ drop: 'ghiacciolo' }, { drop: 'cedrata' },
{ say: 'Ghiacciolo dentro la cedrata... si scioglie, frizza, è verde e giallo insieme.' },
{ say: 'Esagerato. Buonissimo. La merenda dei campioni.' },
{ give: 'stecco' }, { set: 'stecco_fatto' }, { say: 'Mi resta lo stecco. Non si sa mai.' },
],
},
},
cedrata: {
name: 'cedrata',
icon: { src: 'assets/icons/cedrata.svg' },
actions: {
look: [{ say: 'Una bottiglietta di cedrata, gelata.' }],
use: [{ say: 'Bevuta liscia è sprecata. Ci vuole qualcosa da inzupparci dentro.' }],
},
},
fanta: {
name: 'Fanta',
icon: { src: 'assets/icons/fanta.svg' },
droppable: true,
alone: true, // si beve subito, senza chiedere «con cosa»
actions: {
look: [{ say: 'Una Fanta ghiacciata, arancione come il tramonto.' }],
use: [{ drop: 'fanta' }, { say: 'Glu glu... arancione fino alle orecchie.' }],
},
},
coca: {
name: 'Coca',
icon: { src: 'assets/icons/coca.svg' },
droppable: true,
alone: true, // si beve subito, senza chiedere «con cosa»
actions: {
look: [{ say: 'Una Coca col vetro appannato dal freddo.' }],
use: [{ drop: 'coca' }, { say: 'Fa le bollicine nel naso. Come sempre.' }],
},
},
spuma: {
name: 'spuma bionda',
icon: { src: 'assets/icons/spuma.svg' },
droppable: true,
alone: true, // si beve subito, senza chiedere «con cosa»
actions: {
look: [{ say: 'Una spuma bionda. Ormai la chiedono solo i nonni. E io.' }],
use: [{ drop: 'spuma' }, { say: 'Buona come ai tempi della festa.' }],
},
},
stecco: {
name: 'stecco',
icon: { src: 'assets/icons/stecco.svg' },
actions: {
look: [{ say: 'Lo stecco del ghiacciolo. Appiccica ancora un po\' di limone.' }],
use: [{ say: 'Da solo non arriva a niente. Ci vorrebbe qualcosa che attacca.' }],
},
with: {
gomma: [{ drop: 'stecco' }, { drop: 'gomma' }, { say: 'Mastico la gomma e la attacco in cima allo stecco.' }, { say: 'Ecco una canna da pesca per chiavi. Brevetto San Piero.' }, { give: 'stecco_gomma' }],
},
},
gomma: {
name: 'gomma',
icon: { src: 'assets/icons/gomma.svg' },
actions: {
look: [{ say: 'Una gomma da masticare alla fragola, ancora incartata.' }],
use: [{ say: 'Masticarla così, per niente? Meglio tenerla per quando serve qualcosa che appiccica.' }],
},
},
stecco_gomma: {
name: 'stecco e gomma',
icon: { src: 'assets/icons/stecco_gomma.svg' },
actions: {
look: [{ say: 'Lo stecco con la gomma in cima. Attacca qualunque cosa. Anche le dita.' }],
},
},
chiavetta: {
name: 'chiavetta',
icon: { src: 'assets/icons/chiavetta.svg' },
actions: {
look: [{ say: 'Una chiavetta piccola, ripescata dalla griglia. Di un lucchetto, o di una casetta.' }],
},
},
torcia: {
name: 'torcia',
icon: { src: 'assets/icons/torcia.svg' },
actions: {
look: [{ say: 'Una torcia rossa, funziona. Per il buio della Fortezza, prima o poi, servirà.' }],
use: [{ say: 'Clic. Accesa. Clic. Spenta. Le pile le tengo per quando serve davvero.' }],
},
},
// La chiave dell'oratorio: la dà San Pietro a chi risolve il suo indovinello. Indispensabile: non si butta.
chiave_oratorio: {
name: 'chiave dell\'oratorio',
icon: { src: 'assets/icons/chiave.svg', fill: '#d9b54a' },
actions: {
look: [{ say: 'Una chiave grossa e antica. Quella dell\'oratorio, parola di San Pietro.' }],
},
},
},
scenes: {
piazza: {
name: 'Piazza Colonna',
map: [32, 45],
background: 'assets/scenes/piazza-colonna.png',
effects: [{ type: 'clouds', area: [160, 0, 440, 80], count: 3, big: true }, { type: 'windows', phase: 'sera', rects: [[16, 37, 8, 18], [48, 42, 8, 18], [50, 110, 8, 16], [97, 77, 8, 12], [122, 80, 8, 12], [170, 90, 8, 12], [204, 103, 8, 12], [239, 111, 8, 12], [268, 117, 7, 14], [287, 125, 6, 14], [97, 130, 9, 14], [127, 133, 9, 14], [170, 142, 9, 14], [204, 150, 8, 12], [239, 155, 8, 12], [268, 160, 7, 14], [287, 163, 6, 14], [386, 163, 14, 16], [424, 160, 14, 16], [472, 157, 14, 16], [524, 155, 14, 16], [390, 212, 14, 16], [526, 208, 14, 16]] }, { type: 'birds', phase: ['pomeriggio', 'tramonto'], area: [150, 20, 460, 80] }],
walk: [[84, 244], [330, 238], [345, 230], [362, 238], [462, 246], [466, 276], [544, 276], [548, 248], [588, 250], [600, 290], [640, 300], [640, 360], [0, 360], [0, 330], [84, 318]],
depth: [[236, 0.5], [360, 1.35]],
entry: [345, 240],
speakers: { vecchietta: [24, 250], vecchietto: [56, 244] },
// I vecchietti seduti sulla panchina: fotogrammi in assets/characters (pose e battute in game.personPose).
people: [
{ who: 'vecchietta', at: [24, 317], size: 0.92, talk: ['talk', 'explain'], blink: 'blink', every: 3.7 },
{ who: 'vecchietto', at: [56, 304], size: 0.88, talk: ['talk', 'explain'], blink: 'doze', every: 5.3, offset: 2 },
],
hotspots: [
{
id: 'colonna', name: 'colonna', box: [492, 134, 36, 140], at: [505, 290], face: 'up',
actions: {
look: [{ say: 'La colonna, il centro del paese. Da qui passa tutto: le notizie, il Palio, i pettegolezzi.' }, { if: 'rione:piazza', then: [{ say: 'E qui è casa del mio rione: noi rossi.' }] }, { say: 'Ai piedi c\'è una strana scia luccicante che va a sinistra, verso la salita di Villa Adami.' }],
take: [{ say: 'Se mi porto via la colonna, la piazza come la chiamano?' }],
use: [{ say: 'Arrampicarmi? Il palio lassù non c\'è comunque.' }],
},
},
{
// La Torre dello Scoronconcolo (aneddoto trovato da Andrea su Wikipedia, «Michele del Tavolaccino»):
// il sanpierino che aiutò Lorenzino de' Medici ad ammazzare il duca Alessandro, nel 1537.
id: 'torre_scoronconcolo', name: 'Torre dello Scoronconcolo', box: [474, 58, 62, 70], at: [505, 290], face: 'up',
actions: {
look: [
{ say: 'La Torre dello Scoronconcolo. Era una vecchia torre di guardia, già in disuso nel Cinquecento.' },
{ say: 'Ci si rifugiò Michele del Tavolaccino, detto Scoronconcolo, sanpierino: nel 1537 aiutò Lorenzino de\' Medici ad ammazzare il duca Alessandro.' },
{ say: 'Nel 1539 finì sulle galere dell\'ordine gerosolimitano, in guerra contro i Turchi. Altro che Palio.' },
],
open: [{ say: 'Da quassù non ci arrivo. E poi, di nascondigli in quella torre, ce n\'è già stato uno di troppo.' }],
take: [{ say: 'Una torre in tasca? Nemmeno lo Scoronconcolo ci è riuscito.' }],
},
},
{
id: 'bar', name: 'La Colonna', box: [428, 208, 30, 40], at: [443, 252], face: 'up',
actions: {
look: [{ say: 'Il bar della piazza. Chi c\'era dietro il bancone nel 2007? Questo lo sa solo Andrea.' }],
open: [{ say: 'Ci torno quando ho qualche soldo in tasca.' }],
talk: [{ say: 'Parlare con una porta. Neanche al Palio si arriva a tanto.' }],
},
},
{
id: 'verso_gelateria', name: 'strada verso il Fiocco di Neve', box: [570, 150, 28, 100], at: [580, 256], face: 'right', default: 'walk',
actions: {
walk: [{ say: 'Di là c\'è la gelateria del Fiocco di Neve.' }, { say: 'Con questo caldo, un bel gelatino ci starebbe proprio bene...' }, { say: 'No. Prima ritrovo il palio, poi mi premio.' }],
look: [{ say: 'La strada che porta al Fiocco di Neve. Già sento il profumo di cialda.' }],
},
},
{
// Il Circolo 4 Maggio: il portone ad arco del palazzo arancione porta nella sala dei biliardi.
id: 'circolo', name: 'Circolo 4 Maggio', box: [188, 190, 28, 58], at: [202, 252], face: 'up',
actions: {
look: [{ say: 'Il Circolo 4 Maggio. Dentro, dietro il bar, la sala dei biliardi: tre tavoli e il silenzio delle grandi occasioni.' }],
// «Apri» sul portone fa entrare come il clic: nessuno apre una porta per restare fuori.
open: [{ walk: [202, 252] }, { go: 'circolo_4_maggio', at: [590, 202], face: 'left' }],
talk: [{ say: 'Da fuori non si parla con nessuno: al circolo si entra.' }],
},
exit: { scene: 'circolo_4_maggio', at: [590, 202], face: 'left' },
},
{
id: 'manifesto', name: 'manifesto del Palio', box: [256, 196, 18, 24], at: [265, 250], face: 'up',
art: [{ rect: [256, 196, 18, 24], fill: '#f4efe4' }, { rect: [258, 199, 14, 5], fill: '#b7342e' }, { rect: [258, 207, 12, 2], fill: '#3b3b44' }, { rect: [258, 211, 10, 2], fill: '#3b3b44' }, { rect: [258, 215, 12, 2], fill: '#2f5fb3' }],
actions: {
look: [
{ say: 'Il programma del Palio della Fortezza, con la foto del palio: la strada bianca che sale alla Fortezza, i ragazzi in fila, e uno con la maglia rossa che alza le braccia.' },
{ say: 'Qualcuno ci ha scritto sopra col pennarello: «IL REGOLO SI È RIPRESO IL PALIO».' },
],
take: [{ say: 'Il programma lo so a memoria. Il problema è il palio.' }],
},
},
{
id: 'vecchietti', name: 'vecchietti', box: [0, 250, 72, 52], at: [100, 320], face: 'left', default: 'talk',
actions: {
look: [{ say: 'I vecchietti della panchina. Sanno tutto di tutti, soprattutto quello che non è successo.' }],
talk: [
{
if: ['indizio_regolo', '!chiacchiere'],
then: [
{ set: 'chiacchiere' },
{ say: 'Dice che Andrea ha trovato un serpente lungo dodici metri.', who: 'vecchietto', pose: 'point' },
{ say: 'Ma quale serpente. Secondo me va in Fortezza solo per farsi le canne: torna sempre con gli occhi rossi!', who: 'vecchietta' },
{ say: 'Sono qui, eh. Vi sento.' },
{ say: 'Oh! Andrea! Si parlava d\'un altro.', who: 'vecchietta', pose: 'laugh' },
],
},
{ dialogue: 'vecchietti' },
],
take: [{ say: 'Se li porto via, il paese resta senza notizie.' }],
},
give: {
squama: [{ say: 'Guardate cosa ho trovato.' }, { say: 'Bella! È una patatina?', who: 'vecchietta', pose: 'laugh' }, { say: 'Ma che patatina, è il Regolo che fa la muta!', who: 'vecchietto' }, { say: 'Me la tengo io, grazie.' }],
ghiacciolo: [{ say: 'Al limone! Da ragazza me ne mangiavo tre di fila.', who: 'vecchietta', pose: 'laugh' }, { say: 'E poi tre giorni a letto.', who: 'vecchietto' }, { say: 'Me lo tengo io, allora.' }],
libro: [{ say: '«La storia infinita»? Alla mia età, figliolo, meglio qualcosa di corto.', who: 'vecchietto' }, { say: 'Fidati: è più corto di quel che sembra.' }],
},
},
{
id: 'panchina', name: 'sotto la panchina', box: [0, 304, 64, 18], at: [100, 330], face: 'left',
actions: {
look: [{ if: 'luccichio', then: [{ say: 'Qualcosa luccica, proprio sotto i piedi dei vecchietti.' }], else: [{ say: 'Polvere, un tappo e una cicca. La solita archeologia di piazza.' }] }],
},
},
{
id: 'cosa_luccicante', name: 'cosa luccicante', box: [26, 308, 14, 10], at: [100, 330], face: 'left', when: ['luccichio', '!has:squama', '!squama_presa'],
art: [{ rect: [29, 311, 8, 5], fill: '#7fe08a' }, { rect: [31, 311, 3, 2], fill: '#e6ffe0' }],
actions: {
look: [{ say: 'Una cosa verde e luccicante. Non è un tappo.' }],
take: [{ give: 'squama' }, { set: 'squama_presa' }, { say: 'Una squama! E bella grossa.' }],
},
},
// Si compare in basso: la foto di Via Cipriani è presa dall'altro verso (Andrea, 28 ottobre, va bene così).
{
id: 'verso_campeggio', name: 'Via Cipriani, verso il cinema e il campeggio', box: [330, 190, 34, 48], at: [345, 234], exit: { scene: 'via_cipriani', at: [300, 345], face: 'up' },
},
{
id: 'verso_piazzetta', name: 'Via dell\'Antica Posta, verso Piazzetta Cambray Digny', box: [0, 196, 146, 54], at: [92, 250], exit: { scene: 'via_antica_posta', at: [320, 345], face: 'up' },
},
{
id: 'verso_calimara', name: 'Via Calimara, verso la farmacia', box: [180, 334, 380, 26], at: [360, 354], exit: { scene: 'via_calimara', at: [365, 212], face: 'down' },
},
],
enter: [{ if: '!intro', then: [{ set: 'intro' }, { say: 'Il palio è sparito! Il quadro che hanno dipinto i ragazzi delle medie.' }, { say: 'Lo tenevano a scuola: stamani la Gianna ha trovato il posto vuoto.' }, { say: 'La festa è domani: se nessuno lo ritrova, salta tutto. Tocca a me.' }] }],
},
fortezza: {
name: 'Sotto le mura della Fortezza',
map: [36, 6],
background: 'assets/scenes/fortezza-esterno.png',
music: 'assets/audio/fortezza.mp3', // «Sotto i nove bastioni» (Andrea con Suno, 25 ottobre)
// Nella fessura, con la torcia: il pulviscolo nel fascio di luce, e gli occhi gialli che sbattono.
effects: [
{ type: 'dust', when: 'luce_fessura', area: [494, 278, 14, 22], count: 7 },
{ type: 'blink', when: 'occhi_regolo', rects: [[498, 282, 2, 2], [504, 282, 2, 2]], fill: '#ffe14a', every: 700, closed: 120 },
],
walk: [[110, 284], [300, 280], [330, 272], [348, 274], [400, 292], [442, 294], [640, 352], [640, 360], [0, 360], [0, 315], [60, 310], [105, 295]],
depth: [[272, 0.55], [360, 1.15]],
entry: [175, 352],
speakers: { pescatori: [150, 225] },
// Quattro ragazzi sull'erba si fanno le canne da pesca col bambù.
people: [{ who: 'pescatori', at: [150, 322], idle: 'work', talk: ['work', 'talk'], blink: 'laugh', every: 6, size: 1.25 }],
hotspots: [
{
id: 'pescatori', name: 'ragazzi con le canne', box: [92, 236, 120, 86], at: [240, 334], face: 'left', default: 'talk',
actions: {
look: [{ say: 'Quattro ragazzi che affilano canne di bambù col coltellino e ci legano le lenze.' }],
talk: [{ if: '!pescatori_parlato', then: [
{ set: 'pescatori_parlato' },
{ say: 'Oh, che fate?' },
{ say: 'Si preparano le canne: si va a pescare al lago dell\'Anatre, dietro Cardetole!', who: 'pescatori', pose: 'talk' },
{ say: 'Guarda questa: la lenza la regge anche una carpa di dieci chili.', who: 'pescatori', pose: 'proud' },
{ say: '(Vedi, mia mamma aveva ragione: in Fortezza si viene a farsi le canne.)' },
] }, { dialogue: 'pescatori' }],
},
},
{
id: 'mura', name: 'bastione', box: [420, 0, 220, 290],
actions: {
look: [{ say: 'Nove bastioni, li volle Cosimo I. Per tenere fuori i nemici, dicono. Secondo me per tenere dentro il Regolo.' }],
use: [{ say: 'Arrampicarmi sul bastione? Ho visto film che finivano meglio.' }],
},
},
{
id: 'porta', name: 'porta della Fortezza', box: [325, 226, 26, 46], at: [338, 278], face: 'up',
// La catena: la Fortezza è chiusa da anni.
art: [{ rect: [327, 249, 22, 2], fill: '#9a9aa4' }, { rect: [330, 252, 16, 2], fill: '#7c7c86' }, { rect: [335, 251, 6, 6], fill: '#c9a23a' }],
actions: {
look: [{ say: 'La porta della Fortezza. Chiusa con una catena grossa come il mio braccio.' }],
open: [{ say: 'Niente da fare. La Fortezza è chiusa da anni, e il lucchetto lo sa.' }],
talk: [{ say: 'Regolo? Ci sei?' }, { say: '...' }, { say: 'Ho sentito qualcosa. O era la mia pancia.' }],
},
},
{
id: 'impronte', name: 'strane impronte', box: [246, 304, 84, 18], at: [288, 330],
art: [{ poly: [[248, 318], [266, 310], [288, 314], [308, 306], [328, 304], [329, 307], [309, 310], [288, 318], [266, 315], [249, 321]], fill: 'rgba(70, 52, 30, 0.75)' }, { rect: [289, 314, 3, 2], fill: '#9dffa8' }],
actions: {
look: [{ say: 'Niente scarpe, niente zampe. Qualcosa è strisciato nell\'erba fino alla porta.' }, { say: 'Qualcosa di grosso.' }],
take: [{ say: 'Le impronte non si prendono. Si seguono.' }],
},
with: {
torcia: [{ say: 'Di giorno la torcia non serve: le impronte si vedono benissimo. È il buio della fessura, il problema.' }],
squama: [{
if: 'indizio_regolo',
then: [{ say: 'Ormai lo so: è passato di qui. E le impronte piegano verso il bastione.' }],
else: [
{ say: 'Le metto vicine...' },
{ say: 'Stesso luccichio, stessa puzza di cantina. Il Regolo è passato di qui!' },
{ set: 'indizio_regolo' },
{ say: 'Ma la porta è incatenata da anni. E allora da dove è entrato?' },
{ say: 'Le impronte non finiscono alla porta: piegano verso il bastione.' },
{ say: 'E lì, alla base del muro, c\'è una fessura che prima non avevo notato.' },
],
}],
},
},
// Fine del primo capitolo: la fessura si nota solo quando le impronte la indicano (squama sulle impronte); con la torcia si vede il palio, e due occhi gialli.
// Il dettaglio che lo fa riconoscere è quello del quadro vero (foto di Andrea, assets/raw/palio-2007-foto.jpg),
// già visto sul manifesto in piazza: l'omino con la maglia rossa e le braccia alzate.
{
id: 'fessura', name: 'fessura nel bastione', box: [486, 266, 30, 38], at: [462, 310], face: 'right', when: 'indizio_regolo',
art: [
{ poly: [[490, 301], [493, 288], [497, 276], [502, 270], [507, 278], [510, 290], [512, 302]], fill: '#120c08' },
{ when: 'luce_fessura', poly: [[494, 299], [497, 286], [502, 278], [506, 286], [508, 299]], fill: 'rgba(255, 228, 140, 0.6)' },
{ when: 'luce_fessura', rect: [497, 291, 9, 8], fill: '#d9d2b0' },
{ when: 'luce_fessura', rect: [499, 293, 1, 3], fill: '#c0392b' },
{ when: 'luce_fessura', rect: [503, 294, 1, 3], fill: '#9bb04a' },
],
actions: {
look: [{ say: 'Ecco dove vanno le impronte: dentro questa fessura, larga quanto un gatto grasso!' }, { say: 'Dentro è buio pesto, e ne esce un\'aria fresca da cantina. Senza luce non vedo niente.' }, { if: '!has:torcia', then: [{ say: 'Ci vuole una torcia. Quelli della festa ne tengono una nella casetta dell\'area feste, con le prolunghe.' }] }],
use: [{ say: 'Infilarci la mano al buio? Neanche per sogno.' }],
take: [{ say: 'Una fessura non si prende. Al massimo ci si guarda dentro.' }],
open: [{ say: 'È già aperta. Il problema è che è piccola.' }],
talk: [{ say: 'C\'è nessuno?' }, { say: '...' }, { say: 'Solo l\'eco. Spero.' }],
},
with: {
stecco_gomma: [{ say: 'Troppo buio: non vedo nemmeno dove lo infilo. Prima ci vuole una luce.' }],
torcia: [
{ say: 'Accendo la torcia e la punto dentro...' },
{ closeup: 'fessura' },
],
},
},
{
id: 'sentiero_trebbio', name: 'sentiero per il Trebbio', box: [0, 200, 90, 160], at: [20, 330], exit: { scene: 'sentiero_fortezza', at: [325, 190], face: 'down' },
},
{
id: 'verso_villa_adami', name: 'giù per il Poggio, verso Villa Adami', box: [180, 326, 340, 34], at: [330, 352], exit: { scene: 'salita_fortezza', at: [150, 318], face: 'up' },
},
],
},
// Livello 0: la Pieve vista dalla salita, con la salita per Villa Adami alle spalle.
pieve: {
name: 'La Pieve',
map: [56, 45],
background: 'assets/scenes/pieve-dalla-salita.png',
// Quando parla, dalla statua esce lo spirito di San Pietro con le sue chiavi (disegnato da Codex, idea di Andrea).
speakers: { san_pietro: [300, 100] },
apparitions: [{ who: 'san_pietro', src: 'assets/characters/spirito-san-pietro.png', at: [300, 232], height: 100 }],
// La rampa in primo piano e, dietro il muretto, il sagrato (ci si arriva da sinistra).
walk: [[0, 270], [80, 266], [86, 252], [100, 222], [270, 215], [300, 224], [480, 234], [560, 242], [600, 252], [610, 268], [276, 240], [276, 270], [292, 278], [640, 352], [640, 360], [0, 360]],
depth: [[215, 0.42], [360, 1.15]],
entry: [30, 320],
hotspots: [
{
id: 'chiesa', name: 'Pieve di San Pietro', box: [108, 78, 166, 132], at: [200, 290], face: 'up',
actions: {
look: [{ if: 'rione:pieve', then: [{ say: 'La Pieve di San Pietro. Il mio rione: noi bianchi.' }], else: [{ say: 'La Pieve di San Pietro. Il rione Pieve, quelli in bianco.' }] }],
open: [{ say: 'Il prete è a benedire le carrette del Palio. Torno dopo.' }],
},
},
{
id: 'portone', name: 'portone della Pieve', box: [196, 160, 46, 56], at: [218, 222], face: 'up', exit: { scene: 'pieve_interno', at: [320, 352], face: 'up' },
},
{
id: 'campanile', name: 'campanile', box: [272, 8, 60, 140], at: [300, 300], face: 'up',
actions: {
look: [{ say: 'Il campanile della Pieve. Da lassù si vedrebbe tutto il paese. Anche un serpente con le ali.' }],
},
},
{
// San Pietro, quello delle chiavi: a chi risolve l'indovinello dà la chiave dell'oratorio.
id: 'statua', name: 'statua di San Pietro', box: [330, 170, 26, 56], at: [345, 238], face: 'up', default: 'talk',
give: {
squama: [{ say: 'Figliolo, io tengo le chiavi, non le squame. Portala a chi l\'ha persa.', who: 'san_pietro' }],
chiave_oratorio: [{ say: 'Te l\'ho data io: usala, non restituirla. Le chiavi servono alle porte.', who: 'san_pietro' }],
},
actions: {
look: [{ say: 'La statua di San Pietro, con le chiavi in mano. Lui il palio l\'ha visto passare di sicuro.' }],
talk: [{
if: 'chiave_data',
then: [{ say: 'La chiave te l\'ho già data, figliolo. Di solito ne do di più importanti.', who: 'san_pietro' }],
else: [
{ say: 'Buongiorno, San Pietro.' },
{ say: 'Buongiorno a te, Andrea.', who: 'san_pietro' },
{ say: 'La statua parla?!' },
{ say: 'Tengo le chiavi, è il mio mestiere. Quella dell\'oratorio te la do se rispondi a un indovinello sulla mia Pieve.', who: 'san_pietro' },
{ say: 'Il fonte battesimale, là dentro. Per secoli hanno detto che l\'aveva fatto Luca della Robbia. Chi lo fece davvero?', who: 'san_pietro' },
{ dialogue: 'indovinello' },
],
}],
},
},
{
// La porta resta chiusa finché non si usa la chiave; poi è aperta per sempre e la chiave sparisce.
id: 'porta_oratorio', name: 'porta dell\'oratorio', box: [452, 180, 42, 56], at: [473, 240], face: 'up', default: 'open', when: '!oratorio_aperto',
actions: {
look: [{ say: 'La porta che dà sull\'oratorio. Chiusa a chiave.' }],
open: [{
if: 'has:chiave_oratorio',
then: [{ drop: 'chiave_oratorio' }, { set: 'oratorio_aperto' }, { say: 'Clic! Aperta. La chiave la lascio nella serratura: così resta aperta.' }, { go: 'oratorio', at: [320, 345], face: 'right' }],
else: [{ say: 'Chiusa a chiave. E le chiavi, da queste parti, chi le tiene?' }],
}],
walk: [{ say: 'Chiusa a chiave. E le chiavi, da queste parti, chi le tiene?' }],
},
with: {
chiave_oratorio: [{ drop: 'chiave_oratorio' }, { set: 'oratorio_aperto' }, { say: 'Clic! Aperta. La chiave la lascio nella serratura: così resta aperta.' }, { go: 'oratorio', at: [320, 345], face: 'right' }],
},
},
{
id: 'oratorio', name: 'porta dell\'oratorio', box: [452, 180, 42, 56], at: [473, 240], face: 'up', when: 'oratorio_aperto', exit: { scene: 'oratorio', at: [320, 345], face: 'right' },
},
{
id: 'verso_cardetole', name: 'strada per Cardetole', box: [0, 204, 82, 54], at: [95, 250], face: 'left', exit: { scene: 'carza', at: [300, 350], face: 'up' },
actions: {
look: [{ if: 'rione:cardetole', then: [{ say: 'La strada che scende a Cardetole: casa mia, e il mio rione, i verdi.' }], else: [{ say: 'La strada che scende a Cardetole, il rione dei verdi.' }] }],
},
},
{
id: 'verso_provinciale', name: 'Via Provinciale, verso il River', box: [0, 270, 46, 70], at: [14, 312], face: 'left', exit: { scene: 'provinciale_pignone', at: [268, 216], face: 'down' },
},
{
id: 'verso_forno', name: 'a destra, verso il forno', box: [570, 176, 70, 76], at: [588, 250], exit: { scene: 'forno', at: [628, 300], face: 'left' },
},
{
id: 'salita_villa_adami', name: 'salita verso Villa Adami', box: [440, 330, 200, 30], at: [600, 350], exit: { scene: 'villa_adami', at: [595, 268], face: 'left' },
},
],
},
// Dentro la Pieve (dalla foto di Mariano Mirannalti): la navata, l'altare, il crocifisso e San Pietro.
pieve_interno: {
name: 'Dentro la Pieve',
map: [56, 39],
background: 'assets/scenes/pieve-interno.png',
music: 'assets/audio/pieve.mp3', // l'organo soave della chiesa (tools/organo.py, 25 ottobre)
effects: [{ type: 'beam', phase: ['pomeriggio', 'tramonto'], poly: [[22, 122], [32, 118], [250, 360], [150, 360]] }, { type: 'dust', phase: ['pomeriggio', 'tramonto'], area: [60, 200, 90, 110], count: 9 }],
// Penombra, e le sei candele dell'altare accese (Andrea, 24 ottobre).
indoor: true,
shade: 'rgba(14, 8, 24, 0.62)',
// Le candele si accendono dal tramonto: di pomeriggio la chiesa è in penombra e basta.
lights: [[284, 157], [294, 159], [304, 155], [336, 155], [346, 159], [356, 157]].map(at => ({ at, phase: ['tramonto', 'sera'] })),
walk: [[262, 360], [290, 256], [350, 256], [380, 360]],
depth: [[256, 0.7], [360, 1.7]],
entry: [320, 352],
hotspots: [
// Il fonte battesimale robbiano (1518), in primo piano a sinistra come nella Pieve vera (disegnato da Codex dalle
// foto): la risposta all'indovinello di San Pietro (curiosità trovata da Andrea).
{
id: 'fonte', name: 'fonte battesimale', box: [0, 228, 150, 132], at: [276, 335], face: 'left',
actions: {
look: [
{ say: 'Il fonte battesimale, in terracotta invetriata bianca e azzurra. Ci hanno battezzato mezzo paese, me compreso.' },
{ say: 'C\'è un cartellino: «Bottega di Giovanni della Robbia, 1518. Per secoli attribuito a Luca della Robbia».' },
{ set: 'fonte_visto' },
],
use: [{ say: 'Sono già battezzato. Una volta basta e avanza.' }],
take: [{ say: 'Pesa come un\'utilitaria. E poi chi lo spiega al parroco?' }],
},
},
// Il libro dimenticato su una panca (idea di Andrea, 24 ottobre): in copertina la risposta, dentro la domanda.
{
id: 'libro_panca', name: 'libro su una panca', box: [516, 314, 44, 26], at: [372, 335], face: 'right',
art: [
// Il libro sulla seduta della prima panca a destra: copertina rossa, il 42 dorato, il taglio delle pagine.
{ rect: [525, 323, 26, 7], fill: '#c0392b' }, { rect: [525, 323, 26, 1], fill: '#e0604a' }, { rect: [526, 330, 24, 2], fill: '#f3e7c4' },
{ rect: [534, 325, 3, 3], fill: '#ffd76a' }, { rect: [538, 325, 3, 3], fill: '#ffd76a' },
// Da vicino: la copertina col 42, poi l'unica pagina con la domanda.
{ when: 'copertina_42', top: true, rect: [255, 60, 130, 170], fill: '#7a1f1f' },
{ when: 'copertina_42', top: true, rect: [263, 68, 114, 154], fill: '#8e2a26' },
{ when: 'copertina_42', top: true, text: '42', at: [320, 146], size: 48, fill: '#e8c25a' },
{ when: 'pagina_domanda', top: true, rect: [240, 70, 160, 150], fill: '#f1e6c4' },
{ when: 'pagina_domanda', top: true, rect: [240, 70, 160, 4], fill: '#d8c79a' },
{ when: 'pagina_domanda', top: true, text: 'Qual era', at: [320, 132], size: 12, fill: '#2a1f30' },
{ when: 'pagina_domanda', top: true, text: 'la domanda?', at: [320, 156], size: 12, fill: '#2a1f30' },
],
actions: {
look: [
{ set: 'copertina_42' },
{ say: 'Un libro dimenticato su una panca. In copertina, niente titolo: solo un numero. 42.' },
{ unset: 'copertina_42' },
],
open: [
{ say: 'Vediamo cosa c\'è dentro...' },
{ set: 'pagina_domanda' },
{ say: 'Una pagina sola: «Qual era la domanda?».' },
{ unset: 'pagina_domanda' },
{ say: 'Ecco. La risposta ce l\'hanno tutti: è la domanda che non si ricorda nessuno.' },
],
take: [{ say: 'Lo lascio dov\'è. Qualcun altro potrebbe cercare la stessa domanda.' }],
},
},
{
id: 'altare', name: 'altare', box: [270, 186, 100, 64], at: [320, 262], face: 'up',
actions: {
look: [{ say: 'L\'altare, coi candelieri dorati e i fiori freschi. Qualcuno li cambia ogni mattina, prima di tutti.' }],
take: [{ say: 'Un candeliere? Mi sa che San Pietro le chiavi del Paradiso me le toglie per sempre.' }],
},
},
{
id: 'crocifisso', name: 'crocifisso', box: [296, 100, 48, 70], at: [320, 262], face: 'up',
actions: {
look: [{ say: 'Il grande crocifisso di legno, davanti alla statua di San Pietro.' }, { say: 'Qui si abbassa la voce senza che nessuno lo chieda.' }],
},
},
{
id: 'san_pietro_statua', name: 'statua di San Pietro', box: [298, 64, 44, 40], at: [320, 262], face: 'up',
actions: {
look: [{ say: 'San Pietro, il patrono. Quello fuori sul sagrato parla. Questo, per fortuna, no.' }],
},
},
{
id: 'panche', name: 'panche', box: [150, 240, 110, 120], at: [280, 320], face: 'left',
actions: {
look: [{ say: 'Le panche dove ci siamo seduti tutti, dal battesimo in poi. Le più scomode del Mugello.' }],
use: [{ say: 'Un minuto seduto... no, se mi siedo qui mi addormento come alla messa delle undici.' }],
},
},
{
id: 'uscita', name: 'esci sul sagrato', box: [240, 334, 160, 26], at: [320, 356], exit: { scene: 'pieve', at: [218, 222], face: 'down' },
},
],
},
// Il cortile dell'oratorio, dietro la porta della canonica: palco, tettoia, tavolate della festa.
oratorio: {
name: 'Oratorio della Pieve',
map: [82, 45],
background: 'assets/scenes/oratorio.png',
speakers: { giocatore_carte: [595, 185] },
people: [{ who: 'giocatore_carte', at: [595, 239], facing: -1, idle: 'sit', talk: ['sit', 'talk'], blink: 'shuffle', every: 5, size: 1.05 }],
walk: [[0, 236], [300, 226], [480, 222], [500, 232], [640, 254], [640, 360], [0, 360]],
depth: [[222, 0.5], [360, 1.15]],
entry: [320, 345],
hotspots: [
{
id: 'palco', name: 'palco', box: [52, 149, 134, 58], at: [120, 238], face: 'up',
actions: {
look: [{ say: 'Il palco dell\'oratorio. D\'estate ci fanno le recite, la tombola e i concerti.' }, { say: 'Adesso è vuoto. Peccato, avevo un numero di giocoleria pronto.' }],
use: [{ say: 'Salire sul palco senza pubblico? Mi vergogno pure da solo.' }],
},
},
{
id: 'tettoia', name: 'tettoia', box: [333, 119, 153, 72], at: [400, 236], face: 'up',
actions: {
look: [{ say: 'La tettoia, dove si mettono le cucine quando c\'è la festa.' }],
},
},
{
id: 'tavolate', name: 'tavolate', box: [500, 128, 140, 113], at: [560, 268], face: 'right',
actions: {
look: [{ say: 'Le tavolate della festa. Fra qualche giorno qui si mangia per tre ore di fila.' }],
use: [{ say: 'Mi siedo e aspetto che arrivi la pastasciutta? Ci vorrebbe una settimana.' }],
},
},
{
// [DA ANDREA: chi è] Seduto alle tavolate, col mazzo davanti.
id: 'giocatore_carte', name: 'Il giocatore di carte', box: [580, 195, 39, 45], at: [580, 266], face: 'right', default: 'talk',
art: [{ rect: [578, 211, 9, 5], fill: '#f3dfb1' }, { rect: [579, 211, 7, 3], fill: '#34584e' }],
actions: {
look: [{ say: 'Ha già mescolato. Mi sa che aspettava proprio un pollo di passaggio.' }],
talk: [{ dialogue: 'giocatore_carte' }],
},
},
{
id: 'gomma_terra', name: 'gomma da masticare', box: [134, 230, 16, 10], at: [140, 244], face: 'up', when: ['!has:gomma', '!gomma_presa'],
art: [{ rect: [137, 233, 10, 4], fill: '#f27ab0' }, { rect: [138, 233, 3, 1], fill: '#ffd0e8' }],
actions: {
look: [{ say: 'Una gomma da masticare ancora incartata, persa davanti al palco. Qualcuno ha perso l\'appetito.' }],
take: [{ give: 'gomma' }, { set: 'gomma_presa' }, { say: 'Una gomma alla fragola. Me la tengo.' }],
},
},
{
// Dopo le tavolate: dove si sovrappongono, vince l'ultimo della lista.
// Sulla prima tavolata, a sinistra del palo: lontano dal giocatore di carte (Andrea: «troppo vicini»).
id: 'libro_dimenticato', name: 'libro dimenticato', box: [512, 198, 22, 14], at: [522, 262], face: 'up', when: ['!has:libro', '!libro_preso'],
art: [{ rect: [517, 203, 11, 5], fill: '#c46a3a' }, { rect: [517, 207, 11, 1], fill: '#f4efe4' }, { rect: [521, 204, 3, 3], fill: '#e8c25a' }],
actions: {
look: [{ say: 'Un libro dimenticato sulle tavolate. Sulla copertina c\'è scritto «La storia infinita».' }],
take: [{ give: 'libro' }, { set: 'libro_preso' }, { say: 'Ricordo di aver visto il film da piccolo... era stupendo!' }, { closeup: 'libro' }],
},
},
{
id: 'cancello', name: 'cancello', box: [477, 166, 23, 52], at: [488, 236], face: 'up',
actions: {
// Il vecchio campo «Alberto Bettini» (Andrea, 25 ottobre; www.polisportivasanpieroasieve.it).
look: [
{ say: 'Il cancello di dietro. Se chiudo gli occhi vedo ancora l\'A. Bettini, il campo da calcio di quando eravamo piccoli: lassù ci sono ancora i riflettori.' },
{ say: 'Il primo vero campo del paese: inaugurato nel 1964 e intitolato ad Alberto Bettini, un giovane consigliere della società scomparso troppo presto.' },
],
open: [{ say: 'Chiuso. Si apre solo quando c\'è la festa.' }],
},
},
{
id: 'verso_pieve', name: 'torna alla Pieve', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'pieve', at: [473, 240], face: 'down' },
},
],
},
// Via de' Medici: dalla Piazzetta Cambray Digny sale verso Villa Adami (la Piazzetta è alle spalle, in fondo si va su).
via_de_medici: {
name: 'Via de\' Medici',
map: [22, 32],
background: 'assets/scenes/via-de-medici.png',
walk: [[0, 360], [0, 336], [160, 290], [262, 240], [288, 212], [312, 208], [340, 222], [470, 300], [545, 360]],
depth: [[208, 0.32], [360, 1.25]],
entry: [300, 348],
hotspots: [
{
id: 'portone', name: 'portone ad arco', box: [478, 30, 70, 270], at: [430, 290], face: 'right',
actions: {
look: [{ say: 'Un portone antico con l\'inferriata. Chissà cosa c\'è dietro: una cantina? Un tesoro? La cantina di un tesoro?' }],
open: [{ say: 'Chiuso. Come tutte le porte interessanti di questo paese.' }],
},
},
{
id: 'su_villa_adami', name: 'su verso Villa Adami', box: [272, 186, 60, 34], at: [300, 216], exit: { scene: 'villa_adami', at: [50, 252], face: 'right' },
},
{
id: 'giu_piazzetta', name: 'giù verso Piazzetta Cambray Digny', box: [0, 334, 545, 26], at: [300, 354], exit: { scene: 'piazzetta', at: [20, 320], face: 'right' },
},
],
},
// Via Pietro Cipriani, fra Via Massorondinaio (alle spalle, verso il campeggio) e la Piazza (in fondo, col Circolo 4 Maggio arancione).
// A destra il Cinema Taiuti, aperto come nel 2007, col cartellone del Rattattù; lassù il campo da basket del Circolo.
via_cipriani: {
name: 'Via Pietro Cipriani',
map: [22, 64],
background: 'assets/scenes/via-cipriani.png',
walk: [[40, 360], [40, 320], [60, 280], [100, 272], [150, 276], [300, 300], [360, 318], [640, 345], [640, 360]],
depth: [[272, 0.45], [360, 1.15]],
entry: [300, 345],
hotspots: [
{
id: 'rattattu', name: 'cartellone del Rattattù', box: [460, 152, 58, 110], at: [480, 336], face: 'up',
actions: {
look: [{ say: 'Il Rattattù: la gara di canto del paese. Si sale sul palco e ci si sfida tutti, chi stona e chi no.' }, { say: 'Quest\'anno mi ci iscrivo. Forse.' }],
},
},
{
id: 'cinema', name: 'Cinema Taiuti', box: [420, 40, 220, 220], at: [520, 340], face: 'up',
actions: {
look: [{ say: 'Il Cinema Taiuti. Una sala, un proiettore e le poltroncine che cigolano a tempo.' }],
open: [{ say: 'A quest\'ora è chiuso. Apre la sera, per il film o per il Rattattù.' }],
},
},
{
id: 'campo_basket', name: 'campo da basket del Circolo', box: [250, 110, 170, 80], at: [340, 316], face: 'up', default: 'use',
actions: {
look: [{ say: 'Il campo da basket del Circolo, lassù oltre la rete. Due tiri ce li faccio sempre volentieri.' }],
use: [{ dialogue: 'basket' }],
walk: [{ dialogue: 'basket' }],
},
},
{
id: 'alla_piazza', name: 'in fondo, la Piazza', box: [80, 230, 120, 50], at: [120, 280], exit: { scene: 'piazza', at: [345, 240], face: 'down' },
},
{
id: 'al_campeggio', name: 'indietro, verso il campeggio', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'via_massorondinaio', at: [30, 300], face: 'right' },
},
],
},
// Via Massorondinaio: a sinistra si riprende Via Cipriani (verso la Piazza), a diritto si va al campeggio.
via_massorondinaio: {
name: 'Via Massorondinaio',
map: [17, 74],
background: 'assets/scenes/via-massorondinaio.png',
walk: [[0, 360], [0, 266], [200, 258], [400, 240], [520, 226], [566, 226], [552, 250], [545, 290], [600, 360]],
depth: [[226, 0.4], [360, 1.2]],
entry: [300, 330],
hotspots: [
{
id: 'a_via_cipriani', name: 'a sinistra, Via Cipriani', box: [0, 262, 40, 80], at: [16, 300], face: 'left', exit: { scene: 'via_cipriani', at: [300, 345], face: 'up' },
},
{
id: 'al_campeggio', name: 'a diritto, verso il campeggio', box: [496, 196, 74, 34], at: [535, 232], exit: { scene: 'campeggio', at: [200, 345], face: 'right' },
},
],
},
// Le Mozzète (Via Donatello): in fondo il campo secondario, in basso a destra si scende al ponticino.
mozzete: {
name: 'Le Mozzète',
map: [72, 92],
background: 'assets/scenes/mozzete.png',
walk: [[0, 360], [0, 280], [40, 232], [120, 212], [300, 200], [335, 198], [350, 210], [420, 270], [640, 330], [640, 360]],
depth: [[198, 0.3], [360, 1.2]],
entry: [320, 330],
hotspots: [
{
id: 'fermata', name: 'fermata della corriera', box: [450, 170, 110, 90], at: [470, 300], face: 'right',
actions: {
look: [{ say: 'La fermata della corriera. Da qui si va dappertutto. Se passa.' }],
},
},
{
id: 'al_secondario', name: 'in fondo, il campo secondario', box: [300, 176, 60, 30], at: [330, 206], exit: { scene: 'polisportiva', at: [628, 290], face: 'left' },
},
{
id: 'al_ponticino', name: 'giù a destra, il ponticino delle Mozzète', box: [580, 316, 60, 44], at: [612, 345], face: 'right', exit: { scene: 'ponticino_mozzete', at: [300, 196], face: 'down' },
},
],
},
// Il ponticino delle Mozzète: lassù la congiunzione con le Mozzète, indietro si va verso Coldaia.
ponticino_mozzete: {
name: 'Il ponticino delle Mozzète',
map: [78, 88],
background: 'assets/scenes/ponticino-mozzete.png',
walk: [[0, 360], [0, 300], [200, 270], [280, 190], [320, 186], [380, 230], [520, 290], [640, 310], [640, 360]],
depth: [[186, 0.3], [360, 1.2]],
entry: [300, 340],
hotspots: [
{
id: 'parapetto', name: 'parapetto del ponticino', box: [460, 230, 120, 50], at: [470, 300], face: 'right',
actions: {
look: [{ say: 'Il ponticino delle Mozzète. Sotto ci passa un fossino che d\'estate fa più zanzare che acqua.' }],
},
},
{
id: 'alle_mozzete', name: 'lassù, le Mozzète', box: [270, 166, 60, 30], at: [300, 196], exit: { scene: 'mozzete', at: [612, 345], face: 'left' },
},
{
id: 'a_coldaia', name: 'indietro, verso Coldaia', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'coldaia', at: [450, 345], face: 'up' },
},
],
},
// Coldaia: dietro il ponticino delle Mozzète; avanti la falegnameria e poi Gabbiano.
coldaia: {
name: 'Coldaia',
map: [84, 89],
background: 'assets/scenes/coldaia.png',
walk: [[230, 360], [300, 250], [318, 200], [290, 166], [330, 162], [460, 205], [640, 268], [640, 360]],
depth: [[162, 0.3], [360, 1.2]],
entry: [450, 345],
hotspots: [
{
id: 'campo_arato', name: 'campo arato', box: [0, 160, 220, 130], at: [280, 330], face: 'left',
actions: {
look: [{ say: 'Terra appena arata. Profuma di campagna e di trattore.' }],
},
},
{
id: 'alla_falegnameria', name: 'avanti, verso la falegnameria', box: [280, 140, 60, 34], at: [305, 168], exit: { scene: 'falegnameria_coldaia', at: [300, 340], face: 'up' },
},
{
id: 'al_ponticino', name: 'indietro, il ponticino delle Mozzète', box: [220, 334, 420, 26], at: [450, 354], exit: { scene: 'ponticino_mozzete', at: [300, 340], face: 'up' },
},
],
},
// La falegnameria di Coldaia, col fienile delle rotoballe; a diritto si va a Gabbiano.
falegnameria_coldaia: {
name: 'La falegnameria',
map: [90, 91],
background: 'assets/scenes/falegnameria-coldaia.png',
walk: [[0, 360], [0, 300], [100, 260], [160, 220], [185, 220], [230, 250], [640, 250], [640, 360]],
depth: [[220, 0.35], [360, 1.2]],
entry: [300, 340],
hotspots: [
{
id: 'falegnameria', name: 'falegnameria', box: [160, 176, 120, 44], at: [220, 260], face: 'up',
actions: {
look: [{ say: 'La falegnameria. L\'odore di segatura arriva fin qui.' }],
open: [{ say: 'Bussare a una falegnameria? Mi danno una scopa e mi fanno spazzare.' }],
},
},
{
id: 'fienile', name: 'fienile', box: [290, 90, 320, 140], at: [440, 280], face: 'up',
actions: {
look: [{ say: 'Un fienile pieno di rotoballe. Fossi una mucca, sarebbe il paradiso.' }],
},
},
{
id: 'a_gabbiano', name: 'a diritto, verso Gabbiano', box: [140, 190, 64, 32], at: [172, 222], exit: { scene: 'gabbiano', at: [300, 340], face: 'up' },
},
{
id: 'a_coldaia', name: 'indietro, verso Coldaia', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'coldaia', at: [305, 170], face: 'down' },
},
],
},
// La strada di Gabbiano, in mezzo alla campagna del Mugello.
gabbiano: {
name: 'Gabbiano',
map: [95, 93],
background: 'assets/scenes/gabbiano.png',
walk: [[0, 360], [0, 300], [200, 260], [400, 215], [430, 186], [445, 186], [520, 240], [640, 280], [640, 360]],
depth: [[186, 0.3], [360, 1.2]],
entry: [300, 340],
hotspots: [
{
id: 'valle', name: 'campagna', box: [150, 140, 260, 60], at: [330, 300], face: 'up',
actions: {
look: [{ say: 'La campagna verso Gabbiano. Da quassù si vede mezzo Mugello.' }, { say: 'Il palio, però, no.' }],
},
},
{
id: 'casolare', name: 'casolare', box: [0, 30, 140, 220], at: [150, 320], face: 'left',
actions: {
look: [{ say: 'Un casolare vecchio, coi mattoni che spuntano dall\'intonaco. Come le mie ginocchia.' }],
},
},
{
id: 'alla_falegnameria', name: 'indietro, verso la falegnameria', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'falegnameria_coldaia', at: [172, 224], face: 'down' },
},
],
},
// L'ingresso del campeggio: dalla Piazza per Via Cipriani e Via Massorondinaio; poco dopo, a destra, si sale al Bosco ai Frati.
campeggio: {
name: 'Ingresso del campeggio',
map: [12, 84],
background: 'assets/scenes/campeggio.png',
effects: [{ type: 'cloth', pole: 'right', rects: [[28, 108, 26, 44], [84, 92, 36, 72], [229, 104, 34, 30], [548, 92, 58, 64]] }],
walk: [[150, 360], [165, 262], [420, 266], [640, 286], [640, 360]],
depth: [[262, 0.6], [360, 1.15]],
entry: [200, 345],
hotspots: [
{
id: 'campeggio', name: 'campeggio', box: [190, 120, 220, 140], at: [300, 280], face: 'up',
actions: {
look: [{ say: 'L\'ingresso del campeggio. A giudicare dalle bandiere, ci dorme mezzo mondo.' }],
walk: [{ say: 'Dentro non conosco nessuno. E il Regolo, che io sappia, non va in campeggio.' }],
},
},
{
id: 'bandiere', name: 'bandierine', box: [115, 52, 340, 30], at: [300, 280], face: 'up',
actions: {
look: [{ say: 'Una fila di bandierine di tutti i paesi. Il Palio della Fortezza però è roba nostra.' }],
take: [{ say: 'Senza scala ci arrivo solo con la fantasia.' }],
},
},
{
id: 'bosco_ai_frati', name: 'salita verso il Bosco ai Frati', box: [570, 250, 70, 110], at: [628, 320], exit: { scene: 'bosco_ai_frati', at: [320, 345], face: 'right' },
},
{
id: 'verso_piazza', name: 'Via Massorondinaio, verso la Piazza', box: [150, 290, 100, 70], at: [175, 345], exit: { scene: 'via_massorondinaio', at: [530, 236], face: 'down' },
},
],
},
// Il convento del Bosco ai Frati, nel bosco sopra il campeggio.
bosco_ai_frati: {
name: 'Bosco ai Frati',
map: [12, 96],
background: 'assets/scenes/bosco-ai-frati.png',
effects: [{ type: 'leafshadow', phase: ['pomeriggio', 'tramonto'], area: [0, 296, 230, 50], count: 16 }],
walk: [[0, 304], [100, 298], [480, 292], [640, 300], [640, 360], [0, 360]],
depth: [[292, 0.78], [360, 1.1]],
entry: [320, 345],
// Fra Peppino da Gricignano (sprite di Codex dalla foto di Andrea, 25 ottobre): stava sul sagrato della Pieve,
// ma è un francescano, e il Bosco ai Frati è il loro convento (Andrea, 26 ottobre).
speakers: { fra_peppino: [470, 238] },
people: [{ who: 'fra_peppino', at: [470, 304], facing: -1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 4.8 }],
hotspots: [
{
// Battute provvisorie: le vere le scrive Andrea.
id: 'fra_peppino', name: 'Fra Peppino', box: [458, 248, 26, 58], at: [430, 306], face: 'right', default: 'talk',
actions: {
look: [{ say: 'Fra Peppino da Gricignano, col saio e i sandali. Qui al Bosco ai Frati è a casa sua: è un convento di francescani.' }],
talk: [{ say: 'Buongiorno, Fra Peppino!' }, { say: 'Pace e bene, figliolo. Cerchi qualcosa?', who: 'fra_peppino', pose: 'bless' }, { say: 'Il palio. È sparito.' }, { say: 'Le cose sparite, prima o poi, tornano. Come le pecorelle.', who: 'fra_peppino', pose: 'explain' }],
},
},
{
id: 'convento', name: 'chiesa del convento', box: [96, 60, 386, 236], at: [320, 310], face: 'up',
actions: {
look: [{ say: 'Il convento del Bosco ai Frati, in mezzo al bosco. Qui si viene a cercare il fresco e il silenzio.' }],
open: [{ say: 'Meglio non disturbare: i frati sono gli unici in tutto il Mugello che non parlano del Palio.' }],
},
},
{
id: 'porta_convento', name: 'porta del convento', box: [526, 218, 32, 78], at: [540, 304], face: 'up',
actions: {
look: [{ say: 'Una porta ad arco col cancelletto di ferro.' }],
open: [{ say: 'Chiusa. A quest\'ora i frati pregano. O pranzano. O tutte e due.' }],
},
},
{
id: 'tiglio', name: 'tiglio', box: [0, 0, 92, 296], at: [100, 320], face: 'left',
actions: {
look: [{ say: 'Un tiglio enorme. Profuma che sembra una pasticceria.' }],
use: [{ say: 'Arrampicarmi? Ho i pantaloni buoni.' }],
},
},
{
id: 'giu_campeggio', name: 'scendi verso il campeggio', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'campeggio', at: [620, 320], face: 'left' },
},
],
},
// Il Comune e l'asilo infantile Antonio Frilli: dalla strada di fronte alla farmacia o da Via Calimara
// (a sinistra in Piazza, dove una volta si veniva qui, c'è la Piazzetta Cambray Digny: Andrea, 27 ottobre).
comune: {
name: 'Il Comune',
map: [11, 45],
background: 'assets/scenes/comune-asilo.png',
walk: [[0, 360], [0, 262], [200, 256], [330, 250], [420, 268], [440, 305], [640, 330], [640, 360]],
depth: [[250, 0.5], [360, 1.15]],
entry: [320, 350],
hotspots: [
{
id: 'torre', name: 'torre dell\'orologio', box: [200, 26, 40, 70], at: [250, 262], face: 'up',
actions: {
look: [{ say: 'La torre dell\'orologio del Comune. Va sempre giusto, tranne quando serve.' }],
},
},
{
id: 'palazzo', name: 'Comune', box: [170, 96, 120, 150], at: [250, 262], face: 'up',
actions: {
look: [{ say: 'Il Comune di San Piero. Qui si fanno i timbri, i permessi e, a quanto pare, anche il Palio.' }],
open: [{ say: 'Senza un modulo in carta bollata non mi fanno entrare neanche a chiedere l\'ora.' }],
},
},
{
id: 'asilo', name: 'asilo Antonio Frilli', box: [300, 140, 150, 90], at: [380, 268], face: 'up',
actions: {
look: [{ say: 'L\'asilo infantile Antonio Frilli. Ci sono passato anch\'io, coi grembiulini a quadretti.' }],
open: [{ say: 'All\'asilo? Ho già dato, grazie.' }],
},
},
{
id: 'alla_scalinata', name: 'a sinistra, la scalinata della Piazzetta', box: [0, 120, 150, 212], at: [40, 300], face: 'left', exit: { scene: 'scalinata', at: [300, 350], face: 'up' },
},
{
id: 'al_giardino', name: 'verso il giardino di Via Calimara', box: [596, 290, 44, 70], at: [600, 340], exit: { scene: 'via_calimara', at: [160, 290], face: 'right' },
},
{
id: 'alla_farmacia', name: 'giù, verso la farmacia', box: [60, 334, 520, 26], at: [320, 354], exit: { scene: 'via_provinciale', at: [622, 244], face: 'left' },
},
],
},
// Il campone delle poste: a destra della stazione; in fondo, le poste.
giardini_poste: {
name: 'Il campone delle poste',
map: [11, 58],
background: 'assets/scenes/giardini-poste.png',
walk: [[0, 360], [0, 232], [640, 232], [640, 360]],
depth: [[232, 0.55], [360, 1.15]],
entry: [580, 340],
hotspots: [
{
id: 'giochi', name: 'giochi', box: [196, 120, 330, 100], at: [360, 250], face: 'up',
actions: {
look: [{ say: 'Lo scivolo e le altalene. Ho ventisette anni, ufficialmente. Ufficiosamente, un giro ci starebbe.' }],
use: [{ say: 'Un giro sull\'altalena! ... No, c\'è troppa gente che mi conosce.' }],
},
},
{
id: 'panchina', name: 'panchina rossa', box: [56, 164, 56, 22], at: [90, 240], face: 'up',
actions: {
look: [{ say: 'La panchina rossa. Qui si scambiavano le figurine: celo, celo, manca.' }],
},
},
{
id: 'poste', name: 'le poste', box: [0, 100, 110, 50], at: [60, 240], face: 'up',
actions: {
look: [{ say: 'Laggiù le poste. Mia nonna ci andava a ritirare la pensione e tornava con tutte le notizie del paese.' }],
},
},
{
id: 'alla_stazione', name: 'verso la stazione', box: [100, 110, 80, 130], at: [137, 240], exit: { scene: 'stazione', at: [628, 320], face: 'left' },
},
],
},
// Via Calimara: dalla Piazza scende alla farmacia, in Via Provinciale.
via_calimara: {
name: 'Via Calimara',
map: [36, 58],
background: 'assets/scenes/via-calimara.png',
walk: [[0, 360], [0, 318], [330, 206], [400, 206], [560, 300], [600, 360]],
depth: [[206, 0.3], [360, 1.15]],
entry: [300, 350],
hotspots: [
{
id: 'giardino', name: 'dal giardino, verso il Comune', box: [0, 110, 330, 120], at: [160, 290], face: 'left', exit: { scene: 'comune', at: [600, 340], face: 'left' },
actions: {
look: [{ say: 'Il giardino coi cedri e le panchine. All\'ombra, d\'estate, ci si fa la siesta a turno.' }],
},
},
{
id: 'vetrina', name: 'vetrina', box: [570, 110, 70, 150], at: [540, 300], face: 'right',
actions: {
look: [{ say: 'Una vetrina vuota. Ci vedo solo il mio riflesso, e ha l\'aria di uno che cerca un palio.' }],
},
},
{
id: 'alla_piazza', name: 'in fondo, la Piazza', box: [330, 176, 90, 40], at: [365, 210], exit: { scene: 'piazza', at: [360, 350], face: 'up' },
},
{
id: 'alla_provinciale', name: 'verso la farmacia', box: [0, 330, 640, 30], at: [300, 354], exit: { scene: 'via_provinciale', at: [600, 330], face: 'left' },
},
],
},
// Via Provinciale alla rotonda: il River e la farmacia. Andando avanti, la Pieve.
via_provinciale: {
name: 'Via Provinciale',
map: [40, 71],
background: 'assets/scenes/via-provinciale.png',
walk: [[0, 360], [0, 312], [300, 302], [440, 262], [470, 238], [640, 238], [640, 360]],
depth: [[238, 0.45], [360, 1.15]],
entry: [140, 340],
hotspots: [
{
id: 'river', name: 'il River', box: [60, 128, 190, 110], at: [160, 320], face: 'up',
actions: {
look: [{ say: 'Il River, il bar della rotonda. Fuori gli ombrelloni, dentro i flipper e le figurine.' }],
open: [{ say: 'Un ghiacciolo ci starebbe. Ma prima il palio, poi i ghiaccioli.' }],
},
},
{
id: 'farmacia', name: 'farmacia', box: [356, 176, 50, 60], at: [380, 290], face: 'up',
actions: {
look: [{ say: 'La farmacia, con la croce verde. Mia nonna ci veniva per le pasticche e per le chiacchiere. Più per le chiacchiere.' }],
open: [{ say: 'Non mi fa male niente. Per ora.' }],
},
},
{
id: 'al_ponte', name: 'a sinistra, verso il campo sportivo', box: [0, 216, 60, 100], at: [12, 318], exit: { scene: 'ponte_sieve', at: [300, 350], face: 'up' },
},
{
id: 'alla_pieve', name: 'dietro la farmacia, verso la Pieve', box: [420, 170, 118, 70], at: [480, 242], exit: { scene: 'provinciale_pignone', at: [300, 345], face: 'up' },
},
{
id: 'area_feste', name: 'qui sotto, verso l\'area feste', box: [0, 318, 300, 42], at: [120, 352], exit: { scene: 'area_feste', at: [44, 350], face: 'up' },
},
{
id: 'al_comune', name: 'verso il Comune', box: [540, 40, 100, 198], at: [622, 244], exit: { scene: 'comune', at: [320, 350], face: 'up' },
},
{
id: 'alla_calimara', name: 'Via Calimara, verso la Piazza', box: [520, 260, 120, 100], at: [600, 330], exit: { scene: 'via_calimara', at: [300, 350], face: 'up' },
},
],
},
// Via Provinciale fra la rotonda (alle spalle) e la Pieve (in fondo); a destra sale Via del Pignone.
provinciale_pignone: {
name: 'Via Provinciale',
map: [50, 64],
background: 'assets/scenes/provinciale-pignone.png',
walk: [[30, 360], [30, 330], [130, 270], [245, 212], [290, 212], [340, 228], [540, 232], [540, 258], [640, 300], [640, 360]],
depth: [[212, 0.32], [360, 1.2]],
entry: [300, 345],
hotspots: [
{
id: 'cartelli', name: 'cartelli', box: [570, 162, 52, 28], at: [560, 290], face: 'right',
actions: {
look: [{ say: 'Cartelli per la Pieve, per la stazione, per Firenze. Per il palio, nessuno.' }],
},
},
{
// L'edicola, col chiosco chiuso: qui Andrea comprava le cassette per il Commodore 64 (Andrea, 28 ottobre).
id: 'edicola', name: 'edicola', box: [20, 160, 92, 100], at: [120, 278], face: 'left',
actions: {
look: [
{ say: 'L\'edicola. Qui compravo le cassette per il Commodore 64: trenta giochi a mille lire, diceva la copertina.' },
{ say: 'Si infilava la cassetta, si scriveva LOAD, si premeva play... e si aspettava dieci minuti col registratore che cigolava.' },
{ say: 'Poi, quando andava bene, partiva il gioco. Quando andava male: LOAD ERROR. E si riavvolgeva tutto. Bei tempi.' },
],
open: [{ say: 'Chiusa. E comunque le cassette non le fanno più. Neanche i Commodore.' }],
use: [{ say: 'Vorrei un Topolino e trenta giochi a mille lire. ...Niente, parlo con una serranda.' }],
},
},
{
// La banca all'angolo di Via del Pignone: il bancomat non funziona quasi mai (Andrea, 28 ottobre).
id: 'banca', name: 'banca', box: [368, 166, 80, 50], at: [400, 236], face: 'up',
actions: {
look: [
{ say: 'La banca. Il bancomat funziona solo il mercoledì delle settimane pari, negli anni bisestili, quando Venere si allinea a Plutone.' },
{ say: 'Oggi? Not today.' },
],
open: [{ say: 'Chiusa. Come il bancomat, del resto.' }],
use: [{ say: 'Carta dentro, carta fuori. «Servizio momentaneamente non disponibile». Momentaneamente dal 1998.' }],
},
},
{
id: 'alla_pieve', name: 'in fondo, verso la Pieve', box: [236, 150, 64, 64], at: [268, 216], exit: { scene: 'pieve', at: [24, 312], face: 'right' },
},
{
id: 'via_pignone', name: 'a destra, Via del Pignone', box: [440, 196, 100, 56], at: [530, 245], face: 'right', exit: { scene: 'via_pignone', at: [300, 345], face: 'up' },
},
{
id: 'alla_rotonda', name: 'indietro, verso la rotonda della farmacia', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'via_provinciale', at: [480, 246], face: 'down' },
},
],
},
// Via del Pignone dal basso: sul muro a destra il murale di Cistola (Davide Poggi, consenso del 27 ottobre).
// In cima si arriva in Piazzetta Cambray Digny.
via_pignone: {
name: 'Via del Pignone',
map: [46, 54],
background: 'assets/scenes/via-del-pignone.png',
walk: [[0, 360], [0, 300], [150, 258], [290, 226], [335, 206], [352, 206], [350, 240], [345, 282], [640, 290], [640, 360]],
depth: [[206, 0.3], [360, 1.2]],
entry: [300, 345],
hotspots: [
{
id: 'murale', name: 'murale di Cistola', box: [430, 36, 170, 240], at: [470, 300], face: 'right',
actions: {
look: [{ say: 'Cistola. Il talento di via del Pignone.' }, { say: 'Col dieci, come i grandi. Se c\'è un muro che se lo merita, è questo.' }],
talk: [{ say: 'Ciao Cistola! ...Almeno dipinto stai fermo ad ascoltarmi.' }],
},
},
{
id: 'su_piazzetta', name: 'su, verso Piazzetta Cambray Digny', box: [316, 176, 56, 40], at: [343, 210], exit: { scene: 'piazzetta', at: [610, 345], face: 'left' },
},
{
id: 'giu_provinciale', name: 'giù, in Via Provinciale', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'provinciale_pignone', at: [530, 245], face: 'left' },
},
],
},
// Piazzetta Cambray Digny, in cima a Via del Pignone, sotto Villa Schifanoia: a sinistra Via de' Medici, a diritto
// Via dell'Antica Posta che scende in Piazza, a destra del palazzo la scalinata che scende al Comune (Andrea, 28 ottobre).
piazzetta: {
name: 'Piazzetta Cambray Digny',
map: [40, 38],
background: 'assets/scenes/piazzetta-cambray-digny.png',
walk: [[0, 360], [0, 288], [300, 284], [470, 276], [495, 268], [540, 268], [600, 300], [640, 330], [640, 360]],
depth: [[268, 0.55], [360, 1.15]],
entry: [320, 330],
hotspots: [
{
id: 'villa_schifanoia', name: 'Villa Schifanoia', box: [60, 110, 230, 170], at: [180, 300], face: 'up',
actions: {
look: [{ say: 'Il muro di Villa Schifanoia, la villa dei Medici, mezzo coperto dall\'edera.' }, { say: 'Lassù una volta c\'era una torre, per tenere d\'occhio chi passava sulla strada per Bologna. Ne ha viste più di me.' }, { say: 'E la piazzetta si chiama come i Cambray-Digny, gli ultimi signori della villa.' }],
},
},
{
id: 'casetta_bianca', name: 'casetta bianca', box: [296, 196, 160, 90], at: [380, 292], face: 'up',
actions: {
look: [{ say: 'Una casetta piccina, appoggiata al muro della villa come un gatto al sole.' }],
open: [{ say: 'Chiusa. E poi non è casa mia.' }],
},
},
{
id: 'alla_piazza', name: 'a diritto, Via dell\'Antica Posta verso la Piazza', box: [470, 226, 70, 48], at: [510, 274], exit: { scene: 'antica_posta_alta', at: [235, 230], face: 'down' },
},
{
id: 'via_de_medici', name: 'a sinistra, Via de\' Medici', box: [0, 100, 60, 260], at: [20, 320], face: 'left', exit: { scene: 'via_de_medici', at: [300, 348], face: 'up' },
},
{
id: 'giu_scalinata', name: 'a destra, giù per la scalinata verso il Comune', box: [541, 226, 40, 60], at: [560, 285], exit: { scene: 'scalinata', at: [560, 325], face: 'down' },
},
{
id: 'giu_pignone', name: 'giù per Via del Pignone', box: [570, 300, 70, 60], at: [610, 345], exit: { scene: 'via_pignone', at: [343, 212], face: 'down' },
},
],
},
// Via dell'Antica Posta (foto di Andrea, 28 ottobre): dalla Piazza, a sinistra, sale verso Piazzetta Cambray Digny.
// La Piazza è alle spalle; a sinistra, coi tre scalini, la Piazzetta del Comune; in fondo si sale.
via_antica_posta: {
name: 'Via dell\'Antica Posta',
map: [35, 41],
background: 'assets/scenes/via-antica-posta.png',
walk: [[0, 360], [0, 300], [120, 290], [220, 252], [300, 240], [372, 226], [396, 226], [470, 252], [630, 300], [640, 360]],
depth: [[226, 0.35], [360, 1.15]],
entry: [320, 345],
hotspots: [
{
id: 'colonnine', name: 'colonnine con le catene', box: [225, 225, 95, 68], at: [290, 300], face: 'left',
actions: {
look: [{ say: 'Le colonnine con le catene: le macchine di qua non passano.' }, { say: 'Io sì. Scavalcare le catene è uno sport che pratico da quando avevo sei anni.' }],
},
},
{
id: 'tenda', name: 'tenda a righe', box: [508, 182, 30, 28], at: [500, 268], face: 'right',
actions: {
look: [{ say: 'Una tenda a righe bianche e rosse. Fa tanto spiaggia: peccato che il mare sia di là dall\'Appennino.' }],
},
},
{
id: 'muro_edera', name: 'muro con l\'edera', box: [546, 140, 94, 150], at: [570, 296], face: 'right',
actions: {
look: [{ say: 'Il muro di sasso con l\'edera e la ringhiera in cima. Lassù c\'è il verde della villa.' }],
},
},
{
id: 'alla_piazzetta_comune', name: 'a sinistra, il Comune', box: [0, 90, 200, 204], at: [130, 292], face: 'left', exit: { scene: 'piazzetta_comune', at: [260, 350], face: 'up' },
},
{
id: 'su_antica_posta', name: 'su, in fondo a Via dell\'Antica Posta', box: [350, 200, 70, 30], at: [384, 230], exit: { scene: 'antica_posta_alta', at: [240, 350], face: 'up' },
},
{
id: 'alla_piazza', name: 'indietro, la Piazza', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'piazza', at: [92, 250], face: 'right' },
},
],
enter: [{ if: '!antica_posta_vista', then: [{ set: 'antica_posta_vista' }, { say: 'Via dell\'Antica Posta. Chissà se la posta antica arrivava prima di quella moderna.' }] }],
},
// La Piazzetta del Comune, dietro il municipio: la torre dell'orologio, le sculture sui pilastrini di mattoni.
piazzetta_comune: {
name: 'Piazzetta del Comune',
map: [32, 39],
background: 'assets/scenes/piazzetta-comune.png',
walk: [[0, 360], [0, 318], [130, 292], [470, 288], [540, 300], [520, 360]],
depth: [[288, 0.55], [360, 1.15]],
entry: [260, 350],
hotspots: [
{
id: 'torre', name: 'torre dell\'orologio', box: [264, 16, 58, 104], at: [290, 294], face: 'up',
actions: {
look: [{ say: 'La torre dell\'orologio, vista dal retro. Anche da qui segna un\'ora tutta sua.' }],
},
},
{
id: 'porta_comune', name: 'porta del Comune', box: [286, 238, 26, 50], at: [298, 292], face: 'up',
actions: {
look: [{ say: 'La porta del Comune. Dal retro, ma sempre Comune.' }],
open: [{ say: 'Chiusa. Anche dalla porta di dietro, senza un modulo non si entra.' }],
},
},
{
id: 'scultura', name: 'scultura alta', box: [264, 248, 22, 68], at: [250, 320], face: 'right',
actions: {
look: [{ say: 'Una scultura moderna, lunga e appuntita. Secondo me è un\'antenna per parlare coi marziani.' }],
},
},
{
id: 'sasso', name: 'scultura a sasso', box: [92, 276, 42, 54], at: [150, 330], face: 'left',
actions: {
look: [{ say: 'Questa sembra un sasso. Ma sta su un piedistallo, quindi è arte.' }],
take: [{ say: 'Pesa più di me. E poi l\'arte non si porta via in tasca.' }],
},
},
{
id: 'vaso_fiori', name: 'vaso di fiori', box: [520, 264, 106, 82], at: [505, 330], face: 'right',
actions: {
look: [{ say: 'Un vasone di fiori. Qualcuno se ne prende cura, al Comune.' }],
},
},
{
id: 'alla_via', name: 'indietro, Via dell\'Antica Posta', box: [0, 336, 520, 24], at: [260, 354], exit: { scene: 'via_antica_posta', at: [140, 294], face: 'right' },
},
],
},
// In cima a Via dell'Antica Posta, prima della Piazzetta: il muro della villa con l'edera, il ponticello sopra la
// strada, il giardinetto con le panchine e due gatti al sole. A sinistra, sotto il ponticello, la scalinata (Andrea).
antica_posta_alta: {
name: 'In cima a Via dell\'Antica Posta',
map: [38, 39],
background: 'assets/scenes/via-antica-posta-alta.png',
walk: [[0, 360], [0, 322], [190, 226], [283, 222], [470, 360]],
depth: [[222, 0.35], [360, 1.15]],
entry: [240, 350],
hotspots: [
{
id: 'gatti', name: 'gatti', box: [490, 236, 100, 28], at: [420, 330], face: 'right',
actions: {
look: [{ say: 'Due gatti che dormono sull\'erba. Il Palio, per loro, può anche aspettare.' }],
talk: [{ say: 'Micio, micio... Niente. Per meno di una scatoletta non aprono neanche un occhio.' }],
take: [{ say: 'Svegliare un gatto che dorme al sole? Non sono così coraggioso.' }],
},
},
{
id: 'panchine', name: 'panchine', box: [358, 212, 130, 44], at: [375, 300], face: 'right',
actions: {
look: [{ say: 'Due panchine all\'ombra del muro. Un posto per chi non ha un palio da ritrovare.' }],
use: [{ say: 'Mi siederei volentieri, ma il Palio non si ritrova da solo.' }],
},
},
{
id: 'ponticello', name: 'ponticello', box: [187, 34, 92, 38], at: [235, 240], face: 'up',
actions: {
look: [{ say: 'Un ponticello sopra la strada, da una casa all\'altra. Per andare dal vicino senza fare le scale.' }],
},
},
{
id: 'muro_villa', name: 'muro della villa', box: [383, 0, 257, 205], at: [330, 280], face: 'right',
actions: {
look: [{ say: 'Il muro di Villa Schifanoia, alto alto, con l\'edera che ormai lo tiene su lei.' }],
},
},
{
id: 'su_piazzetta', name: 'su, Piazzetta Cambray Digny', box: [250, 196, 80, 30], at: [280, 226], exit: { scene: 'piazzetta', at: [510, 276], face: 'down' },
},
{
id: 'alla_scalinata', name: 'a sinistra, giù per la scalinata verso il Comune', box: [150, 190, 60, 36], at: [195, 228], exit: { scene: 'scalinata', at: [470, 312], face: 'down' },
},
{
id: 'giu_antica_posta', name: 'giù, Via dell\'Antica Posta', box: [0, 334, 470, 26], at: [240, 354], exit: { scene: 'via_antica_posta', at: [384, 234], face: 'down' },
},
],
},
// La scalinata (foto di Andrea, 28 ottobre): un cortile coi garage; su per le scale la Piazzetta Cambray Digny,
// alle spalle i giardini e il retro del Comune.
scalinata: {
name: 'La scalinata della Piazzetta',
map: [30, 42],
background: 'assets/scenes/scalinata-piazzetta.png',
walk: [[0, 360], [0, 290], [100, 282], [380, 278], [400, 300], [620, 330], [640, 360]],
depth: [[278, 0.55], [360, 1.15]],
entry: [300, 350],
hotspots: [
{
id: 'saracinesca', name: 'saracinesca', box: [268, 196, 62, 79], at: [300, 290], face: 'up',
actions: {
look: [{ say: 'Una saracinesca color ruggine. Dietro, scommetto, una macchina e trent\'anni di roba da buttare.' }],
open: [{ say: 'Chiusa. E se la apro io, mi tocca anche fare ordine.' }],
},
},
{
id: 'panni', name: 'panni stesi', box: [110, 108, 34, 30], at: [130, 290], face: 'up',
actions: {
look: [{ say: 'Panni stesi al sole. Se piove, qui lo sanno tutti prima del telegiornale.' }],
take: [{ say: 'Rubare i panni stesi? Mi conoscono tutti, mi ritroverebbero prima del Palio.' }],
},
},
{
id: 'su_antica_posta', name: 'su per le scale, poi a sinistra verso Via dell\'Antica Posta', box: [440, 196, 90, 70], at: [470, 312], face: 'up', exit: { scene: 'antica_posta_alta', at: [195, 228], face: 'right' },
},
{
id: 'su_piazzetta', name: 'su per le scale, poi a destra verso Piazzetta Cambray Digny', box: [530, 196, 80, 70], at: [560, 325], face: 'up', exit: { scene: 'piazzetta', at: [560, 285], face: 'left' },
},
{
id: 'al_comune', name: 'indietro, i giardini del Comune', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'comune', at: [40, 300], face: 'right' },
},
],
},
// L'area feste (il parco Antonio Berti): dalla rotonda del River, a sinistra.
area_feste: {
name: 'Area feste',
map: [30, 84],
background: 'assets/scenes/area-feste.png',
// Dal basso si sale per la scaletta a sinistra, poi si segue il vialetto di pietrini sopra la staccionata.
walk: [[0, 360], [88, 360], [88, 292], [120, 276], [320, 300], [460, 318], [600, 338], [640, 338], [640, 240], [420, 190], [260, 190], [0, 250]],
depth: [[190, 0.35], [360, 1.15]],
entry: [44, 350],
hotspots: [
{
id: 'prato', name: 'prato della festa', box: [120, 190, 520, 80], at: [320, 270], face: 'up',
actions: {
look: [{ say: 'L\'area feste. D\'estate ci montano la pista da ballo, le tavolate e lo stand della pasta.' }, { say: 'Adesso c\'è solo l\'erba. E la fame che mi viene a pensarci.' }],
},
},
{
id: 'casetta', name: 'casetta', box: [170, 146, 26, 22], at: [250, 200], face: 'up',
actions: {
look: [{ if: 'casetta_aperta', then: [{ say: 'La casetta, aperta. Dentro solo prolunghe: la torcia ce l\'ho io.' }], else: [{ say: 'Una casetta chiusa con un lucchetto piccolo. Ci tengono le prolunghe della festa e, dicono, una torcia.' }, { if: '!has:chiavetta', then: [{ say: 'E la chiavetta del lucchetto? Dicono che l\'hanno persa giù al ponticino della Carza.' }] }] }],
open: [{ if: 'casetta_aperta', then: [{ say: 'È già aperta.' }], else: [{ if: 'has:chiavetta', then: [{ drop: 'chiavetta' }, { set: 'casetta_aperta' }, { say: 'La chiavetta entra nel lucchetto... clic!' }, { say: 'Prolunghe, prolunghe, prolunghe... e una torcia.' }, { give: 'torcia' }], else: [{ say: 'Chiusa col lucchetto. Il mistero resta.' }] }] }],
},
with: {
stecco_gomma: [{ say: 'Un lucchetto non si pesca. Ci vuole la sua chiave.' }],
chiavetta: [{ if: 'casetta_aperta', then: [{ say: 'È già aperta.' }], else: [{ drop: 'chiavetta' }, { set: 'casetta_aperta' }, { say: 'La chiavetta entra nel lucchetto... clic!' }, { say: 'Prolunghe, prolunghe, prolunghe... e una torcia.' }, { give: 'torcia' }] }],
},
},
{
id: 'al_piazzale', name: 'laggiù, il piazzale delle feste', box: [40, 100, 120, 70], at: [130, 224], exit: { scene: 'area_feste_festa', at: [320, 350], face: 'up' },
},
{
id: 'alla_rotonda', name: 'giù per la scaletta, verso la rotonda', box: [0, 300, 90, 60], at: [44, 354], exit: { scene: 'via_provinciale', at: [120, 345], face: 'up' },
},
],
},
// La sala dei biliardi del Circolo 4 Maggio (dalla foto di Andrea, 25 ottobre): tre tavoli, il primo è quello
// dove si gioca ai birilli con l'Ing. Tozzi. [DA ANDREA: cosa c'è da ricordare della sala]
circolo_4_maggio: {
name: 'Circolo 4 Maggio, sala dei biliardi',
map: [29, 48],
background: 'assets/scenes/circolo-4-maggio.png',
music: 'assets/audio/biliardo.mp3', // trio jazz da circolo (tools/jazz_biliardo.py, 25 ottobre)
indoor: true,
walk: [[0, 360], [0, 356], [90, 350], [175, 330], [236, 316], [318, 300], [334, 240], [402, 236], [480, 232], [520, 214], [600, 190], [640, 190], [640, 360]],
depth: [[190, 1.2], [360, 2.5]],
entry: [590, 202],
speakers: { ing_tozzi: [452, 150], bertovo: [396, 132] },
// L'Ing. Tozzi aspetta accanto al primo tavolo, con la stecca: si parla con lui per giocare, come con Mariano.
people: [
{ who: 'ing_tozzi', at: [452, 296], facing: 1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 4.4 },
// Trappizzio Berti al tavolo di mezzo, coi suoi rinquarti (Andrea, 28 ottobre).
{ who: 'bertovo', at: [396, 238], facing: 1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 5.1 },
],
enter: [{ if: '!circolo_visto', then: [{ set: 'circolo_visto' }, { say: 'La sala dei biliardi. Qui dentro si parla piano, e si gioca forte.' }] }],
hotspots: [
{
id: 'biliardo', name: 'biliardo', box: [0, 120, 358, 230], at: [380, 300], face: 'left', default: 'use',
actions: {
look: [{ say: 'Il primo tavolo: il panno verde, il castello di birilli in mezzo, le biglie già pronte.' }, { say: 'L\'Ing. Tozzi gli gira intorno con la stecca in mano, come se aspettasse qualcuno.' }],
use: [{ say: 'Il tavolo è dell\'Ingegnere: prima gli chiedo una partita.' }],
talk: [{ say: 'Si parla col panno, qui. Prendi la stecca.', who: 'ing_tozzi' }],
take: [{ say: 'Una biglia in tasca? Mi sbattono fuori dal circolo.' }],
},
},
{
id: 'ing_tozzi', name: 'l\'Ing. Tozzi', box: [432, 196, 40, 100], at: [410, 304], face: 'right', default: 'talk',
actions: {
look: [{ say: 'L\'Ing. Tozzi, il campione del circolo. Occhiali scuri anche al chiuso: dice che così non vede le biglie degli altri.' }],
talk: [{ dialogue: 'ing_tozzi' }],
},
},
{
id: 'bertovo', name: 'Trappizzio Berti', box: [382, 162, 30, 76], at: [360, 244], face: 'right', default: 'talk',
actions: {
look: [{ say: 'Trappizzio Berti, al tavolo di mezzo. Le biglie le mette dove nessuno ci arriva, e poi ci arriva lui.' }],
talk: [{ dialogue: 'bertovo' }],
},
},
{
id: 'stecche', name: 'rastrelliera delle stecche', box: [140, 0, 60, 110], at: [150, 352], face: 'up',
actions: {
look: [{ say: 'Le stecche del circolo, in fila. Ognuna ha il suo proprietario, e guai a sbagliare.' }],
take: [{ say: 'La stecca me la dà l\'Ingegnere, quando si gioca.' }],
},
},
{
id: 'quadro', name: 'quadro alla parete', box: [300, 30, 36, 55], at: [352, 320], face: 'up',
actions: {
look: [{ say: 'Un campione di biliardo in posa, con la stecca. Avrà il suo nome, ma da qui non si legge.' }],
},
},
{
id: 'armadietto', name: 'armadietto delle stecche', box: [480, 58, 34, 48], at: [496, 242], face: 'up',
actions: {
look: [{ say: 'L\'armadietto a vetri, con le stecche buone. Chiuso a chiave, naturalmente.' }],
open: [{ say: 'Chiuso. Le stecche buone sono per chi le sa usare.' }],
},
},
{
id: 'alla_piazza', name: 'la porta, verso la piazza', box: [550, 30, 80, 160], at: [590, 202], exit: { scene: 'piazza', at: [202, 252], face: 'down' },
},
],
},
// Il ponte sulla Sieve, proseguendo la Provinciale dalla farmacia; di là dal ponte, la polisportiva.
ponte_sieve: {
name: 'Ponte sulla Sieve',
map: [48, 84],
background: 'assets/scenes/ponte-sieve.png',
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],
hotspots: [
{
id: 'tabernacolo', name: 'tabernacolo dell\'Annunciazione', box: [138, 148, 36, 60], at: [180, 236], face: 'up',
actions: {
// Notizie di Andrea: una copia dell'Annunciazione di Antonio Berti (1904–1990), l'originale è del 1947.
look: [
{ say: 'Il tabernacolo del ponte, con l\'Annunciazione di Antonio Berti, scultore sanpierino.' },
{ say: 'Questa è una copia: l\'originale lo fece nel 1947. Lo stesso Berti del parco dell\'area feste.' },
{ say: 'Chi passa per andare via dal paese, un saluto glielo fa sempre.' },
],
},
},
{
id: 'sieve', name: 'la Sieve', box: [380, 170, 260, 40], at: [340, 210], face: 'right',
actions: {
look: [{ say: 'Sotto il ponte la Carza si butta nella Sieve, e da qui vanno avanti insieme.' }, { say: 'Nel 1758 la piena arrivò fino a Cardetole: in casa mia, di sicuro, c\'erano i pesci.' }],
},
},
{
id: 'alla_polisportiva', name: 'di là dal ponte, il campo sportivo', box: [250, 180, 110, 36], at: [320, 206], exit: { scene: 'polisportiva_principale', at: [40, 330], face: 'right' },
},
{
id: 'alla_provinciale', name: 'indietro, verso la farmacia', box: [0, 330, 640, 30], at: [300, 354], exit: { scene: 'via_provinciale', at: [12, 320], face: 'right' },
},
],
},
// La polisportiva: passato il ponte, prima il campo principale con la tribuna; proseguendo il secondario, coi campi da padel e tennis.
polisportiva: {
name: 'Campo secondario',
map: [62, 96],
background: 'assets/scenes/polisportiva-secondario.png',
walk: [[0, 360], [0, 330], [300, 262], [430, 222], [600, 210], [640, 212], [640, 360]],
depth: [[210, 0.4], [360, 1.15]],
entry: [100, 340],
// Il BaronDeDuke nella discesa verso la polisportiva: aspetta chi gli riporta le mutande perse a poker.
speakers: { barondeduke: [230, 243], macchina: [360, 212] },
people: [
{ who: 'barondeduke', at: [230, 300], facing: -1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 4.6 },
// Compare solo dopo che Andrea dice di voler giocare a padel (idea di Andrea, 25 ottobre; sprite di Codex).
{ who: 'macchina', at: [360, 262], size: 1.05, idle: 'stand', when: 'macchina_vista' },
],
hotspots: [
{
id: 'campo', name: 'campo secondario', box: [140, 160, 240, 60], at: [330, 254], face: 'up',
actions: {
look: [{ say: 'Il campo secondario della polisportiva. Qui si allenano i piccoli, e i grandi fanno finta di non guardare.' }],
},
},
{
id: 'cupola', name: 'pallone bianco', box: [320, 140, 70, 40], at: [430, 226], face: 'up',
actions: {
look: [{ say: 'Il pallone bianco della palestra. Da fuori sembra un gigantesco marshmallow.' }],
},
},
{
id: 'tennis', name: 'campi da tennis', box: [520, 190, 120, 40], at: [600, 214], face: 'right', default: 'walk',
actions: {
walk: [{ say: 'Più avanti ci sono i campi da tennis. Racchette, palline e gente che si lamenta del sole.' }],
look: [{ say: 'Laggiù i campi da tennis.' }],
},
},
{
id: 'padel', name: 'capannone del padel', box: [0, 110, 90, 180], at: [40, 345], face: 'left',
actions: {
look: [{ say: 'Il capannone verde del padel.' }, { say: 'Il padel, nel 2007, non so nemmeno cosa sia. Tra qualche anno ci giocheranno tutti, me compreso.' }],
open: [{ say: 'Chiuso. E poi non saprei nemmeno da che parte si tiene la racchetta.' }],
use: [{
if: '!macchina_vista',
then: [
{ say: 'Voglio giocare a padel!' },
{ set: 'macchina_vista' },
{ say: 'Toh, guarda: c\'è una macchina del tempo.' },
{ say: 'Per arrivare al padel mi manca solo un po\' di plutonio. Potrei sentire da Alvarino se ce l\'ha.' },
],
else: [{ say: 'Il padel aspetta. Prima il plutonio: devo sentire Alvarino.' }],
}],
},
},
{
id: 'macchina', name: 'macchina del tempo', box: [311, 219, 98, 43], at: [290, 290], face: 'right', when: 'macchina_vista',
actions: {
look: [{ say: 'Acciaio, portiere ad ali di gabbiano, cavi e bobine dappertutto. E un contenitore vuoto, sul retro.' }, { say: 'Vuoto di plutonio, si capisce.' }],
open: [{ say: 'Le portiere sono già su. È il plutonio che manca.' }],
use: [{ say: 'Senza plutonio non parte. Alvarino, dove sei?' }],
take: [{ say: 'Una macchina in tasca? Neanche nel futuro.' }],
},
},
{
id: 'all_area_feste', name: 'dietro il campo, verso il piazzale delle feste', box: [150, 130, 190, 50], at: [320, 265], exit: { scene: 'area_feste_festa', at: [620, 300], face: 'left' },
},
{
id: 'al_principale', name: 'indietro, verso il campo principale', box: [0, 330, 640, 30], at: [100, 354], exit: { scene: 'polisportiva_principale', at: [620, 330], face: 'left' },
},
{
id: 'alle_mozzete', name: 'a destra, verso le Mozzète', box: [610, 226, 30, 100], at: [628, 290], face: 'right', exit: { scene: 'mozzete', at: [330, 206], face: 'down' },
},
{
id: 'barondeduke', name: 'il BaronDeDuke', box: [212, 245, 36, 55], at: [190, 316], face: 'right', default: 'talk',
give: {
squama: [{ say: 'Me la giochi? Ho un sette e un due, ma un sacco di fiducia.', who: 'barondeduke', pose: 'cards' }, { say: 'No, Barone. A poker le squame non valgono.' }],
ghiacciolo: [{ say: 'A questo giro non punto niente. Nemmeno un ghiacciolo.', who: 'barondeduke', pose: 'facepalm' }],
},
actions: {
look: [{ say: 'Il BaronDeDuke, col cappello da cowboy. Ha l\'aria di uno che aspetta qualcuno, e che spera non lo veda nessuno.' }],
talk: [
{ say: 'Barone! Che ci fai qui?' },
{ say: 'Aspetto uno che mi deve riportare le mutande.', who: 'barondeduke' },
{ say: 'Le... mutande?' },
{ say: 'Le ho perse a poker, ieri sera.', who: 'barondeduke', pose: 'facepalm' },
{ say: 'Avevo due donne e due jack. Entra la terza donna, e penso: «Male male si divide».', who: 'barondeduke', pose: 'cards' },
{ say: 'E invece?' },
{ say: 'L\'altro aveva colore.', who: 'barondeduke', pose: 'shrug' },
],
},
},
],
},
polisportiva_principale: {
name: 'Campo principale',
map: [40, 96],
background: 'assets/scenes/polisportiva-principale.png',
walk: [[0, 298], [640, 298], [640, 360], [0, 360]],
depth: [[298, 1.0], [360, 1.2]],
entry: [40, 330],
hotspots: [
{
id: 'tribuna', name: 'tribuna', box: [254, 172, 116, 40], at: [310, 320], face: 'up',
actions: {
look: [{ say: 'La tribuna bianca e rossa. La domenica qui c\'è più tifo che al Palio. Quasi.' }],
},
},
{
id: 'campo', name: 'campo', box: [0, 212, 640, 76], at: [320, 320], face: 'up',
actions: {
look: [{ say: 'Il campo principale. Erba vera, righe vere, porte vere. Altro che le maglie per terra.' }],
walk: [{ say: 'Entrare in campo senza permesso? Il custode mi fa fare dieci giri di corsa.' }],
},
},
{
id: 'al_ponte', name: 'indietro, verso il ponte', box: [0, 280, 50, 80], at: [14, 330], exit: { scene: 'ponte_sieve', at: [320, 206], face: 'down' },
},
{
id: 'al_secondario', name: 'avanti, verso il campo secondario', box: [590, 280, 50, 80], at: [626, 330], exit: { scene: 'polisportiva', at: [100, 340], face: 'up' },
},
],
},
// Via Provinciale, a destra dalla Pieve: il forno (la Pieve gli è a destra); a sinistra la stazione, e oltre La Luna e Campomigliaio.
forno: {
name: 'Il forno',
map: [86, 58],
background: 'assets/scenes/forno-conti.png',
walk: [[0, 360], [0, 268], [640, 268], [640, 360]],
depth: [[268, 0.8], [360, 1.15]],
entry: [628, 300],
hotspots: [
{
id: 'forno', name: 'forno', box: [100, 40, 420, 220], at: [320, 290], face: 'up',
actions: {
look: [{ say: 'Il forno. Il profumo del pane arriva fino alla Pieve, e la domenica mattina fino a casa mia.' }],
open: [{ say: 'Una schiacciata calda... no, prima il palio. Però l\'odore me lo porto dietro.' }],
},
},
{
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: [318, 224], face: 'down' },
},
{
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' },
},
],
},
stazione: {
name: 'La stazione',
map: [88, 71],
background: 'assets/scenes/stazione.png',
walk: [[0, 360], [0, 270], [640, 270], [640, 360]],
depth: [[270, 0.75], [360, 1.15]],
entry: [628, 320],
hotspots: [
{
id: 'stazione', name: 'stazione', box: [200, 30, 440, 200], at: [400, 290], face: 'up',
actions: {
look: [{ say: 'La stazione della Faentina. Da qui i treni vanno a Firenze e a Faenza, con calma.' }, { say: 'Molta calma.' }],
},
},
{
id: 'bar', name: 'bar della stazione', box: [360, 196, 50, 66], at: [385, 290], face: 'up',
actions: {
look: [{ say: 'Il bar della stazione. Qui si aspetta il treno, e quando il treno è in ritardo si aspetta un altro caffè.' }],
open: [{ say: 'Non ho tempo per un caffè. E poi il caffè mi fa tremare come la carretta del Palio.' }],
},
},
{
id: 'al_ponticino', name: 'a sinistra, verso il ponticino della Carza', box: [0, 190, 56, 120], at: [14, 300], exit: { scene: 'ponticino', at: [474, 202], face: 'down' },
},
{
id: 'al_bivio', name: 'indietro, verso la Provinciale', box: [60, 334, 520, 26], at: [320, 354], exit: { scene: 'bivio_provinciale', at: [580, 345], face: 'left' },
},
{
id: 'ai_giardini', name: 'a destra, il campone delle poste', box: [590, 190, 50, 100], at: [628, 300], exit: { scene: 'giardini_poste', at: [137, 240], 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.5], [360, 1.7]],
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: 'più avanti, la stradina della scuola', box: [170, 196, 80, 40], at: [208, 226], exit: { scene: 'scuola', at: [600, 320], face: 'left' },
},
{
id: 'la_luna', name: 'a sinistra, verso La Luna e Campomigliaio', box: [0, 216, 44, 56], at: [12, 248], exit: { scene: 'provinciale_viale', at: [300, 350], face: 'up' },
},
{
id: 'al_forno', name: 'laggiù, verso il forno', box: [280, 196, 80, 40], at: [318, 224], exit: { scene: 'forno', at: [12, 300], face: 'right' },
},
{
id: 'alla_stazione', name: 'a destra, la stazione', box: [560, 250, 80, 110], at: [580, 345], exit: { scene: 'stazione', at: [320, 350], face: 'up' },
},
],
},
// La Provinciale dopo il bivio della stazione, fra gli alberi, prima della Carza (foto di Andrea, 24 ottobre).
provinciale_viale: {
name: 'Via Provinciale, il viale alberato',
map: [72, 68],
background: 'assets/scenes/provinciale-viale.png',
effects: [{ type: 'clouds', area: [300, 10, 220, 120], count: 2 }, { type: 'leaves', area: [20, 40, 360, 250], count: 4, colors: ['#a8c44e', '#efe8c8', '#7fa83a'] }],
walk: [[0, 360], [0, 330], [400, 232], [462, 232], [620, 360]],
depth: [[232, 0.4], [360, 1.7]],
entry: [300, 350],
hotspots: [
{
id: 'verso_la_sieve', name: 'avanti, verso La Luna', box: [392, 220, 80, 22], at: [435, 236], exit: { scene: 'verso_luna', at: [150, 206], face: 'down' },
},
{
id: 'negozi', name: 'negozi', box: [20, 150, 200, 95], at: [150, 330], face: 'left',
actions: {
look: [{ say: 'I negozi sotto i palazzi, al riparo degli alberi. Con la festa domani, stasera chiudono tardi.' }],
},
},
{
id: 'alberi', name: 'alberi del viale', box: [230, 20, 160, 200], at: [330, 290], face: 'up',
actions: {
look: [{ say: 'Gli alberi del viale: d\'estate fanno un\'ombra che in piazza se la sognano.' }],
use: [{ say: 'Arrampicarmi? Ho ventisette anni, non sette.' }],
},
},
{
id: 'villette', name: 'case col balcone', box: [500, 0, 140, 230], at: [540, 330], face: 'right',
actions: {
look: [{ say: 'Case coi balconi pieni di fiori. Qui il palio si sente da lontano: il giusto.' }],
},
},
{
id: 'al_bivio', name: 'indietro, verso il bivio', box: [0, 334, 620, 26], at: [300, 354], exit: { scene: 'bivio_provinciale', at: [12, 248], face: 'right' },
},
],
},
// La Provinciale lungo la Carza, uscendo dal paese verso La Luna (foto di Andrea, 24 ottobre).
verso_luna: {
name: 'La Provinciale lungo la Carza',
map: [66, 73],
background: 'assets/scenes/verso-luna.png',
effects: [{ type: 'birds', phase: ['pomeriggio', 'tramonto'], area: [200, 30, 400, 90] }, { type: 'clouds', area: [160, 0, 480, 110], count: 3, big: true }, { type: 'fireflies', phase: 'sera', area: [200, 210, 220, 80], count: 8 }, { type: 'sparkle', area: [380, 288, 200, 30], count: 5 }, { type: 'sparkle', area: [430, 210, 40, 30], count: 2 }, { type: 'smoke', at: [113, 116] }, { type: 'lamps', phase: 'sera', points: [[165, 93]] }],
walk: [[0, 360], [0, 200], [168, 190], [182, 196], [330, 360]],
depth: [[192, 0.45], [360, 1.7]],
entry: [150, 206],
hotspots: [
{
id: 'verso_la_luna', name: 'avanti, verso La Luna e Campomigliaio', box: [0, 334, 330, 26], at: [150, 352], exit: { scene: 'campomigliaio_strada', at: [300, 350], face: 'up' },
},
{
id: 'carza', name: 'la Carza', box: [340, 205, 300, 155], at: [250, 300], face: 'right',
actions: {
look: [{ say: 'La Carza, la stessa che passa sotto il ponticino per Cardetole. Più sassi che acqua.' }, { say: 'Da quando scavano le gallerie dell\'alta velocità, d\'estate sparisce. Torna viva d\'inverno.' }],
use: [{ say: 'Scendere nel greto ora? Il palio non sta mica sotto un sasso.' }],
},
},
{
id: 'luna', name: 'la luna', box: [482, 54, 24, 24], at: [200, 300], face: 'right',
actions: {
look: [{ say: 'La luna, già alta in pieno giorno. Proprio sulla strada per La Luna: chi ha dato i nomi qui aveva il senso dell\'umorismo.' }],
take: [{ say: 'Ci arrivo, ci arrivo. Fra un paio di secoli.' }],
},
},
{
id: 'casa_bianca', name: 'casa bianca', box: [84, 112, 80, 64], at: [120, 220], face: 'up',
actions: {
look: [{ say: 'Una casa bianca sotto il bosco, coi pini sopra. Bella vista sulla Carza, e sui camion della Provinciale.' }],
},
},
{
id: 'muretto', name: 'muretto', box: [178, 196, 120, 150], at: [190, 300], face: 'right',
actions: {
look: [{ say: 'Il muretto lungo la Carza, tutto licheni. È più vecchio di me, e sta in piedi meglio.' }],
},
},
{
id: 'al_viale', name: 'indietro, verso il paese', box: [0, 182, 240, 26], at: [150, 200], exit: { scene: 'provinciale_viale', at: [435, 238], face: 'down' },
},
],
},
// Campomigliaio, il rione dei blu (foto dell'Arcu): la strada in salita, il Circolo, il ponte vecchio.
campomigliaio_strada: {
name: 'Campomigliaio, la strada',
map: [60, 78],
background: 'assets/scenes/campomigliaio-strada.png',
walk: [[0, 360], [0, 300], [250, 222], [300, 210], [350, 210], [420, 240], [640, 345], [640, 360]],
depth: [[210, 0.35], [360, 1.7]],
entry: [300, 350],
hotspots: [
{
id: 'al_circolo', name: 'su, verso il circolino', box: [270, 195, 90, 25], at: [320, 214], exit: { scene: 'campomigliaio_circolo', at: [150, 345], face: 'up' },
},
{
id: 'torretta', name: 'casa con la torretta', box: [280, 120, 80, 62], at: [320, 222], face: 'up',
actions: {
look: [{ say: 'In cima alla salita, la casa con la torretta. Da quaggiù sembra il castello di Campomigliaio.' }],
},
},
{
id: 'muro', name: 'muro di pietra', box: [430, 190, 210, 140], at: [420, 300], face: 'right',
actions: {
look: [{ say: 'Un muro di sassi a secco, con la ringhiera sopra. Ne ha visti passare di pali.' }],
},
},
{
id: 'porta', name: 'porta marrone', box: [150, 165, 32, 56], at: [180, 270], face: 'left',
actions: {
look: [{ say: 'Una porta marrone, chiusa.' }],
open: [{ say: 'Chiusa. Saranno tutti al circolino.' }],
},
},
{
id: 'alla_carza', name: 'indietro, verso la Provinciale', box: [0, 334, 640, 26], at: [300, 354], exit: { scene: 'verso_luna', at: [150, 330], face: 'up' },
},
],
},
campomigliaio_circolo: {
name: 'Campomigliaio, il circolino',
map: [55, 82],
background: 'assets/scenes/campomigliaio-circolo.png',
effects: [{ type: 'windows', phase: 'sera', rects: [[55, 186, 50, 28], [110, 186, 50, 28], [165, 186, 36, 28], [316, 180, 16, 44]] }],
walk: [[0, 360], [0, 335], [60, 300], [400, 280], [640, 250], [640, 360]],
depth: [[250, 1.0], [360, 1.5]],
entry: [320, 330],
// L'Arcu davanti al circolino, accanto alla fontanella (sprite di Codex, 25 ottobre).
speakers: { arcu: [418, 214] },
people: [
{ who: 'arcu', at: [418, 292], facing: -1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 4.2 },
// Oggetti statici: ordinati per profondità come la macchina del tempo, senza voce.
// Con la depth della scena misura circa 160 px; resta sopra il bordo di walk. (Il Betino dell'Arcu sta in
// cima alla salita di Via Liguri Magelli, Andrea 28 ottobre.)
{ who: 'ghiacciomobile', at: [176, 286], size: 0.986, idle: 'idle', talk: [] },
],
hotspots: [
{
id: 'ghiacciomobile', name: 'la Ghiacciomobile', box: [96, 215, 160, 71], at: [240, 308], face: 'up', default: 'look',
// La Corsa nera degli amici (sprite di Codex, 26 ottobre). Parlandole, Andrea ricorda; lei non risponde.
actions: {
look: [{ say: 'La Ghiacciomobile nera. Hai visto cose che noi poveri umani non potremmo neppur lontanamente immaginare.' }],
talk: [{ dialogue: 'ghiacciomobile' }],
use: [{ say: 'Con questo sole, di ghiaccio c\'è rimasto giusto il nome. Vo a piedi.' }],
},
},
{
id: 'circolo', name: 'il circolino', box: [100, 0, 380, 205], at: [300, 290], face: 'up',
actions: {
look: [{ say: 'Il circolino: il Circolo SMS di Campomigliaio. Un\'istituzione, qui i volontari hanno sempre fatto miracoli.' }, { say: 'Il sabato sera ci si mangia una pizza ottima, e si sta meglio che a casa. Si respira fratellanza.' }],
open: [{
if: 'rione:campomigliaio',
then: [{ say: 'Se entro ora, mi chiedono tutti del palio. Prima lo ritrovo, poi entro a testa alta.' }],
else: [{ say: 'Il circolino dei blu, il giorno prima del palio? Meglio di no.' }],
}],
},
},
{
id: 'fontanella', name: 'fontanella', box: [364, 212, 26, 58], at: [376, 286], face: 'up',
actions: {
look: [{ say: 'Una fontanella di ghisa. Acqua fresca e gratis, la cosa più preziosa di maggio.' }],
use: [{ say: 'Un sorso d\'acqua. Ora sì che si ragiona.' }],
},
},
{
id: 'insegna', name: 'insegna del circolino', box: [484, 86, 28, 62], at: [500, 272], face: 'up',
actions: {
look: [{ say: 'L\'insegna del circolino. Senza scritte: tanto qui lo sanno tutti dov\'è.' }],
},
},
{
id: 'panchina', name: 'panchina', box: [520, 206, 52, 30], at: [545, 262], face: 'up',
actions: {
look: [{ say: 'La panchina davanti al circolino. Di solito è occupata da chi sa tutto di tutti.' }],
use: [{ say: 'Non è il momento di sedersi. Il palio non si cerca da solo.' }],
},
},
{
id: 'alla_strada', name: 'giù per la strada', box: [0, 334, 300, 26], at: [150, 352], exit: { scene: 'campomigliaio_strada', at: [320, 216], face: 'down' },
},
{
id: 'al_ponte', name: 'a sinistra, verso il ponte', box: [44, 220, 40, 80], at: [70, 312], exit: { scene: 'campomigliaio_ponte', at: [80, 330], face: 'right' },
},
{
id: 'tagliaferro', name: 'a diritto, verso Tagliaferro', box: [596, 210, 44, 60], at: [622, 258], face: 'right', default: 'walk',
actions: {
walk: [{ say: 'A diritto si va a Tagliaferro. Il palio non sarà mica scappato fin laggiù.' }],
look: [{ say: 'La strada va avanti verso Tagliaferro.' }],
},
},
{
id: 'arcu', name: 'l\'Arcu', box: [400, 216, 38, 76], at: [362, 300], face: 'right', default: 'talk',
give: {
squama: [{ say: 'Che è, la mancia? Una squama? Grazie, la metto in cassaforte.', who: 'arcu', pose: 'laugh' }, { say: 'Tienila te, che io di roba verde ne ho già abbastanza sul lavoro.', who: 'arcu' }],
libro: [{ say: 'Un libro? A me? Lo sai che io leggo solo le etichette degli armadi.', who: 'arcu', pose: 'shrug' }],
},
actions: {
look: [{ say: 'L\'Arcu, il mio amico di sempre. Davanti al circolino, come se ci fosse nato.' }],
talk: [{ dialogue: 'arcu' }],
},
},
],
},
campomigliaio_ponte: {
name: 'Campomigliaio, il ponte vecchio',
map: [50, 86],
background: 'assets/scenes/campomigliaio-ponte.png',
effects: [{ type: 'birds', phase: ['pomeriggio', 'tramonto'], area: [100, 10, 300, 60] }, { type: 'clouds', area: [80, 5, 300, 50], count: 2 }, { type: 'fireflies', phase: 'sera', area: [0, 220, 150, 120], count: 7 }, { type: 'sparkle', area: [150, 205, 160, 90], count: 7 }, { type: 'sparkle', area: [330, 300, 110, 40], count: 3 }, { type: 'smoke', at: [605, 50] }],
walk: [[0, 360], [0, 232], [100, 225], [140, 240], [170, 275], [260, 330], [300, 360]],
depth: [[225, 0.6], [360, 1.5]],
entry: [80, 330],
hotspots: [
{
id: 'ponte', name: 'il ponte vecchio', box: [60, 100, 290, 95], at: [110, 240], face: 'up',
actions: {
look: [{ say: 'Il ponte vecchio, coi suoi due archi. Chissà quante piene ha visto passare: io al primo temporale cerco riparo.' }],
},
},
{
id: 'torrente', name: 'il torrente', box: [150, 200, 320, 160], at: [200, 300], face: 'right',
actions: {
look: [{ say: 'L\'acqua è bassa e limpida. Si vedono i sassi del fondo, e nessun palio.' }],
use: [{ say: 'Mi bagno le scarpe e poi chi la sente, la mamma.' }],
},
},
{
id: 'tronco', name: 'tronco', box: [318, 230, 74, 56], at: [215, 315], face: 'right',
actions: {
look: [{ say: 'Un tronco bianco portato giù dalla piena, piantato in mezzo all\'acqua.' }],
take: [{ say: 'Troppo pesante, e troppo bagnato. Lo lascio ai girini.' }],
},
},
{
id: 'al_circolo', name: 'indietro, verso il circolino', box: [0, 334, 280, 26], at: [120, 354], exit: { scene: 'campomigliaio_circolo', at: [76, 314], 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',
speakers: { tosca: [292, 196], mariano: [500, 234] },
// Mariano, il campione del pallaio (sprite di Codex dalla foto di Andrea, 25 ottobre).
people: [{ who: 'mariano', at: [500, 290], facing: -1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 4.4 }],
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: 'pallaio', name: 'il pallaio', box: [300, 248, 340, 40], at: [400, 300], face: 'up',
actions: {
look: [{ say: 'Il pallaio, dove si gioca a bocce. Qui un punto si discute più di un rigore.' }],
use: [{ say: 'Una partita? Chiedo a Mariano, il campione.' }, { dialogue: 'mariano' }],
},
},
{
id: 'tennis', name: 'campo da tennis', box: [0, 190, 70, 130], at: [40, 310], face: 'left',
actions: {
look: [{ say: 'Di là, dove guarda l\'omino di ferro, c\'è il campo da tennis della chiesa.' }],
},
},
{
id: 'chiosco', name: 'chiosco', box: [240, 196, 106, 72], at: [300, 296], face: 'up', default: 'talk',
give: {
squama: [{ say: 'Tosca, guarda cosa ho trovato.' }, { say: 'Bella. Ma nella cedrata questa non ce la metto.', who: 'tosca' }],
libro: [{ say: 'Un libro? Andrea, qui si legge solo il listino. E costa meno.', who: 'tosca' }],
},
actions: {
look: [{ say: 'Il chiosco del tennis. D\'estate qui c\'è la Tosca coi ghiaccioli.' }],
talk: [{ say: 'Tosca! C\'è la Tosca?' }, { say: 'Eccomi, Andrea! Cosa ti do? Fanta, Coca, cedrata, spuma bionda... o un ghiacciolo?', who: 'tosca' }, { dialogue: 'tosca' }],
open: [{ say: 'Il chiosco si apre da dentro. Basta chiamare la Tosca.' }],
},
},
{
id: 'omino', name: 'omino di ferro', box: [80, 190, 40, 140], at: [130, 320], face: 'left',
actions: {
look: [{ say: 'L\'omino di ferro con la racchetta, una scultura di Simone Rocchi. Almeno lui a tennis ci gioca.' }],
talk: [{ say: 'Partita?' }, { say: '...' }, { say: 'Mi sa che vince lui ai punti. Non si muove mai.' }],
},
},
{
id: 'al_cancello', name: 'dal cancello verde, verso il posticino della Carza', box: [470, 140, 120, 130], at: [515, 280], exit: { scene: 'carza', at: [440, 290], face: 'left' },
},
{
id: 'mariano', name: 'Mariano', box: [482, 238, 36, 52], at: [455, 300], face: 'right', default: 'talk',
actions: {
look: [{ say: 'Mariano, il campione del pallaio. Gli occhiali in testa, il sorriso di chi ha già vinto.' }],
talk: [{ dialogue: 'mariano' }],
},
},
],
},
// Il sentiero nel bosco fra la casa del maestro Bacci (alle spalle) e la Fortezza (a diritto): foto di Andrea,
// 28 ottobre. La pozza c'è anche a Ferragosto (Andrea).
sentiero_fortezza: {
name: 'Il sentiero della Fortezza',
map: [43, 9],
background: 'assets/scenes/sentiero-fortezza.png',
walk: [[0, 360], [0, 321], [208, 267], [292, 196], [317, 181], [342, 181], [375, 217], [500, 292], [640, 325], [640, 360]],
depth: [[181, 0.3], [360, 1.15]],
entry: [320, 350],
hotspots: [
{
id: 'pozza', name: 'pozza', box: [271, 212, 96, 54], at: [250, 285], face: 'right',
actions: {
look: [{ say: 'La pozza. Anche il quindici d\'agosto è sempre bella piena.' }, { say: 'Un giorno ci casco dentro e ci affogo: il primo annegato in mezzo al bosco.' }],
use: [{ say: 'Un bagno nella pozza? No, grazie: non so quanto è fonda, e non lo voglio sapere.' }],
},
},
{
id: 'rete', name: 'rete', box: [0, 140, 230, 150], at: [120, 300], face: 'left',
actions: {
look: [{ say: 'Una rete vecchia, tenuta su coi pali di legno e con la speranza.' }],
},
},
{
id: 'alla_fortezza', name: 'a diritto, verso la Fortezza', box: [295, 160, 70, 36], at: [328, 186], exit: { scene: 'fortezza', at: [20, 330], face: 'right' },
},
{
id: 'alla_casa_bacci', name: 'indietro, verso la casa del maestro Bacci', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'casa_maestro_bacci', at: [120, 350], face: 'up' },
},
],
},
// La salita bianca fra la casa del maestro Bacci (alle spalle) e il viale dei cipressi (lassù spuntano i
// cipressi): foto di Andrea, 28 ottobre.
salita_cipressi: {
name: 'La salita dei cipressi',
map: [55, 10],
background: 'assets/scenes/salita-cipressi.png',
walk: [[0, 360], [0, 317], [208, 258], [298, 190], [333, 188], [417, 233], [583, 300], [640, 325], [640, 360]],
depth: [[188, 0.3], [360, 1.15]],
entry: [320, 350],
hotspots: [
{
id: 'cipressi', name: 'cipressi', box: [310, 118, 26, 70], at: [316, 200], face: 'up',
actions: {
look: [{ say: 'Lassù spuntano i cipressi: il viale del Trebbio. Ancora un pezzo di salita.' }],
},
},
{
id: 'cartello', name: 'cartello', box: [104, 144, 26, 26], at: [150, 280], face: 'left',
actions: {
look: [{ say: 'Un cartello bianco. Bianco e basta: chi l\'ha messo s\'è scordato cosa ci voleva scrivere.' }],
},
},
{
id: 'muretto', name: 'muretto', box: [0, 232, 112, 60], at: [120, 300], face: 'left',
actions: {
look: [{ say: 'Un muretto di sassi e mattoni: buono per riprendere fiato a metà salita.' }],
use: [{ say: 'Mi siederei, ma se mi siedo ora non mi rialzo più.' }],
},
},
{
id: 'ai_cipressi', name: 'su, verso i cipressi', box: [290, 162, 66, 32], at: [316, 194], exit: { scene: 'viale_cipressi', at: [300, 350], face: 'up' },
},
{
id: 'alla_casa_bacci', name: 'indietro, verso la casa del maestro Bacci', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'casa_maestro_bacci', at: [138, 226], face: 'down' },
},
],
},
// 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: 'giù a destra, la casa del maestro Bacci', box: [500, 296, 140, 64], at: [200, 340], face: 'right',
actions: {
look: [{ say: 'Giù a destra, oltre le vigne, c\'è la casa del maestro Bacci. Mezzo paese ha imparato a leggere e scrivere da lui.' }],
},
},
{
id: 'trebbio', name: 'castello del Trebbio', box: [286, 66, 50, 30], at: [140, 240], face: 'up',
actions: {
look: [{ say: 'Eccolo lì, il castello del Trebbio, in tutto il suo splendore. Da quaggiù sembra una pedina.' }],
},
},
{
id: 'vigne', name: 'vigne', box: [160, 250, 340, 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: [120, 150, 56, 30], at: [138, 226], exit: { scene: 'salita_cipressi', at: [320, 350], face: 'up' },
},
{
id: 'alla_fortezza', name: 'indietro, verso la Fortezza', box: [0, 330, 240, 30], at: [120, 354], exit: { scene: 'sentiero_fortezza', at: [320, 350], face: 'up' },
},
],
},
// 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',
// Le lucine dei festoni, che si accendono e si spengono; di sera i lampioni.
effects: [
{ type: 'bulbs', points: [[178, 122], [197, 126], [217, 130], [236, 133], [255, 136], [275, 139], [294, 141], [313, 143], [333, 144], [352, 145], [371, 146], [391, 146], [410, 146], [430, 145], [449, 144], [468, 143], [488, 141], [507, 139], [526, 137], [546, 134], [565, 130], [584, 127], [604, 122], [623, 118]] },
{ type: 'lamps', phase: 'sera', points: [[162, 90], [216, 148], [250, 162], [370, 158], [440, 158], [496, 182], [527, 180], [590, 178], [632, 112]] },
],
walk: [[0, 360], [0, 260], [160, 240], [420, 240], [640, 296], [640, 360]],
depth: [[240, 0.55], [360, 2.4]],
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: 'bar dell\'area feste', box: [0, 110, 120, 140], at: [60, 280], face: 'left',
actions: {
look: [{ say: 'Il bar sotto il porticato. Fra qualche anno ci faranno il Locura.' }, { say: 'E il mercoledì d\'estate, tutti fuori a cena. Stupendo.' }],
open: [{ say: 'Il mercoledì sera è ancora lontano. Prima il palio.' }],
},
},
{
id: 'al_secondario', name: 'di là, verso il campo secondario', box: [590, 170, 50, 110], at: [620, 300], exit: { scene: 'polisportiva', at: [320, 265], face: 'down' },
},
{
id: 'al_parco', name: 'indietro, verso il parco', box: [0, 334, 640, 26], at: [320, 354], exit: { scene: 'area_feste', at: [130, 224], face: 'down' },
},
],
},
// Livello 1: Villa Adami, vista dalla salita della Fortezza guardando in discesa.
villa_adami: {
name: 'Villa Adami',
map: [46, 32],
background: 'assets/scenes/villa-adami.png',
effects: [{ type: 'birds', phase: ['pomeriggio', 'tramonto'], area: [300, 20, 330, 60] }, { type: 'clouds', area: [300, 5, 340, 60], count: 2 }, { type: 'windows', phase: 'sera', rects: [[148, 104, 10, 24], [205, 110, 10, 22], [300, 120, 12, 26], [372, 128, 10, 20], [412, 130, 10, 20], [448, 134, 10, 18], [150, 186, 12, 22], [205, 190, 12, 22], [372, 190, 10, 20], [412, 190, 10, 20], [448, 192, 10, 18]] }, { type: 'flag', at: [251, 4], w: 9, h: 6, colors: ['#f4f1e8', '#2a2a2a'] }],
walk: [[0, 272], [30, 246], [60, 244], [110, 256], [190, 268], [360, 296], [440, 288], [520, 276], [560, 268], [612, 262], [614, 272], [520, 288], [500, 292], [500, 360], [0, 360]],
depth: [[244, 0.5], [360, 1.2]],
entry: [300, 345],
hotspots: [
{
id: 'villa', name: 'Villa Adami', box: [69, 8, 459, 247], at: [300, 300], face: 'up',
actions: {
look: [{ say: 'Villa Adami. Gialla come un tuorlo, con le persiane verdi.' }],
open: [{ say: 'Mica è casa mia. E poi suonare e scappare non si fa più dalla quinta elementare.' }],
},
},
{
id: 'verso_piazza', name: 'Via de\' Medici, verso la Piazza', box: [20, 215, 50, 40], at: [45, 250], exit: { scene: 'via_de_medici', at: [300, 216], face: 'down' },
},
{
id: 'verso_pieve', name: 'discesa verso la Pieve', box: [560, 236, 60, 38], at: [600, 266], exit: { scene: 'pieve', at: [600, 350], face: 'left' },
},
{
id: 'salita', name: 'salita verso la Fortezza', box: [100, 330, 400, 30], at: [300, 354], exit: { scene: 'salita_villa_adami', at: [340, 352], face: 'right' },
},
],
},
// Il Poggio, dalla salita del leone alla Fortezza: la stradina col muretto e tutto il Mugello sotto (foto di Andrea, 24 ottobre).
salita_fortezza: {
name: 'Il Poggio',
map: [37, 12],
background: 'assets/scenes/salita-fortezza.png',
walk: [[0, 360], [0, 322], [80, 264], [150, 246], [195, 246], [222, 262], [296, 360]],
depth: [[246, 0.45], [360, 1.4]],
entry: [150, 345],
hotspots: [
{
id: 'giu_leone', name: 'giù, verso Villa Adami', box: [130, 222, 90, 30], at: [175, 250], exit: { scene: 'salita_villa_adami', at: [326, 259], face: 'right' },
},
{
id: 'su_fortezza', name: 'su, alla Fortezza', box: [0, 334, 296, 26], at: [150, 352], exit: { scene: 'fortezza', at: [330, 300], face: 'left' },
},
{
id: 'panorama', name: 'il Mugello', box: [300, 120, 340, 80], at: [190, 300], face: 'right',
actions: {
look: [{ say: 'Da quassù si vede tutto: i tetti del paese, i campi, e in fondo i monti del Mugello.' }, { say: 'Il palio però da qui non si vede. Ci avevo sperato.' }],
},
},
{
id: 'fico', name: 'fico', box: [460, 200, 180, 160], at: [240, 320], face: 'right',
actions: {
look: [{ say: 'Un fico che si sporge dal muretto. A fine maggio i fichi sono ancora duri: torno ad agosto.' }],
take: [{ say: 'Acerbi. E poi non sono miei.' }],
},
},
{
id: 'case', name: 'case', box: [40, 0, 100, 240], at: [60, 320], face: 'left',
actions: {
look: [{ say: 'Le case del Poggio, che salgono verso la Fortezza coi fiori alle finestre e i muri di sasso.' }],
},
},
],
},
// Tra il livello 1 e il 2: la salita di Villa Adami, con la casa del leone. Si sale alla Fortezza.
salita_villa_adami: {
name: 'Salita di Villa Adami',
map: [38, 19],
background: 'assets/scenes/salita-villa-adami.png',
walk: [[0, 314], [140, 310], [262, 322], [292, 346], [322, 346], [318, 300], [322, 262], [334, 244], [420, 250], [640, 286], [640, 360], [0, 360]],
depth: [[252, 0.5], [360, 1.1]],
entry: [340, 352],
// Quando parla, dalla statua di coccio esce lo spirito di un leone vero (disegnato da Codex, idea di Andrea).
speakers: { leone: [285, 40] },
apparitions: [{ who: 'leone', src: 'assets/characters/spirito-leone.png', at: [440, 100], height: 84 }],
hotspots: [
{
id: 'leone', name: 'leone di terracotta', box: [412, 66, 34, 30], at: [400, 290], face: 'up',
actions: {
look: [{ say: 'Un leone di terracotta che fa la guardia alla salita. Di serpenti, dice, non ne ha visti passare.' }],
talk: [{ say: 'Ciao leone. Visto passare un serpente con le ali?' }, { say: 'Io fo la guardia alla salita, mica ai serpenti.', who: 'leone' }, { say: 'E poi di notte dormo. Come tutti, in questo paese.', who: 'leone' }, { say: 'Un leone di terracotta che parla. Devo dormire di più anch\'io.' }],
take: [{ say: 'Pesa più di me. E poi ha un\'aria permalosa.' }],
},
with: {
torcia: [{ say: 'Ehi! Mi abbagli! Sono di terracotta, mica cieco.', who: 'leone' }, { say: 'Scusa, leone.' }, { say: 'Quella tienila per il buio. Qui c\'è il sole, se non l\'hai notato.', who: 'leone' }],
},
give: {
squama: [{ say: 'Una squama? Io di squame ne ho viste... mai. Io faccio la guardia alla salita.', who: 'leone' }, { say: 'Lo so, lo so. Alla salita.' }],
},
},
{
id: 'verso_scuola', name: 'strada verso la scuola', box: [0, 286, 120, 44], at: [40, 336], face: 'left', exit: { scene: 'scuola', at: [128, 340], face: 'right' },
actions: {
look: [{ say: 'Di là si va alla scuola. Ci ho passato abbastanza anni, grazie.' }],
},
},
{
id: 'su_fortezza', name: 'su per il Poggio, verso la Fortezza', box: [168, 196, 182, 46], at: [326, 259], face: 'left', exit: { scene: 'salita_fortezza', at: [175, 252], face: 'down' },
},
{
id: 'verso_villa_adami', name: 'discesa verso Villa Adami', box: [200, 334, 280, 26], at: [340, 356], exit: { scene: 'villa_adami', at: [300, 345], face: 'right' },
},
],
},
// La strada da Pieve a Cardetole: il posticino della Carza, il ponticino, l'area camper.
carza: {
name: 'Il posticino della Carza',
map: [60, 58],
background: 'assets/scenes/carza.png',
effects: [{ type: 'fireflies', phase: 'sera', area: [80, 200, 480, 100], count: 9 }],
walk: [[60, 360], [250, 262], [300, 218], [350, 218], [420, 262], [600, 360]],
depth: [[218, 0.55], [360, 1.65]],
entry: [300, 350],
// Il Tozzino davanti al cancello del tennis, in tenuta, che aspetta Federer.
speakers: { tozzino: [440, 222] },
people: [{ who: 'tozzino', at: [440, 300], facing: -1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 3.9 }],
hotspots: [
{
id: 'muro', name: 'casa dell\'ing. Tozzi', box: [0, 120, 200, 140], at: [190, 300], face: 'left',
actions: {
look: [{ say: 'Dietro il muro di sassi c\'è la casa dell\'ingegner Patrizio Giuseppe Tozzi, il babbo del Tozzino.' }, { say: 'Uno che fra qualche anno farà il presidente del gruppo INPS: i pensionati sanpierini che si danno un sacco da fare.' }],
},
},
{
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: [515, 285], face: 'left' },
actions: {
look: [{ say: 'Il cancello verde, sempre aperto. Di là c\'è il tennis della chiesa.' }],
},
},
{
id: 'al_ponticino', name: 'il ponticino sulla Carza', box: [270, 180, 110, 50], at: [325, 222], exit: { scene: 'ponticino', at: [400, 350], face: 'up' },
},
{
id: 'alla_pieve', name: 'su verso la Pieve', box: [0, 330, 640, 30], at: [300, 354], exit: { scene: 'pieve', at: [95, 250], face: 'right' },
},
{
id: 'tozzino', name: 'il Tozzino', box: [422, 224, 36, 76], at: [392, 312], face: 'right', default: 'talk',
give: {
ghiacciolo: [{ say: 'Grazie, ma prima della partita niente zuccheri. Federer non li tocca.', who: 'tozzino', pose: 'explain' }],
torcia: [{ say: 'Una torcia? Se Federer arriva di notte, magari. Per ora tienila te.', who: 'tozzino', pose: 'watch' }],
},
actions: {
look: [{ say: 'Il Tozzino, vestito di bianco da capo a piedi, con la racchetta. Guarda l\'orologio ogni dieci secondi.' }],
talk: [
{ say: 'Tozzino! Che fai lì davanti al cancello?' },
{ say: 'Aspetto Federer. Oggi si fa una partita.', who: 'tozzino', pose: 'explain' },
{ say: 'Federer? Roger Federer?' },
{ say: 'E chi sennò? Ha chiamato ora: s\'è fermato a Pratolino a mettere le catene. A breve arriva.', who: 'tozzino', pose: 'watch' },
{ say: 'Se non arriva, la vinco a tavolino.', who: 'tozzino', pose: 'look_far' },
],
},
},
],
},
ponticino: {
name: 'Il ponticino sulla Carza',
map: [64, 71],
background: 'assets/scenes/ponticino-carza.png',
walk: [[250, 360], [438, 198], [478, 198], [560, 360]],
depth: [[198, 0.3], [360, 1.15]],
entry: [320, 350],
hotspots: [
{
id: 'torrente', name: 'la Carza', box: [0, 230, 230, 130], at: [300, 330], face: 'left',
actions: {
look: [{ say: 'La Carza. A maggio c\'è poca acqua: d\'estate si scendeva a fare le dighe coi sassi.' }],
use: [{ say: 'Fare i ponti di sassi? Prima il palio. Poi le dighe.' }],
},
},
{
id: 'griglia', name: 'griglia', box: [346, 246, 40, 24], at: [366, 270], face: 'up',
art: [{ rect: [364, 257, 5, 2], fill: '#f2f6ff', when: '!chiavetta_presa' }, { rect: [365, 256, 2, 1], fill: '#ffffff', when: '!chiavetta_presa' }],
actions: {
look: [{ if: 'chiavetta_presa', then: [{ say: 'La griglia. Ormai dentro ci sono solo foglie.' }], else: [{ say: 'Dentro la griglia luccica qualcosa: una chiavetta! È caduta fra le sbarre.' }] }],
take: [{ if: 'chiavetta_presa', then: [{ say: 'Non c\'è più niente da prendere.' }], else: [{ say: 'Le dita non passano fra le sbarre. Ci vorrebbe qualcosa di lungo e sottile... e appiccicoso.' }] }],
},
with: {
stecco_gomma: [{ if: 'chiavetta_presa', then: [{ say: 'La chiavetta l\'ho già ripescata.' }], else: [{ say: 'Giù lo stecco, piano piano... la gomma tocca la chiavetta...' }, { say: 'Eccola, presa!' }, { give: 'chiavetta' }, { set: 'chiavetta_presa' }] }],
stecco: [{ say: 'Lo stecco ci arriva, ma la chiavetta non si attacca. Serve qualcosa di appiccicoso in cima.' }],
gomma: [{ say: 'La gomma da sola non ci arriva. Serve qualcosa per spingerla giù.' }],
},
},
{
id: 'tabernacolo', name: 'tabernacolo della Madonna', box: [442, 148, 36, 44], at: [458, 204], face: 'up',
actions: {
look: [{ say: 'Il piccolo tabernacolo in fondo al ponticino. C\'è sempre un fiore fresco, ma nessuno l\'ha mai visto metterlo.' }],
},
},
{
id: 'all_area_camper', name: 'a sinistra, verso le villette del Giannini', box: [320, 160, 110, 42], at: [442, 202], exit: { scene: 'area_camper', at: [600, 330], face: 'left' },
},
{
// [DA ANDREA: dove si gira per Cardetole, in fondo al ponticino]
id: 'a_cardetole', name: 'in fondo a destra, verso Cardetole', box: [578, 80, 62, 90], at: [476, 204], exit: { scene: 'cardetole', at: [628, 290], face: 'left' },
},
{
id: 'alla_stazione', name: 'a destra, verso la stazione', box: [486, 160, 90, 40], at: [474, 202], exit: { scene: 'stazione', at: [20, 300], face: 'right' },
},
{
id: 'alla_carza', name: 'indietro, verso la Pieve', box: [0, 330, 640, 30], at: [400, 354], exit: { scene: 'carza', at: [325, 222], face: 'down' },
},
],
},
area_camper: {
// Le villette dove abita il Giannini: da qui si va al suo campo (Andrea, 28 ottobre). L'id resta area_camper.
name: 'Le villette del Giannini',
map: [70, 84],
background: 'assets/scenes/area-camper.png',
walk: [[0, 360], [0, 260], [200, 232], [380, 240], [450, 248], [640, 300], [640, 360]],
depth: [[232, 0.5], [360, 1.15]],
entry: [600, 330],
hotspots: [
{
id: 'panchina', name: 'panchina', box: [156, 190, 36, 20], at: [190, 242], face: 'up',
actions: {
look: [{ say: 'La panchina del parco. Ci si sedevano i camperisti a guardare le montagne, con la cartina al contrario.' }],
},
},
{
id: 'villette', name: 'villette', box: [500, 80, 140, 106], at: [560, 280], face: 'right',
actions: {
look: [{ say: 'Le villette rosa coi balconi bianchi. Da qui a casa mia è un attimo.' }],
},
},
{
// Casa è a destra, per la strada (Andrea, 28 ottobre).
id: 'a_cardetole', name: 'verso casa, a Cardetole', box: [572, 188, 68, 96], at: [618, 300], exit: { scene: 'cardetole', at: [560, 348], face: 'up' },
},
{
// Laggiù, in fondo al vialetto vicino alla siepe, il campo del Giannini (Andrea, 28 ottobre).
id: 'al_giannini', name: 'laggiù, il campo del Giannini', box: [330, 150, 96, 74], at: [380, 246], exit: { scene: 'campo_giannini', at: [480, 216], face: 'left' },
},
{
id: 'al_ponticino', name: 'indietro, il ponticino', box: [560, 300, 80, 60], at: [620, 330], exit: { scene: 'ponticino', at: [442, 202], face: 'down' },
},
],
},
// Il prato del parco dei camper visto dall'altra parte: per i ragazzi, «il campo del Giannini». Ci si arriva dal
// lato delle villette dove abita il Giannini (fra gli alberi a destra) e dal Trappola; dal ponticino non si viene
// qui. L'area camper è il campo stesso: i camper stanno qui dietro (Andrea, 28 ottobre).
campo_giannini: {
name: 'Il campo del Giannini',
map: [82, 96],
background: 'assets/scenes/campo-giannini.png',
walk: [[0, 360], [0, 214], [300, 208], [460, 210], [640, 220], [640, 360]],
depth: [[208, 0.4], [360, 1.15]],
entry: [320, 350],
hotspots: [
{
id: 'porte', name: 'porte', box: [300, 180, 120, 30], at: [360, 216], face: 'up',
actions: {
look: [{ say: 'Il campo del Giannini. Qui si giocava a calcio fino a buio, con le porte grandi: roba da campionato.' }],
use: [{ say: 'Senza pallone, e senza la squadra, non vale.' }],
},
},
{
id: 'camper', name: 'qui dietro, i camper', box: [520, 320, 120, 40], at: [560, 340], face: 'down', default: 'look',
actions: {
look: [{ say: 'Qui dietro ci stanno i camper. Ma per noi questo resta il campo del Giannini.' }],
},
},
{
id: 'giochi', name: 'giochi dei bambini', box: [220, 170, 80, 40], at: [260, 216], face: 'up',
actions: {
look: [{ say: 'Gli scivoli dei bambini. Una volta il pallone finiva lì una volta su tre.' }],
},
},
{
// Fra gli alberi a destra si arriva alle villette del Giannini, in fondo al vialetto (Andrea, 28 ottobre).
id: 'all_area_camper', name: 'verso le villette del Giannini', box: [440, 150, 90, 60], at: [480, 216], exit: { scene: 'area_camper', at: [380, 246], face: 'down' },
},
{
id: 'via_liguri_magelli', name: 'dal Trappola, in Via Liguri Magelli', box: [0, 100, 70, 260], at: [30, 260], exit: { scene: 'via_liguri_magelli', at: [520, 306], face: 'left' },
},
],
},
// Via Liguri Magelli (Street View mandato da Andrea, 28 ottobre): a sinistra dal campo del Giannini. A destra la
// casa salmone con la tenda del Trappola (il Barrettino), sul muro giallo la targa della Ghiacciomobile con la sua
// fotina, e in cima alla salita il Betino dell'Arcu (dipinto da Codex nel quadro), di traverso verso la discesa:
// per partire ne ha bisogno, e intanto ferma il traffico.
via_liguri_magelli: {
name: 'Via Liguri Magelli',
map: [76, 97],
background: 'assets/scenes/via-liguri-magelli.png',
// La strada gira intorno all'Audi nera parcheggiata davanti al Trappola.
walk: [[0, 360], [0, 320], [140, 262], [226, 198], [272, 198], [300, 242], [370, 246], [400, 252], [580, 318], [640, 330], [640, 360]],
depth: [[198, 0.3], [360, 1.1]],
entry: [320, 340],
speakers: { arcu: [374, 176] },
people: [
// L'Arcu sotto la tenda del Trappola: due minuti fa era a Campomigliaio (Andrea, 28 ottobre).
{ who: 'arcu', at: [374, 248], facing: -1, size: 1.3, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 4.2 },
],
hotspots: [
{
id: 'arcu', name: 'l\'Arcu', box: [362, 180, 26, 68], at: [352, 256], face: 'right', default: 'talk',
actions: {
look: [{ say: 'L\'Arcu, sotto la tenda del Trappola. Due minuti fa era a Campomigliaio.' }],
talk: [{ dialogue: 'arcu_trappola' }],
},
},
{
// «Vai dal Trappola, la tenda è il Trappola» (Andrea). [DA ANDREA: com'è dentro, e chi c'è]
id: 'trappola', name: 'dal Trappola', box: [316, 150, 46, 46], at: [340, 252], face: 'right', default: 'walk',
actions: {
look: [{ say: 'La tenda è il Trappola: sotto c\'è il Barrettino.' }],
walk: [{ say: 'Dal Trappola ci si passa dopo. Prima il palio.' }],
},
},
{
// «Di chi è quell'Audi nera?» «Let it be» (che si legge «L'è di Bi»: è di Bini). Andrea, 28 ottobre.
id: 'audi', name: 'Audi nera', box: [292, 198, 68, 40], at: [330, 254], face: 'up', default: 'look',
actions: {
look: [{ say: 'Di chi è quell\'Audi nera?' }, { say: 'Let it be.', who: 'arcu', pose: 'explain' }],
talk: [{ say: 'Di chi è quell\'Audi nera?' }, { say: 'Let it be.', who: 'arcu', pose: 'explain' }],
use: [{ say: 'Non è mica mia. Mi garba, però, nera fiammante.' }],
},
},
{
id: 'targa', name: 'targa della Ghiacciomobile', box: [570, 130, 62, 78], at: [565, 336], face: 'right', default: 'look',
actions: {
look: [{ say: '«Qui riposa la Ghiacciomobile, che si è schiantata lì.»' }, { say: 'C\'è anche la fotina. Pareva sempre nuova.' }],
},
},
{
// La prima battuta è di Andrea (dal circolino, 26 ottobre).
id: 'betino', name: 'il Betino dell\'Arcu', box: [232, 172, 40, 24], at: [250, 206], face: 'up', default: 'look',
actions: {
look: [{ say: 'Nessuno ha mai capito davvero il tuo immenso valore.' }, { say: 'Lassù in cima, di traverso: per partire ha bisogno della discesa. E intanto ferma il traffico.' }],
use: [{ say: 'È il Betino dell\'Arcu. Senza una discesa davanti, un si muove.' }],
},
},
{
// Casa di Andrea è lassù, in cima alla salita, a destra del Betino (Andrea, 28 ottobre).
id: 'a_cardetole', name: 'lassù, verso casa a Cardetole', box: [274, 148, 40, 50], at: [264, 202], exit: { scene: 'cardetole', at: [20, 352], face: 'right' },
},
{
// Il campo del Giannini è laggiù a destra, oltre la siepe (Andrea, 28 ottobre).
id: 'al_giannini', name: 'verso il campo del Giannini', box: [430, 150, 132, 100], at: [520, 306], exit: { scene: 'campo_giannini', at: [60, 250], face: 'right' },
},
],
},
// Cardetole, il rione dei verdi, dove abita Andrea: giù dalla Pieve.
cardetole: {
name: 'Cardetole',
map: [90, 84],
background: 'assets/scenes/cardetole.png',
walk: [[0, 360], [0, 344], [120, 332], [200, 304], [262, 292], [330, 292], [372, 296], [640, 266], [640, 360]],
depth: [[266, 0.55], [360, 1.15]],
entry: [300, 350],
// Il Chiaru (Matteo Chiarusi) accanto alla pista col gesso, sul parcheggio sotto casa.
speakers: { chiaru: [520, 214] },
people: [{ who: 'chiaru', at: [520, 318], facing: -1, idle: 'stand', talk: ['talk', 'explain'], blink: 'blink', every: 3.7 }],
hotspots: [
{
id: 'chiaru', name: 'il Chiaru', box: [500, 240, 40, 78], at: [470, 330], face: 'right', default: 'talk',
actions: {
look: [{ say: 'Il Chiaru, con le ginocchia bianche di gesso e una Formula 1 blu in mano.' }],
talk: [{ dialogue: 'chiaru' }],
},
},
{
id: 'parcheggio', name: 'parcheggio', box: [356, 262, 280, 60], at: [450, 330], face: 'right',
actions: {
look: [{ say: 'Il parcheggio sotto casa. Col gesso ci si disegnava la pista delle macchinine, e si giocava finché non chiamavano per cena.' }],
},
},
{
id: 'casa', name: 'casa di Andrea', box: [330, 20, 220, 212], at: [470, 290], face: 'up',
actions: {
look: [{ say: 'Casa mia. Secondo piano: quella con la tapparella a metà è la camera di mia sorella, e a destra quella dei miei.' }],
open: [{ say: 'Se salgo, mi mettono ad apparecchiare. Prima il palio.' }],
walk: [{ say: 'Se salgo, mi mettono ad apparecchiare. Prima il palio.' }],
},
},
{
id: 'platano', name: 'platano', box: [90, 0, 170, 206], at: [200, 306], face: 'up',
actions: {
look: [{ say: 'Il prato sotto casa. Qui le porte le facevamo con le maglie per terra: due maglie, un palo ciascuna.' }, { say: 'E ogni gol era «Era fuori!», «No, era dentro!».' }],
use: [{ say: 'Arrampicarmi? Alla mia età, e davanti a tutto il condominio?' }],
},
},
{
// Il prato in salita sotto casa: le parole sono di Andrea (28 ottobre).
id: 'prato', name: 'prato', box: [52, 208, 278, 76], at: [262, 300], face: 'up', default: 'look',
actions: {
look: [
{ say: 'Su questo campo ci abbiamo passato trentacinque anni, giorno, pomeriggio e sera, a giocare a calcio.' },
{ say: 'Le maglie a fare da pali, e i palloni tagliati che entravano nelle terrazze, ovunque.' },
],
},
},
// Le uscite di casa (Andrea, 28 ottobre): in basso a destra il Giannini (le sue villette, dalla strada delle
// villette), a destra il ponticino della Carza, a sinistra il Trappola.
{
id: 'al_giannini', name: 'dal Giannini', box: [440, 322, 200, 38], at: [560, 348], exit: { scene: 'area_camper', at: [618, 300], face: 'left' },
},
{
id: 'al_ponticino', name: 'a destra, il ponticino della Carza', box: [596, 150, 44, 110], at: [628, 290], exit: { scene: 'ponticino', at: [476, 204], face: 'down' },
},
{
id: 'al_trappola', name: 'a sinistra, dal Trappola', box: [0, 236, 50, 104], at: [20, 352], exit: { scene: 'via_liguri_magelli', at: [264, 202], face: 'down' },
},
],
},
// L'ingresso della scuola, giù per la strada dalla salita di Villa Adami: dal cancello alle porte a vetri.
scuola: {
name: 'La scuola',
map: [14, 19],
background: 'assets/scenes/scuola.png',
// Il tricolore che sventola in cima all'asta.
effects: [{ type: 'birds', phase: ['pomeriggio', 'tramonto'], area: [150, 30, 400, 70] }, { type: 'clouds', area: [130, 10, 380, 100], count: 3 }, { type: 'flag', at: [122, 117], w: 13, h: 9, colors: ['#2f9a4a', '#f4f1e8', '#d2393a'] }],
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: [
{
id: 'pino', name: 'pino', box: [222, 40, 120, 70], at: [250, 232], face: 'up',
actions: {
look: [{ say: 'Un pino a ombrello enorme. Alla ricreazione, tutti all\'ombra lì sotto. Sembra ieri.' }],
},
},
{
id: 'bandiere', name: 'bandiere', box: [110, 110, 170, 52], at: [200, 230], face: 'up',
actions: {
look: [{ say: 'Il tricolore e la bandiera europea. Almeno loro a scuola ci stanno volentieri.' }],
take: [{ say: 'Rubare una bandiera davanti alla scuola? Ci manca solo che mi richiamino in presidenza, a ventisette anni.' }],
},
},
{
id: 'porte', name: 'porte della scuola', box: [130, 164, 136, 56], at: [200, 230], face: 'up',
actions: {
look: [{ say: 'Le porte a vetri della scuola. Di là ci sono i banchi, la lavagna e la campanella.' }, { say: 'E fino a ieri c\'era anche il palio: lo tenevano qui. Stamani la Gianna ha trovato il posto vuoto.' }],
open: [{ say: 'Chiuse. E la Gianna stamani ha già guardato in ogni aula e in ogni armadio: qui il palio non c\'è più.' }, { say: 'Chi l\'ha preso è passato dal paese. In piazza qualcuno avrà visto qualcosa.' }],
walk: [{ say: 'Chiuse. E la Gianna stamani ha già guardato in ogni aula e in ogni armadio: qui il palio non c\'è più.' }, { say: 'Chi l\'ha preso è passato dal paese. In piazza qualcuno avrà visto qualcosa.' }],
},
},
{
id: 'palazzine', name: 'palazzine gialle', box: [340, 30, 300, 196], at: [330, 262], face: 'right',
actions: {
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: [208, 226], face: 'right' },
},
{
id: 'alla_salita', name: 'a sinistra, verso la salita', box: [0, 240, 130, 120], at: [128, 340], exit: { scene: 'salita_villa_adami', at: [40, 336], face: 'right' },
},
],
},
// Il viale dei cipressi, la strada bianca tra la Fortezza e il Trebbio: in fondo c'è il castello.
viale_cipressi: {
name: 'Viale dei cipressi',
map: [60, 6],
background: 'assets/scenes/viale-cipressi.png',
effects: [{ type: 'clouds', area: [230, 10, 140, 120], count: 2 }, { type: 'sway', rects: [[322, 58, 30, 150], [346, 8, 32, 190], [312, 108, 18, 110], [244, 118, 26, 100]] }],
walk: [[30, 360], [200, 300], [288, 252], [312, 250], [420, 300], [600, 360]],
depth: [[250, 0.16], [360, 1.2]],
entry: [300, 350],
hotspots: [
{
id: 'cipressi', name: 'cipressi', box: [440, 0, 200, 270], at: [400, 300], face: 'right',
actions: {
look: [{ say: 'I cipressi in fila, dritti come soldatini. Da piccolo li contavo. Non sono mai arrivato in fondo.' }],
take: [{ say: 'Un cipresso in tasca? Neanche nei sogni.' }],
},
},
{
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 casa del maestro Bacci', box: [0, 330, 640, 30], at: [300, 352], exit: { scene: 'salita_cipressi', at: [316, 196], face: 'down' },
},
],
},
trebbio: {
name: 'Castello del Trebbio',
map: [84, 6],
background: 'assets/scenes/trebbio.png',
effects: [{ type: 'clouds', area: [180, 0, 460, 110], count: 3, big: true }, { type: 'sway', rects: [[237, 140, 20, 60], [165, 160, 20, 48], [305, 132, 14, 30], [560, 120, 22, 80], [600, 120, 20, 80], [620, 100, 20, 100], [530, 160, 20, 40]] }, { type: 'fireflies', phase: 'sera', area: [80, 290, 440, 60], count: 10 }, { type: 'birds', phase: ['pomeriggio', 'tramonto'], area: [200, 30, 400, 80] }],
music: 'assets/audio/ricordi.mp3',
walk: [[86, 308], [300, 306], [356, 308], [470, 312], [500, 324], [486, 360], [88, 360], [80, 330]],
depth: [[306, 0.75], [360, 1.05]],
entry: [110, 345],
// Lo spirito del castello, lo scrivano dei Medici (disegnato da Codex, scelto da Andrea il 24 ottobre): compare quando parla.
speakers: { castello: [446, 178] },
apparitions: [{ who: 'castello', src: 'assets/characters/spirito-trebbio-scriba.png', at: [446, 304], height: 120 }],
enter: [{ if: '!trebbio_visto', then: [{ set: 'trebbio_visto' }, { say: 'Il Trebbio. Quassù anche i pensieri vanno più piano.' }] }],
hotspots: [
{
id: 'torre', name: 'torre del castello', box: [345, 26, 88, 196], at: [330, 312], face: 'up', default: 'talk',
with: {
torcia: [{ say: 'Luce? In seicento anni ne ho vista tanta. Tienila per il buio, che quello non manca mai.', who: 'castello' }],
},
give: {
squama: [{ say: 'Non a me. Portala vicino a chi l\'ha persa: le cose parlano solo dove sono cadute.', who: 'castello' }],
},
actions: {
look: [{ say: 'La torre del Trebbio. Da ragazzo ci si rifugiò Amerigo Vespucci, per scappare dalla peste di Firenze.' }, { say: 'Poi ha trovato l\'America. Anche lui partendo da un posto tranquillo.' }],
talk: [{ dialogue: 'castello' }],
open: [{ say: 'È un castello, mica una scatola di biscotti.' }],
},
},
{
id: 'pergolato', name: 'pergolato', box: [278, 222, 122, 52], at: [328, 312], face: 'up',
actions: {
look: [{ say: 'Il pergolato, coi suoi pilastri. Un giorno li conto tutti.' }],
take: [{ say: 'Una vite? Ci vuole la vendemmia, non uno con le mani in tasca.' }],
},
},
{
id: 'scalinata', name: 'scalinata', box: [304, 276, 50, 32], at: [328, 312], face: 'up',
actions: {
look: [{ say: 'La scala che sale al pergolato.' }],
use: [{ say: 'Più tardi salgo. Per ora mi godo il silenzio.' }],
},
},
{
id: 'verso_fortezza', name: 'viale dei cipressi, verso la Fortezza', box: [0, 250, 110, 110], at: [92, 345], exit: { scene: 'viale_cipressi', at: [300, 256], face: 'down' },
},
],
},
},
dialogues: {
// Andrea parla alla Ghiacciomobile (battute di Andrea, 26 ottobre): la macchina resta zitta, e va bene così.
ghiacciomobile: {
nodes: {
start: { options: [
// La scelta la dice già Andrea (game.choose): dopo, solo il silenzio della macchina.
{ text: 'Mi ricordi come avete fatto quella volta a tornare illesi dopo aver lasciato una fiancata a Campolungo?', then: [{ say: '...' }] },
{ text: 'Ho sentito dire dal Trappola che pensavi di poter attraversare i muri.', say: 'Ho sentito dire dal Trappola che pensavi di poter attraversare i muri. Ti stimo tanto.', then: [{ say: '...' }] },
{ text: 'Riposa, Ghiacciomobile.', next: 'end' },
] },
},
},
giocatore_carte: {
nodes: {
start: { options: [
{ text: 'Una briscola?', when: '!briscola_giocata', next: 'mazzo', then: [{ say: 'Gnamo. In due, senza soci e senza scuse.', who: 'giocatore_carte', pose: 'shuffle' }] },
{ text: 'Rivincita a briscola?', when: 'briscola_giocata', next: 'mazzo', then: [{ say: 'Il tavolo è qui. Il coraggio ce lo metti te.', who: 'giocatore_carte', pose: 'laugh' }] },
{ text: 'Una scopa?', next: 'mazzo_scopa', then: [{ say: 'Ai undici. E occhio al settebello: quello è sempre mio.', who: 'giocatore_carte', pose: 'shuffle' }] },
{ text: 'Un tressette ai 21?', next: 'mazzo_tressette', then: [{ say: 'Ci vuole quattro: chiamo quei due che giocano qui dietro. Uno ti fa da socio.', who: 'giocatore_carte', pose: 'talk' }] },
{ text: 'Ora cerco il palio. A dopo.', next: 'end' },
] },
// Il mazzo (idea di Andrea): le toscane di casa, o le napoletane. Stesse regole, cambiano i disegni.
mazzo: { options: [
{ text: 'Con le toscane.', next: 'livello', then: [{ unset: 'carte_napoletane' }, { say: 'Brao. Gobbo, donna e regio, come Dio comanda. Come la vuoi?', who: 'giocatore_carte' }] },
{ text: 'Con le napoletane.', next: 'livello', then: [{ set: 'carte_napoletane' }, { say: 'Le napoletane? Le tengo per i villeggianti. Come la vuoi?', who: 'giocatore_carte', pose: 'shuffle' }] },
{ text: 'Ci ripenso.', next: 'end' },
] },
livello: { options: [
{ text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona. I carichi li regalo, oggi.', who: 'giocatore_carte' }, { closeup: 'briscola', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Allora posa il gomito e guarda le carte.', who: 'giocatore_carte' }, { closeup: 'briscola', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'Io le conto tutte. Anche quelle che butti via per sbaglio.', who: 'giocatore_carte', pose: 'shuffle' }, { closeup: 'briscola', level: 'male' }] },
{ text: 'Ci ripenso.', next: 'end' },
] },
// La scopa: stesse scelte (e stesse battute) della briscola.
mazzo_scopa: { options: [
{ text: 'Con le toscane.', next: 'livello_scopa', then: [{ unset: 'carte_napoletane' }, { say: 'Brao. Gobbo, donna e regio, come Dio comanda. Come la vuoi?', who: 'giocatore_carte' }] },
{ text: 'Con le napoletane.', next: 'livello_scopa', then: [{ set: 'carte_napoletane' }, { say: 'Le napoletane? Le tengo per i villeggianti. Come la vuoi?', who: 'giocatore_carte', pose: 'shuffle' }] },
{ text: 'Ci ripenso.', next: 'end' },
] },
livello_scopa: { options: [
{ text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona. I carichi li regalo, oggi.', who: 'giocatore_carte' }, { closeup: 'scopa', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Allora posa il gomito e guarda le carte.', who: 'giocatore_carte' }, { closeup: 'scopa', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'Io le conto tutte. Anche quelle che butti via per sbaglio.', who: 'giocatore_carte', pose: 'shuffle' }, { closeup: 'scopa', level: 'male' }] },
{ text: 'Ci ripenso.', next: 'end' },
] },
// Il tressette: stesse scelte (e stesse battute) della briscola, poi il tavolo in quattro.
mazzo_tressette: { options: [
{ text: 'Con le toscane.', next: 'livello_tressette', then: [{ unset: 'carte_napoletane' }, { say: 'Brao. Gobbo, donna e regio, come Dio comanda. Come la vuoi?', who: 'giocatore_carte' }] },
{ text: 'Con le napoletane.', next: 'livello_tressette', then: [{ set: 'carte_napoletane' }, { say: 'Le napoletane? Le tengo per i villeggianti. Come la vuoi?', who: 'giocatore_carte', pose: 'shuffle' }] },
{ text: 'Ci ripenso.', next: 'end' },
] },
livello_tressette: { options: [
{ text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona. I carichi li regalo, oggi.', who: 'giocatore_carte' }, { closeup: 'tressette', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Allora posa il gomito e guarda le carte.', who: 'giocatore_carte' }, { closeup: 'tressette', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'Io le conto tutte. Anche quelle che butti via per sbaglio.', who: 'giocatore_carte', pose: 'shuffle' }, { closeup: 'tressette', level: 'male' }] },
{ text: 'Ci ripenso.', next: 'end' },
] },
},
},
// Il chiosco della Tosca: le bibite si bevono subito; ghiacciolo e cedrata si portano via (una volta per tipo).
tosca: {
nodes: {
start: {
options: [
{ text: 'Una Fanta.', when: '!has:fanta', then: [{ say: 'Eccola, ghiacciata.', who: 'tosca' }, { give: 'fanta' }] },
{ text: 'Una Coca.', when: '!has:coca', then: [{ say: 'Tieni, col vetro appannato.', who: 'tosca' }, { give: 'coca' }] },
{ text: 'Una spuma bionda.', when: '!has:spuma', then: [{ say: 'La spuma bionda! Ormai la chiedono solo i nonni.', who: 'tosca' }, { give: 'spuma' }] },
{ text: 'Una cedrata, da portare via.', when: ['!has:cedrata', '!stecco_fatto'], then: [{ say: 'Cedrata. Bella fresca.', who: 'tosca' }, { give: 'cedrata' }] },
{ text: 'Un ghiacciolo al limone.', when: ['!has:ghiacciolo', '!stecco_fatto'], then: [{ say: 'Al limone, l\'ultimo della cassetta.', who: 'tosca' }, { give: 'ghiacciolo' }] },
{
id: 'tosca_voci', once: true, when: 'indizio_regolo', text: 'Tosca, cosa si dice in giro?',
then: [
{ say: 'Che sei andato sotto la Fortezza da solo. Il paese parla, Andrea.', who: 'tosca' },
{ say: 'Prenditi una cedrata, che le chiacchiere mettono sete.', who: 'tosca' },
],
},
{ text: 'Niente, grazie Tosca.', next: 'end', then: [{ say: 'Quando ti viene sete, sai dove trovarmi.', who: 'tosca' }] },
],
},
},
},
// L'indovinello di San Pietro sul fonte battesimale robbiano della Pieve: la risposta è sul cartellino del fonte.
indovinello: {
nodes: {
start: {
options: [
{ text: 'Luca della Robbia.', then: [{ say: 'Così si è detto per secoli. E per secoli si è sbagliato. Entra e leggi bene.', who: 'san_pietro' }] },
{ text: 'Andrea della Robbia.', then: [{ say: 'Il babbo? Ci sei quasi. Ma la bottega, nel 1518, la mandava avanti un altro.', who: 'san_pietro' }] },
{
text: 'Giovanni della Robbia.', next: 'end',
then: [
{ say: 'Bravo! Giovanni della Robbia, nel 1518. Hai letto il cartellino, eh?', who: 'san_pietro' },
{ say: 'Eccoti la chiave dell\'oratorio. Trattala bene: è più vecchia di tuo nonno.', who: 'san_pietro' },
{ give: 'chiave_oratorio' }, { set: 'chiave_data' },
{ say: 'Grazie, San Pietro!' },
],
},
{ text: 'Michelangelo.', then: [{ say: 'Michelangelo? Quello aveva altro da fare. Prova con qualcuno che lavorava la terracotta.', who: 'san_pietro' }] },
{ text: 'Ci penso e torno.', next: 'end', then: [{ say: 'Le chiavi non scappano. E io nemmeno. Il fonte è lì dentro, se vuoi dare un\'occhiata.', who: 'san_pietro' }] },
],
},
},
},
vecchietti: {
nodes: {
start: {
options: [
{
text: 'Avete visto chi ha preso il palio?',
then: [
{ say: 'È stato il Regolo! Quello che cadde dal cielo quando scavavano le fondamenta.', who: 'vecchietta' },
{ say: 'Macché cielo! Mangiava le bestie, e lo presero i soldati di Napoleone.', who: 'vecchietto', pose: 'point' },
{ say: 'Napoleone? A San Piero? Ma se un c\'è mai venuto!', who: 'vecchietta', pose: 'point' },
{ say: 'E il Regolo sì?', who: 'vecchietto', pose: 'shrug' },
],
},
{
id: 'stanotte', once: true, text: 'Avete notato niente di strano stanotte?',
then: [
{ say: 'Io dormivo. Alla mia età si dorme anche in piedi.', who: 'vecchietto', pose: 'doze' },
{ say: 'Io stamani ho visto luccicare qualcosa sotto la panchina.', who: 'vecchietta' },
{ say: 'Ma con la mia schiena, chi ci si china?', who: 'vecchietta', pose: 'look_down' },
{ set: 'luccichio' },
],
},
{
text: 'Come vi sembra il Palio di quest\'anno?',
then: [
{ say: 'Senza il palio? Una festa così non s\'è mai vista.', who: 'vecchietto', pose: 'shrug' },
{ say: 'Nel mio, di Palio, si correva con le carriole vere. Mica come voi.', who: 'vecchietta' },
],
},
// Il pettegolezzo cambia con le scoperte di Andrea (consiglio di Codex, 25 ottobre).
{
id: 'news_squama', once: true, when: 'squama_presa', text: 'Ho trovato una squama, sotto la panchina.',
then: [
{ say: 'L\'avevo detto io, che luccicava!', who: 'vecchietta', pose: 'point' },
{ say: 'Una squama a maggio? Allora il Regolo fa la muta, come le bisce.', who: 'vecchietto' },
{ say: 'O l\'ha persa uno della sfilata, col costume. Che ne sai.', who: 'vecchietta', pose: 'arms_crossed' },
],
},
{
id: 'news_impronte', once: true, when: 'indizio_regolo', text: 'Sotto la Fortezza ci sono impronte, e vanno verso il bastione.',
then: [
{ say: 'Lo sapevo. Stanotte ho sentito raspare, dalla parte della Fortezza.', who: 'vecchietto', pose: 'point' },
{ say: 'Tu stanotte dormivi. L\'hai detto tu.', who: 'vecchietta' },
{ say: 'Si può dormire e sentire. Alla mia età si fa tutto insieme.', who: 'vecchietto', pose: 'shrug' },
],
},
{
id: 'news_torcia', once: true, when: 'casetta_aperta', text: 'Ho una torcia. Stasera salgo alla Fortezza.',
then: [
{ say: 'Di sera? Lassù? Allora salutaci il Regolo.', who: 'vecchietto', pose: 'doze' },
{ say: 'E se ti mangia, almeno la festa ha un argomento.', who: 'vecchietta', pose: 'laugh' },
{ say: 'Grazie dell\'incoraggiamento.' },
],
},
{ text: 'Ci vediamo dopo.', next: 'end', then: [{ say: 'Salutaci i tuoi!', who: 'vecchietta' }, { say: 'E se ti perdi, sali al Trebbio e chiedi alla torre. Ne sa più di noi due messi insieme.', who: 'vecchietto' }] },
],
},
},
},
// L'Arcu davanti al circolino (battute di Andrea, 25 ottobre). Lavora alla Casa dell'Armadio: «Armando» è apposta.
arcu: {
nodes: {
start: {
options: [
{ text: 'Ma che è sempre là, Borgo?', then: [{ say: 'E chi lo sposta???', who: 'arcu', pose: 'shrug' }] },
{ text: 'Come va alla Casa dell\'Armando?', then: [{ say: 'Mah... un si fa una sega...', who: 'arcu', pose: 'explain' }] },
// Anche l'Arcu segue le scoperte di Andrea.
{
id: 'arcu_squama', once: true, when: 'squama_presa', text: 'Ho trovato una squama del Regolo.',
then: [
{ say: 'Fammi vedere... Verde. Come la Panda di mi\' zio.', who: 'arcu', pose: 'laugh' },
{ say: 'Verde! Allora il Regolo tifa Cardetole. Tradimento.', who: 'arcu', pose: 'point' },
],
},
{
id: 'arcu_impronte', once: true, when: 'indizio_regolo', text: 'Sotto la Fortezza ci sono le sue impronte.',
then: [
{ say: 'E te ci vai da solo? Io ti aspetto qui.', who: 'arcu', pose: 'shrug' },
{ say: 'Qualcuno deve raccontarlo, dopo.', who: 'arcu', pose: 'explain' },
],
},
{
id: 'arcu_torcia', once: true, when: 'casetta_aperta', text: 'Ho la torcia. Stasera entro nella fessura.',
then: [
{ say: 'Fai una cosa: se vedi due occhi gialli, un sono i fari della Provinciale.', who: 'arcu', pose: 'explain' },
{ say: 'Grazie, Arcu. Molto utile.' },
],
},
{
text: 'Cosa stavamo dicendo???',
then: [
{ say: '.............', who: 'arcu' },
{ say: 'Ma ti si è bruciata la memoria, fratello???!?' },
{ say: '...I pompieri per cosa?', who: 'arcu', pose: 'shrug' },
],
},
{ text: 'S\'ha andà a fallo!?!?', then: [{ say: 'Gnamo! Ma prima mi fo una segarettina di quelle mi fo io!', who: 'arcu', pose: 'laugh' }] },
{ text: 'Ci si becca da i\' Trappola, ai\' Barrettino!', next: 'end' },
],
},
},
},
// Mariano al pallaio: una mano a bocce, solo per gloria; se Andrea vince, la promessa di Brento Sanico.
// I ragazzi delle canne: «S'ha andà a fallo?!?» (Andrea, 28 ottobre) e si va a pescare.
pescatori: {
nodes: {
start: {
options: [
{ text: 'S\'ha andà a fallo?!?', next: 'livello', then: [
{ say: 'Gnamo! La canna ti si dà noi.', who: 'pescatori', pose: 'laugh' },
{ say: 'Come peschi?', who: 'pescatori', pose: 'talk' },
] },
{ text: 'Quanti ne prendete, di solito?', then: [{ say: 'Dipende da chi racconta. Il Nanni dice dieci, il cestino dice due.', who: 'pescatori', pose: 'laugh' }] },
{ text: 'Buona pesca, ragazzi.', next: 'end', then: [{ say: 'Se vedi il palio, salutacelo!', who: 'pescatori', pose: 'talk' }] },
],
},
livello: {
options: [
{ text: 'Alla bona, tanto per bagnare la lenza.', next: 'end', then: [{ say: 'Alla bona. Due pesci e si va a casa contenti.', who: 'pescatori' }, { closeup: 'pesca', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Seria: tre pesci, e lo stivale non conta.', who: 'pescatori', pose: 'proud' }, { closeup: 'pesca', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'A fassi male? Quattro pesci, e le carpe tirano come trattori.', who: 'pescatori', pose: 'laugh' }, { closeup: 'pesca', level: 'male' }] },
],
},
},
},
// L'Arcu dal Trappola (Andrea, 28 ottobre): lo scherzo sulla velocità del Betino, poi la sfida: «il giro della Fortezza» (Andrea), cioè il GP di Fortezza;
// prima del via prende la rincorsa per accenderlo in discesa. [DA ANDREA: le battute sono provvisorie]
arcu_trappola: {
nodes: {
start: {
options: [
{ text: 'Ma ti ho visto du\' minuti fa a Campomigliaio!', then: [
{ say: 'E allora? Col Betino ci metto un attimo.', who: 'arcu', pose: 'explain' },
{ say: 'In discesa.', who: 'arcu', pose: 'laugh' },
{ say: 'E in salita?' },
{ say: 'In salita si spinge.', who: 'arcu', pose: 'shrug' },
] },
{ text: 'Si fa una gara coi motorini? Il giro della Fortezza!', next: 'gara', then: [
{ say: 'Col Betino? Io un perdo mai: un vo mai forte abbastanza da cadere.', who: 'arcu', pose: 'explain' },
{ say: 'Come la si fa?', who: 'arcu', pose: 'talk' },
] },
{ text: 'Ci si vede dopo, Arcu.', next: 'end' },
],
},
gara: {
options: [
{ text: 'Alla bona, un giro di paese.', next: 'end', then: [{ say: 'Alla bona. Chi arriva ultimo paga le paste.', who: 'arcu', pose: 'laugh' }, ...rincorsa('bona')] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Seria. Tre giri, e la paglia in curva è vera.', who: 'arcu', pose: 'explain' }, ...rincorsa('seria')] },
{ text: 'Ginocchio in terra.', next: 'end', then: [{ say: 'Ginocchio in terra? Puntella un vede l\'ora.', who: 'arcu', pose: 'shrug' }, ...rincorsa('male')] },
{ text: 'No, lascia perdere.', next: 'start' },
],
},
},
},
// Da solo al campo del Circolo: Andrea decide quanto farsi male.
basket: {
nodes: {
start: {
options: [
{ text: 'Due tiri alla bona, tanto per scaldarmi.', next: 'end', then: [{ say: 'Tre su dieci e sono contento.' }, { closeup: 'basket', level: 'bona' }] },
{ text: 'Due tiri seri.', next: 'end', then: [{ say: 'Cinque su dieci. Come ai tempi del Circolino.' }, { closeup: 'basket', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'Sette su dieci, senza guardare la parabola. Vediamo chi sono.' }, { closeup: 'basket', level: 'male' }] },
{ text: 'Lascia stare, ho il palio da trovare.', next: 'end' },
],
},
},
},
mariano: {
nodes: {
start: {
options: [
{
text: 'Mariano! Facciamo una partita a bocce?', when: '!bocce_vinte', next: 'livello',
then: [
{ say: 'Con me? Al pallaio sono il campione.', who: 'mariano', pose: 'explain' },
{ say: 'Facciamo così: se mi batti, ti porto a Brento Sanico.', who: 'mariano' },
{ say: 'Come la vuoi?', who: 'mariano' },
],
},
{ text: 'La rivincita?', when: 'bocce_vinte', next: 'livello', then: [{ say: 'Il campione non scappa. Come la vuoi?', who: 'mariano', pose: 'throw' }] },
{ text: 'Allora, Brento Sanico?', when: 'bocce_vinte', then: [{ say: 'Promesso: ti ci porto. Ma prima ritrova il palio, che senza festa non si parte.', who: 'mariano', pose: 'explain' }] },
{ text: 'Ciao Mariano.', next: 'end' },
],
},
// La difficoltà (Andrea, 25 ottobre): quanto si impegna Mariano.
livello: {
options: [
{ text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona: tiro con gli occhi chiusi.', who: 'mariano', pose: 'laugh' }, { closeup: 'bocce', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Seria. Così mi piace.', who: 'mariano' }, { closeup: 'bocce', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'A fassi male? Poi non piangere, eh.', who: 'mariano', pose: 'cheer' }, { closeup: 'bocce', level: 'male' }] },
],
},
},
},
// Il Chiaru al parcheggio di Cardetole, accanto alla pista col gesso (Andrea, 29 ottobre). [DA ANDREA: battute provvisorie]
chiaru: {
nodes: {
start: {
options: [
{ text: 'Si corre?', next: 'livello', then: [{ say: 'Un giro, una spinta a testa, prima te. Tutta fuori dal gesso, si torna indietro. Come la vuoi?', who: 'chiaru', pose: 'explain' }] },
{ text: 'Che pista hai disegnato?', then: [
{ say: 'Rettilineo, curvone, rettilineo, e in fondo la esse. Nella esse chi ha fretta esce.', who: 'chiaru', pose: 'explain' },
{ say: 'Il tombino l\'ho lasciato in pista: porta fortuna.', who: 'chiaru', pose: 'talk' },
] },
// I nomi alla francese delle penalità (Andrea, 29 ottobre): per tutte si torna indietro.
{ text: 'Le regole sono quelle solite?', then: [
{ say: 'Le solite. Chi accompagna la macchinina col dito: accompagnè.', who: 'chiaru', pose: 'explain' },
{ say: 'Chi taglia la strada: tagliè. Chi si ribalta: cappottè. E chi esce tutto dal gesso, fuori.', who: 'chiaru', pose: 'talk' },
{ say: 'In tutti i casi, si torna dov\'eri prima.', who: 'chiaru', pose: 'shrug' },
] },
{ text: 'Dopo, Chiaru.', next: 'end', then: [{ say: 'La pista è qui. Finché non piove.', who: 'chiaru', pose: 'stand' }] },
],
},
livello: {
options: [
{ text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona: ti faccio vedere dove si ferma. E io vado piano.', who: 'chiaru', pose: 'talk' }, { closeup: 'micro', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Seria. Così mi piace.', who: 'chiaru', pose: 'explain' }, { closeup: 'micro', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'A fassi male. Poi non piangere.', who: 'chiaru', pose: 'laugh' }, { closeup: 'micro', level: 'male' }] },
{ text: 'No, aspetta.', next: 'start', then: [{ say: 'Io intanto ripasso il gesso.', who: 'chiaru', pose: 'stand' }] },
],
},
},
},
// Trappizzio Berti al tavolo di mezzo: le biglie nascoste e «Oh tirami questo rinquarto!?» (Andrea, 28 ottobre).
// [DA ANDREA: le battute sono provvisorie, tranne la sua sfida]
bertovo: {
nodes: {
start: {
options: [
{ text: 'Trappizzio Berti! Che fai, giochi da solo?', then: [
{ say: 'Da solo? Io gioco contro le sponde. E vinco quasi sempre.', who: 'bertovo', pose: 'explain' },
] },
{ text: 'Come fai a prendere le biglie dove nessuno ci arriva?', then: [
{ say: 'Geometria. La biglia va dove le dici, basta chiederglielo per bene.', who: 'bertovo', pose: 'chalk' },
{ say: 'E con un po\' di gesso.', who: 'bertovo', pose: 'laugh' },
] },
// L'allenamento: lui tira per primo e fa vedere, poi lo rifai te, senza punti.
{ text: 'Dai, fammi vedere un rinquarto.', next: 'end', then: [
{ say: 'Guarda bene: prima lo tiro io, poi lo rifai te. Tre posizioni, una sponda.', who: 'bertovo', pose: 'chalk' },
{ closeup: 'rinquarto', level: 'allenamento' },
] },
{ text: 'Si fa una sfida a rinquarti?', next: 'sfida', then: [
{ say: 'Le biglie le metto io, nascoste per bene. Tiri te, poi tiro io. Oh tirami questo rinquarto!?', who: 'bertovo', pose: 'explain' },
] },
{ text: 'Ci si vede, Trappizzio Berti.', next: 'end', then: [{ say: 'Occhio alle sponde, fuori.', who: 'bertovo', pose: 'shrug' }] },
],
},
sfida: {
options: [
{ text: 'Alla bona, una sponda e basta.', next: 'end', then: [{ say: 'Una sponda. Roba da principianti, ma va bene.', who: 'bertovo', pose: 'shrug' }, { closeup: 'rinquarto', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Due sponde. Così mi piace.', who: 'bertovo', pose: 'talk' }, { closeup: 'rinquarto', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'Tre sponde e niente aiuti. Qui nascono le geometrie celestiali.', who: 'bertovo', pose: 'cheer' }, { closeup: 'rinquarto', level: 'male' }] },
{ text: 'No, mi tremano le mani.', next: 'start', then: [{ say: 'Il tavolo è qui. Le sponde non scappano.', who: 'bertovo', pose: 'laugh' }] },
],
},
},
},
ing_tozzi: {
nodes: {
start: {
options: [
{
text: 'Ingegnere, una partita ai birilli?', when: '!biliardo_vinto', next: 'livello',
then: [{ say: 'Una partita ai birilli? Si va a venti. Come la vuoi?', who: 'ing_tozzi', pose: 'chalk' }],
},
{ text: 'La rivincita?', when: 'biliardo_vinto', next: 'livello', then: [{ say: 'Ci mancherebbe. Stavolta guardo bene. Come la vuoi?', who: 'ing_tozzi', pose: 'explain' }] },
{ text: 'Arrivederci, Ingegnere.', next: 'end' },
],
},
// La difficoltà: quanti colpi prova a vuoto l'Ingegnere, e quanto gli trema la mano.
livello: {
options: [
{ text: 'Alla bona.', next: 'end', then: [{ say: 'Alla bona: tiro senza occhiali.', who: 'ing_tozzi', pose: 'laugh' }, { say: 'Gnamo.' }, { closeup: 'biliardo', level: 'bona' }] },
{ text: 'Seria.', next: 'end', then: [{ say: 'Seria. Dammi il gesso.', who: 'ing_tozzi', pose: 'chalk' }, { say: 'Gnamo.' }, { closeup: 'biliardo', level: 'seria' }] },
{ text: 'A fassi male.', next: 'end', then: [{ say: 'A fassi male? Allora mi tolgo la giacca. Ah no, non ce l\'ho.', who: 'ing_tozzi', pose: 'explain' }, { say: 'Gnamo.' }, { closeup: 'biliardo', level: 'male' }] },
],
},
},
},
// Lo "psicologo": il castello ascolta e risponde con un indizio su quello che manca.
castello: {
nodes: {
start: {
options: [
{
text: 'Sono bloccato. Mi dai un consiglio?',
then: [
{ say: 'Siediti. Guarda il Mugello. Respira.', who: 'castello' },
{
if: '!luccichio',
then: [{ say: 'Chi sa tutto del paese di solito sta seduto. Prova a chiedere a chi passa le giornate in piazza.', who: 'castello' }],
else: [{
if: ['!has:squama', '!squama_presa'],
then: [{ say: 'Le cose che luccicano non stanno mai in alto. Guarda in basso, vicino a chi te ne ha parlato.', who: 'castello' }],
else: [{
if: '!indizio_regolo',
then: [{ say: 'Una squama da sola non dice niente. Ma vicino alle sue impronte, sotto la Fortezza, magari sì.', who: 'castello' }],
else: [{ if: 'has:torcia', then: [{ say: 'Hai la luce, e sotto la Fortezza c\'è il buio. Mettili insieme.', who: 'castello' }], else: torchHints }],
}],
}],
},
],
},
{
text: 'Ma tu ce l\'hai mai visto, il Regolo?',
then: [{ say: 'Io ho visto passare i Medici, la peste e Vespucci. Un serpente in più non mi spaventa.', who: 'castello' }],
},
// Andrea al Trebbio ci sale sempre a piedi: quattro chilometri da casa, due di salita (ricordo suo).
{
text: 'Lo sai che quassù ci vengo sempre a piedi?',
then: [
{ say: 'Lo so. Ti sento arrivare dal fiatone, un chilometro prima.', who: 'castello' },
{ say: 'Da casa sono quattro chilometri. E due sono di salita, di quella bella.' },
{ say: 'Eppure torni sempre. Qualcosa, quassù, l\'hai trovato.', who: 'castello' },
{ say: 'Ho trovato la mia strada!' },
{ say: '...Io, che ancora non so cosa fare da grande.' },
],
},
{
text: 'E te, da grande, cosa volevi fare?',
then: [
{ say: 'Il castello.', who: 'castello' },
{ say: 'Mi è venuto bene. Non avere fretta: a me ci son voluti seicento anni.', who: 'castello' },
],
},
{ text: 'Niente, volevo solo un po\' di pace.', next: 'end', then: [{ say: 'Quella qui non manca mai. Torna quando vuoi.', who: 'castello' }] },
],
},
},
},
},
};
// Solo decorazione: nessun hotspot, flag o modifica ai salvataggi.
for (const [id, effects] of Object.entries(ambience)) story.scenes[id].effects = [...(story.scenes[id].effects ?? []), ...effects];