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
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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'));
|
||||||
|
});
|
||||||
|
|||||||
@@ -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" }
|
||||||
}
|
}
|
||||||
|
|||||||