Il libro della storia infinita all'oratorio; le idee di Andrea in docs/IDEE.md
Sulle tavolate c'è un libro dimenticato: si prende, si apre, ha una pagina sola con scritto «FINE». Test: si prende con un clic sul tavolo, sparisce dalla scena, aperto dice FINE (provato anche con il testo cambiato: il test fallisce). In IDEE.md anche la pastasciutta di Mariano, in attesa del suo consenso. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
# Idee da mettere nel gioco
|
||||||
|
|
||||||
|
Battute, oggetti e scherzi proposti da Andrea, in attesa di un posto nella storia. Quando un'idea entra nel gioco
|
||||||
|
si segna qui con la data e il punto di `src/story/story.js` dove sta; le persone vere entrano solo col loro consenso.
|
||||||
|
|
||||||
|
## In attesa
|
||||||
|
|
||||||
|
- **Oratorio, la pastasciutta di Mariano** (2026-10-23). Alle tavolate dell'oratorio Andrea dice che se aspetta che
|
||||||
|
Mariano gli porti un piatto di pasta, addio: Mariano è sempre a Novoli. Andrebbe in «Usa tavolate» al posto
|
||||||
|
della battuta provvisoria sulla pastasciutta. Prima: il consenso di Mariano a comparire col suo nome.
|
||||||
|
|
||||||
|
## Già nel gioco
|
||||||
|
|
||||||
|
- **«La storia infinita»** (2026-10-23): un libro dimenticato sulle tavolate dell'oratorio; si prende, si apre
|
||||||
|
e ha una pagina sola con scritto «FINE». In `story.js`: oggetto `libro`, punto caldo `libro_dimenticato`.
|
||||||
|
Da valutare: una tavola illustrata a tutto schermo con la pagina aperta, quando il motore le avrà.
|
||||||
@@ -29,6 +29,20 @@ export const story = {
|
|||||||
use: [{ say: 'Potrei usarla come plettro. Ma prima scopro di chi è.' }],
|
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: { fill: '#c46a3a', shape: 'book' },
|
||||||
|
actions: {
|
||||||
|
look: [{ say: '«La storia infinita». Bello spesso: questo mi tiene compagnia fino a settembre.' }],
|
||||||
|
open: [
|
||||||
|
{ say: 'Vediamo da dove comincia...' },
|
||||||
|
{ say: 'C\'è una pagina sola. Con scritto: «FINE».' },
|
||||||
|
{ say: 'Infinita, dicevano.' },
|
||||||
|
],
|
||||||
|
use: [{ say: 'Leggere adesso? Prima il palio. E poi, a quanto pare, si fa presto.' }],
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
scenes: {
|
scenes: {
|
||||||
piazza: {
|
piazza: {
|
||||||
@@ -229,6 +243,15 @@ export const story = {
|
|||||||
use: [{ say: 'Mi siedo e aspetto che arrivi la pastasciutta? Ci vorrebbe una settimana.' }],
|
use: [{ say: 'Mi siedo e aspetto che arrivi la pastasciutta? Ci vorrebbe una settimana.' }],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// Dopo le tavolate: dove si sovrappongono, vince l'ultimo della lista.
|
||||||
|
id: 'libro_dimenticato', name: 'libro dimenticato', box: [562, 198, 18, 12], at: [560, 268], face: 'up', when: ['!has:libro', '!libro_preso'],
|
||||||
|
art: [{ rect: [565, 203, 11, 5], fill: '#c46a3a' }, { rect: [565, 207, 11, 1], fill: '#f4efe4' }, { rect: [569, 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: 'Me lo prendo. Se è suo, il proprietario lo ritrova... prima o poi.' }],
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'cancello', name: 'cancello', box: [477, 166, 23, 52], at: [488, 236], face: 'up',
|
id: 'cancello', name: 'cancello', box: [477, 166, 23, 52], at: [488, 236], face: 'up',
|
||||||
actions: {
|
actions: {
|
||||||
|
|||||||
@@ -121,3 +121,17 @@ test('il foglio di Andrea ha tutti i fotogrammi e l\'immagine', () => {
|
|||||||
for (const f of ['walk_1', 'walk_2', 'walk_3', 'walk_4', 'stand', 'talk', 'take', 'back']) assert.ok(atlas.frames[f], `${id}: manca ${f}`);
|
for (const f of ['walk_1', 'walk_2', 'walk_3', 'walk_4', 'stand', 'talk', 'take', 'back']) assert.ok(atlas.frames[f], `${id}: manca ${f}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('il libro dell\'oratorio: «La storia infinita» ha una pagina sola', () => {
|
||||||
|
const g = new Game(story);
|
||||||
|
g.go('oratorio', [320, 345]);
|
||||||
|
settle(g);
|
||||||
|
assert.ok(g.hotspotAt([570, 205])?.id === 'libro_dimenticato', 'sulle tavolate il clic prende il libro, non le tavolate');
|
||||||
|
assert.ok(g.act('take', 'libro_dimenticato'));
|
||||||
|
settle(g);
|
||||||
|
assert.ok(g.state.inventory.includes('libro'));
|
||||||
|
assert.equal(g.hotspot('libro_dimenticato'), undefined, 'preso, il libro non resta sul tavolo');
|
||||||
|
assert.ok(g.act('open', 'libro'));
|
||||||
|
const said = settle(g).map(s => s.text);
|
||||||
|
assert.ok(said.some(t => t.includes('FINE')), 'aperto, dice FINE');
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user