Mappa del paese per spostarsi veloci; Codex nei crediti
Il pulsante «Mappa» (o il tasto P) apre la pianta del paese a gradini: ci sono i posti già visti, le strade sono le uscite fra loro, un clic porta lì (game.travel, mai durante un dialogo o una battuta). Ogni scena ha la sua posizione in `map`; un posto nuovo entra con una riga. Test: posti solo visti, strade, viaggio rifiutato in un dialogo; nel browser dal Trebbio alla Piazza. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
This commit is contained in:
@@ -145,3 +145,27 @@ test('il libro dell\'oratorio: «La storia infinita» ha una pagina sola', () =>
|
||||
const said = settle(g).map(s => s.text);
|
||||
assert.ok(said.some(t => t.includes('FINE')), 'aperto, dice FINE');
|
||||
});
|
||||
|
||||
test('la mappa: ogni scena ci sta, i posti compaiono solo visti, il viaggio rispetta i dialoghi', () => {
|
||||
for (const [id, sc] of Object.entries(story.scenes)) {
|
||||
assert.ok(Array.isArray(sc.map), `${id} non è sulla mappa`);
|
||||
assert.ok(sc.map.every(v => v >= 0 && v <= 100), `${id} fuori dalla pianta`);
|
||||
}
|
||||
const g = new Game(story);
|
||||
g.go('piazza', story.start.at);
|
||||
settle(g);
|
||||
assert.deepEqual(g.mapPlaces().map(p => p.id), ['piazza']);
|
||||
assert.equal(g.travel('trebbio'), false, 'non si va dove non si è mai stati');
|
||||
g.go('pieve', story.scenes.pieve.entry);
|
||||
settle(g);
|
||||
assert.deepEqual(g.mapRoads(), [['piazza', 'pieve']], 'la strada fra due posti visti');
|
||||
assert.ok(g.mapPlaces().find(p => p.id === 'pieve').here);
|
||||
assert.ok(g.travel('piazza'));
|
||||
settle(g);
|
||||
assert.equal(g.state.scene, 'piazza');
|
||||
assert.equal(g.travel('piazza'), false, 'già qui');
|
||||
g.act('talk', 'vecchietti');
|
||||
settle(g);
|
||||
assert.ok(g.dialogue);
|
||||
assert.equal(g.travel('pieve'), false, 'non si scappa da un dialogo');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user