Le strade attorno a casa di Andrea: Cardetole (dal Giannini, il ponticino, il Trappola) e il prato del calcio; le villette del Giannini al posto dell'area camper, i camper dietro il campo; in Via Liguri Magelli il campo laggiù a destra e la strada di casa accanto al Betino; «Vai» senza la «a» in più (Andrea)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GiECdCPptNRwbVzjzHbohi
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1583,6 +1583,10 @@
|
|||||||
"file": "andrea-ee455fdc33.mp3",
|
"file": "andrea-ee455fdc33.mp3",
|
||||||
"sec": 3.67
|
"sec": 3.67
|
||||||
},
|
},
|
||||||
|
"andrea|Qui dietro ci stanno i camper. Ma per noi questo resta il campo del Giannini.": {
|
||||||
|
"file": "andrea-195cf2b022.mp3",
|
||||||
|
"sec": 4.86
|
||||||
|
},
|
||||||
"andrea|Gli scivoli dei bambini. Una volta il pallone finiva lì una volta su tre.": {
|
"andrea|Gli scivoli dei bambini. Una volta il pallone finiva lì una volta su tre.": {
|
||||||
"file": "andrea-a3e36c12a1.mp3",
|
"file": "andrea-a3e36c12a1.mp3",
|
||||||
"sec": 5.4
|
"sec": 5.4
|
||||||
@@ -1619,9 +1623,9 @@
|
|||||||
"file": "andrea-3d15dd47bb.mp3",
|
"file": "andrea-3d15dd47bb.mp3",
|
||||||
"sec": 4.82
|
"sec": 4.82
|
||||||
},
|
},
|
||||||
"andrea|Casa mia. Terzo piano, quello con la tapparella a metà: è la mia camera.": {
|
"andrea|Casa mia. Secondo piano: quella con la tapparella a metà è la camera di mia sorella, e a destra quella dei miei.": {
|
||||||
"file": "andrea-acc7949f4c.mp3",
|
"file": "andrea-6c9e7f684e.mp3",
|
||||||
"sec": 5.91
|
"sec": 8.72
|
||||||
},
|
},
|
||||||
"andrea|Se salgo, mi mettono ad apparecchiare. Prima il palio.": {
|
"andrea|Se salgo, mi mettono ad apparecchiare. Prima il palio.": {
|
||||||
"file": "andrea-8945f1786d.mp3",
|
"file": "andrea-8945f1786d.mp3",
|
||||||
@@ -1639,6 +1643,14 @@
|
|||||||
"file": "andrea-018183c4dd.mp3",
|
"file": "andrea-018183c4dd.mp3",
|
||||||
"sec": 5.82
|
"sec": 5.82
|
||||||
},
|
},
|
||||||
|
"andrea|Su questo campo ci abbiamo passato trentacinque anni, giorno, pomeriggio e sera, a giocare a calcio.": {
|
||||||
|
"file": "andrea-5550b0890f.mp3",
|
||||||
|
"sec": 7.74
|
||||||
|
},
|
||||||
|
"andrea|Le maglie a fare da pali, e i palloni tagliati che entravano nelle terrazze, ovunque.": {
|
||||||
|
"file": "andrea-f6c10fd559.mp3",
|
||||||
|
"sec": 6.28
|
||||||
|
},
|
||||||
"andrea|Un pino a ombrello enorme. Alla ricreazione, tutti all'ombra lì sotto. Sembra ieri.": {
|
"andrea|Un pino a ombrello enorme. Alla ricreazione, tutti all'ombra lì sotto. Sembra ieri.": {
|
||||||
"file": "andrea-0a073729fd.mp3",
|
"file": "andrea-0a073729fd.mp3",
|
||||||
"sec": 7.3
|
"sec": 7.3
|
||||||
|
|||||||
@@ -261,6 +261,11 @@ I prompt fissi (stile, scene, foglio sprite) sono in `prompts/STILE.md`, escluso
|
|||||||
scuro, di serie), l'Arcu (Betino). **Puntella (Marco Villani) non corre finché manca il suo consenso** (`consenso: null` in piloti.js: quando arriva, la data). Mancano: quanto erano
|
scuro, di serie), l'Arcu (Betino). **Puntella (Marco Villani) non corre finché manca il suo consenso** (`consenso: null` in piloti.js: quando arriva, la data). Mancano: quanto erano
|
||||||
truccati gli altri, le battute di Andrea, il rumore del motore (c'è solo
|
truccati gli altri, le battute di Andrea, il rumore del motore (c'è solo
|
||||||
quello dell'arrivo in griglia); i confini della paglia non si vedono sul quadro (revisione di Codex, punto 9).
|
quello dell'arrivo in griglia); i confini della paglia non si vedono sul quadro (revisione di Codex, punto 9).
|
||||||
|
- Strade attorno a casa (Andrea, 28 ottobre): la scena `area_camper` ora si chiama «Le villette del Giannini» (ci abita
|
||||||
|
lui; i camper stanno dietro il suo campo). Cardetole: in basso a destra «dal Giannini» (le villette), a destra il
|
||||||
|
ponticino della Carza, a sinistra il Trappola. Il campo del Giannini: a destra le villette, a sinistra il Trappola;
|
||||||
|
dal ponticino non ci si va. Via Liguri Magelli: lassù vicino al Betino si torna a casa, laggiù a destra il campo.
|
||||||
|
Da sapere: dove si gira, in fondo al ponticino, per Cardetole [DA ANDREA].
|
||||||
- Via Liguri Magelli (Street View di Andrea, 28 ottobre), a sinistra dal campo del Giannini: a destra la casa salmone
|
- Via Liguri Magelli (Street View di Andrea, 28 ottobre), a sinistra dal campo del Giannini: a destra la casa salmone
|
||||||
con la tenda del Trappola (il Barrettino, «Vai dal Trappola»: niente interno, [DA ANDREA]), l'Arcu sotto la tenda
|
con la tenda del Trappola (il Barrettino, «Vai dal Trappola»: niente interno, [DA ANDREA]), l'Arcu sotto la tenda
|
||||||
(scherzo: «ti ho visto du' minuti fa a Campomigliaio» col Betino, poi la sfida del GP), davanti la targa «Qui riposa la
|
(scherzo: «ti ho visto du' minuti fa a Campomigliaio» col Betino, poi la sfida del GP), davanti la targa «Qui riposa la
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
// Senza verbo scelto vale il clic intelligente: l'azione più sensata per quel punto.
|
// Senza verbo scelto vale il clic intelligente: l'azione più sensata per quel punto.
|
||||||
import { VERB_LABELS } from './game.js';
|
import { VERB_LABELS } from './game.js';
|
||||||
|
|
||||||
// «Vai a» davanti a un nome che comincia con «dal», «dalla»…: «Vai dal Trappola», non «Vai a dal Trappola».
|
// «Vai a» davanti a un nome che dice già dove («dal Trappola», «a destra, …», «verso …», «indietro, …»): solo «Vai».
|
||||||
const verbLabel = (verb, name) => verb === 'walk' && /^da(l|lla|i|gli|ll')?\b/i.test(name ?? '') ? 'Vai' : VERB_LABELS[verb];
|
const WHERE = /^(da(l|lla|i|gli|ll')?|a|verso|indietro|su|giù|in|laggiù|lassù|dietro|oltre)(?=[\s,]|$)/i;
|
||||||
|
const verbLabel = (verb, name) => verb === 'walk' && WHERE.test(name ?? '') ? 'Vai' : VERB_LABELS[verb];
|
||||||
|
|
||||||
export class Command {
|
export class Command {
|
||||||
constructor(game) {
|
constructor(game) {
|
||||||
|
|||||||
+50
-13
@@ -2578,10 +2578,11 @@ export const story = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'all_area_camper', name: 'a sinistra, verso l\'area camper', box: [320, 160, 110, 42], at: [442, 202], exit: { scene: 'area_camper', at: [600, 330], face: 'left' },
|
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' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'al_giannini', name: 'in fondo a sinistra, verso il campo del Giannini', box: [380, 165, 58, 30], at: [440, 200], exit: { scene: 'campo_giannini', at: [480, 218], 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_stazione', name: 'a destra, verso la stazione', box: [486, 160, 90, 40], at: [474, 202], exit: { scene: 'stazione', at: [20, 300], face: 'right' },
|
||||||
@@ -2592,7 +2593,8 @@ export const story = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
area_camper: {
|
area_camper: {
|
||||||
name: '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],
|
map: [70, 84],
|
||||||
background: 'assets/scenes/area-camper.png',
|
background: 'assets/scenes/area-camper.png',
|
||||||
walk: [[0, 360], [0, 260], [200, 232], [380, 240], [450, 248], [640, 300], [640, 360]],
|
walk: [[0, 360], [0, 260], [200, 232], [380, 240], [450, 248], [640, 300], [640, 360]],
|
||||||
@@ -2606,13 +2608,18 @@ export const story = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'villette', name: 'villette', box: [500, 80, 140, 120], at: [560, 280], face: 'right',
|
id: 'villette', name: 'villette', box: [500, 80, 140, 106], at: [560, 280], face: 'right',
|
||||||
actions: {
|
actions: {
|
||||||
look: [{ say: 'Le villette rosa coi balconi bianchi. Da qui a casa mia è un attimo.' }],
|
look: [{ say: 'Le villette rosa coi balconi bianchi. Da qui a casa mia è un attimo.' }],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'a_cardetole', name: 'verso casa, a Cardetole', box: [0, 230, 80, 130], at: [20, 300], exit: { scene: 'cardetole', at: [300, 350], face: 'up' },
|
// 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' },
|
id: 'al_ponticino', name: 'indietro, il ponticino', box: [560, 300, 80, 60], at: [620, 330], exit: { scene: 'ponticino', at: [442, 202], face: 'down' },
|
||||||
@@ -2620,7 +2627,8 @@ export const story = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
// Il prato del parco dei camper visto dall'altra parte: per i ragazzi, «il campo del Giannini». Ci si arriva dal
|
// Il prato del parco dei camper visto dall'altra parte: per i ragazzi, «il campo del Giannini». Ci si arriva dal
|
||||||
// ponticino della Carza; niente uscita verso l'area camper, perché è già questa (Andrea, 28 ottobre).
|
// 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: {
|
campo_giannini: {
|
||||||
name: 'Il campo del Giannini',
|
name: 'Il campo del Giannini',
|
||||||
map: [82, 96],
|
map: [82, 96],
|
||||||
@@ -2636,6 +2644,12 @@ export const story = {
|
|||||||
use: [{ say: 'Senza pallone, e senza la squadra, non vale.' }],
|
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',
|
id: 'giochi', name: 'giochi dei bambini', box: [220, 170, 80, 40], at: [260, 216], face: 'up',
|
||||||
actions: {
|
actions: {
|
||||||
@@ -2643,10 +2657,11 @@ export const story = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'al_ponticino', name: 'verso il ponticino della Carza', box: [440, 150, 90, 60], at: [480, 216], exit: { scene: 'ponticino', at: [444, 204], face: 'right' },
|
// 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: 'Via Liguri Magelli', box: [0, 100, 70, 260], at: [30, 260], exit: { scene: 'via_liguri_magelli', at: [320, 340], face: 'up' },
|
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' },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -2697,7 +2712,12 @@ export const story = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'al_giannini', name: 'verso il campo del Giannini', box: [180, 330, 280, 30], at: [320, 345], exit: { scene: 'campo_giannini', at: [60, 250], face: 'right' },
|
// 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' },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -2713,21 +2733,38 @@ export const story = {
|
|||||||
{
|
{
|
||||||
id: 'casa', name: 'casa di Andrea', box: [330, 20, 220, 212], at: [470, 290], face: 'up',
|
id: 'casa', name: 'casa di Andrea', box: [330, 20, 220, 212], at: [470, 290], face: 'up',
|
||||||
actions: {
|
actions: {
|
||||||
look: [{ say: 'Casa mia. Terzo piano, quello con la tapparella a metà: è la mia camera.' }],
|
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.' }],
|
open: [{ say: 'Se salgo, mi mettono ad apparecchiare. Prima il palio.' }],
|
||||||
walk: [{ 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, 216], at: [200, 306], face: 'up',
|
id: 'platano', name: 'platano', box: [90, 0, 170, 206], at: [200, 306], face: 'up',
|
||||||
actions: {
|
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!».' }],
|
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?' }],
|
use: [{ say: 'Arrampicarmi? Alla mia età, e davanti a tutto il condominio?' }],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// Si compare a destra dell'area camper: inquadrature invertite rispetto alle foto (Andrea, 28 ottobre, va bene così).
|
|
||||||
{
|
{
|
||||||
id: 'alla_pieve', name: 'su verso la Pieve', box: [0, 330, 640, 30], at: [300, 354], exit: { scene: 'area_camper', at: [600, 330], face: 'left' },
|
// 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' },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,6 +16,13 @@ test('clic intelligente: parla con le persone, guarda le cose, attraversa le usc
|
|||||||
assert.equal(c.sentence('vecchietti'), 'Parla con vecchietti');
|
assert.equal(c.sentence('vecchietti'), 'Parla con vecchietti');
|
||||||
assert.equal(c.sentence('manifesto'), 'Guarda manifesto del Palio');
|
assert.equal(c.sentence('manifesto'), 'Guarda manifesto del Palio');
|
||||||
assert.equal(c.sentence('verso_piazzetta'), 'Vai a Via dell\'Antica Posta, verso Piazzetta Cambray Digny');
|
assert.equal(c.sentence('verso_piazzetta'), 'Vai a Via dell\'Antica Posta, verso Piazzetta Cambray Digny');
|
||||||
|
// Quando il nome dice già dove, niente «a» in più: «Vai dal Trappola», «Vai a destra, …».
|
||||||
|
const casa = new Game(story), cc = new Command(casa); casa.go('cardetole');
|
||||||
|
assert.equal(cc.sentence('al_giannini'), 'Vai dal Giannini');
|
||||||
|
assert.equal(cc.sentence('al_ponticino'), 'Vai a destra, il ponticino della Carza');
|
||||||
|
casa.go('via_liguri_magelli');
|
||||||
|
assert.equal(cc.sentence('a_cardetole'), 'Vai lassù, verso casa a Cardetole');
|
||||||
|
assert.equal(cc.sentence('trappola'), 'Vai dal Trappola');
|
||||||
assert.equal(c.clickScene(at('vecchietti')), 'act');
|
assert.equal(c.clickScene(at('vecchietti')), 'act');
|
||||||
settle(g);
|
settle(g);
|
||||||
assert.equal(g.dialogue?.id, 'vecchietti');
|
assert.equal(g.dialogue?.id, 'vecchietti');
|
||||||
|
|||||||
Reference in New Issue
Block a user