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 è.' }],
|
||||
},
|
||||
},
|
||||
// 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: {
|
||||
piazza: {
|
||||
@@ -229,6 +243,15 @@ export const story = {
|
||||
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',
|
||||
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}`);
|
||||
}
|
||||
});
|
||||
|
||||
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