Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1b92278a5 | ||
|
|
b3c50f4694 |
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",
|
||||
"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.": {
|
||||
"file": "andrea-a3e36c12a1.mp3",
|
||||
"sec": 5.4
|
||||
@@ -1619,9 +1623,9 @@
|
||||
"file": "andrea-3d15dd47bb.mp3",
|
||||
"sec": 4.82
|
||||
},
|
||||
"andrea|Casa mia. Terzo piano, quello con la tapparella a metà: è la mia camera.": {
|
||||
"file": "andrea-acc7949f4c.mp3",
|
||||
"sec": 5.91
|
||||
"andrea|Casa mia. Secondo piano: quella con la tapparella a metà è la camera di mia sorella, e a destra quella dei miei.": {
|
||||
"file": "andrea-6c9e7f684e.mp3",
|
||||
"sec": 8.72
|
||||
},
|
||||
"andrea|Se salgo, mi mettono ad apparecchiare. Prima il palio.": {
|
||||
"file": "andrea-8945f1786d.mp3",
|
||||
@@ -1639,6 +1643,14 @@
|
||||
"file": "andrea-018183c4dd.mp3",
|
||||
"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.": {
|
||||
"file": "andrea-0a073729fd.mp3",
|
||||
"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
|
||||
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).
|
||||
- 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
|
||||
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
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "leggenda-del-regolo",
|
||||
"version": "0.1.31",
|
||||
"version": "0.1.32",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
// Senza verbo scelto vale il clic intelligente: l'azione più sensata per quel punto.
|
||||
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».
|
||||
const verbLabel = (verb, name) => verb === 'walk' && /^da(l|lla|i|gli|ll')?\b/i.test(name ?? '') ? 'Vai' : VERB_LABELS[verb];
|
||||
// «Vai a» davanti a un nome che dice già dove («dal Trappola», «a destra, …», «verso …», «indietro, …»): solo «Vai».
|
||||
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 {
|
||||
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' },
|
||||
@@ -2592,7 +2593,8 @@ export const story = {
|
||||
],
|
||||
},
|
||||
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],
|
||||
background: 'assets/scenes/area-camper.png',
|
||||
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: {
|
||||
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' },
|
||||
@@ -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
|
||||
// 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: {
|
||||
name: 'Il campo del Giannini',
|
||||
map: [82, 96],
|
||||
@@ -2636,6 +2644,12 @@ export const story = {
|
||||
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',
|
||||
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',
|
||||
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.' }],
|
||||
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: {
|
||||
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?' }],
|
||||
},
|
||||
},
|
||||
// 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' },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// La versione del gioco: la cambia scripts/bump.sh, insieme a package.json.
|
||||
export const VERSION = '0.1.31';
|
||||
export const VERSION = '0.1.32';
|
||||
|
||||
// Immagini, musiche e voci con ?v=<versione>: a ogni versione l'indirizzo cambia e il browser le riscarica,
|
||||
// mentre fra una versione e l'altra le tiene in cache a lungo (nginx.conf).
|
||||
|
||||
@@ -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('manifesto'), 'Guarda manifesto del Palio');
|
||||
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');
|
||||
settle(g);
|
||||
assert.equal(g.dialogue?.id, 'vecchietti');
|
||||
|
||||
Reference in New Issue
Block a user