Collapse the spiky/sticky/skewer box-variant assets into a single per-
instance `adhesion` property on any moveable block, chosen in the editor
via a dropdown next to the colour picker and stored in the .sav alongside
the class.
- spiky -> sticky: soft grab on every true edge (goopy shader)
- skewer -> gluey: rigid weld on every true edge (spiked outline)
- old trailing-face sticky is removed; its saves fold into new sticky
Move the spike geometry + drawGlueySprite into shaders.lua, fold drawing
and the adhesion flag into GenericMoveable, and delete the three
Generic{Sticky,Spiky,Skewer} classes and box_variants.lua. Room:createEntity
normalises legacy spiky_/skewer_/sticky_ class prefixes so old saves load,
and serialization emits `adhesion`. World/map previews and the movement
proxy follow the rename.
Backfill rooms/*.sav to the new format via tools/backfill_adhesion.lua
(41 objects across 8 files). Update tests to the two-mode model; the two
tests asserting the removed lateral-shear limitation are dropped and a
legacy-load migration test added. 27/27 pass.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1018 lines
No EOL
9.8 KiB
Text
1018 lines
No EOL
9.8 KiB
Text
{
|
|
objects={
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=5
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=7
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=10,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=9,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=8,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=7,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=6,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=5,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=4,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=3,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=2,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=8
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=7
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=6
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=5
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=2,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=1,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=2,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=3,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=4,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=5,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=6,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=7,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=8,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=9,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=10,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=8
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=7,
|
|
color="red",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="red",
|
|
class="door",
|
|
y=6
|
|
},
|
|
{
|
|
x=5,
|
|
color="red",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=7,
|
|
color="red",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=4,
|
|
color="red",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=4,
|
|
color="red",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=6,
|
|
color="red",
|
|
adhesion="sticky",
|
|
y=6,
|
|
class="box_1x2_1-1"
|
|
},
|
|
{
|
|
x=5,
|
|
color="red",
|
|
class="box",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=5
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=7
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=10,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=9,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=8,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=7,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=6,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=5,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=4,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=3,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=2,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=8
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=7
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=6
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=5
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=2,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=1,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=2,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=3,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=4,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=5,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=6,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=7,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=8,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=9,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=10,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=8
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=7,
|
|
color="green",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="green",
|
|
class="door",
|
|
y=6
|
|
},
|
|
{
|
|
x=5,
|
|
color="green",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=7,
|
|
color="green",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=4,
|
|
color="green",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=4,
|
|
color="green",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=6,
|
|
color="green",
|
|
adhesion="sticky",
|
|
y=6,
|
|
class="box_1x2_1-1"
|
|
},
|
|
{
|
|
x=5,
|
|
color="green",
|
|
class="box",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=5
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=7
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=10,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=9,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=8,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=7,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=6,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=5,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=4,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=3,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=2,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=8
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=7
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=6
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=5
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=2,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=1,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=2,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=3,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=4,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=5,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=6,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=7,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=8,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=9,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=10,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=1
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=8
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=9
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=10
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=11
|
|
},
|
|
{
|
|
x=7,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=11,
|
|
color="blue",
|
|
class="door",
|
|
y=6
|
|
},
|
|
{
|
|
x=5,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=7,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=4
|
|
},
|
|
{
|
|
x=4,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=2
|
|
},
|
|
{
|
|
x=4,
|
|
color="blue",
|
|
class="static_wall",
|
|
y=3
|
|
},
|
|
{
|
|
x=6,
|
|
color="blue",
|
|
adhesion="sticky",
|
|
y=6,
|
|
class="box_1x2_1-1"
|
|
},
|
|
{
|
|
x=5,
|
|
color="blue",
|
|
class="box",
|
|
y=2
|
|
},
|
|
{
|
|
x=6,
|
|
color="red",
|
|
class="switch",
|
|
y=3
|
|
},
|
|
{
|
|
x=9,
|
|
color="red",
|
|
class="switch",
|
|
y=3
|
|
},
|
|
{
|
|
x=6,
|
|
color="green",
|
|
class="switch",
|
|
y=3
|
|
},
|
|
{
|
|
x=9,
|
|
color="green",
|
|
class="switch",
|
|
y=3
|
|
},
|
|
{
|
|
x=6,
|
|
color="blue",
|
|
class="switch",
|
|
y=3
|
|
},
|
|
{
|
|
x=9,
|
|
color="blue",
|
|
class="switch",
|
|
y=3
|
|
},
|
|
{
|
|
x=5,
|
|
active=true,
|
|
y=9,
|
|
color="red",
|
|
class="player"
|
|
},
|
|
{
|
|
x=5,
|
|
active=true,
|
|
y=9,
|
|
color="green",
|
|
class="player"
|
|
},
|
|
{
|
|
x=5,
|
|
active=true,
|
|
y=9,
|
|
color="blue",
|
|
class="player"
|
|
}
|
|
}
|
|
} |