sav fixes

This commit is contained in:
Your Name 2026-08-07 17:49:13 -04:00
parent 12c37b5fa9
commit 1850737cf6
20 changed files with 3729 additions and 3738 deletions

View file

@ -0,0 +1,3 @@
{
class="immoveable"
}

3
art/food/banana.meta Normal file
View file

@ -0,0 +1,3 @@
{
class="immoveable"
}

1
art/food/beer_mug.meta Normal file
View file

@ -0,0 +1 @@
{class="moveable"}

1
art/food/wine.meta Normal file
View file

@ -0,0 +1 @@
{class="moveable"}

3
art/tech/image.meta Normal file
View file

@ -0,0 +1,3 @@
{
class="moveable"
}

3
art/tech/image2.meta Normal file
View file

@ -0,0 +1,3 @@
{
class="immoveable"
}

View file

@ -27,6 +27,10 @@ function Room:initialize(t)
print(t.name)
if t.player then
-- The carried colors are the sole source of truth for what's active.
-- Copies that live in this room (loaded from the sav) start INACTIVE —
-- you must walk onto one to merge it; it never joins you automatically.
self.activeColors = {red = false, green = false, blue = false}
-- entering from another room: place the carried colors at the entry point
for _, color in ipairs(t.player.activeColors) do
if self.player[color] then
@ -97,6 +101,11 @@ function Room:initialize(t)
self.collidableMatrices = {} --{red = {{...}{...}{...}}, ...
self:createSwitchMatrix()
self:createCollideablesMatrix()
-- Resolve switches/doors up front so the very first frame renders correct
-- lock state: a block already sitting on a switch presses it before anything
-- is drawn, instead of waiting for the first move's tick.
self:resolveSwitchesAndDoors()
end
@ -414,11 +423,17 @@ function Room:tick()
end
self:createCollideablesMatrix()
self:createSwitchMatrix()
self:resolveSwitchesAndDoors()
self:nextRoomCheck()
end
-- Run the switch press check and push the result to every door. Assumes the
-- collidable/switch matrices are already current.
function Room:resolveSwitchesAndDoors()
local setDoorColors = self:switchCheck()
for _, door in pairs(self.doors) do
door:setColors(setDoorColors)
end
self:nextRoomCheck()
end
function Room:playerJoinCheck(previousPositions, newPositions)

View file

@ -1,10 +1,4 @@
{
objects={
{
y=1,
class="player",
color="red",
x=1
}
}
}
}

View file

@ -1,538 +1,538 @@
{
objects={
{
color="green",
class="static_wall",
x=1,
y=1
},
{
color="blue",
class="static_wall",
x=1,
y=1
y=1,
x=1
},
{
color="red",
class="static_wall",
x=1,
y=1
},
{
color="green",
class="static_wall",
x=11,
y=1
},
{
color="blue",
class="static_wall",
x=11,
y=1
y=1,
x=11
},
{
color="red",
class="static_wall",
x=11,
y=1
},
{
color="blue",
class="static_wall",
x=1,
y=2
y=2,
x=1
},
{
color="green",
class="static_wall",
x=1,
y=2
},
{
color="red",
class="static_wall",
x=1,
y=2
},
{
color="red",
class="static_wall",
x=11,
y=2
},
{
color="green",
class="static_wall",
x=11,
y=2
},
{
color="blue",
class="static_wall",
x=11,
y=2
y=2,
x=11
},
{
class="static_wall",
color="blue",
class="static_wall",
x=1,
y=3
y=3,
x=1
},
{
color="red",
class="static_wall",
x=1,
y=3
},
{
color="green",
class="static_wall",
x=1,
y=3
},
{
color="blue",
class="static_wall",
x=11,
y=3
y=3,
x=11
},
{
color="green",
class="static_wall",
x=11,
y=3
},
{
color="red",
class="static_wall",
x=11,
y=3
},
{
color="green",
class="static_wall",
x=1,
y=4
},
{
color="blue",
class="static_wall",
x=1,
y=4
y=4,
x=1
},
{
color="red",
class="static_wall",
x=1,
y=4
},
{
color="green",
class="static_wall",
x=11,
y=4
},
{
color="blue",
class="static_wall",
x=11,
y=4
y=4,
x=11
},
{
color="red",
class="static_wall",
x=11,
y=4
},
{
color="blue",
class="static_wall",
x=1,
y=5
y=5,
x=1
},
{
color="green",
class="static_wall",
x=1,
y=5
},
{
color="red",
class="static_wall",
x=1,
y=5
},
{
color="green",
class="static_wall",
x=11,
y=5
},
{
color="red",
class="static_wall",
x=11,
y=5
},
{
color="green",
class="static_wall",
x=1,
y=6
},
{
color="red",
class="static_wall",
x=1,
y=6
},
{
color="blue",
class="static_wall",
x=1,
y=6
y=6,
x=1
},
{
color="red",
class="static_wall",
x=11,
y=6
},
{
color="green",
class="static_wall",
x=11,
y=6
},
{
color="blue",
class="static_wall",
x=11,
y=6
y=6,
x=11
},
{
color="red",
class="static_wall",
x=1,
y=7
},
{
color="green",
class="static_wall",
x=1,
y=7
},
{
color="blue",
class="static_wall",
x=1,
y=7
y=7,
x=1
},
{
color="red",
class="static_wall",
x=11,
y=7
},
{
color="green",
class="static_wall",
x=11,
y=7
},
{
color="blue",
class="static_wall",
x=11,
y=7
y=7,
x=11
},
{
color="green",
class="static_wall",
x=1,
y=8
},
{
color="blue",
class="static_wall",
x=1,
y=8
y=8,
x=1
},
{
color="red",
class="static_wall",
x=1,
y=8
},
{
color="red",
class="static_wall",
x=11,
y=8
},
{
color="green",
class="static_wall",
x=11,
y=8
},
{
color="blue",
class="static_wall",
x=11,
y=8
y=8,
x=11
},
{
color="red",
class="static_wall",
x=1,
y=9
},
{
color="blue",
class="static_wall",
x=1,
y=9
y=9,
x=1
},
{
color="green",
class="static_wall",
x=1,
y=9
},
{
color="blue",
class="static_wall",
x=11,
y=9
y=9,
x=11
},
{
color="green",
class="static_wall",
x=11,
y=9
},
{
color="red",
class="static_wall",
x=11,
y=9
},
{
color="red",
class="static_wall",
x=1,
y=10
},
{
color="blue",
class="static_wall",
x=1,
y=10
y=10,
x=1
},
{
color="green",
class="static_wall",
x=1,
y=10
},
{
color="red",
class="static_wall",
x=11,
y=10
},
{
color="green",
class="static_wall",
x=11,
y=10
},
{
color="blue",
class="static_wall",
x=11,
y=10
y=10,
x=11
},
{
color="red",
class="static_wall",
x=1,
y=11
},
{
color="green",
class="static_wall",
x=1,
y=11
},
{
color="blue",
class="static_wall",
x=1,
y=11
y=11,
x=1
},
{
color="green",
class="static_wall",
x=2,
y=11
},
{
color="blue",
class="static_wall",
x=2,
y=11
y=11,
x=2
},
{
color="red",
class="static_wall",
x=2,
y=11
},
{
color="blue",
class="static_wall",
x=3,
y=11
y=11,
x=3
},
{
color="green",
class="static_wall",
x=3,
y=11
},
{
color="red",
class="static_wall",
x=3,
y=11
},
{
color="green",
class="static_wall",
x=4,
y=11
},
{
color="red",
class="static_wall",
x=4,
y=11
},
{
color="blue",
class="static_wall",
x=4,
y=11
y=11,
x=4
},
{
class="static_wall",
color="blue",
class="static_wall",
x=5,
y=11
y=11,
x=5
},
{
color="green",
class="static_wall",
x=5,
y=11
},
{
color="red",
class="static_wall",
x=5,
y=11
},
{
color="red",
class="static_wall",
x=7,
y=11
},
{
color="blue",
class="static_wall",
x=7,
y=11
y=11,
x=7
},
{
color="green",
class="static_wall",
x=7,
y=11
},
{
color="blue",
class="static_wall",
x=8,
y=11
y=11,
x=8
},
{
color="red",
class="static_wall",
x=8,
y=11
},
{
color="green",
class="static_wall",
x=8,
y=11
},
{
color="blue",
class="static_wall",
x=9,
y=11
y=11,
x=9
},
{
color="red",
class="static_wall",
x=9,
y=11
},
{
color="green",
class="static_wall",
x=9,
y=11
},
{
color="red",
class="static_wall",
x=10,
y=11
},
{
color="green",
class="static_wall",
x=10,
y=11
},
{
color="blue",
class="static_wall",
x=10,
y=11
y=11,
x=10
},
{
class="static_wall",
color="blue",
class="static_wall",
x=11,
y=11
y=11,
x=11
},
{
color="green",
class="static_wall",
x=11,
y=11
},
{
color="red",
y=1,
x=1
},
{
class="static_wall",
x=11,
y=11
color="red",
y=1,
x=11
},
{
class="static_wall",
color="red",
y=2,
x=1
},
{
class="static_wall",
color="red",
y=2,
x=11
},
{
class="static_wall",
color="red",
y=3,
x=1
},
{
class="static_wall",
color="red",
y=3,
x=11
},
{
class="static_wall",
color="red",
y=4,
x=1
},
{
class="static_wall",
color="red",
y=4,
x=11
},
{
class="static_wall",
color="red",
y=5,
x=1
},
{
class="static_wall",
color="red",
y=5,
x=11
},
{
class="static_wall",
color="red",
y=6,
x=1
},
{
class="static_wall",
color="red",
y=6,
x=11
},
{
class="static_wall",
color="red",
y=7,
x=1
},
{
class="static_wall",
color="red",
y=7,
x=11
},
{
class="static_wall",
color="red",
y=8,
x=1
},
{
class="static_wall",
color="red",
y=8,
x=11
},
{
class="static_wall",
color="red",
y=9,
x=1
},
{
class="static_wall",
color="red",
y=9,
x=11
},
{
class="static_wall",
color="red",
y=10,
x=1
},
{
class="static_wall",
color="red",
y=10,
x=11
},
{
class="static_wall",
color="red",
y=11,
x=1
},
{
class="static_wall",
color="red",
y=11,
x=2
},
{
class="static_wall",
color="red",
y=11,
x=3
},
{
class="static_wall",
color="red",
y=11,
x=4
},
{
class="static_wall",
color="red",
y=11,
x=5
},
{
class="static_wall",
color="red",
y=11,
x=7
},
{
class="static_wall",
color="red",
y=11,
x=8
},
{
class="static_wall",
color="red",
y=11,
x=9
},
{
class="static_wall",
color="red",
y=11,
x=10
},
{
class="static_wall",
color="red",
y=11,
x=11
},
{
class="static_wall",
color="green",
y=1,
x=1
},
{
class="static_wall",
color="green",
y=1,
x=11
},
{
class="static_wall",
color="green",
y=2,
x=1
},
{
class="static_wall",
color="green",
y=2,
x=11
},
{
class="static_wall",
color="green",
y=3,
x=1
},
{
class="static_wall",
color="green",
y=3,
x=11
},
{
class="static_wall",
color="green",
y=4,
x=1
},
{
class="static_wall",
color="green",
y=4,
x=11
},
{
class="static_wall",
color="green",
y=5,
x=1
},
{
class="static_wall",
color="green",
y=5,
x=11
},
{
class="static_wall",
color="green",
y=6,
x=1
},
{
class="static_wall",
color="green",
y=6,
x=11
},
{
class="static_wall",
color="green",
y=7,
x=1
},
{
class="static_wall",
color="green",
y=7,
x=11
},
{
class="static_wall",
color="green",
y=8,
x=1
},
{
class="static_wall",
color="green",
y=8,
x=11
},
{
class="static_wall",
color="green",
y=9,
x=1
},
{
class="static_wall",
color="green",
y=9,
x=11
},
{
class="static_wall",
color="green",
y=10,
x=1
},
{
class="static_wall",
color="green",
y=10,
x=11
},
{
class="static_wall",
color="green",
y=11,
x=1
},
{
class="static_wall",
color="green",
y=11,
x=2
},
{
class="static_wall",
color="green",
y=11,
x=3
},
{
class="static_wall",
color="green",
y=11,
x=4
},
{
class="static_wall",
color="green",
y=11,
x=5
},
{
class="static_wall",
color="green",
y=11,
x=7
},
{
class="static_wall",
color="green",
y=11,
x=8
},
{
class="static_wall",
color="green",
y=11,
x=9
},
{
class="static_wall",
color="green",
y=11,
x=10
},
{
class="static_wall",
color="green",
y=11,
x=11
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -18,24 +18,6 @@ objects={
x=6,
color="green"
},
{
y=11,
class="player",
x=6,
color="blue"
},
{
y=11,
class="player",
x=6,
color="red"
},
{
y=11,
class="player",
x=6,
color="green"
},
{
y=1,
class="static_wall",
@ -1207,4 +1189,4 @@ objects={
color="red"
}
}
}
}

View file

@ -1,23 +1,5 @@
{
objects={
{
y=2,
class="player",
x=6,
color="blue"
},
{
y=3,
class="player",
x=2,
color="red"
},
{
y=3,
class="player",
x=7,
color="green"
},
{
y=1,
class="static_wall",
@ -1009,4 +991,4 @@ objects={
color="green"
}
}
}
}

View file

@ -1,152 +1,152 @@
{
width=18,
height=18,
lastRoom="2",
rooms={
{
name="start",
x=9,
name="start",
y=11
},
{
name="3",
x=10,
name="3",
y=10
},
{
name="4",
x=11,
name="4",
y=10
},
{
x=12,
name="5",
x=12,
y=10
},
{
name="village_1",
x=12,
name="village_1",
y=9
},
{
name="village_2",
x=12,
name="village_2",
y=8
},
{
name="village_3",
x=13,
name="village_3",
y=8
},
{
x=11,
name="village_4",
x=11,
y=8
},
{
name="yellow_1",
x=11,
name="yellow_1",
y=7
},
{
name="yellow_3",
x=11,
name="yellow_3",
y=6
},
{
name="yellow_2",
x=12,
name="yellow_2",
y=7
},
{
name="yellow_4",
x=11,
name="yellow_4",
y=5
},
{
name="yellow_5",
x=11,
name="yellow_5",
y=4
},
{
name="yellow_6",
x=10,
name="yellow_6",
y=5
},
{
x=1,
name="default",
x=1,
y=1
},
{
x=3,
name="old_yellow_3",
x=3,
y=1
},
{
x=5,
name="test_patt",
x=5,
y=1
},
{
x=7,
name="test_patt_update",
x=7,
y=1
},
{
x=9,
name="white_asymmetrical",
x=9,
y=1
},
{
name="white_ok",
x=11,
name="white_ok",
y=1
},
{
name="white_primary",
x=13,
name="white_primary",
y=1
},
{
name="yellow_arches",
x=15,
name="yellow_arches",
y=1
},
{
name="yellow_asymmetrical",
x=17,
name="yellow_asymmetrical",
y=1
},
{
name="yellow_cc_moustache",
x=1,
name="yellow_cc_moustache",
y=3
},
{
name="yellow_color_changing_levvel_1",
x=3,
name="yellow_color_changing_levvel_1",
y=3
},
{
name="yellow_skull",
x=5,
name="yellow_skull",
y=3
},
{
name="yellow_smile",
x=7,
name="yellow_smile",
y=3
},
{
name="2",
x=9,
name="2",
y=10
},
{
name="room_11_09",
x=11,
name="room_11_09",
y=9
}
},
width=18
lastRoom="yellow_skull"
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -30,18 +30,6 @@ objects={
x=13,
color="blue"
},
{
y=11,
class="player",
x=6,
color="red"
},
{
y=11,
class="player",
x=6,
color="green"
},
{
y=1,
class="static_wall",
@ -1039,4 +1027,4 @@ objects={
color="green"
}
}
}
}

View file

@ -12,12 +12,6 @@ objects={
x=6,
color="red"
},
{
y=11,
class="player",
x=6,
color="green"
},
{
y=1,
class="static_wall",
@ -979,4 +973,4 @@ objects={
color="red"
}
}
}
}

29
tools/nuke_love_saves.sh Executable file
View file

@ -0,0 +1,29 @@
#!/usr/bin/env sh
# Delete Chroma Solstice's *runtime* LÖVE save data. Project levels in
# ./rooms are not affected.
set -eu
DATA_HOME=${XDG_DATA_HOME:-"$HOME/.local/share"}
SAVE_DIR="$DATA_HOME/love/chroma-solstice"
if [ "${1:-}" != "--yes" ]; then
printf '%s\n' "This deletes only the local LÖVE runtime saves at:"
printf '%s\n' " $SAVE_DIR"
printf '%s\n' "Repository files, including ./rooms/*.sav, are not touched."
printf '%s\n' "Run: $0 --yes"
exit 1
fi
if [ ! -e "$SAVE_DIR" ]; then
printf '%s\n' "No local LÖVE saves found at: $SAVE_DIR"
exit 0
fi
# Keep the destructive target exact even if this script is changed later.
case "$SAVE_DIR" in
"$DATA_HOME/love/chroma-solstice") ;;
*) printf '%s\n' "Refusing unexpected save path: $SAVE_DIR" >&2; exit 2 ;;
esac
rm -rf -- "$SAVE_DIR"
printf '%s\n' "Deleted local LÖVE saves: $SAVE_DIR"