Compare commits

...
24 Commits
Author SHA1 Message Date
manzolo fef236dc54 Versione 0.1.12 2026-10-26 14:34:08 +01:00
manzoloandClaude Opus 5.5 c82bef70b2 Oratorio: il libro della Storia infinita passa sulla prima tavolata, a sinistra del palo, lontano dal giocatore di carte (Andrea: «troppo vicini, non riesco a interagire»); test che li distingue
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A1dxvtsZx8NE9fwjXUNDBr
2026-10-26 14:28:21 +01:00
manzolo e9907e3e66 Versione 0.1.11 2026-10-26 14:01:26 +01:00
manzoloandClaude Opus 5.5 92e7a289be Briscola all'oratorio: alle tavolate il giocatore di carte (segnaposto, sprite di Codex) sfida Andrea a briscola in due. Si sceglie il mazzo, toscane (cuori, mattoni, fiori, picche; gobbo, donna e regio) o napoletane, e il livello: «Alla bona», «Seria», «A fassi male» (conta le carte uscite, finale perfetto a mazzo finito, mai la mano altrui). Regole fedeli, conteggio delle prese a fine partita, rivincita, suoni di carte, comandi con mouse, tocco e tastiera. Carte e dorso col Regolo serpentello disegnati da Codex; motore e prove nel browser rivisti da Claude
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A1dxvtsZx8NE9fwjXUNDBr
2026-10-26 13:56:39 +01:00
manzolo 2362fc7741 Versione 0.1.10 2026-10-26 00:19:14 +01:00
manzoloandClaude Opus 5.5 2dd4257fd4 Piazza: la Torre dello Scoronconcolo, con l'aneddoto di Michele del Tavolaccino (Lorenzino de' Medici, il duca Alessandro, le galere contro i Turchi), trovato da Andrea su Wikipedia
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-26 00:14:20 +01:00
manzolo d51f5e56ea Versione 0.1.9 2026-10-26 00:03:14 +01:00
manzoloandClaude Opus 5.5 7b7e0031d1 Biliardo: immagini e suoni insieme. Durante la steccata aspetta la fisica, non il disegno: la biglia parte quando la stecca la tocca, col suo suono, e si disegnano sempre le posizioni vere (segnalato da Codex: urti che sembravano senza contatto e suoni in anticipo di 180 ms)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 23:55:31 +01:00
manzoloandClaude Opus 5.5 94e9da4009 Difficoltà alle bocce e al biliardo, scelta nel dialogo con l'avversario: «Alla bona», «Seria», «A fassi male». Tarata con partite simulate contro un giocatore attento: al biliardo vince 9 su 12, circa 4 su 10 e quasi mai; alle bocce 72%, 50% e 35% delle mani. Battute nuove per Mariano e l'Ingegnere, test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 23:46:46 +01:00
manzoloandClaude Opus 5.5 bd66ea45ad Biliardo più bello (Codex): tavolo in pixel art visto dall'alto con cornice a fasce e diamanti, sala in penombra e luce delle lampade sul panno, segnapunti a cifre rosse, steccata e birilli che cadono animati, biglie in pixel, l'Ing. Tozzi a bordo tavolo che dà il gesso, esulta o allarga le braccia. Più: scritte a 8 punti (a 6 la B sembrava una D) e la stecca che torna a seguire il mouse finché un clic non fissa la mira (Andrea: «non riesco più a girare la stecca»)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 23:36:23 +01:00
manzoloandClaude Opus 5.5 9eabd5c6e1 Biliardo più preciso (revisione di Codex): urti calcolati nel punto esatto di contatto, anche nei colpi di taglio e veloci; la guida simula il tiro vero e mostra le due biglie dopo l'urto e i falli; la mira resta ferma andando sui comandi; frecce e Maiusc per la mira fine; comandi che non coprono il tavolo; test nel browser con mouse, touch e telefono. Più un tetto agli urti per passo, così due biglie a contatto non possono bloccare il gioco
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 23:12:46 +01:00
manzoloandClaude Opus 5.5 ddc877a2d1 Sala dei biliardi: trio jazz da circolo sintetizzato da zero (tools/jazz_biliardo.py: contrabbasso, piano elettrico, spazzole, vibrafono, swing in si bemolle) e un sottofondo con gli altri tavoli e il bar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 22:59:43 +01:00
manzoloandClaude Opus 5.5 14a1e6e5b8 L'Ing. Tozzi nella sala dei biliardi (sprite di Codex dalla foto di Andrea): la sfida parte parlandogli, come con Mariano, con la rivincita dopo una vittoria; la sala in scala più alta, Andrea non sta più sotto il tavolo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 22:56:55 +01:00
manzolo 49bdfb313a Versione 0.1.8 2026-10-25 22:46:40 +01:00
manzoloandClaude Fable 5.1 416b9d46ef Sala dei biliardi: Andrea in proporzione col tavolo (la profondità era la metà: sembrava una formica)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 22:41:34 +01:00
manzoloandClaude Fable 5.1 7476c84b76 Il portone del Circolo 4 Maggio: «Apri» fa entrare (prima rispondeva «Non si apre»)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 22:36:20 +01:00
manzoloandClaude Fable 5.1 053728a086 Circolo 4 Maggio: dal portone in piazza si entra nella sala dei biliardi (sfondo in stile Lucas fatto da Andrea con Codex) e al primo tavolo si gioca a biliardo coi cinque birilli contro l'Ing. Tozzi (battute provvisorie, sprite da fare). Motore nuovo: fisica delle biglie e delle sponde, birilli che cadono, regole e falli del gioco italiano, avversario che prova i colpi a vuoto un po' per fotogramma; disegno dall'alto con stecca, linea di mira e biglia fantasma; stessi comandi delle bocce (pannello, tastiera, pressione); suoni; test; nelle idee la foto per i rigori
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 22:34:19 +01:00
manzoloandClaude Opus 5.5 394e8bdde3 Musica su iPhone e iPad: il volume lì è di sola lettura, la dissolvenza non arrivava mai a zero e il brano vecchio restava sotto quello nuovo (organo e paese insieme nella Pieve). Il livello si tiene a parte e lo zero diventa muto; test che simula iOS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 21:49:16 +01:00
manzoloandClaude Opus 5.5 ca56a9df17 L'Arcu: «S'ha andà a fallo!?!?» – «Gnamo! Ma prima mi fo una segarettina...»; al Trebbio Andrea ci sale a piedi e ha trovato la sua strada (lui che non sa cosa fare da grande); voci e test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 21:44:20 +01:00
manzoloandClaude Opus 5.5 b0b2fc0ed3 Ponte sulla Sieve: il tabernacolo custodisce la copia dell'Annunciazione di Antonio Berti (originale del 1947), con voci nuove
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 21:29:13 +01:00
manzoloandClaude Opus 5.5 f56c9b5358 Idee: altri minigiochi come le bocce (passamano, carrette, bandierine, caccia al tesoro, briscola, rigori)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 20:12:42 +01:00
manzoloandClaude Opus 5.5 70f328c56d Telefono in verticale: la Pausa prende tutto lo schermo, la versione e la spiegazione non finiscono più sopra i verbi
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 20:06:48 +01:00
manzolo 0a0bb7eea4 Versione 0.1.7 2026-10-25 19:59:06 +01:00
manzoloandClaude Opus 5.5 16759006b1 Fra Peppino da Gricignano sul sagrato della Pieve (battute provvisorie); al campo secondario, chi vuole giocare a padel trova una macchina del tempo senza plutonio (Alvarino?)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ks2K99uqCZjAxvy7Rdj1R
2026-10-25 19:49:17 +01:00
136 changed files with 3580 additions and 98 deletions
+6
View File
@@ -47,6 +47,11 @@ Si possono usare anche le frecce, oppure Invio per cercare il prossimo dettaglio
riprovare; dopo il ritrovamento, «Continua» conclude il capitolo.
Il volume dei suoni ambientali e del fruscio delle pagine si regola in **Pausa → Ambiente ed effetti**.
Al biliardo del Circolo 4 Maggio, clic o tocco fissa la mira; regola la forza e premi **Tira**.
Le frecce ← → affinano la direzione, con Maiusc per passi ancora più piccoli. La guida usa la stessa fisica
del tiro: mostra sponde, primo contatto e direzioni iniziali dopo l'urto (azzurro per l'avversaria, giallo
per la propria biglia). Tenendo premuto sul tavolo o Spazio si carica il colpo, con la mira bloccata.
## In Docker
```zsh
@@ -71,5 +76,6 @@ npm test # logica, storia coerente, soluzione percorsa dall'inizio alla
npm install && npx playwright install chromium-headless-shell
npm run browser # partita completa con clic veri in Chromium, salvataggio, telefono
npm run browser -- --media-only # libro, torcia e audio: controllo mirato desktop/telefono
npm run browser:biliardo # mira e tiro con mouse/touch, desktop e telefono; schermate in /tmp/regolo-biliardo
```
Binary file not shown.
+38
View File
@@ -0,0 +1,38 @@
{
"image": "giocatore-carte.png",
"height": 100,
"frames": {
"sit": {
"x": 0,
"y": 0,
"w": 67,
"h": 100,
"ax": 25.7,
"ay": 100
},
"talk": {
"x": 69,
"y": 0,
"w": 68,
"h": 100,
"ax": 27.6,
"ay": 100
},
"laugh": {
"x": 139,
"y": 0,
"w": 72,
"h": 99,
"ax": 19.3,
"ay": 99
},
"shuffle": {
"x": 213,
"y": 0,
"w": 67,
"h": 97,
"ax": 25.2,
"ay": 97
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

+70
View File
@@ -0,0 +1,70 @@
{
"image": "ing-tozzi.png",
"height": 120,
"frames": {
"stand": {
"x": 0,
"y": 0,
"w": 53,
"h": 120,
"ax": 27.9,
"ay": 120
},
"blink": {
"x": 55,
"y": 0,
"w": 54,
"h": 120,
"ax": 27.8,
"ay": 120
},
"talk": {
"x": 111,
"y": 0,
"w": 77,
"h": 119,
"ax": 29.9,
"ay": 119
},
"explain": {
"x": 190,
"y": 0,
"w": 58,
"h": 119,
"ax": 30.8,
"ay": 119
},
"laugh": {
"x": 250,
"y": 0,
"w": 53,
"h": 119,
"ax": 28.2,
"ay": 119
},
"chalk": {
"x": 305,
"y": 0,
"w": 52,
"h": 119,
"ax": 24.1,
"ay": 119
},
"shrug": {
"x": 359,
"y": 0,
"w": 87,
"h": 120,
"ax": 43.9,
"ay": 120
},
"cheer": {
"x": 448,
"y": 0,
"w": 56,
"h": 123,
"ax": 30.9,
"ay": 123
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

+22
View File
@@ -0,0 +1,22 @@
{
"image": "macchina-tempo.png",
"height": 158,
"frames": {
"stand": {
"x": 0,
"y": 0,
"w": 361,
"h": 158,
"ax": 180,
"ay": 152
},
"talk": {
"x": 0,
"y": 0,
"w": 361,
"h": 158,
"ax": 180,
"ay": 152
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+338 -10
View File
@@ -47,6 +47,26 @@
"file": "andrea-dacb32e5c6.mp3",
"sec": 4.01
},
"andrea|La Torre dello Scoronconcolo. Era una vecchia torre di guardia, già in disuso nel Cinquecento.": {
"file": "andrea-536c525f5c.mp3",
"sec": 6.64
},
"andrea|Ci si rifugiò Michele del Tavolaccino, detto Scoronconcolo, sanpierino: nel 1537 aiutò Lorenzino de' Medici ad ammazzare il duca Alessandro.": {
"file": "andrea-37eaf3e803.mp3",
"sec": 11.82
},
"andrea|Nel 1539 finì sulle galere dell'ordine gerosolimitano, in guerra contro i Turchi. Altro che Palio.": {
"file": "andrea-5f4c4fca29.mp3",
"sec": 8.04
},
"andrea|Da quassù non ci arrivo. E poi, di nascondigli in quella torre, ce n'è già stato uno di troppo.": {
"file": "andrea-f60ba3ee31.mp3",
"sec": 7.38
},
"andrea|Una torre in tasca? Nemmeno lo Scoronconcolo ci è riuscito.": {
"file": "andrea-938fbd1326.mp3",
"sec": 4.59
},
"andrea|Il bar della piazza. Chi c'era dietro il bancone nel 2007? Questo lo sa solo Andrea.": {
"file": "andrea-4b733def4f.mp3",
"sec": 7.27
@@ -75,6 +95,14 @@
"file": "andrea-a9df2e6bbb.mp3",
"sec": 4.98
},
"andrea|Il Circolo 4 Maggio. Dentro, dietro il bar, la sala dei biliardi: tre tavoli e il silenzio delle grandi occasioni.": {
"file": "andrea-f0aef83c80.mp3",
"sec": 9.43
},
"andrea|Da fuori non si parla con nessuno: al circolo si entra.": {
"file": "andrea-0e0e42a1cd.mp3",
"sec": 3.69
},
"andrea|Il programma del Palio della Fortezza, con la foto del palio: la strada bianca che sale alla Fortezza, i ragazzi in fila, e uno con la maglia rossa che alza le braccia.": {
"file": "andrea-6cc844498a.mp3",
"sec": 10.59
@@ -279,6 +307,26 @@
"file": "andrea-68a845881b.mp3",
"sec": 1.94
},
"andrea|Fra Peppino da Gricignano, col saio e i sandali. Sul sagrato sembra nato lì.": {
"file": "andrea-97d75e2a9d.mp3",
"sec": 5.38
},
"andrea|Buongiorno, Fra Peppino!": {
"file": "andrea-94988dc8c6.mp3",
"sec": 1.74
},
"fra_peppino|Pace e bene, figliolo. Cerchi qualcosa?": {
"file": "fra_peppino-651c4d95ab.mp3",
"sec": 3.72
},
"andrea|Il palio. È sparito.": {
"file": "andrea-c9c068f507.mp3",
"sec": 2.39
},
"fra_peppino|Le cose sparite, prima o poi, tornano. Come le pecorelle.": {
"file": "fra_peppino-8b3d0a5b8f.mp3",
"sec": 4.47
},
"andrea|La Pieve di San Pietro. Il mio rione: noi bianchi.": {
"file": "andrea-43fd5c2b27.mp3",
"sec": 4.46
@@ -439,6 +487,10 @@
"file": "andrea-f798fa755d.mp3",
"sec": 4.9
},
"andrea|Ha già mescolato. Mi sa che aspettava proprio un pollo di passaggio.": {
"file": "andrea-71f3bff8a0.mp3",
"sec": 5.09
},
"andrea|Una gomma da masticare ancora incartata, persa davanti al palco. Qualcuno ha perso l'appetito.": {
"file": "andrea-f2ea95922d.mp3",
"sec": 6.54
@@ -615,9 +667,65 @@
"file": "andrea-d193b44288.mp3",
"sec": 3.65
},
"andrea|Il tabernacolo prima del ponte. Chi passa per andare via dal paese, un saluto glielo fa sempre.": {
"file": "andrea-78a5ef65f0.mp3",
"sec": 7.84
"andrea|La sala dei biliardi. Qui dentro si parla piano, e si gioca forte.": {
"file": "andrea-0268742faf.mp3",
"sec": 5.45
},
"andrea|Il primo tavolo: il panno verde, il castello di birilli in mezzo, le biglie già pronte.": {
"file": "andrea-015dc16c6d.mp3",
"sec": 5.51
},
"andrea|L'Ing. Tozzi gli gira intorno con la stecca in mano, come se aspettasse qualcuno.": {
"file": "andrea-2d04be65fb.mp3",
"sec": 5.97
},
"andrea|Il tavolo è dell'Ingegnere: prima gli chiedo una partita.": {
"file": "andrea-c43b158842.mp3",
"sec": 3.27
},
"ing_tozzi|Si parla col panno, qui. Prendi la stecca.": {
"file": "ing_tozzi-4814e97759.mp3",
"sec": 3.36
},
"andrea|Una biglia in tasca? Mi sbattono fuori dal circolo.": {
"file": "andrea-98b3e4a969.mp3",
"sec": 3.49
},
"andrea|L'Ing. Tozzi, il campione del circolo. Occhiali scuri anche al chiuso: dice che così non vede le biglie degli altri.": {
"file": "andrea-127a90af53.mp3",
"sec": 9.37
},
"andrea|Le stecche del circolo, in fila. Ognuna ha il suo proprietario, e guai a sbagliare.": {
"file": "andrea-1eae1a8577.mp3",
"sec": 6.1
},
"andrea|La stecca me la dà l'Ingegnere, quando si gioca.": {
"file": "andrea-e393f0bc2a.mp3",
"sec": 2.83
},
"andrea|Un campione di biliardo in posa, con la stecca. Avrà il suo nome, ma da qui non si legge.": {
"file": "andrea-4a03e51d2c.mp3",
"sec": 7.65
},
"andrea|L'armadietto a vetri, con le stecche buone. Chiuso a chiave, naturalmente.": {
"file": "andrea-b1ba7d3072.mp3",
"sec": 5.06
},
"andrea|Chiuso. Le stecche buone sono per chi le sa usare.": {
"file": "andrea-bd95e65b0a.mp3",
"sec": 4.77
},
"andrea|Il tabernacolo del ponte, con l'Annunciazione di Antonio Berti, scultore sanpierino.": {
"file": "andrea-9c0935dc77.mp3",
"sec": 5.48
},
"andrea|Questa è una copia: l'originale lo fece nel 1947. Lo stesso Berti del parco dell'area feste.": {
"file": "andrea-902c4db19c.mp3",
"sec": 8.21
},
"andrea|Chi passa per andare via dal paese, un saluto glielo fa sempre.": {
"file": "andrea-6eeaab479b.mp3",
"sec": 4.03
},
"andrea|Sotto il ponte la Carza si butta nella Sieve, e da qui vanno avanti insieme.": {
"file": "andrea-f322731846.mp3",
@@ -655,6 +763,42 @@
"file": "andrea-e47b3cebb5.mp3",
"sec": 4.87
},
"andrea|Voglio giocare a padel!": {
"file": "andrea-808f67b99f.mp3",
"sec": 1.4
},
"andrea|Toh, guarda: c'è una macchina del tempo.": {
"file": "andrea-1f686a5d7c.mp3",
"sec": 3.2
},
"andrea|Per arrivare al padel mi manca solo un po' di plutonio. Potrei sentire da Alvarino se ce l'ha.": {
"file": "andrea-299c0c38d6.mp3",
"sec": 6.03
},
"andrea|Il padel aspetta. Prima il plutonio: devo sentire Alvarino.": {
"file": "andrea-9f70e8b68e.mp3",
"sec": 5.03
},
"andrea|Acciaio, portiere ad ali di gabbiano, cavi e bobine dappertutto. E un contenitore vuoto, sul retro.": {
"file": "andrea-122877af14.mp3",
"sec": 7.99
},
"andrea|Vuoto di plutonio, si capisce.": {
"file": "andrea-1cb9f950ca.mp3",
"sec": 2.41
},
"andrea|Le portiere sono già su. È il plutonio che manca.": {
"file": "andrea-c1db806968.mp3",
"sec": 4.01
},
"andrea|Senza plutonio non parte. Alvarino, dove sei?": {
"file": "andrea-8f9dcb0bb1.mp3",
"sec": 3.71
},
"andrea|Una macchina in tasca? Neanche nel futuro.": {
"file": "andrea-cac0c82f01.mp3",
"sec": 3.06
},
"barondeduke|Me la giochi? Ho un sette e un due, ma un sacco di fiducia.": {
"file": "barondeduke-52184c7c05.mp3",
"sec": 5.58
@@ -1379,6 +1523,70 @@
"file": "andrea-60cdae2e35.mp3",
"sec": 5.1
},
"andrea|Una briscola?": {
"file": "andrea-d2f285f610.mp3",
"sec": 1.04
},
"andrea|La rivincita?": {
"file": "andrea-98e4366a56.mp3",
"sec": 0.83
},
"andrea|Ora cerco il palio. A dopo.": {
"file": "andrea-6e63dafda1.mp3",
"sec": 2.61
},
"giocatore_carte|Gnamo. In due, senza soci e senza scuse.": {
"file": "giocatore_carte-1523994a6c.mp3",
"sec": 3.78
},
"giocatore_carte|Il tavolo è qui. Il coraggio ce lo metti te.": {
"file": "giocatore_carte-8dfadb4acc.mp3",
"sec": 3.4
},
"andrea|Con le toscane.": {
"file": "andrea-e8599cc8b6.mp3",
"sec": 1.03
},
"andrea|Con le napoletane.": {
"file": "andrea-be276497e3.mp3",
"sec": 1.09
},
"andrea|Ci ripenso.": {
"file": "andrea-b851b9ed26.mp3",
"sec": 0.8
},
"giocatore_carte|Brao. Gobbo, donna e regio, come Dio comanda. Come la vuoi?": {
"file": "giocatore_carte-89686f55a0.mp3",
"sec": 6.14
},
"giocatore_carte|Le napoletane? Le tengo per i villeggianti. Come la vuoi?": {
"file": "giocatore_carte-4f39bc172d.mp3",
"sec": 5.13
},
"andrea|Alla bona.": {
"file": "andrea-67afa54e05.mp3",
"sec": 0.69
},
"andrea|Seria.": {
"file": "andrea-f6ef96032e.mp3",
"sec": 0.58
},
"andrea|A fassi male.": {
"file": "andrea-f52137b691.mp3",
"sec": 0.78
},
"giocatore_carte|Alla bona. I carichi li regalo, oggi.": {
"file": "giocatore_carte-43e76cf11b.mp3",
"sec": 3.43
},
"giocatore_carte|Allora posa il gomito e guarda le carte.": {
"file": "giocatore_carte-f1f219bd1c.mp3",
"sec": 2.51
},
"giocatore_carte|Io le conto tutte. Anche quelle che butti via per sbaglio.": {
"file": "giocatore_carte-12f97003ec.mp3",
"sec": 4.19
},
"andrea|Una Fanta.": {
"file": "andrea-8927b87738.mp3",
"sec": 0.65
@@ -1619,6 +1827,10 @@
"file": "andrea-06f5050907.mp3",
"sec": 1.24
},
"andrea|S'ha andà a fallo!?!?": {
"file": "andrea-b25aeefc97.mp3",
"sec": 1.16
},
"andrea|Ci si becca da i' Trappola, ai' Barrettino!": {
"file": "andrea-fca6f59a70.mp3",
"sec": 3.41
@@ -1663,14 +1875,14 @@
"file": "arcu-5148dffe36.mp3",
"sec": 1.7
},
"arcu|Gnamo! Ma prima mi fo una segarettina di quelle mi fo io!": {
"file": "arcu-406cd02197.mp3",
"sec": 4.46
},
"andrea|Mariano! Facciamo una partita a bocce?": {
"file": "andrea-83b1337b4d.mp3",
"sec": 3.31
},
"andrea|La rivincita?": {
"file": "andrea-98e4366a56.mp3",
"sec": 0.83
},
"andrea|Allora, Brento Sanico?": {
"file": "andrea-2add39ff10.mp3",
"sec": 1.29
@@ -1687,14 +1899,62 @@
"file": "mariano-0eeb942ca2.mp3",
"sec": 3.52
},
"mariano|Il campione non scappa. Tira!": {
"file": "mariano-bdf58ba1be.mp3",
"sec": 3.26
"mariano|Come la vuoi?": {
"file": "mariano-0288ec460b.mp3",
"sec": 0.7
},
"mariano|Il campione non scappa. Come la vuoi?": {
"file": "mariano-1d8388d631.mp3",
"sec": 3.55
},
"mariano|Promesso: ti ci porto. Ma prima ritrova il palio, che senza festa non si parte.": {
"file": "mariano-1c9cd0c325.mp3",
"sec": 5.96
},
"mariano|Alla bona: tiro con gli occhi chiusi.": {
"file": "mariano-b1b1ca273b.mp3",
"sec": 2.2
},
"mariano|Seria. Così mi piace.": {
"file": "mariano-accff65835.mp3",
"sec": 2.27
},
"mariano|A fassi male? Poi non piangere, eh.": {
"file": "mariano-d65fb6e871.mp3",
"sec": 3.42
},
"andrea|Ingegnere, una partita ai birilli?": {
"file": "andrea-dbcf4d1083.mp3",
"sec": 2.49
},
"andrea|Arrivederci, Ingegnere.": {
"file": "andrea-8f63435d69.mp3",
"sec": 1.38
},
"ing_tozzi|Una partita ai birilli? Si va a venti. Come la vuoi?": {
"file": "ing_tozzi-82e7cc88aa.mp3",
"sec": 4.58
},
"ing_tozzi|Ci mancherebbe. Stavolta guardo bene. Come la vuoi?": {
"file": "ing_tozzi-344ac1021f.mp3",
"sec": 4.67
},
"ing_tozzi|Alla bona: tiro senza occhiali.": {
"file": "ing_tozzi-17e489814e.mp3",
"sec": 2.19
},
"andrea|Gnamo.": {
"file": "andrea-a496b0aca9.mp3",
"sec": 0.58
},
"ing_tozzi|Seria. Dammi il gesso.": {
"file": "ing_tozzi-4b3adfa04a.mp3",
"sec": 2.28
},
"ing_tozzi|A fassi male? Allora mi tolgo la giacca. Ah no, non ce l'ho.": {
"file": "ing_tozzi-c365e9f760.mp3",
"sec": 6.05
},
"andrea|Sono bloccato. Mi dai un consiglio?": {
"file": "andrea-42b02eb9ea.mp3",
"sec": 3.9
@@ -1703,6 +1963,14 @@
"file": "andrea-01d1ccb933.mp3",
"sec": 2.09
},
"andrea|Lo sai che quassù ci vengo sempre a piedi?": {
"file": "andrea-fc4233b1e9.mp3",
"sec": 2.82
},
"andrea|E te, da grande, cosa volevi fare?": {
"file": "andrea-3aacdf79ee.mp3",
"sec": 2.8
},
"andrea|Niente, volevo solo un po' di pace.": {
"file": "andrea-131481b503.mp3",
"sec": 2.79
@@ -1767,10 +2035,54 @@
"file": "castello-a1dfd76497.mp3",
"sec": 6.51
},
"castello|Lo so. Ti sento arrivare dal fiatone, un chilometro prima.": {
"file": "castello-05405f3232.mp3",
"sec": 5.63
},
"andrea|Da casa sono quattro chilometri. E due sono di salita, di quella bella.": {
"file": "andrea-57327d9598.mp3",
"sec": 6.46
},
"castello|Eppure torni sempre. Qualcosa, quassù, l'hai trovato.": {
"file": "castello-1545f0b17d.mp3",
"sec": 6.56
},
"andrea|Ho trovato la mia strada!": {
"file": "andrea-e9ef2a6d39.mp3",
"sec": 1.59
},
"andrea|...Io, che ancora non so cosa fare da grande.": {
"file": "andrea-60611ea4b9.mp3",
"sec": 3.54
},
"castello|Il castello.": {
"file": "castello-e34c381c3c.mp3",
"sec": 0.98
},
"castello|Mi è venuto bene. Non avere fretta: a me ci son voluti seicento anni.": {
"file": "castello-dcd5a7ae63.mp3",
"sec": 6.24
},
"castello|Quella qui non manca mai. Torna quando vuoi.": {
"file": "castello-dc8a873d86.mp3",
"sec": 4.36
},
"giocatore_carte|Oh, bravo! Ora però rimescolo io.": {
"file": "giocatore_carte-a8846bfa7b.mp3",
"sec": 2.9
},
"giocatore_carte|I carichi portali qui, mica alla stazione! Rivincita quando vuoi.": {
"file": "giocatore_carte-6ce98bce81.mp3",
"sec": 4.72
},
"giocatore_carte|Sessanta pari. Un si litiga nemmeno sul conto!": {
"file": "giocatore_carte-13af2e2331.mp3",
"sec": 3.86
},
"giocatore_carte|Vai, ti tengo il posto. Le carte mica scappano.": {
"file": "giocatore_carte-729b3344da.mp3",
"sec": 3.3
},
"mariano|Aspetta, ci vuole il metro...": {
"file": "mariano-e8b4ebf3d9.mp3",
"sec": 1.62
@@ -1791,6 +2103,22 @@
"file": "mariano-39e27158b7.mp3",
"sec": 2.83
},
"ing_tozzi|Venti. Hai vinto te, stasera il caffè lo pago io.": {
"file": "ing_tozzi-51f855478a.mp3",
"sec": 4.42
},
"ing_tozzi|Venti! Al biliardo ci vuole la mano ferma, mica la corsa.": {
"file": "ing_tozzi-d557d58aec.mp3",
"sec": 4.66
},
"ing_tozzi|Quando vuoi, il tavolo è qui.": {
"file": "ing_tozzi-3d686c8cc5.mp3",
"sec": 2.05
},
"ing_tozzi|Lasci a metà? Ti segno la sconfitta a tavolino, eh.": {
"file": "ing_tozzi-282062c119.mp3",
"sec": 3.64
},
"andrea|Laggiù, appoggiato al muro, c'è un angolo di tela dipinta: una strada bianca, e un omino con la maglia rossa e le braccia alzate.": {
"file": "andrea-6484641c58.mp3",
"sec": 8.67
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+34
View File
@@ -0,0 +1,34 @@
# Primo piano del biliardo
Il tavolo in `assets/closeups/biliardo-tavolo.png` è generato con lo strumento immagini integrato
di Codex, senza API. Prompt completo in `prompts/closeups/biliardo-tavolo.integrated.txt`
(cartella esclusa da git). Specifica: vista ortogonale dall'alto, pixel art da avventura anni '90,
mogano scuro a fasce chiare e scure, diamanti d'ottone, panno verde, sala in penombra;
senza buche, biglie, birilli, persone, stecche o testi. Riferimento di stile: `circolo-4-maggio.png`.
L'Ingegnere usa il foglio esistente `ing-tozzi.json`, coerente con la fotografia di riferimento.
Il master misura 1672×941. `tablePatches()` in `biliardo-render.js` mappa il panno sorgente
(190, 214)–(1484, 722) su `(VIEW.x, VIEW.y, LEN * VIEW.k, WID * VIEW.k)`; i ritagli
esterni mantengono una cornice larga 16 pixel. La geometria della simulazione resta invariata.
Il caricamento passa da `story.closeups.biliardo.picture`, con la stessa cache delle bocce.
La luce calda è disegnata sul panno con una piccola tela memorizzata, ingrandita senza smoothing.
Biglie e birilli usano blocchi di pixel; le ombre delle biglie si allontanano dalla lampada centrale.
I segnapunti sono cifre rosse a sette segmenti. Le quattro pose di Tozzi rimangono nel margine sinistro.
`biliardo.js` aggiunge soltanto stato visivo: orologio, posizione iniziale della steccata,
breve cronologia delle posizioni e istante della caduta dei birilli. La presentazione del moto
è ritardata di 180 ms, per mostrare arretramento e scatto della stecca; la fisica parte subito.
La caduta dei birilli dura 240 ms sul medesimo orologio visivo. Previsione e CPU non scrivono
questa cronologia. Un confronto con la versione precedente ha verificato 6626 aggiornamenti
identici, escludendo i soli campi visivi.
Controlli: `tests/biliardo-render.test.mjs` verifica allineamento, presentazione, cadute,
pose e immutabilità del disegno. `npm run browser:biliardo` conserva i controlli dei comandi
su desktop, touch e telefono verticale e aggiunge controlli dei pixel e catture delle animazioni
in `/tmp/regolo-biliardo`.
Verifica di questa modifica: test JavaScript e Python superati; anteprima locale del renderer
ispezionata. Restano da completare `make -s verify` e `npm run browser:biliardo` in un ambiente
che permetta server locale e Chromium: nella sandbox della sessione entrambi sono bloccati
da `Operation not permitted`. Le vecchie schermate browser non validano questa modifica.
+129
View File
@@ -0,0 +1,129 @@
# Briscola all’oratorio
Implementazione del 26 ottobre 2026. ES modules statici, nessun build step.
## Partita e comandi
Il giocatore di carte è un personaggio inventato e provvisorio, seduto a destra alle tavolate
dell’oratorio: **[DA ANDREA: chi è]**. Il dialogo offre «Alla bona», «Seria», «A fassi male»;
dopo una partita conclusa offre la rivincita. `briscola_vinta` ricorda una vittoria e
`briscola_giocata` abilita la rivincita anche dopo sconfitta o patta. Nessuno dei due flag
serve alla soluzione dell’avventura.
Un clic o tocco su una carta la gioca al rilascio sullo stesso bersaglio. Nessuna carica.
Le frecce e 1–2–3 scelgono, Invio gioca, Esc esce. I tre pulsanti con nome e seme
offrono bersagli aggiuntivi e accesso tramite Tab. I comandi di tiro degli altri minigiochi
rimangono separati; in `MINIGAMES` pressione, rilascio, annullamento e mira sono opzionali.
Mazzo da 40 carte, 120 punti, distribuzione alternata e mazziere deterministico dal seed.
La briscola è in fondo al mazzo e compresa nel contatore. Chi prende pesca prima e riapre;
non esiste obbligo di seme. La presa resta visibile 1,25 secondi. Solo dopo la ventesima
presa si contano tutte le carte, una ogni 0,35 secondi, mostrando carta ingrandita,
incremento e totale. A 60–60 il risultato è patta. Il risultato resta fino all’uscita.
## Avversari e taratura
`observation` espone soltanto la propria mano, le carte pubbliche, i conteggi e l’eventuale
briscola pescata dall’altro. Non passa la mano avversaria, l’ordine del mazzo o il seed della
distribuzione. «Alla bona» sceglie casualmente; «Seria» scarta lisci, conserva briscole e
prende carichi con quelle piccole. «A fassi male» ricostruisce le carte non viste, confronta
le mosse su 40 distribuzioni possibili e simula seguiti giocati con buon senso. Sono ipotesi,
non la distribuzione effettiva. A mazzo finito il complemento delle carte pubbliche e della
propria mano identifica l’altra mano: da quel momento usa minimax esatto fino alla fine.
Comando riproducibile: `node tools/calibrate_briscola.mjs 1000`.
Semi `Math.imul(i, 2654435761) >>> 0`, i da 1 a 1000, stessi mazzi per ogni livello.
Andrea usa sempre `attentive`, l’euristica di riferimento; dà le carte 496 volte su 1000.
| Livello | Vittorie Andrea | Vittorie avversario | Patte | Punti medi Andrea |
| --- | ---: | ---: | ---: | ---: |
| Alla bona | 847 (84,7%) | 144 (14,4%) | 9 (0,9%) | 79,159 |
| Seria | 481 (48,1%) | 494 (49,4%) | 25 (2,5%) | 59,952 |
| A fassi male | 359 (35,9%) | 621 (62,1%) | 20 (2,0%) | 55,628 |
Queste percentuali misurano il confronto con quell’automatismo, non con giocatori umani.
## Grafica e audio
Due mazzi, scelti nel dialogo («Con le toscane» / «Con le napoletane»): stesse regole e stessi id, cambiano
nomi e disegni (`DECKS` e `DECK_CARDS` in `briscola.js`; la scelta è il flag `carte_napoletane`).
- **Toscane** (predefinite): semi francesi cuori, mattoni, fiori, picche; figure gobbo, donna e regio (il regio
sempre con la corona). Numerali senza numeri, semi disposti come nel mazzo vero e capovolti nella metà bassa;
figure intere col seme e la lettera (G, D, R) in alto a sinistra. Riferimento: `assets/raw/carte/toscane-riferimento.png`.
- **Napoletane**: monete, coppe, lame ricurve incrociate, bastoni nodosi; fante, cavallo e re. Valore nell’angolo
e seme scritto per non affidarsi solo al colore.
Tutto disegnato via canvas, in pixel art originale.
I bersagli della mano sono 84×120 pixel a 640×360. Dorso con serpentello coronato e cornice
simmetrica; tavolino di legno e panno, mano avversaria coperta, mazzo e mucchietti delle prese.
Sprite generato con lo **strumento immagini integrato**, poi preparato con
`slice_sprites.py --alpha --fixed-grid --cols 2 --rows 2` e `prepare_character.py`.
Pose: `sit`, `talk`, `laugh`, `shuffle`. Foglio originale in
`assets/raw/giocatore-carte-sheet.png`; prompt completo in
`prompts/personaggi/giocatore-carte-sheet.txt` (entrambi esclusi da git).
Effetti Web Audio `card-slide`, `card-tap`, `card-shuffle`, collegati allo stesso volume,
muto e pausa degli altri effetti. Il colpo accompagna l’arrivo della carta dopo lo scorrimento.
13 nuove battute XTTS (4 Andrea, 9 giocatore), con indice e durate aggiornati.
Per generarle senza GPU/rete, `tools/voci_xtts.py` accetta `XTTS_DEVICE=cpu` e
`XTTS_MODEL_DIR` con la cartella del modello già scaricato; le impostazioni predefinite
rimangono quelle del progetto. Non è stata verificata all’ascolto la pronuncia delle nuove voci.
## Verifica e limiti della sessione
**`npm test`: passato.** Regole, determinismo, conservazione delle 40 carte e dei 120 punti,
pescata, ultima briscola, fine mazzo, patta, livelli, accesso negato ai dati nascosti,
minimax confrontato con un oracolo esaustivo, renderer puro, input geometrico,
dialoghi/flag/rivincita e audio. Passano anche i test precedenti e la soluzione completa.
`npm run browser` e `npm run browser:briscola` sono stati lanciati ma **bloccati dall’ambiente**:
`PermissionError: [Errno 1] Operation not permitted` alla creazione del socket del server.
Anche l’avvio isolato di Chromium fallisce con `sandbox_host_linux.cc:41`,
`shutdown: Operation not permitted`. Non è stato possibile verificare l’interfaccia reale
con Playwright né produrre schermate desktop/telefono.
Il test `tests/briscola.browser.mjs` è pronto: partite complete con mouse, touch e tastiera
su desktop e telefono verticale, più touch orizzontale; pausa, muto, gesto annullato,
conteggio, risultato e rivincita. Accelera solo le attese tramite `game.update`, senza
giocare carte di Andrea direttamente nel motore. Salva in `/tmp/regolo-shots/briscola-*.png`.
Le misure Web Audio dei tre nuovi suoni sono comprese nel collaudo browser multimedia.
Anteprime **offline, non schermate browser**, prodotte e ispezionate nella sessione:
- `/tmp/regolo-shots/briscola-offline-carte.png`
- `/tmp/regolo-shots/briscola-offline-tavolo.png`
- `/tmp/regolo-shots/briscola-offline-risultato.png`
## File
Nuovi: `src/engine/briscola.js`, `src/engine/briscola-render.js`,
`assets/characters/giocatore-carte.png`, `assets/characters/giocatore-carte.json`,
`tests/briscola.test.mjs`, `tests/briscola-render.test.mjs`, `tests/briscola.browser.mjs`,
`tools/calibrate_briscola.mjs`, questo documento e 13 MP3 elencati qui sotto.
Modificati: `src/engine/game.js`, `src/engine/render.js`, `src/engine/soundscape.js`,
`src/main.js`, `src/story/story.js`, `index.html`, `style.css`, `package.json`,
`tests/story.test.mjs`, `tests/multimedia.test.mjs`, `tests/multimedia.browser.mjs`,
`tools/voci.json`, `tools/voci_xtts.py`, `assets/voices/index.json`.
Nuovi file in `assets/voices/`:
```text
andrea-6e63dafda1.mp3
andrea-71f3bff8a0.mp3
andrea-b851b9ed26.mp3
andrea-d2f285f610.mp3
giocatore_carte-12f97003ec.mp3
giocatore_carte-13af2e2331.mp3
giocatore_carte-43e76cf11b.mp3
giocatore_carte-6ce98bce81.mp3
giocatore_carte-729b3344da.mp3
giocatore_carte-8dfadb4acc.mp3
giocatore_carte-9c07caaab4.mp3
giocatore_carte-a8846bfa7b.mp3
giocatore_carte-f1f219bd1c.mp3
```
`docs/STATO.md` invariato. Nessun commit, tag o push.

Some files were not shown because too many files have changed in this diff Show More