Scuola, strada per Cardetole, indovinello di San Pietro con la chiave dell'oratorio, verbo Butta e Pausa
- La scuola (sfondo di Codex dalla foto di Andrea): dalla salita di Villa Adami, dal cancello alle porte a vetri. - Alla Pieve la strada per Cardetole (per ora una battuta). - La statua di San Pietro chiede quanti bastioni ha la Fortezza: con la risposta giusta dà la chiave dell'oratorio; la porta, aperta una volta, resta aperta e la chiave sparisce. Voce propria per San Pietro. - Verbo Butta: solo gli oggetti droppable (il libro), quelli che servono alla storia no. - Pulsante Pausa (o Esc): Riprendi, Mappa, Crediti, Torna al titolo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017egeN2amL84ErjfgQFtEDn
This commit is contained in:
@@ -169,3 +169,46 @@ test('la mappa: ogni scena ci sta, i posti compaiono solo visti, il viaggio risp
|
||||
assert.ok(g.dialogue);
|
||||
assert.equal(g.travel('pieve'), false, 'non si scappa da un dialogo');
|
||||
});
|
||||
|
||||
test('l\'indovinello di San Pietro dà la chiave; l\'oratorio, aperto, resta aperto e la chiave sparisce', () => {
|
||||
const g = new Game(story);
|
||||
g.go('pieve', [345, 238]);
|
||||
settle(g);
|
||||
assert.ok(!g.hotspot('oratorio') && g.hotspot('porta_oratorio'), 'all\'inizio la porta è chiusa');
|
||||
g.act('open', 'porta_oratorio');
|
||||
settle(g);
|
||||
assert.equal(g.state.scene, 'pieve', 'senza chiave non si entra');
|
||||
g.act('talk', 'statua');
|
||||
settle(g);
|
||||
const answer = text => { g.choose(g.options().findIndex(o => o.text === text)); return settle(g); };
|
||||
answer('Sette.');
|
||||
assert.ok(g.dialogue && !g.state.inventory.includes('chiave_oratorio'), 'risposta sbagliata: niente chiave, si riprova');
|
||||
answer('Nove.');
|
||||
assert.ok(!g.dialogue && g.state.inventory.includes('chiave_oratorio'), 'risposta giusta: la chiave');
|
||||
g.act('drop', 'chiave_oratorio');
|
||||
settle(g);
|
||||
assert.ok(g.state.inventory.includes('chiave_oratorio'), 'la chiave serve: non si butta');
|
||||
g.act('use', 'porta_oratorio', 'chiave_oratorio');
|
||||
settle(g);
|
||||
assert.equal(g.state.scene, 'oratorio');
|
||||
assert.ok(!g.state.inventory.includes('chiave_oratorio'), 'la chiave resta nella serratura');
|
||||
g.go('pieve', [345, 238]);
|
||||
assert.ok(g.hotspot('oratorio')?.exit && !g.hotspot('porta_oratorio'), 'da ora la porta è aperta');
|
||||
g.act('talk', 'statua');
|
||||
settle(g);
|
||||
assert.ok(!g.dialogue, 'San Pietro non ridà la chiave');
|
||||
});
|
||||
|
||||
test('si buttano solo gli oggetti che non servono', () => {
|
||||
const g = new Game(story);
|
||||
g.go('oratorio');
|
||||
settle(g);
|
||||
g.state.inventory.push('libro', 'squama');
|
||||
g.act('drop', 'libro');
|
||||
settle(g);
|
||||
g.act('drop', 'squama');
|
||||
settle(g);
|
||||
assert.deepEqual(g.state.inventory, ['squama']);
|
||||
for (const [id, item] of Object.entries(story.items))
|
||||
if (id !== 'libro') assert.ok(!item.droppable, `${id} serve alla storia: non deve potersi buttare`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user