La catena del ghiacciolo: la Tosca e le bibite, ghiacciolo nella cedrata, stecco e gomma, la chiavetta nella griglia del ponticino, la torcia nella casetta

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017egeN2amL84ErjfgQFtEDn
This commit is contained in:
2026-10-24 00:49:37 +02:00
co-authored by Claude Opus 5.5
parent 64a57d6524
commit 066f9ff9ed
63 changed files with 331 additions and 26 deletions
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="7" y="1" width="1" height="1" fill="#24461c"/><rect x="8" y="1" width="1" height="1" fill="#24461c"/><rect x="6" y="2" width="1" height="1" fill="#24461c"/><rect x="7" y="2" width="1" height="1" fill="#d8d0b0"/><rect x="8" y="2" width="1" height="1" fill="#d8d0b0"/><rect x="9" y="2" width="1" height="1" fill="#24461c"/><rect x="7" y="3" width="1" height="1" fill="#24461c"/><rect x="8" y="3" width="1" height="1" fill="#24461c"/><rect x="7" y="4" width="1" height="1" fill="#9fe36a"/><rect x="8" y="4" width="1" height="1" fill="#24461c"/><rect x="6" y="5" width="1" height="1" fill="#24461c"/><rect x="7" y="5" width="1" height="1" fill="#9fe36a"/><rect x="8" y="5" width="1" height="1" fill="#9fe36a"/><rect x="9" y="5" width="1" height="1" fill="#24461c"/><rect x="5" y="6" width="1" height="1" fill="#24461c"/><rect x="6" y="6" width="1" height="1" fill="#9fe36a"/><rect x="7" y="6" width="1" height="1" fill="#9fe36a"/><rect x="8" y="6" width="1" height="1" fill="#9fe36a"/><rect x="9" y="6" width="1" height="1" fill="#9fe36a"/><rect x="10" y="6" width="1" height="1" fill="#24461c"/><rect x="5" y="7" width="1" height="1" fill="#24461c"/><rect x="6" y="7" width="1" height="1" fill="#e8ffd0"/><rect x="7" y="7" width="1" height="1" fill="#9fe36a"/><rect x="8" y="7" width="1" height="1" fill="#9fe36a"/><rect x="9" y="7" width="1" height="1" fill="#9fe36a"/><rect x="10" y="7" width="1" height="1" fill="#24461c"/><rect x="5" y="8" width="1" height="1" fill="#24461c"/><rect x="6" y="8" width="1" height="1" fill="#e8ffd0"/><rect x="7" y="8" width="1" height="1" fill="#9fe36a"/><rect x="8" y="8" width="1" height="1" fill="#9fe36a"/><rect x="9" y="8" width="1" height="1" fill="#9fe36a"/><rect x="10" y="8" width="1" height="1" fill="#24461c"/><rect x="5" y="9" width="1" height="1" fill="#24461c"/><rect x="6" y="9" width="1" height="1" fill="#9fe36a"/><rect x="7" y="9" width="1" height="1" fill="#9fe36a"/><rect x="8" y="9" width="1" height="1" fill="#9fe36a"/><rect x="9" y="9" width="1" height="1" fill="#9fe36a"/><rect x="10" y="9" width="1" height="1" fill="#24461c"/><rect x="5" y="10" width="1" height="1" fill="#24461c"/><rect x="6" y="10" width="1" height="1" fill="#9fe36a"/><rect x="7" y="10" width="1" height="1" fill="#9fe36a"/><rect x="8" y="10" width="1" height="1" fill="#9fe36a"/><rect x="9" y="10" width="1" height="1" fill="#9fe36a"/><rect x="10" y="10" width="1" height="1" fill="#24461c"/><rect x="5" y="11" width="1" height="1" fill="#24461c"/><rect x="6" y="11" width="1" height="1" fill="#9fe36a"/><rect x="7" y="11" width="1" height="1" fill="#9fe36a"/><rect x="8" y="11" width="1" height="1" fill="#9fe36a"/><rect x="9" y="11" width="1" height="1" fill="#9fe36a"/><rect x="10" y="11" width="1" height="1" fill="#24461c"/><rect x="5" y="12" width="1" height="1" fill="#24461c"/><rect x="6" y="12" width="1" height="1" fill="#9fe36a"/><rect x="7" y="12" width="1" height="1" fill="#9fe36a"/><rect x="8" y="12" width="1" height="1" fill="#9fe36a"/><rect x="9" y="12" width="1" height="1" fill="#9fe36a"/><rect x="10" y="12" width="1" height="1" fill="#24461c"/><rect x="5" y="13" width="1" height="1" fill="#24461c"/><rect x="6" y="13" width="1" height="1" fill="#9fe36a"/><rect x="7" y="13" width="1" height="1" fill="#9fe36a"/><rect x="8" y="13" width="1" height="1" fill="#9fe36a"/><rect x="9" y="13" width="1" height="1" fill="#9fe36a"/><rect x="10" y="13" width="1" height="1" fill="#24461c"/><rect x="6" y="14" width="1" height="1" fill="#24461c"/><rect x="7" y="14" width="1" height="1" fill="#24461c"/><rect x="8" y="14" width="1" height="1" fill="#24461c"/><rect x="9" y="14" width="1" height="1" fill="#24461c"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="2" y="4" width="1" height="1" fill="#3a3a44"/><rect x="3" y="4" width="1" height="1" fill="#3a3a44"/><rect x="4" y="4" width="1" height="1" fill="#3a3a44"/><rect x="1" y="5" width="1" height="1" fill="#3a3a44"/><rect x="2" y="5" width="1" height="1" fill="#b8c0cc"/><rect x="3" y="5" width="1" height="1" fill="#f2f6ff"/><rect x="4" y="5" width="1" height="1" fill="#b8c0cc"/><rect x="5" y="5" width="1" height="1" fill="#3a3a44"/><rect x="1" y="6" width="1" height="1" fill="#3a3a44"/><rect x="2" y="6" width="1" height="1" fill="#b8c0cc"/><rect x="3" y="6" width="1" height="1" fill="#3a3a44"/><rect x="4" y="6" width="1" height="1" fill="#b8c0cc"/><rect x="5" y="6" width="1" height="1" fill="#3a3a44"/><rect x="6" y="6" width="1" height="1" fill="#3a3a44"/><rect x="7" y="6" width="1" height="1" fill="#3a3a44"/><rect x="8" y="6" width="1" height="1" fill="#3a3a44"/><rect x="9" y="6" width="1" height="1" fill="#3a3a44"/><rect x="10" y="6" width="1" height="1" fill="#3a3a44"/><rect x="11" y="6" width="1" height="1" fill="#3a3a44"/><rect x="12" y="6" width="1" height="1" fill="#3a3a44"/><rect x="1" y="7" width="1" height="1" fill="#3a3a44"/><rect x="2" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="3" y="7" width="1" height="1" fill="#f2f6ff"/><rect x="4" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="5" y="7" width="1" height="1" fill="#3a3a44"/><rect x="6" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="7" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="8" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="9" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="10" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="11" y="7" width="1" height="1" fill="#b8c0cc"/><rect x="12" y="7" width="1" height="1" fill="#3a3a44"/><rect x="1" y="8" width="1" height="1" fill="#3a3a44"/><rect x="2" y="8" width="1" height="1" fill="#b8c0cc"/><rect x="3" y="8" width="1" height="1" fill="#b8c0cc"/><rect x="4" y="8" width="1" height="1" fill="#b8c0cc"/><rect x="5" y="8" width="1" height="1" fill="#3a3a44"/><rect x="6" y="8" width="1" height="1" fill="#3a3a44"/><rect x="7" y="8" width="1" height="1" fill="#3a3a44"/><rect x="8" y="8" width="1" height="1" fill="#3a3a44"/><rect x="9" y="8" width="1" height="1" fill="#b8c0cc"/><rect x="10" y="8" width="1" height="1" fill="#b8c0cc"/><rect x="11" y="8" width="1" height="1" fill="#3a3a44"/><rect x="2" y="9" width="1" height="1" fill="#3a3a44"/><rect x="3" y="9" width="1" height="1" fill="#3a3a44"/><rect x="4" y="9" width="1" height="1" fill="#3a3a44"/><rect x="10" y="9" width="1" height="1" fill="#3a3a44"/><rect x="11" y="9" width="1" height="1" fill="#3a3a44"/></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="6" y="1" width="1" height="1" fill="#6b5a12"/><rect x="7" y="1" width="1" height="1" fill="#6b5a12"/><rect x="8" y="1" width="1" height="1" fill="#6b5a12"/><rect x="9" y="1" width="1" height="1" fill="#6b5a12"/><rect x="5" y="2" width="1" height="1" fill="#6b5a12"/><rect x="6" y="2" width="1" height="1" fill="#f2e45a"/><rect x="7" y="2" width="1" height="1" fill="#f2e45a"/><rect x="8" y="2" width="1" height="1" fill="#f2e45a"/><rect x="9" y="2" width="1" height="1" fill="#f2e45a"/><rect x="10" y="2" width="1" height="1" fill="#6b5a12"/><rect x="5" y="3" width="1" height="1" fill="#6b5a12"/><rect x="6" y="3" width="1" height="1" fill="#fffbd0"/><rect x="7" y="3" width="1" height="1" fill="#f2e45a"/><rect x="8" y="3" width="1" height="1" fill="#f2e45a"/><rect x="9" y="3" width="1" height="1" fill="#f2e45a"/><rect x="10" y="3" width="1" height="1" fill="#6b5a12"/><rect x="5" y="4" width="1" height="1" fill="#6b5a12"/><rect x="6" y="4" width="1" height="1" fill="#fffbd0"/><rect x="7" y="4" width="1" height="1" fill="#f2e45a"/><rect x="8" y="4" width="1" height="1" fill="#f2e45a"/><rect x="9" y="4" width="1" height="1" fill="#f2e45a"/><rect x="10" y="4" width="1" height="1" fill="#6b5a12"/><rect x="5" y="5" width="1" height="1" fill="#6b5a12"/><rect x="6" y="5" width="1" height="1" fill="#f2e45a"/><rect x="7" y="5" width="1" height="1" fill="#f2e45a"/><rect x="8" y="5" width="1" height="1" fill="#f2e45a"/><rect x="9" y="5" width="1" height="1" fill="#f2e45a"/><rect x="10" y="5" width="1" height="1" fill="#6b5a12"/><rect x="5" y="6" width="1" height="1" fill="#6b5a12"/><rect x="6" y="6" width="1" height="1" fill="#f2e45a"/><rect x="7" y="6" width="1" height="1" fill="#f2e45a"/><rect x="8" y="6" width="1" height="1" fill="#f2e45a"/><rect x="9" y="6" width="1" height="1" fill="#f2e45a"/><rect x="10" y="6" width="1" height="1" fill="#6b5a12"/><rect x="5" y="7" width="1" height="1" fill="#6b5a12"/><rect x="6" y="7" width="1" height="1" fill="#f2e45a"/><rect x="7" y="7" width="1" height="1" fill="#f2e45a"/><rect x="8" y="7" width="1" height="1" fill="#f2e45a"/><rect x="9" y="7" width="1" height="1" fill="#f2e45a"/><rect x="10" y="7" width="1" height="1" fill="#6b5a12"/><rect x="5" y="8" width="1" height="1" fill="#6b5a12"/><rect x="6" y="8" width="1" height="1" fill="#f2e45a"/><rect x="7" y="8" width="1" height="1" fill="#f2e45a"/><rect x="8" y="8" width="1" height="1" fill="#f2e45a"/><rect x="9" y="8" width="1" height="1" fill="#f2e45a"/><rect x="10" y="8" width="1" height="1" fill="#6b5a12"/><rect x="5" y="9" width="1" height="1" fill="#6b5a12"/><rect x="6" y="9" width="1" height="1" fill="#f2e45a"/><rect x="7" y="9" width="1" height="1" fill="#f2e45a"/><rect x="8" y="9" width="1" height="1" fill="#f2e45a"/><rect x="9" y="9" width="1" height="1" fill="#f2e45a"/><rect x="10" y="9" width="1" height="1" fill="#6b5a12"/><rect x="6" y="10" width="1" height="1" fill="#6b5a12"/><rect x="7" y="10" width="1" height="1" fill="#6b5a12"/><rect x="8" y="10" width="1" height="1" fill="#6b5a12"/><rect x="9" y="10" width="1" height="1" fill="#6b5a12"/><rect x="7" y="11" width="1" height="1" fill="#c89a5a"/><rect x="8" y="11" width="1" height="1" fill="#6b5a12"/><rect x="7" y="12" width="1" height="1" fill="#c89a5a"/><rect x="8" y="12" width="1" height="1" fill="#6b5a12"/><rect x="7" y="13" width="1" height="1" fill="#c89a5a"/><rect x="8" y="13" width="1" height="1" fill="#6b5a12"/><rect x="7" y="14" width="1" height="1" fill="#6b5a12"/><rect x="8" y="14" width="1" height="1" fill="#6b5a12"/></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="3" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="4" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="5" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="6" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="7" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="8" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="9" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="10" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="11" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="12" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="2" y="5" width="1" height="1" fill="#7a1a4a"/><rect x="3" y="5" width="1" height="1" fill="#f27ab0"/><rect x="4" y="5" width="1" height="1" fill="#ffd0e8"/><rect x="5" y="5" width="1" height="1" fill="#ffd0e8"/><rect x="6" y="5" width="1" height="1" fill="#f27ab0"/><rect x="7" y="5" width="1" height="1" fill="#f27ab0"/><rect x="8" y="5" width="1" height="1" fill="#f27ab0"/><rect x="9" y="5" width="1" height="1" fill="#f27ab0"/><rect x="10" y="5" width="1" height="1" fill="#f27ab0"/><rect x="11" y="5" width="1" height="1" fill="#f27ab0"/><rect x="12" y="5" width="1" height="1" fill="#f27ab0"/><rect x="13" y="5" width="1" height="1" fill="#7a1a4a"/><rect x="2" y="6" width="1" height="1" fill="#7a1a4a"/><rect x="3" y="6" width="1" height="1" fill="#f27ab0"/><rect x="4" y="6" width="1" height="1" fill="#f27ab0"/><rect x="5" y="6" width="1" height="1" fill="#f27ab0"/><rect x="6" y="6" width="1" height="1" fill="#f27ab0"/><rect x="7" y="6" width="1" height="1" fill="#f27ab0"/><rect x="8" y="6" width="1" height="1" fill="#f27ab0"/><rect x="9" y="6" width="1" height="1" fill="#f27ab0"/><rect x="10" y="6" width="1" height="1" fill="#f27ab0"/><rect x="11" y="6" width="1" height="1" fill="#f27ab0"/><rect x="12" y="6" width="1" height="1" fill="#7a1a4a"/><rect x="2" y="7" width="1" height="1" fill="#7a1a4a"/><rect x="3" y="7" width="1" height="1" fill="#f27ab0"/><rect x="4" y="7" width="1" height="1" fill="#f27ab0"/><rect x="5" y="7" width="1" height="1" fill="#f27ab0"/><rect x="6" y="7" width="1" height="1" fill="#f27ab0"/><rect x="7" y="7" width="1" height="1" fill="#f27ab0"/><rect x="8" y="7" width="1" height="1" fill="#f27ab0"/><rect x="9" y="7" width="1" height="1" fill="#f27ab0"/><rect x="10" y="7" width="1" height="1" fill="#f27ab0"/><rect x="11" y="7" width="1" height="1" fill="#f27ab0"/><rect x="12" y="7" width="1" height="1" fill="#f27ab0"/><rect x="13" y="7" width="1" height="1" fill="#7a1a4a"/><rect x="2" y="8" width="1" height="1" fill="#7a1a4a"/><rect x="3" y="8" width="1" height="1" fill="#f27ab0"/><rect x="4" y="8" width="1" height="1" fill="#f27ab0"/><rect x="5" y="8" width="1" height="1" fill="#f27ab0"/><rect x="6" y="8" width="1" height="1" fill="#f27ab0"/><rect x="7" y="8" width="1" height="1" fill="#f27ab0"/><rect x="8" y="8" width="1" height="1" fill="#f27ab0"/><rect x="9" y="8" width="1" height="1" fill="#f27ab0"/><rect x="10" y="8" width="1" height="1" fill="#f27ab0"/><rect x="11" y="8" width="1" height="1" fill="#f27ab0"/><rect x="12" y="8" width="1" height="1" fill="#f27ab0"/><rect x="13" y="8" width="1" height="1" fill="#7a1a4a"/><rect x="3" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="4" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="5" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="6" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="7" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="8" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="9" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="10" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="11" y="9" width="1" height="1" fill="#7a1a4a"/><rect x="12" y="9" width="1" height="1" fill="#7a1a4a"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="7" y="2" width="1" height="1" fill="#5a3a1a"/><rect x="8" y="2" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="3" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="3" width="1" height="1" fill="#d8a870"/><rect x="8" y="3" width="1" height="1" fill="#f2d2a0"/><rect x="9" y="3" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="4" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="4" width="1" height="1" fill="#d8a870"/><rect x="8" y="4" width="1" height="1" fill="#f2d2a0"/><rect x="9" y="4" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="5" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="5" width="1" height="1" fill="#d8a870"/><rect x="8" y="5" width="1" height="1" fill="#d8a870"/><rect x="9" y="5" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="6" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="6" width="1" height="1" fill="#d8a870"/><rect x="8" y="6" width="1" height="1" fill="#d8a870"/><rect x="9" y="6" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="7" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="7" width="1" height="1" fill="#d8a870"/><rect x="8" y="7" width="1" height="1" fill="#d8a870"/><rect x="9" y="7" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="8" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="8" width="1" height="1" fill="#d8a870"/><rect x="8" y="8" width="1" height="1" fill="#d8a870"/><rect x="9" y="8" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="9" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="9" width="1" height="1" fill="#d8a870"/><rect x="8" y="9" width="1" height="1" fill="#d8a870"/><rect x="9" y="9" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="10" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="10" width="1" height="1" fill="#d8a870"/><rect x="8" y="10" width="1" height="1" fill="#d8a870"/><rect x="9" y="10" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="11" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="11" width="1" height="1" fill="#d8a870"/><rect x="8" y="11" width="1" height="1" fill="#d8a870"/><rect x="9" y="11" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="12" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="12" width="1" height="1" fill="#d8a870"/><rect x="8" y="12" width="1" height="1" fill="#d8a870"/><rect x="9" y="12" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="13" width="1" height="1" fill="#5a3a1a"/><rect x="8" y="13" width="1" height="1" fill="#5a3a1a"/></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="7" y="1" width="1" height="1" fill="#7a1a4a"/><rect x="8" y="1" width="1" height="1" fill="#7a1a4a"/><rect x="6" y="2" width="1" height="1" fill="#7a1a4a"/><rect x="7" y="2" width="1" height="1" fill="#f27ab0"/><rect x="8" y="2" width="1" height="1" fill="#f27ab0"/><rect x="9" y="2" width="1" height="1" fill="#7a1a4a"/><rect x="6" y="3" width="1" height="1" fill="#7a1a4a"/><rect x="7" y="3" width="1" height="1" fill="#f27ab0"/><rect x="8" y="3" width="1" height="1" fill="#f27ab0"/><rect x="9" y="3" width="1" height="1" fill="#7a1a4a"/><rect x="7" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="8" y="4" width="1" height="1" fill="#7a1a4a"/><rect x="6" y="5" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="5" width="1" height="1" fill="#d8a870"/><rect x="8" y="5" width="1" height="1" fill="#d8a870"/><rect x="9" y="5" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="6" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="6" width="1" height="1" fill="#d8a870"/><rect x="8" y="6" width="1" height="1" fill="#d8a870"/><rect x="9" y="6" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="7" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="7" width="1" height="1" fill="#d8a870"/><rect x="8" y="7" width="1" height="1" fill="#d8a870"/><rect x="9" y="7" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="8" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="8" width="1" height="1" fill="#d8a870"/><rect x="8" y="8" width="1" height="1" fill="#d8a870"/><rect x="9" y="8" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="9" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="9" width="1" height="1" fill="#d8a870"/><rect x="8" y="9" width="1" height="1" fill="#d8a870"/><rect x="9" y="9" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="10" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="10" width="1" height="1" fill="#d8a870"/><rect x="8" y="10" width="1" height="1" fill="#d8a870"/><rect x="9" y="10" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="11" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="11" width="1" height="1" fill="#d8a870"/><rect x="8" y="11" width="1" height="1" fill="#d8a870"/><rect x="9" y="11" width="1" height="1" fill="#5a3a1a"/><rect x="6" y="12" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="12" width="1" height="1" fill="#d8a870"/><rect x="8" y="12" width="1" height="1" fill="#d8a870"/><rect x="9" y="12" width="1" height="1" fill="#5a3a1a"/><rect x="7" y="13" width="1" height="1" fill="#5a3a1a"/><rect x="8" y="13" width="1" height="1" fill="#5a3a1a"/></svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" shape-rendering="crispEdges"><rect x="1" y="3" width="1" height="1" fill="#fff2a0"/><rect x="2" y="4" width="1" height="1" fill="#fff2a0"/><rect x="4" y="4" width="1" height="1" fill="#202024"/><rect x="5" y="4" width="1" height="1" fill="#202024"/><rect x="6" y="4" width="1" height="1" fill="#202024"/><rect x="1" y="5" width="1" height="1" fill="#fff2a0"/><rect x="2" y="5" width="1" height="1" fill="#fff2a0"/><rect x="3" y="5" width="1" height="1" fill="#202024"/><rect x="4" y="5" width="1" height="1" fill="#a8a8b0"/><rect x="5" y="5" width="1" height="1" fill="#a8a8b0"/><rect x="6" y="5" width="1" height="1" fill="#202024"/><rect x="7" y="5" width="1" height="1" fill="#202024"/><rect x="8" y="5" width="1" height="1" fill="#202024"/><rect x="9" y="5" width="1" height="1" fill="#202024"/><rect x="10" y="5" width="1" height="1" fill="#202024"/><rect x="11" y="5" width="1" height="1" fill="#202024"/><rect x="12" y="5" width="1" height="1" fill="#202024"/><rect x="13" y="5" width="1" height="1" fill="#202024"/><rect x="0" y="6" width="1" height="1" fill="#fff2a0"/><rect x="1" y="6" width="1" height="1" fill="#fff2a0"/><rect x="2" y="6" width="1" height="1" fill="#fff2a0"/><rect x="3" y="6" width="1" height="1" fill="#202024"/><rect x="4" y="6" width="1" height="1" fill="#a8a8b0"/><rect x="5" y="6" width="1" height="1" fill="#fff2a0"/><rect x="6" y="6" width="1" height="1" fill="#c8382a"/><rect x="7" y="6" width="1" height="1" fill="#c8382a"/><rect x="8" y="6" width="1" height="1" fill="#c8382a"/><rect x="9" y="6" width="1" height="1" fill="#c8382a"/><rect x="10" y="6" width="1" height="1" fill="#c8382a"/><rect x="11" y="6" width="1" height="1" fill="#c8382a"/><rect x="12" y="6" width="1" height="1" fill="#c8382a"/><rect x="13" y="6" width="1" height="1" fill="#8a2018"/><rect x="14" y="6" width="1" height="1" fill="#202024"/><rect x="1" y="7" width="1" height="1" fill="#fff2a0"/><rect x="2" y="7" width="1" height="1" fill="#fff2a0"/><rect x="3" y="7" width="1" height="1" fill="#202024"/><rect x="4" y="7" width="1" height="1" fill="#a8a8b0"/><rect x="5" y="7" width="1" height="1" fill="#a8a8b0"/><rect x="6" y="7" width="1" height="1" fill="#202024"/><rect x="7" y="7" width="1" height="1" fill="#202024"/><rect x="8" y="7" width="1" height="1" fill="#202024"/><rect x="9" y="7" width="1" height="1" fill="#202024"/><rect x="10" y="7" width="1" height="1" fill="#202024"/><rect x="11" y="7" width="1" height="1" fill="#202024"/><rect x="12" y="7" width="1" height="1" fill="#202024"/><rect x="13" y="7" width="1" height="1" fill="#202024"/><rect x="2" y="8" width="1" height="1" fill="#fff2a0"/><rect x="4" y="8" width="1" height="1" fill="#202024"/><rect x="5" y="8" width="1" height="1" fill="#202024"/><rect x="6" y="8" width="1" height="1" fill="#202024"/><rect x="1" y="9" width="1" height="1" fill="#fff2a0"/></svg>

After

Width:  |  Height:  |  Size: 2.9 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.
+176 -20
View File
@@ -271,6 +271,14 @@
"file": "andrea-f798fa755d.mp3", "file": "andrea-f798fa755d.mp3",
"sec": 4.9 "sec": 4.9
}, },
"andrea|Una gomma da masticare ancora incartata, persa davanti al palco. Qualcuno ha perso l'appetito.": {
"file": "andrea-f2ea95922d.mp3",
"sec": 7.49
},
"andrea|Una gomma alla fragola. Me la tengo.": {
"file": "andrea-7009fd9d71.mp3",
"sec": 2.91
},
"andrea|Un libro dimenticato sulle tavolate. Sulla copertina c'è scritto «La storia infinita».": { "andrea|Un libro dimenticato sulle tavolate. Sulla copertina c'è scritto «La storia infinita».": {
"file": "andrea-42e270af3d.mp3", "file": "andrea-42e270af3d.mp3",
"sec": 6.21 "sec": 6.21
@@ -403,13 +411,29 @@
"file": "andrea-33e0dd705a.mp3", "file": "andrea-33e0dd705a.mp3",
"sec": 4.75 "sec": 4.75
}, },
"andrea|Una casetta chiusa. Ci tengono le prolunghe della festa e, dicono, un mistero.": { "andrea|La casetta, aperta. Dentro solo prolunghe. Il mistero era la torcia.": {
"file": "andrea-e9913ba3dd.mp3", "file": "andrea-0c6e40cc5e.mp3",
"sec": 5.85 "sec": 7.63
}, },
"andrea|Chiusa. Il mistero resta.": { "andrea|Una casetta chiusa con un lucchetto piccolo. Ci tengono le prolunghe della festa e, dicono, un mistero.": {
"file": "andrea-59775ccaab.mp3", "file": "andrea-050ef60153.mp3",
"sec": 2.56 "sec": 8.32
},
"andrea|È già aperta.": {
"file": "andrea-958e8cfd07.mp3",
"sec": 0.95
},
"andrea|La chiavetta entra nel lucchetto... clic!": {
"file": "andrea-35b92c1da8.mp3",
"sec": 3.91
},
"andrea|Prolunghe, prolunghe, prolunghe... e una torcia.": {
"file": "andrea-8abb6148b1.mp3",
"sec": 5.98
},
"andrea|Chiusa col lucchetto. Il mistero resta.": {
"file": "andrea-a8dfddbe65.mp3",
"sec": 3.45
}, },
"andrea|Il tabernacolo prima del ponte. Chi passa per andare via dal paese, un saluto glielo fa sempre.": { "andrea|Il tabernacolo prima del ponte. Chi passa per andare via dal paese, un saluto glielo fa sempre.": {
"file": "andrea-78a5ef65f0.mp3", "file": "andrea-78a5ef65f0.mp3",
@@ -519,21 +543,13 @@
"file": "andrea-684bb66307.mp3", "file": "andrea-684bb66307.mp3",
"sec": 2.4 "sec": 2.4
}, },
"andrea|Un ghiacciolo al limone, per favore. Da inzuppare nella cedrata.": { "tosca|Eccomi, Andrea! Cosa ti do? Fanta, Coca, cedrata, spuma bionda... o un ghiacciolo?": {
"file": "andrea-bd342ed1a9.mp3", "file": "tosca-75db2f3b4e.mp3",
"sec": 4.18 "sec": 8.26
}, },
"andrea|Lo so, è una cosa esagerata. Ma è la merenda dei campioni.": { "andrea|Il chiosco si apre da dentro. Basta chiamare la Tosca.": {
"file": "andrea-dc8fdb81a3.mp3", "file": "andrea-acc1a379b7.mp3",
"sec": 4.62 "sec": 3.89
},
"andrea|Niente, è chiuso. Torno quando ho ritrovato il palio, e ne prendo due.": {
"file": "andrea-52128d0321.mp3",
"sec": 6.08
},
"andrea|Chiuso. Il ghiacciolo dovrà aspettare.": {
"file": "andrea-bd31b556ae.mp3",
"sec": 3.07
}, },
"andrea|L'omino di ferro con la racchetta, una scultura di Simone Rocchi. Almeno lui a tennis ci gioca.": { "andrea|L'omino di ferro con la racchetta, una scultura di Simone Rocchi. Almeno lui a tennis ci gioca.": {
"file": "andrea-958e834bc0.mp3", "file": "andrea-958e834bc0.mp3",
@@ -643,6 +659,42 @@
"file": "andrea-5594f1f70c.mp3", "file": "andrea-5594f1f70c.mp3",
"sec": 5.02 "sec": 5.02
}, },
"andrea|La griglia. Ormai dentro ci sono solo foglie.": {
"file": "andrea-0a30866235.mp3",
"sec": 3.6
},
"andrea|Dentro la griglia luccica qualcosa: una chiavetta! È caduta fra le sbarre.": {
"file": "andrea-c6acc0d948.mp3",
"sec": 5.83
},
"andrea|Non c'è più niente da prendere.": {
"file": "andrea-57c48fa00f.mp3",
"sec": 1.57
},
"andrea|Le dita non passano fra le sbarre. Ci vorrebbe qualcosa di lungo e sottile... e appiccicoso.": {
"file": "andrea-723609c210.mp3",
"sec": 7.23
},
"andrea|La chiavetta l'ho già ripescata.": {
"file": "andrea-acc9f8180b.mp3",
"sec": 1.6
},
"andrea|Giù lo stecco, piano piano... la gomma tocca la chiavetta...": {
"file": "andrea-29863877af.mp3",
"sec": 4.54
},
"andrea|Presa!": {
"file": "andrea-872d650e46.mp3",
"sec": 0.69
},
"andrea|Lo stecco ci arriva, ma la chiavetta non si attacca. Serve qualcosa di appiccicoso in cima.": {
"file": "andrea-af37e73b26.mp3",
"sec": 5.94
},
"andrea|La gomma da sola non ci arriva. Serve qualcosa per spingerla giù.": {
"file": "andrea-e549a3c205.mp3",
"sec": 4.69
},
"andrea|La piccola edicola in fondo al ponticino. C'è sempre un fiore fresco, ma nessuno l'ha mai visto metterlo.": { "andrea|La piccola edicola in fondo al ponticino. C'è sempre un fiore fresco, ma nessuno l'ha mai visto metterlo.": {
"file": "andrea-59afc50d80.mp3", "file": "andrea-59afc50d80.mp3",
"sec": 7.04 "sec": 7.04
@@ -787,10 +839,114 @@
"file": "andrea-3a6af3897f.mp3", "file": "andrea-3a6af3897f.mp3",
"sec": 6.52 "sec": 6.52
}, },
"andrea|Un ghiacciolo al limone. Si scioglie a guardarlo.": {
"file": "andrea-8c9713081a.mp3",
"sec": 3.44
},
"andrea|Da solo? No: il ghiacciolo al limone va inzuppato nella cedrata. È la regola.": {
"file": "andrea-7fadbeebca.mp3",
"sec": 8.34
},
"andrea|Ghiacciolo dentro la cedrata... si scioglie, frizza, è verde e giallo insieme.": {
"file": "andrea-629bfcac17.mp3",
"sec": 6.24
},
"andrea|Esagerato. Buonissimo. La merenda dei campioni.": {
"file": "andrea-4a2ae1d92d.mp3",
"sec": 4.57
},
"andrea|Mi resta lo stecco. Non si sa mai.": {
"file": "andrea-8be920ef35.mp3",
"sec": 2.96
},
"andrea|Una bottiglietta di cedrata, gelata.": {
"file": "andrea-31dfba3283.mp3",
"sec": 2.72
},
"andrea|Bevuta liscia è sprecata. Ci vuole qualcosa da inzupparci dentro.": {
"file": "andrea-69907b4352.mp3",
"sec": 5.27
},
"andrea|Lo stecco del ghiacciolo. Appiccica ancora un po' di limone.": {
"file": "andrea-942c0fe126.mp3",
"sec": 4.23
},
"andrea|Da solo non arriva a niente. Ci vorrebbe qualcosa che attacca.": {
"file": "andrea-5526428f0b.mp3",
"sec": 4.68
},
"andrea|Mastico la gomma e la attacco in cima allo stecco.": {
"file": "andrea-949c556ec2.mp3",
"sec": 2.5
},
"andrea|Ecco una canna da pesca per chiavi. Brevetto San Piero.": {
"file": "andrea-afa7f1eea2.mp3",
"sec": 4.12
},
"andrea|Una gomma da masticare alla fragola, ancora incartata.": {
"file": "andrea-185d607a84.mp3",
"sec": 3.44
},
"andrea|Masticarla così, per niente? Meglio tenerla per quando serve qualcosa che appiccica.": {
"file": "andrea-bda78d511c.mp3",
"sec": 6.5
},
"andrea|Lo stecco con la gomma in cima. Attacca qualunque cosa. Anche le dita.": {
"file": "andrea-79917d60dd.mp3",
"sec": 6
},
"andrea|Una chiavetta piccola, ripescata dalla griglia. Di un lucchetto, o di una casetta.": {
"file": "andrea-276c2298aa.mp3",
"sec": 5.47
},
"andrea|Una torcia rossa, funziona. Per il buio della Fortezza, prima o poi, servirà.": {
"file": "andrea-81ed927023.mp3",
"sec": 6.47
},
"andrea|Clic. Accesa. Clic. Spenta. Le pile le tengo per quando serve davvero.": {
"file": "andrea-a93d3ba5ad.mp3",
"sec": 8.8
},
"andrea|Una chiave grossa e antica. Quella dell'oratorio, parola di San Pietro.": { "andrea|Una chiave grossa e antica. Quella dell'oratorio, parola di San Pietro.": {
"file": "andrea-60cdae2e35.mp3", "file": "andrea-60cdae2e35.mp3",
"sec": 5.1 "sec": 5.1
}, },
"tosca|Eccola, ghiacciata.": {
"file": "tosca-133c83efc3.mp3",
"sec": 1.79
},
"andrea|Glu glu... arancione fino alle orecchie. Grazie, Tosca!": {
"file": "andrea-ae47136080.mp3",
"sec": 6.05
},
"tosca|Tieni.": {
"file": "tosca-db5640a086.mp3",
"sec": 0.46
},
"andrea|Fa le bollicine nel naso. Come sempre. Grazie!": {
"file": "andrea-d13933a255.mp3",
"sec": 4.57
},
"tosca|La spuma bionda! Ormai la chiedono solo i nonni.": {
"file": "tosca-b4008e55ce.mp3",
"sec": 3.8
},
"andrea|E io. Buona come ai tempi della festa.": {
"file": "andrea-0d9794e650.mp3",
"sec": 3.05
},
"tosca|Cedrata. Bella fresca.": {
"file": "tosca-d6b114d197.mp3",
"sec": 2.24
},
"tosca|Al limone, l'ultimo della cassetta.": {
"file": "tosca-376fbb9f17.mp3",
"sec": 2.41
},
"tosca|Quando ti viene sete, sai dove trovarmi.": {
"file": "tosca-db2da31cef.mp3",
"sec": 2.31
},
"san_pietro|Cinque? Ne hai contati la metà. Vai a guardarli bene, lassù.": { "san_pietro|Cinque? Ne hai contati la metà. Vai a guardarli bene, lassù.": {
"file": "san_pietro-4f6f201875.mp3", "file": "san_pietro-4f6f201875.mp3",
"sec": 6.53 "sec": 6.53
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.
+3 -1
View File
@@ -1,5 +1,6 @@
// Disegno della scena su un canvas 640×360, ingrandito dal CSS senza sfocatura. // Disegno della scena su un canvas 640×360, ingrandito dal CSS senza sfocatura.
// Le forme provvisorie (`art`) verranno sostituite da sfondi e sprite in pixel art. // Le forme provvisorie (`art`) verranno sostituite da sfondi e sprite in pixel art.
import { check } from './game.js';
export const WIDTH = 640, HEIGHT = 360; export const WIDTH = 640, HEIGHT = 360;
function drawShape(ctx, s) { function drawShape(ctx, s) {
@@ -108,7 +109,8 @@ export function render(ctx, game, { hover, spots } = {}) {
ctx.clearRect(0, 0, WIDTH, HEIGHT); ctx.clearRect(0, 0, WIDTH, HEIGHT);
if (bg) ctx.drawImage(bg, 0, 0, WIDTH, HEIGHT); if (bg) ctx.drawImage(bg, 0, 0, WIDTH, HEIGHT);
for (const shape of scene.art ?? []) drawShape(ctx, shape); for (const shape of scene.art ?? []) drawShape(ctx, shape);
for (const h of game.hotspots()) for (const shape of h.art ?? []) drawShape(ctx, shape); // Una forma può avere la sua condizione (`when`): la chiavetta nella griglia sparisce quando la si prende.
for (const h of game.hotspots()) for (const shape of h.art ?? []) if (check(shape.when, game.state)) drawShape(ctx, shape);
// Andrea e i personaggi della scena, dal più lontano al più vicino. // Andrea e i personaggi della scena, dal più lontano al più vicino.
const andrea = sprites.get('andrea'); const andrea = sprites.get('andrea');
const drawAndreaNow = () => andrea ? drawSprite(ctx, andrea, game.pose(), s.x, s.y, game.scaleAt(s.y), s.facing) const drawAndreaNow = () => andrea ? drawSprite(ctx, andrea, game.pose(), s.x, s.y, game.scaleAt(s.y), s.facing)
+113 -4
View File
@@ -38,6 +38,7 @@ export const story = {
castello: { name: 'Il Castello', color: '#c8f0a0' }, castello: { name: 'Il Castello', color: '#c8f0a0' },
leone: { name: 'Il leone', color: '#f0a070' }, leone: { name: 'Il leone', color: '#f0a070' },
san_pietro: { name: 'San Pietro', color: '#e8e0c8' }, san_pietro: { name: 'San Pietro', color: '#e8e0c8' },
tosca: { name: 'La Tosca', color: '#ffb0d0' },
}, },
items: { items: {
squama: { squama: {
@@ -64,6 +65,74 @@ export const story = {
use: [{ say: 'Leggere adesso? Prima il palio. E poi, a quanto pare, si fa presto.' }], use: [{ say: 'Leggere adesso? Prima il palio. E poi, a quanto pare, si fa presto.' }],
}, },
}, },
// La catena del ghiacciolo (idea di Andrea, 2026-10-24): la Tosca dà ghiacciolo e cedrata; il ghiacciolo inzuppato
// nella cedrata lascia lo stecco; stecco più gomma (dall'oratorio) ripesca la chiavetta dalla griglia del
// ponticino; la chiavetta apre la casetta dell'area feste, dove c'è la torcia.
ghiacciolo: {
name: 'ghiacciolo',
icon: { src: 'assets/icons/ghiacciolo.svg' },
actions: {
look: [{ say: 'Un ghiacciolo al limone. Si scioglie a guardarlo.' }],
use: [{ say: 'Da solo? No: il ghiacciolo al limone va inzuppato nella cedrata. È la regola.' }],
},
with: {
cedrata: [
{ drop: 'ghiacciolo' }, { drop: 'cedrata' },
{ say: 'Ghiacciolo dentro la cedrata... si scioglie, frizza, è verde e giallo insieme.' },
{ say: 'Esagerato. Buonissimo. La merenda dei campioni.' },
{ give: 'stecco' }, { set: 'stecco_fatto' }, { say: 'Mi resta lo stecco. Non si sa mai.' },
],
},
},
cedrata: {
name: 'cedrata',
icon: { src: 'assets/icons/cedrata.svg' },
actions: {
look: [{ say: 'Una bottiglietta di cedrata, gelata.' }],
use: [{ say: 'Bevuta liscia è sprecata. Ci vuole qualcosa da inzupparci dentro.' }],
},
},
stecco: {
name: 'stecco',
icon: { src: 'assets/icons/stecco.svg' },
actions: {
look: [{ say: 'Lo stecco del ghiacciolo. Appiccica ancora un po\' di limone.' }],
use: [{ say: 'Da solo non arriva a niente. Ci vorrebbe qualcosa che attacca.' }],
},
with: {
gomma: [{ drop: 'stecco' }, { drop: 'gomma' }, { say: 'Mastico la gomma e la attacco in cima allo stecco.' }, { say: 'Ecco una canna da pesca per chiavi. Brevetto San Piero.' }, { give: 'stecco_gomma' }],
},
},
gomma: {
name: 'gomma',
icon: { src: 'assets/icons/gomma.svg' },
actions: {
look: [{ say: 'Una gomma da masticare alla fragola, ancora incartata.' }],
use: [{ say: 'Masticarla così, per niente? Meglio tenerla per quando serve qualcosa che appiccica.' }],
},
},
stecco_gomma: {
name: 'stecco e gomma',
icon: { src: 'assets/icons/stecco_gomma.svg' },
actions: {
look: [{ say: 'Lo stecco con la gomma in cima. Attacca qualunque cosa. Anche le dita.' }],
},
},
chiavetta: {
name: 'chiavetta',
icon: { src: 'assets/icons/chiavetta.svg' },
actions: {
look: [{ say: 'Una chiavetta piccola, ripescata dalla griglia. Di un lucchetto, o di una casetta.' }],
},
},
torcia: {
name: 'torcia',
icon: { src: 'assets/icons/torcia.svg' },
actions: {
look: [{ say: 'Una torcia rossa, funziona. Per il buio della Fortezza, prima o poi, servirà.' }],
use: [{ say: 'Clic. Accesa. Clic. Spenta. Le pile le tengo per quando serve davvero.' }],
},
},
// La chiave dell'oratorio: la dà San Pietro a chi risolve il suo indovinello. Indispensabile: non si butta. // La chiave dell'oratorio: la dà San Pietro a chi risolve il suo indovinello. Indispensabile: non si butta.
chiave_oratorio: { chiave_oratorio: {
name: 'chiave dell\'oratorio', name: 'chiave dell\'oratorio',
@@ -360,6 +429,14 @@ export const story = {
use: [{ say: 'Mi siedo e aspetto che arrivi la pastasciutta? Ci vorrebbe una settimana.' }], use: [{ say: 'Mi siedo e aspetto che arrivi la pastasciutta? Ci vorrebbe una settimana.' }],
}, },
}, },
{
id: 'gomma_terra', name: 'gomma da masticare', box: [134, 230, 16, 10], at: [140, 244], face: 'up', when: ['!has:gomma', '!gomma_presa'],
art: [{ rect: [137, 233, 10, 4], fill: '#f27ab0' }, { rect: [138, 233, 3, 1], fill: '#ffd0e8' }],
actions: {
look: [{ say: 'Una gomma da masticare ancora incartata, persa davanti al palco. Qualcuno ha perso l\'appetito.' }],
take: [{ give: 'gomma' }, { set: 'gomma_presa' }, { say: 'Una gomma alla fragola. Me la tengo.' }],
},
},
{ {
// Dopo le tavolate: dove si sovrappongono, vince l'ultimo della lista. // Dopo le tavolate: dove si sovrappongono, vince l'ultimo della lista.
id: 'libro_dimenticato', name: 'libro dimenticato', box: [562, 198, 18, 12], at: [560, 268], face: 'up', when: ['!has:libro', '!libro_preso'], id: 'libro_dimenticato', name: 'libro dimenticato', box: [562, 198, 18, 12], at: [560, 268], face: 'up', when: ['!has:libro', '!libro_preso'],
@@ -632,8 +709,11 @@ export const story = {
{ {
id: 'casetta', name: 'casetta', box: [170, 146, 26, 22], at: [250, 200], face: 'up', id: 'casetta', name: 'casetta', box: [170, 146, 26, 22], at: [250, 200], face: 'up',
actions: { actions: {
look: [{ say: 'Una casetta chiusa. Ci tengono le prolunghe della festa e, dicono, un mistero.' }], look: [{ if: 'casetta_aperta', then: [{ say: 'La casetta, aperta. Dentro solo prolunghe. Il mistero era la torcia.' }], else: [{ say: 'Una casetta chiusa con un lucchetto piccolo. Ci tengono le prolunghe della festa e, dicono, un mistero.' }] }],
open: [{ say: 'Chiusa. Il mistero resta.' }], open: [{ if: 'casetta_aperta', then: [{ say: 'È già aperta.' }], else: [{ if: 'has:chiavetta', then: [{ drop: 'chiavetta' }, { set: 'casetta_aperta' }, { say: 'La chiavetta entra nel lucchetto... clic!' }, { say: 'Prolunghe, prolunghe, prolunghe... e una torcia.' }, { give: 'torcia' }], else: [{ say: 'Chiusa col lucchetto. Il mistero resta.' }] }] }],
},
with: {
chiavetta: [{ if: 'casetta_aperta', then: [{ say: 'È già aperta.' }], else: [{ drop: 'chiavetta' }, { set: 'casetta_aperta' }, { say: 'La chiavetta entra nel lucchetto... clic!' }, { say: 'Prolunghe, prolunghe, prolunghe... e una torcia.' }, { give: 'torcia' }] }],
}, },
}, },
{ {
@@ -839,6 +919,7 @@ export const story = {
name: 'Il tennis della chiesa', name: 'Il tennis della chiesa',
map: [66, 51], map: [66, 51],
background: 'assets/scenes/tennis-chiesa.png', background: 'assets/scenes/tennis-chiesa.png',
speakers: { tosca: [292, 196] },
walk: [[0, 360], [0, 300], [200, 290], [420, 268], [640, 258], [640, 360]], walk: [[0, 360], [0, 300], [200, 290], [420, 268], [640, 258], [640, 360]],
depth: [[258, 0.7], [360, 1.15]], depth: [[258, 0.7], [360, 1.15]],
entry: [320, 350], entry: [320, 350],
@@ -860,8 +941,8 @@ export const story = {
id: 'chiosco', name: 'chiosco', box: [240, 196, 106, 72], at: [300, 296], face: 'up', default: 'talk', id: 'chiosco', name: 'chiosco', box: [240, 196, 106, 72], at: [300, 296], face: 'up', default: 'talk',
actions: { actions: {
look: [{ say: 'Il chiosco del tennis. D\'estate qui c\'è la Tosca coi ghiaccioli.' }], look: [{ say: 'Il chiosco del tennis. D\'estate qui c\'è la Tosca coi ghiaccioli.' }],
talk: [{ say: 'Tosca! C\'è la Tosca?' }, { say: 'Un ghiacciolo al limone, per favore. Da inzuppare nella cedrata.' }, { say: 'Lo so, è una cosa esagerata. Ma è la merenda dei campioni.' }, { say: '...' }, { say: 'Niente, è chiuso. Torno quando ho ritrovato il palio, e ne prendo due.' }], talk: [{ say: 'Tosca! C\'è la Tosca?' }, { say: 'Eccomi, Andrea! Cosa ti do? Fanta, Coca, cedrata, spuma bionda... o un ghiacciolo?', who: 'tosca' }, { dialogue: 'tosca' }],
open: [{ say: 'Chiuso. Il ghiacciolo dovrà aspettare.' }], open: [{ say: 'Il chiosco si apre da dentro. Basta chiamare la Tosca.' }],
}, },
}, },
{ {
@@ -1055,6 +1136,19 @@ export const story = {
use: [{ say: 'Fare i ponti di sassi? Prima il palio. Poi le dighe.' }], use: [{ say: 'Fare i ponti di sassi? Prima il palio. Poi le dighe.' }],
}, },
}, },
{
id: 'griglia', name: 'griglia', box: [346, 246, 40, 24], at: [366, 270], face: 'up',
art: [{ rect: [364, 257, 5, 2], fill: '#f2f6ff', when: '!chiavetta_presa' }, { rect: [365, 256, 2, 1], fill: '#ffffff', when: '!chiavetta_presa' }],
actions: {
look: [{ if: 'chiavetta_presa', then: [{ say: 'La griglia. Ormai dentro ci sono solo foglie.' }], else: [{ say: 'Dentro la griglia luccica qualcosa: una chiavetta! È caduta fra le sbarre.' }] }],
take: [{ if: 'chiavetta_presa', then: [{ say: 'Non c\'è più niente da prendere.' }], else: [{ say: 'Le dita non passano fra le sbarre. Ci vorrebbe qualcosa di lungo e sottile... e appiccicoso.' }] }],
},
with: {
stecco_gomma: [{ if: 'chiavetta_presa', then: [{ say: 'La chiavetta l\'ho già ripescata.' }], else: [{ say: 'Giù lo stecco, piano piano... la gomma tocca la chiavetta...' }, { say: 'Presa!' }, { give: 'chiavetta' }, { set: 'chiavetta_presa' }] }],
stecco: [{ say: 'Lo stecco ci arriva, ma la chiavetta non si attacca. Serve qualcosa di appiccicoso in cima.' }],
gomma: [{ say: 'La gomma da sola non ci arriva. Serve qualcosa per spingerla giù.' }],
},
},
{ {
id: 'edicola', name: 'edicola della Madonna', box: [442, 148, 36, 44], at: [458, 204], face: 'up', id: 'edicola', name: 'edicola della Madonna', box: [442, 148, 36, 44], at: [458, 204], face: 'up',
actions: { actions: {
@@ -1270,6 +1364,21 @@ export const story = {
}, },
}, },
dialogues: { dialogues: {
// Il chiosco della Tosca: le bibite si bevono subito; ghiacciolo e cedrata si portano via (una volta per tipo).
tosca: {
nodes: {
start: {
options: [
{ text: 'Una Fanta.', then: [{ say: 'Eccola, ghiacciata.', who: 'tosca' }, { say: 'Glu glu... arancione fino alle orecchie. Grazie, Tosca!' }] },
{ text: 'Una Coca.', then: [{ say: 'Tieni.', who: 'tosca' }, { say: 'Fa le bollicine nel naso. Come sempre. Grazie!' }] },
{ text: 'Una spuma bionda.', then: [{ say: 'La spuma bionda! Ormai la chiedono solo i nonni.', who: 'tosca' }, { say: 'E io. Buona come ai tempi della festa.' }] },
{ text: 'Una cedrata, da portare via.', when: ['!has:cedrata', '!stecco_fatto'], then: [{ say: 'Cedrata. Bella fresca.', who: 'tosca' }, { give: 'cedrata' }] },
{ text: 'Un ghiacciolo al limone.', when: ['!has:ghiacciolo', '!stecco_fatto'], then: [{ say: 'Al limone, l\'ultimo della cassetta.', who: 'tosca' }, { give: 'ghiacciolo' }] },
{ text: 'Niente, grazie Tosca.', next: 'end', then: [{ say: 'Quando ti viene sete, sai dove trovarmi.', who: 'tosca' }] },
],
},
},
},
// L'indovinello di San Pietro. La risposta si trova nel gioco: il bastione della Fortezza la dice. // L'indovinello di San Pietro. La risposta si trova nel gioco: il bastione della Fortezza la dice.
indovinello: { indovinello: {
nodes: { nodes: {
+30
View File
@@ -231,3 +231,33 @@ test('le strade vanno e tornano: niente sensi unici, e ogni posto si raggiunge d
while (queue.length) for (const b of exits[queue.shift()] ?? []) if (!seen.has(b)) { seen.add(b); queue.push(b); } while (queue.length) for (const b of exits[queue.shift()] ?? []) if (!seen.has(b)) { seen.add(b); queue.push(b); }
for (const id of Object.keys(story.scenes)) assert.ok(seen.has(id), `${id} non si raggiunge`); for (const id of Object.keys(story.scenes)) assert.ok(seen.has(id), `${id} non si raggiunge`);
}); });
test('la catena del ghiacciolo: Tosca, cedrata, stecco, gomma, griglia, chiavetta, casetta, torcia', () => {
const g = new Game(story);
const say = () => settle(g);
const answer = text => { const i = g.options().findIndex(o => o.text === text); assert.ok(i >= 0, `manca «${text}»`); g.choose(i); say(); };
g.go('tennis_chiesa'); say();
g.act('talk', 'chiosco'); say();
answer('Un ghiacciolo al limone.');
answer('Una cedrata, da portare via.');
answer('Niente, grazie Tosca.');
assert.deepEqual(g.state.inventory, ['ghiacciolo', 'cedrata']);
g.act('use', 'cedrata', 'ghiacciolo'); say();
assert.deepEqual(g.state.inventory, ['stecco'], 'inzuppato e mangiato: resta lo stecco');
g.act('talk', 'chiosco'); say();
assert.ok(!g.options().some(o => o.text.startsWith('Un ghiacciolo')), 'il ghiacciolo era l\'ultimo');
answer('Niente, grazie Tosca.');
g.go('ponticino'); say();
g.act('use', 'griglia', 'stecco'); say();
assert.ok(!g.state.inventory.includes('chiavetta'), 'senza gomma non si attacca');
g.go('oratorio'); say();
g.act('take', 'gomma_terra'); say();
g.act('use', 'gomma', 'stecco'); say();
assert.deepEqual(g.state.inventory, ['stecco_gomma']);
g.go('ponticino'); say();
g.act('use', 'griglia', 'stecco_gomma'); say();
assert.ok(g.state.inventory.includes('chiavetta'));
g.go('area_feste'); say();
g.act('open', 'casetta'); say();
assert.ok(g.state.flags.casetta_aperta && g.state.inventory.includes('torcia') && !g.state.inventory.includes('chiavetta'));
});
+2 -1
View File
@@ -5,5 +5,6 @@
"vecchietto": { "speaker": "Viktor Eka" }, "vecchietto": { "speaker": "Viktor Eka" },
"castello": { "speaker": "Damien Black", "filtro": "asetrate=24000*0.9,aresample=24000,atempo=0.95,aecho=0.8:0.7:90|180:0.25|0.15" }, "castello": { "speaker": "Damien Black", "filtro": "asetrate=24000*0.9,aresample=24000,atempo=0.95,aecho=0.8:0.7:90|180:0.25|0.15" },
"leone": { "speaker": "Baldur Sanjin", "filtro": "asetrate=24000*0.84,aresample=24000,atempo=1.08" }, "leone": { "speaker": "Baldur Sanjin", "filtro": "asetrate=24000*0.84,aresample=24000,atempo=1.08" },
"san_pietro": { "speaker": "Wulf Carlevaro", "filtro": "asetrate=24000*0.92,aresample=24000,atempo=0.95,aecho=0.8:0.6:60:0.2" } "san_pietro": { "speaker": "Wulf Carlevaro", "filtro": "asetrate=24000*0.92,aresample=24000,atempo=0.95,aecho=0.8:0.6:60:0.2" },
"tosca": { "speaker": "Gitta Nikolina" }
} }