From d96f57efb6094c8aa4711321bf2ad25bf48ac607 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 11 Aug 2026 12:42:33 -0400 Subject: [PATCH] Add multi-cell box shapes with per-cell collision Generate 1x2/2x1 dominoes, 2x2 (square + 4 L-trominoes) and all connected 3x2/2x3 polyominoes as R/G/B channel masks, reusing the distance-based concentric-ring format that reproduces box_r/g/b exactly. Outer silhouette keeps a 1px margin; connected cells stay seamless. Each shape ships a {class="moveable"} .meta so getAllAssets auto-registers it as a GenericMoveable. Wire the occupied-cell shape (precomputed once by getAllAssets via getCellsFromSprite) through to entities: createEntity now passes the cached cells as cellShape, so an L/U/notched block collides on its real cells and its gaps read as empty space. Fix the per-colour cache that was reset every channel so only one colour survived. Co-Authored-By: Claude Opus 4.8 --- .gitignore | 1 + art/game/box_1x2_1-1.meta | 1 + art/game/box_1x2_1-1_b.png | Bin 0 -> 131 bytes art/game/box_1x2_1-1_g.png | Bin 0 -> 144 bytes art/game/box_1x2_1-1_r.png | Bin 0 -> 131 bytes art/game/box_2x1_11.meta | 1 + art/game/box_2x1_11_b.png | Bin 0 -> 129 bytes art/game/box_2x1_11_g.png | Bin 0 -> 147 bytes art/game/box_2x1_11_r.png | Bin 0 -> 134 bytes art/game/box_2x2_01-11.meta | 1 + art/game/box_2x2_01-11_b.png | Bin 0 -> 162 bytes art/game/box_2x2_01-11_g.png | Bin 0 -> 184 bytes art/game/box_2x2_01-11_r.png | Bin 0 -> 166 bytes art/game/box_2x2_10-11.meta | 1 + art/game/box_2x2_10-11_b.png | Bin 0 -> 171 bytes art/game/box_2x2_10-11_g.png | Bin 0 -> 189 bytes art/game/box_2x2_10-11_r.png | Bin 0 -> 176 bytes art/game/box_2x2_11-01.meta | 1 + art/game/box_2x2_11-01_b.png | Bin 0 -> 168 bytes art/game/box_2x2_11-01_g.png | Bin 0 -> 187 bytes art/game/box_2x2_11-01_r.png | Bin 0 -> 169 bytes art/game/box_2x2_11-10.meta | 1 + art/game/box_2x2_11-10_b.png | Bin 0 -> 165 bytes art/game/box_2x2_11-10_g.png | Bin 0 -> 187 bytes art/game/box_2x2_11-10_r.png | Bin 0 -> 165 bytes art/game/box_2x2_11-11.meta | 1 + art/game/box_2x2_11-11_b.png | Bin 0 -> 140 bytes art/game/box_2x2_11-11_g.png | Bin 0 -> 160 bytes art/game/box_2x2_11-11_r.png | Bin 0 -> 146 bytes art/game/box_2x3_01-01-11.meta | 1 + art/game/box_2x3_01-01-11_b.png | Bin 0 -> 173 bytes art/game/box_2x3_01-01-11_g.png | Bin 0 -> 196 bytes art/game/box_2x3_01-01-11_r.png | Bin 0 -> 177 bytes art/game/box_2x3_01-11-01.meta | 1 + art/game/box_2x3_01-11-01_b.png | Bin 0 -> 195 bytes art/game/box_2x3_01-11-01_g.png | Bin 0 -> 221 bytes art/game/box_2x3_01-11-01_r.png | Bin 0 -> 198 bytes art/game/box_2x3_01-11-10.meta | 1 + art/game/box_2x3_01-11-10_b.png | Bin 0 -> 190 bytes art/game/box_2x3_01-11-10_g.png | Bin 0 -> 220 bytes art/game/box_2x3_01-11-10_r.png | Bin 0 -> 194 bytes art/game/box_2x3_01-11-11.meta | 1 + art/game/box_2x3_01-11-11_b.png | Bin 0 -> 173 bytes art/game/box_2x3_01-11-11_g.png | Bin 0 -> 195 bytes art/game/box_2x3_01-11-11_r.png | Bin 0 -> 177 bytes art/game/box_2x3_10-10-11.meta | 1 + art/game/box_2x3_10-10-11_b.png | Bin 0 -> 182 bytes art/game/box_2x3_10-10-11_g.png | Bin 0 -> 200 bytes art/game/box_2x3_10-10-11_r.png | Bin 0 -> 187 bytes art/game/box_2x3_10-11-01.meta | 1 + art/game/box_2x3_10-11-01_b.png | Bin 0 -> 201 bytes art/game/box_2x3_10-11-01_g.png | Bin 0 -> 223 bytes art/game/box_2x3_10-11-01_r.png | Bin 0 -> 204 bytes art/game/box_2x3_10-11-10.meta | 1 + art/game/box_2x3_10-11-10_b.png | Bin 0 -> 198 bytes art/game/box_2x3_10-11-10_g.png | Bin 0 -> 222 bytes art/game/box_2x3_10-11-10_r.png | Bin 0 -> 200 bytes art/game/box_2x3_10-11-11.meta | 1 + art/game/box_2x3_10-11-11_b.png | Bin 0 -> 182 bytes art/game/box_2x3_10-11-11_g.png | Bin 0 -> 200 bytes art/game/box_2x3_10-11-11_r.png | Bin 0 -> 187 bytes art/game/box_2x3_11-01-01.meta | 1 + art/game/box_2x3_11-01-01_b.png | Bin 0 -> 179 bytes art/game/box_2x3_11-01-01_g.png | Bin 0 -> 198 bytes art/game/box_2x3_11-01-01_r.png | Bin 0 -> 180 bytes art/game/box_2x3_11-01-11.meta | 1 + art/game/box_2x3_11-01-11_b.png | Bin 0 -> 191 bytes art/game/box_2x3_11-01-11_g.png | Bin 0 -> 215 bytes art/game/box_2x3_11-01-11_r.png | Bin 0 -> 193 bytes art/game/box_2x3_11-10-10.meta | 1 + art/game/box_2x3_11-10-10_b.png | Bin 0 -> 176 bytes art/game/box_2x3_11-10-10_g.png | Bin 0 -> 198 bytes art/game/box_2x3_11-10-10_r.png | Bin 0 -> 176 bytes art/game/box_2x3_11-10-11.meta | 1 + art/game/box_2x3_11-10-11_b.png | Bin 0 -> 195 bytes art/game/box_2x3_11-10-11_g.png | Bin 0 -> 229 bytes art/game/box_2x3_11-10-11_r.png | Bin 0 -> 199 bytes art/game/box_2x3_11-11-01.meta | 1 + art/game/box_2x3_11-11-01_b.png | Bin 0 -> 179 bytes art/game/box_2x3_11-11-01_g.png | Bin 0 -> 199 bytes art/game/box_2x3_11-11-01_r.png | Bin 0 -> 181 bytes art/game/box_2x3_11-11-10.meta | 1 + art/game/box_2x3_11-11-10_b.png | Bin 0 -> 176 bytes art/game/box_2x3_11-11-10_g.png | Bin 0 -> 199 bytes art/game/box_2x3_11-11-10_r.png | Bin 0 -> 177 bytes art/game/box_2x3_11-11-11.meta | 1 + art/game/box_2x3_11-11-11_b.png | Bin 0 -> 149 bytes art/game/box_2x3_11-11-11_g.png | Bin 0 -> 169 bytes art/game/box_2x3_11-11-11_r.png | Bin 0 -> 155 bytes art/game/box_3x2_001-111.meta | 1 + art/game/box_3x2_001-111_b.png | Bin 0 -> 179 bytes art/game/box_3x2_001-111_g.png | Bin 0 -> 206 bytes art/game/box_3x2_001-111_r.png | Bin 0 -> 180 bytes art/game/box_3x2_010-111.meta | 1 + art/game/box_3x2_010-111_b.png | Bin 0 -> 194 bytes art/game/box_3x2_010-111_g.png | Bin 0 -> 229 bytes art/game/box_3x2_010-111_r.png | Bin 0 -> 196 bytes art/game/box_3x2_011-110.meta | 1 + art/game/box_3x2_011-110_b.png | Bin 0 -> 188 bytes art/game/box_3x2_011-110_g.png | Bin 0 -> 222 bytes art/game/box_3x2_011-110_r.png | Bin 0 -> 189 bytes art/game/box_3x2_011-111.meta | 1 + art/game/box_3x2_011-111_b.png | Bin 0 -> 176 bytes art/game/box_3x2_011-111_g.png | Bin 0 -> 202 bytes art/game/box_3x2_011-111_r.png | Bin 0 -> 179 bytes art/game/box_3x2_100-111.meta | 1 + art/game/box_3x2_100-111_b.png | Bin 0 -> 185 bytes art/game/box_3x2_100-111_g.png | Bin 0 -> 212 bytes art/game/box_3x2_100-111_r.png | Bin 0 -> 189 bytes art/game/box_3x2_101-111.meta | 1 + art/game/box_3x2_101-111_b.png | Bin 0 -> 191 bytes art/game/box_3x2_101-111_g.png | Bin 0 -> 219 bytes art/game/box_3x2_101-111_r.png | Bin 0 -> 194 bytes art/game/box_3x2_110-011.meta | 1 + art/game/box_3x2_110-011_b.png | Bin 0 -> 190 bytes art/game/box_3x2_110-011_g.png | Bin 0 -> 221 bytes art/game/box_3x2_110-011_r.png | Bin 0 -> 194 bytes art/game/box_3x2_110-111.meta | 1 + art/game/box_3x2_110-111_b.png | Bin 0 -> 183 bytes art/game/box_3x2_110-111_g.png | Bin 0 -> 207 bytes art/game/box_3x2_110-111_r.png | Bin 0 -> 188 bytes art/game/box_3x2_111-001.meta | 1 + art/game/box_3x2_111-001_b.png | Bin 0 -> 184 bytes art/game/box_3x2_111-001_g.png | Bin 0 -> 205 bytes art/game/box_3x2_111-001_r.png | Bin 0 -> 184 bytes art/game/box_3x2_111-010.meta | 1 + art/game/box_3x2_111-010_b.png | Bin 0 -> 194 bytes art/game/box_3x2_111-010_g.png | Bin 0 -> 220 bytes art/game/box_3x2_111-010_r.png | Bin 0 -> 195 bytes art/game/box_3x2_111-011.meta | 1 + art/game/box_3x2_111-011_b.png | Bin 0 -> 184 bytes art/game/box_3x2_111-011_g.png | Bin 0 -> 206 bytes art/game/box_3x2_111-011_r.png | Bin 0 -> 184 bytes art/game/box_3x2_111-100.meta | 1 + art/game/box_3x2_111-100_b.png | Bin 0 -> 179 bytes art/game/box_3x2_111-100_g.png | Bin 0 -> 205 bytes art/game/box_3x2_111-100_r.png | Bin 0 -> 183 bytes art/game/box_3x2_111-101.meta | 1 + art/game/box_3x2_111-101_b.png | Bin 0 -> 192 bytes art/game/box_3x2_111-101_g.png | Bin 0 -> 219 bytes art/game/box_3x2_111-101_r.png | Bin 0 -> 193 bytes art/game/box_3x2_111-110.meta | 1 + art/game/box_3x2_111-110_b.png | Bin 0 -> 179 bytes art/game/box_3x2_111-110_g.png | Bin 0 -> 206 bytes art/game/box_3x2_111-110_r.png | Bin 0 -> 183 bytes art/game/box_3x2_111-111.meta | 1 + art/game/box_3x2_111-111_b.png | Bin 0 -> 160 bytes art/game/box_3x2_111-111_g.png | Bin 0 -> 179 bytes art/game/box_3x2_111-111_r.png | Bin 0 -> 168 bytes art/game/gen_composite_boxes.py | 136 +++++++++++++++++++++++++++++ generic_moveable.lua | 5 +- generic_unmoveable.lua | 5 +- level_editor/object_attributes.lua | 10 ++- room.lua | 9 +- 154 files changed, 194 insertions(+), 9 deletions(-) create mode 100644 .gitignore create mode 100644 art/game/box_1x2_1-1.meta create mode 100644 art/game/box_1x2_1-1_b.png create mode 100644 art/game/box_1x2_1-1_g.png create mode 100644 art/game/box_1x2_1-1_r.png create mode 100644 art/game/box_2x1_11.meta create mode 100644 art/game/box_2x1_11_b.png create mode 100644 art/game/box_2x1_11_g.png create mode 100644 art/game/box_2x1_11_r.png create mode 100644 art/game/box_2x2_01-11.meta create mode 100644 art/game/box_2x2_01-11_b.png create mode 100644 art/game/box_2x2_01-11_g.png create mode 100644 art/game/box_2x2_01-11_r.png create mode 100644 art/game/box_2x2_10-11.meta create mode 100644 art/game/box_2x2_10-11_b.png create mode 100644 art/game/box_2x2_10-11_g.png create mode 100644 art/game/box_2x2_10-11_r.png create mode 100644 art/game/box_2x2_11-01.meta create mode 100644 art/game/box_2x2_11-01_b.png create mode 100644 art/game/box_2x2_11-01_g.png create mode 100644 art/game/box_2x2_11-01_r.png create mode 100644 art/game/box_2x2_11-10.meta create mode 100644 art/game/box_2x2_11-10_b.png create mode 100644 art/game/box_2x2_11-10_g.png create mode 100644 art/game/box_2x2_11-10_r.png create mode 100644 art/game/box_2x2_11-11.meta create mode 100644 art/game/box_2x2_11-11_b.png create mode 100644 art/game/box_2x2_11-11_g.png create mode 100644 art/game/box_2x2_11-11_r.png create mode 100644 art/game/box_2x3_01-01-11.meta create mode 100644 art/game/box_2x3_01-01-11_b.png create mode 100644 art/game/box_2x3_01-01-11_g.png create mode 100644 art/game/box_2x3_01-01-11_r.png create mode 100644 art/game/box_2x3_01-11-01.meta create mode 100644 art/game/box_2x3_01-11-01_b.png create mode 100644 art/game/box_2x3_01-11-01_g.png create mode 100644 art/game/box_2x3_01-11-01_r.png create mode 100644 art/game/box_2x3_01-11-10.meta create mode 100644 art/game/box_2x3_01-11-10_b.png create mode 100644 art/game/box_2x3_01-11-10_g.png create mode 100644 art/game/box_2x3_01-11-10_r.png create mode 100644 art/game/box_2x3_01-11-11.meta create mode 100644 art/game/box_2x3_01-11-11_b.png create mode 100644 art/game/box_2x3_01-11-11_g.png create mode 100644 art/game/box_2x3_01-11-11_r.png create mode 100644 art/game/box_2x3_10-10-11.meta create mode 100644 art/game/box_2x3_10-10-11_b.png create mode 100644 art/game/box_2x3_10-10-11_g.png create mode 100644 art/game/box_2x3_10-10-11_r.png create mode 100644 art/game/box_2x3_10-11-01.meta create mode 100644 art/game/box_2x3_10-11-01_b.png create mode 100644 art/game/box_2x3_10-11-01_g.png create mode 100644 art/game/box_2x3_10-11-01_r.png create mode 100644 art/game/box_2x3_10-11-10.meta create mode 100644 art/game/box_2x3_10-11-10_b.png create mode 100644 art/game/box_2x3_10-11-10_g.png create mode 100644 art/game/box_2x3_10-11-10_r.png create mode 100644 art/game/box_2x3_10-11-11.meta create mode 100644 art/game/box_2x3_10-11-11_b.png create mode 100644 art/game/box_2x3_10-11-11_g.png create mode 100644 art/game/box_2x3_10-11-11_r.png create mode 100644 art/game/box_2x3_11-01-01.meta create mode 100644 art/game/box_2x3_11-01-01_b.png create mode 100644 art/game/box_2x3_11-01-01_g.png create mode 100644 art/game/box_2x3_11-01-01_r.png create mode 100644 art/game/box_2x3_11-01-11.meta create mode 100644 art/game/box_2x3_11-01-11_b.png create mode 100644 art/game/box_2x3_11-01-11_g.png create mode 100644 art/game/box_2x3_11-01-11_r.png create mode 100644 art/game/box_2x3_11-10-10.meta create mode 100644 art/game/box_2x3_11-10-10_b.png create mode 100644 art/game/box_2x3_11-10-10_g.png create mode 100644 art/game/box_2x3_11-10-10_r.png create mode 100644 art/game/box_2x3_11-10-11.meta create mode 100644 art/game/box_2x3_11-10-11_b.png create mode 100644 art/game/box_2x3_11-10-11_g.png create mode 100644 art/game/box_2x3_11-10-11_r.png create mode 100644 art/game/box_2x3_11-11-01.meta create mode 100644 art/game/box_2x3_11-11-01_b.png create mode 100644 art/game/box_2x3_11-11-01_g.png create mode 100644 art/game/box_2x3_11-11-01_r.png create mode 100644 art/game/box_2x3_11-11-10.meta create mode 100644 art/game/box_2x3_11-11-10_b.png create mode 100644 art/game/box_2x3_11-11-10_g.png create mode 100644 art/game/box_2x3_11-11-10_r.png create mode 100644 art/game/box_2x3_11-11-11.meta create mode 100644 art/game/box_2x3_11-11-11_b.png create mode 100644 art/game/box_2x3_11-11-11_g.png create mode 100644 art/game/box_2x3_11-11-11_r.png create mode 100644 art/game/box_3x2_001-111.meta create mode 100644 art/game/box_3x2_001-111_b.png create mode 100644 art/game/box_3x2_001-111_g.png create mode 100644 art/game/box_3x2_001-111_r.png create mode 100644 art/game/box_3x2_010-111.meta create mode 100644 art/game/box_3x2_010-111_b.png create mode 100644 art/game/box_3x2_010-111_g.png create mode 100644 art/game/box_3x2_010-111_r.png create mode 100644 art/game/box_3x2_011-110.meta create mode 100644 art/game/box_3x2_011-110_b.png create mode 100644 art/game/box_3x2_011-110_g.png create mode 100644 art/game/box_3x2_011-110_r.png create mode 100644 art/game/box_3x2_011-111.meta create mode 100644 art/game/box_3x2_011-111_b.png create mode 100644 art/game/box_3x2_011-111_g.png create mode 100644 art/game/box_3x2_011-111_r.png create mode 100644 art/game/box_3x2_100-111.meta create mode 100644 art/game/box_3x2_100-111_b.png create mode 100644 art/game/box_3x2_100-111_g.png create mode 100644 art/game/box_3x2_100-111_r.png create mode 100644 art/game/box_3x2_101-111.meta create mode 100644 art/game/box_3x2_101-111_b.png create mode 100644 art/game/box_3x2_101-111_g.png create mode 100644 art/game/box_3x2_101-111_r.png create mode 100644 art/game/box_3x2_110-011.meta create mode 100644 art/game/box_3x2_110-011_b.png create mode 100644 art/game/box_3x2_110-011_g.png create mode 100644 art/game/box_3x2_110-011_r.png create mode 100644 art/game/box_3x2_110-111.meta create mode 100644 art/game/box_3x2_110-111_b.png create mode 100644 art/game/box_3x2_110-111_g.png create mode 100644 art/game/box_3x2_110-111_r.png create mode 100644 art/game/box_3x2_111-001.meta create mode 100644 art/game/box_3x2_111-001_b.png create mode 100644 art/game/box_3x2_111-001_g.png create mode 100644 art/game/box_3x2_111-001_r.png create mode 100644 art/game/box_3x2_111-010.meta create mode 100644 art/game/box_3x2_111-010_b.png create mode 100644 art/game/box_3x2_111-010_g.png create mode 100644 art/game/box_3x2_111-010_r.png create mode 100644 art/game/box_3x2_111-011.meta create mode 100644 art/game/box_3x2_111-011_b.png create mode 100644 art/game/box_3x2_111-011_g.png create mode 100644 art/game/box_3x2_111-011_r.png create mode 100644 art/game/box_3x2_111-100.meta create mode 100644 art/game/box_3x2_111-100_b.png create mode 100644 art/game/box_3x2_111-100_g.png create mode 100644 art/game/box_3x2_111-100_r.png create mode 100644 art/game/box_3x2_111-101.meta create mode 100644 art/game/box_3x2_111-101_b.png create mode 100644 art/game/box_3x2_111-101_g.png create mode 100644 art/game/box_3x2_111-101_r.png create mode 100644 art/game/box_3x2_111-110.meta create mode 100644 art/game/box_3x2_111-110_b.png create mode 100644 art/game/box_3x2_111-110_g.png create mode 100644 art/game/box_3x2_111-110_r.png create mode 100644 art/game/box_3x2_111-111.meta create mode 100644 art/game/box_3x2_111-111_b.png create mode 100644 art/game/box_3x2_111-111_g.png create mode 100644 art/game/box_3x2_111-111_r.png create mode 100644 art/game/gen_composite_boxes.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10fa23f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +art/game/__pycache__/ diff --git a/art/game/box_1x2_1-1.meta b/art/game/box_1x2_1-1.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_1x2_1-1.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_1x2_1-1_b.png b/art/game/box_1x2_1-1_b.png new file mode 100644 index 0000000000000000000000000000000000000000..8685d8cab0858cf42365c48ee873e66389bcd522 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QeK`ejv*Cu-cB{-V^H8>I{4$i z{&m;hi#skHu_&+(U&f@O$l&7QkvJ)URXKRdY3;9R`wX+oFY)SZIKafM^TV^?&7pta f@0$j&oB1+JXNp)vb%Y)Qn#$nm>gTe~DWM4fuo^1A literal 0 HcmV?d00001 diff --git a/art/game/box_1x2_1-1_g.png b/art/game/box_1x2_1-1_g.png new file mode 100644 index 0000000000000000000000000000000000000000..14ef29a4420524a21e6dc3f1f4b34985e8e15046 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QsJI1jv*Cu-d;V(#~{GNe8KO} zfBo~GEXKyyzj=InWpW^$g&`y~_^?uw&V}?zopr0GpgK@c;k- literal 0 HcmV?d00001 diff --git a/art/game/box_1x2_1-1_r.png b/art/game/box_1x2_1-1_r.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b647b388e82cb9e882e46a49f66265a7565a34 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QeK`ejv*Cu-cB{-V=&-gTKMw+ z{+#2pjve%HzhRj#CbxJi7#)B8;LMrkS7v^1rK_2BFEHsA+-=;m{OX^} d4X+h%M$T6jk;teKlmME^;OXk;vd$@?2>=yeDwzNP literal 0 HcmV?d00001 diff --git a/art/game/box_2x1_11_g.png b/art/game/box_2x1_11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..a75c1880ed27c761faf64b5c138351f4afab0107 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYeRFtQSV@SoEw^JRt7!){IuD|#n zzb)8N%W=Znqn2SCHna08C^IZr<;5v3xPc`tt)FjmE{~ak$IVD7Oo| wssT(7MN;}71wQy5c88_Ttej~Lf9E-dE4>N|rqZ)k0c~OMboFyt=akR{06y|D0ssI2 literal 0 HcmV?d00001 diff --git a/art/game/box_2x1_11_r.png b/art/game/box_2x1_11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..5b15a55e07753cfaf550dd4c5524a97471c60685 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3HGD8EPYel&`0YV@SoEw^J?o7z{WLKU($w zztLPR!wu66u1E(@II1|)agvgf&cg#mEa_!>3|3B?KSr|YtxsEIlw<{K0ILEmEsDMg3^I}$@!3>_RelF{r5}E+>_bUVd literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_01-11.meta b/art/game/box_2x2_01-11.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x2_01-11.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x2_01-11_b.png b/art/game/box_2x2_01-11_b.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2a951cf3d2b89ac4b5419057b274274a2ea71d GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJOivfbkcv5Pr#W&lDDp4|fBYZ6 zPTjGL|May4o0NCkoVnIE%t#P9c}B;yf58`h&NJq{NgEu~#s7FcmfUT_$Q^NjNo+$y z%mU`G)qcVZ9rK&#-!W{Odin7L^#q{ggRSg-`A4dS0_0RQng6xPSZxUSUjVd}!PC{x JWt~$(696v-3AQ$;x|T36QZg2N z_lvneh>=CWfq{{2!u{ta3=TCiDU1&O>f1_V?sk5#4Y=9)O;f<3p@2)vy^uL1-c8=& hc=L(Llyu4 literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_01-11_r.png b/art/game/box_2x2_01-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..d7261b7c99cf6fad4f907121019aa165c464cd5c GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJTu&Frkcv5Pr#f;SP~c(NeDr_4 zr7dgK28FUh=bM!dGHj-TNe3h*&D>dP(a^2Dzb9W;xcbtF`Brgf~8VGIxSFP<+|?2T$rRtZqnBKf!%sC!-pRgd4Mkz5&o; N22WQ%mvv4FO#ncZ;8`AU&qR238EQo3<81^qkMvrCJLVL>X+&A)tdA8$g7l1H}Y=@Z)jlE zNnqsO!tHbR1^3lyK9e#Vv%+hheAjMN`u2T?EhBft0jA5g3+leF|KZQHYX7~m7*;0* VJD#1Ur9j&mJYD@<);T3K0RSk4LA?L~ literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_10-11_g.png b/art/game/box_2x2_10-11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..edd4a7342893de5005729e906834c70eb001616d GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ7Ec$)kcv5PuWb}+P~c&{aP0H{ z`kj8U0(*s&EKDYMKTUnmb@SPQGiUD3{UzDpa*!dSWcFl9t?YYDMu$Vs$}{G-Ys_}% z`+9&$WB~)K#(|7oyA@{NJj%jgl2B&II*&kcv5Pr#o^TP~c%H_x}I? z>6Z|JPJtew*15BrHu+7^2;gBna3&|q@MKPd`fkT*+htw+O|s8C)?v0^EWB<-rTBF}s?{4Tn;fy%IBo^_^ z;q7I;yOy8kvfSYOVY2gJ&OC!ppOiN=u<9f*a-U$G_MO4|d(v-zrd9lUXE}2}E7-l> R?hbMbgQu&X%Q~loCIDN|K)V0{ literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-01_g.png b/art/game/box_2x2_11-01_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f50a714cad927233de83d826224c71f3a3dc1b0f GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJCQlc~kcv5Pr*GstpupkMzwH12 z(nuTrfY4k?J*5{y62|ebH_Vz@BYs0)`-Za|)3wDqYYP02 zD)5UeXt>#wA!@5@#j;5B%PD;(^U3l|+b8QY$)03?tGj@KRl|XiYsP)%K%3pFu?Kd~ l2x9%0bJe7Ao%|gG`364|ufNqP-9Xncc)I$ztaD0e0sy0{LFfPg literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-01_r.png b/art/game/box_2x2_11-01_r.png new file mode 100644 index 0000000000000000000000000000000000000000..184def9a1bbfd54cb1ca0af776945d9e4e8e409d GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ0#6smkcv5Pryb-vpupoidE@{8 zPv4nnEEbgTe~DWM4f;2%QJ literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-10.meta b/art/game/box_2x2_11-10.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x2_11-10.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x2_11-10_b.png b/art/game/box_2x2_11-10_b.png new file mode 100644 index 0000000000000000000000000000000000000000..48b160916d7b275546a8f4284a53b646761cd794 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ98VX=kcv5PryKGyC~~lfKmNbJ zr#G&#^ytJ~)_u&5|BX7a7+ z_+K&ow~$1N@0sgN4t~}zbSHph7&$MnE=!%V_kH*ub;fIrUdtKh=}I^?6t~|2+RNbS L>gTe~DWM4f=Yl!j literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-10_g.png b/art/game/box_2x2_11-10_g.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca026f050d770f7fd180e83aba1779ea890d303 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJCQlc~kcv5PuV3V9FyLr?c>l%U z_?zpvio|kW?D-gT?SQ{yR)7p+K&Y;!o>B8(8~47fXmwJ7Q+Zu*W&@<1A|< zuCq%Rc?-5b(3aG;Vr}>#I+xAijmk6z0rSpOh9f?UYPh8?G_aX0V0^b-;rI1F;v0TX l`@;0*O$|dxY{2PaMh!m=zYarleV}U?JYD@<);T3K0RUrEL?{3N literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-10_r.png b/art/game/box_2x2_11-10_r.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6020409cb850b9a913a90522d6f02441d084b8 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ98VX=kcv5PryKG)C~`PQe|}$| zI>$re$LuKIUuNpF#9J6T6d7DxJh~>!bRC+y-p=Eb%f+leddw%+&3nOfn%AO%dCUF> z{j$Z6beT_{vi!KLF~!yY1V|W!9Cma2-DN+J%O+yJ=uX2N&d(P`{BB0JZwA`S;OXk; Jvd$@?2>=}NJ3RmZ literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-11.meta b/art/game/box_2x2_11-11.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x2_11-11.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x2_11-11_b.png b/art/game/box_2x2_11-11_b.png new file mode 100644 index 0000000000000000000000000000000000000000..4700b246b33cb82c756cad3342ebfe06a2581563 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJU{4pvkcv5PuPX{MDDW^JobvF0 zydIl?tFwT3=Se@2sb@GnPo3E^#l0n_;p)ve@#|lH6;$`y{_d$|1Zsu@nR3U!+wY&V d=ib2=QqA_zP{e}Ur{V=j+SAp~Wt~$(69C^dD{KG& literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-11_g.png b/art/game/box_2x2_11-11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..82114f8ddc95343dd19824480ad5c6846cf65ffb GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJbWaz@kcv5PuRC%bP~dU7==t*R zdYN!hspf!;GtbTkweGp;y3$h3^W8h$!)JYB8`7W6l?_Wb>u;!toETBWn9~2xE9~7W zi7%=^qhMf3bm7;meXMi-sqSS^pRM1pjz6oKZPzLV2aV<7A3%ycUHx3vIVCg!07!v1 Aw*UYD literal 0 HcmV?d00001 diff --git a/art/game/box_2x2_11-11_r.png b/art/game/box_2x2_11-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2891c5277e451522b68b8dd891b41e5b8e6d42 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJNKY5Xkcv5Prz`R?DDW^xANs%F zM&u-mSl5nSE93NpXN&Zyu3V)Rlvl0NRh=fE^V>Dk{NMD(xzW~zMl$9={RnV;^^dFd i3V+iSJ}MvMJ+hfW;gEm}lVcw%NQI}XpUXO@geCxOi7Q$F literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-01-11.meta b/art/game/box_2x3_01-01-11.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x3_01-01-11.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x3_01-01-11_b.png b/art/game/box_2x3_01-01-11_b.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8ab4b08c04cbdfcc0d240e28f529131d052ef2 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsS-~Y$B>FSZ*Mqq9Z(Q(zUcGu zU--OrT$l8`mNyrE+#D`1C^Gd-XP>8$v3IxomNoHAG0A;m2m5>8ao)eR<9Z&*2xM@B z(RtPW_qQ2>9;Y8X{$?XFVdQ I&MBb@0B^QAga7~l literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-01-11_g.png b/art/game/box_2x3_01-01-11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..9f259cf591a572c98ee728e60a1e767018cf1814 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJscugf$B>FSZ*MsAH7M}7Ts&Ct zU;DbK+d^rNT=V*Gm(nLYIcWKHM;tlxW<^D|;@5tL$Ft>>ZnW(AZzE!$|1Q<7jd_of zvfR60%o~J(rXhg~OF#dvm2lvy(Xn9lFr6E*?)lBR1^3yFtOM;>85nj1Pq6IbR;V`q j#h|tAF?&Fz!qjJM`?u(%2_8-XIg7#5)z4*}Q$iB}9!5e% literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-01-11_r.png b/art/game/box_2x3_01-01-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..22edc550613c8f232602e022805851bcdd26dfae GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsR~aQ$B>FSZ>M{69Z=w5{oM6^ zf6*?kl0?TGgN0{g6!@CuO|;!4o$uV;E;hX+m7^vxg>UkfkS~#M;#r%v+Zt+z#4#|k z2sj`Sjfva-??1o5y)ofy{d~{$Ob1We27(kVTmIll?S<72M`s7bEtn(S$taOFd1*E$ P&PyJsV+|!$B>FSZ*LsrI$*%T93cDe zzy9vv#GLkpZA*J9@_%ED@OVK)^_B-w@!Ol{0mV5!%wWFU88KJ+w~E2shPzLaHdS0@@y~Ar r$^f;MF#NGk{F?OJpXm($oxr)tAsPuEv!|B;UB%$(>gTe~DWM4fHa$vb literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-11-01_g.png b/art/game/box_2x3_01-11-01_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f89161fae73c29e7fbcdf5a32f10dcfd7401a577 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsU@B+jv*Cu-rm^AcR+!I<-+EV z|Lbr1scqfVpssT~u5yCF7KcKUV~WW=f?oHeRO>km_P-Qq6#le!4%ZL)yrc4->=B-6 z5j&o<9S~;XP-tLaDpA;XK9ixL!m@*@VU}OcYm42&&uSGm3qK78%03gB)3+$S%k02Q zj;fE`3Y$OiPKf=e#+fNa&ZjOSd`ZLqFUtqj<)P>b$n-*`t&jYqy;??O61uV9* RSAp(j@O1TaS?83{1OO3)Q9u9y literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-11-01_r.png b/art/game/box_2x3_01-11-01_r.png new file mode 100644 index 0000000000000000000000000000000000000000..4976436b8f634bb9b3516879a25744b5fd4fc791 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsa{VP$B>FSZ)Z4iH5l-)Y`*lr z-f|w7lISfJvxRSL7Vsq}J4{RwDC}6Z>g7X*bsUWRx}OXff?ekyJ*Rcy=Pu#JPA^$C z92mI*8kl^K>^rZ#B5;B6?(@nkLlPyJsa8)H$B>FSZ>JyRI-tPg{QATH z`kmICn`GOhdYY&2eyiMi&1FWYh^vwD@>$cBUfQ!>xECYT#2Q+9P~Uvsw%f8m6M*0V zUx4zn_d9tMoPJnJT#;0Mv9(&Jj2$S^@Gxe hcR63mu+L$Hq&SPBq%H6tA!xyX8qj0H8P;;}J8nQ1aF&`9py5O{WMpA@4t@0_MlP zn2~gVmt=&8yG{UhLI42-5I}$q#OFB;01%ghC;+Ib#4?VvE8*?~nUyH-0s#cr+KNxK z==NI9Zqd+Pz^p|0Fkw~V*JZ@0M0pnoAbPyJsZLK9$B>FSZ>KwQH5l-)2*3Ql zU&f!2Uo{5cf!-(3&I$WNl%PxILG<^zf1vdjkg}qQ4F50elF{r5}E)6a6^s& literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-11-11.meta b/art/game/box_2x3_01-11-11.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x3_01-11-11.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x3_01-11-11_b.png b/art/game/box_2x3_01-11-11_b.png new file mode 100644 index 0000000000000000000000000000000000000000..c035f5b052930158aa8e9b5aab4b6993c25981a4 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsS-~Y$B>FSZ?7Bj9Z=wL4qX1| zU%20LuNAVZmIOP;&aDCQd*AL2zs}FBCd$;wrG|&hj zC_6CW)%!|mhpay`HD~0)4bs1s-hfI$6dXv_i?CIEd%2<5Ve2!NYm;Q6YStgo1Ic;1 L`njxgN@xNAdwD%O literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-11-11_g.png b/art/game/box_2x3_01-11-11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7cf925be1dc342d2e47e83814ee7921bcdbb9b GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsV+|!$B>FSZ?8M@9Z=wKxw!G; zzwl++v%_v?Xyp8RqrG0mZ9>;&B|bxAYpr`x9)Fb&{8-k`VW#-ro}cwhd-cqT4;j{< z=xE>lkKqjq&@={yl9zvM`I$W$4CV=}I%ya0x@Urvc)I$ztaD0e0svlCMymh- literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_01-11-11_r.png b/art/game/box_2x3_01-11-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..dc29a6239a6795587c992e0d1c353d653ecce09b GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsR~aQ$B>FSZ>I-x9Z=vo`m62x z{-W=pH`HdsbpjkaA1HDGxl})|KqO`UGYPCnz+VuHkl6+ VX&I+4d<43I!PC{xWt~$(699h#KI#Af literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-10-11.meta b/art/game/box_2x3_10-10-11.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x3_10-10-11.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x3_10-10-11_b.png b/art/game/box_2x3_10-10-11_b.png new file mode 100644 index 0000000000000000000000000000000000000000..2f88bc423a5ba3a17304160d9729cd5aa89b444d GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsaj7L$B>FSZ*MqqH5l-?TIsH(|x!tW%1-G1d2EB@}y1KGxKxqiVfxq_+xO#({4?~c{;j8}-e S^sX=fB<1Pq=d#Wzp$Pz?C_E|v literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-10-11_g.png b/art/game/box_2x3_10-10-11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..33e22297f9bb44679b34c66342d37c2529b23379 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJseVrv$B>FSZ*LfiH7M{fUpV&s z@A{bKdL8?Mlq^&xcRx)}&`6ujY;0Wq{nB{`jV`VQU3tY}ZI@PyJsU}Ys$B>FSZ)Y6jI-tOF^w+U} z|EKT1?BL?KCaCqvwnk;QvK473PnE3zk`)Jp|2jP?$jv{Zxl_B+wZO4z`%5Nf5P$Hi2lu7YxXe8 ds_u2LlHc1XlVy6PW**Qr44$rjF6*2Ung9S0M$Z5M literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-11-01.meta b/art/game/box_2x3_10-11-01.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x3_10-11-01.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x3_10-11-01_b.png b/art/game/box_2x3_10-11-01_b.png new file mode 100644 index 0000000000000000000000000000000000000000..38639bac12255d870cfe72dae45736ec3928e0d0 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsR^Dgjv*Cu-rfl0YB1nozTmd! z|J2w0hh{Xb<6Z6bX}LjV+J;4GM;m9(++Cev$k3(4)UoKdPEUKvrf=r&?)8NIp7)83 zMZkf9kwt@jPTNI~P0ErChZ^35*nGHuo5}6%+tNyACJu!IFJ%(u7WjXj$96;gjzB`$ z+uT#zL3#un8j2iVU4EmrxcRL;?}mS}{^!}wDC(pz{B$`8bQ^=GtDnm{r-UW|)$dN~ literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-11-01_g.png b/art/game/box_2x3_10-11-01_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f2eeaee9fe1e9be93f2b400ae96cd9a854b26509 GIT binary patch literal 223 zcmV<503iQ~P)m$tOk%N7p00IagfB@Nacfn|87ZU)K0kexK@Ff7Fc|4~9tmY*Evw39u6bK+d zcM8~}mIC}SYQun)%^!f(&2NAm%_G~VKmY**5I}&bo6%b`yM+$OE+#6VvQ=pS_8-(` Zxd07|NOZIdAp`&b002ovPDHLkV1k6rROkQz literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-11-01_r.png b/art/game/box_2x3_10-11-01_r.png new file mode 100644 index 0000000000000000000000000000000000000000..06ff5b98619eb6e14fcf6f38286bc7951d2f6465 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsmY!$jv*Cu-cEPqYB1no+5G7L zei?r!P0h8wrYqmv6VbZNnHZ>IAs`qSI@gNl0Cz!!{e!cSc0KnpuFaSl!}e}V-j1Ya zrH6P08W>m<7#Pp!N%U?PWlZpAz89u*_HAmy(KD~hAF^>cFcfo#y{pvU$+KtU^Sw_D zK0H11xPyJsa{VP$B>FSZ?7NZYB1nozTo!f zfBZW=u1&JXZaLib$m2S-nf36QE@orn^6wW8GiY>iD0ICmHjJBe^6vc^wUW7S{74!t4jjjdm xV`5|xaA06O#po=#@ps*{|2_>@-``%!_$OK=BW}i@i9m-jc)I$ztaD0e0s!%yOc4M8 literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-11-10_g.png b/art/game/box_2x3_10-11-10_g.png new file mode 100644 index 0000000000000000000000000000000000000000..b25f2a966ed06157987c90bd6090c7816e8977db GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsimGSjv*Cu-d^7*)S$q_eBs*X z|MfflbUJQL6Ooy8(zWIzpSIHM#Y#$PX)9-kiY_|Au<3pFbDQT2J#`YH2z_Gns4yERt`-!5l_7;!iGlrS}_to24V^dKa SXDtnMFoUP7pUXO@geCw-aZk7a literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-11-10_r.png b/art/game/box_2x3_10-11-10_r.png new file mode 100644 index 0000000000000000000000000000000000000000..80a58edc55ea36f1c4df847d279ec667d0ebe4dc GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJseVrv$B>FSZ>KwQ9Z=w5*}U}s z|Dr0b4vi(9s#0Znx)H}j?`lorad8O=jcsOhVO{rvebJq_&82Slj<~&b8tr0S!zd3l41HUgHui$Z*a_;Z|2}QM&4eq_e-vUvdH^=a)I2+@EyaGva?*%F-im xX8=_*uxc2*X|k`XKNiQi=1rycOU@;q8QRtPyJsaj7L$B>FSZ*MqqH5l-?TF8Puu7)UoKejOgr?qCWnx_^`0wbH9O1 zV_PyJseVrv$B>FSZ*OcAYEa-|zHsdG z|N5PNu>yO8lq^&xcYjTN@G5berGasAx&B_BhD9qFR=qGwPt{mk$$f$+-L#%%Pi@Oh zo1zWuTnY^gOdJNY-szo4D>GztkTlpmgDIZLVAk=^1`SvDuq2rE=h(9{ae$S9i3@+V s|2;C(;Z3;D%*PmJwx2P~{J*cB`*V}5(^++|flg!aboFyt=akR{0Ig0$u>b%7 literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_10-11-11_r.png b/art/game/box_2x3_10-11-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..847c502cb651edde31fb0da4a9874112c507757d GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsU}Ys$B>FSZ)Y6jI-tOF^w+U} z|EKT1?BL?KCaCqvwnpV+&h2R@PnE3zk`)Jp|2jPyJsVYww$B>FSZ*MqqH5l-?TY8^G-g01kQ@>yJ5XXDaQ0RIyLzdD*ox`JOe^FS;-1BY Q*?`n|y85}Sb4q9e0OYPyJsa{VP$B>FSZ*OemYcSw&4K(=o zU;ptE&uFohX;1eB&Mvrj;6j&)yQ|BYGf{1;SCuf{o4NgaVfnsi#tHv+Di@z*eIUE4 zEBxIpLk%GYhC8|^)+MEMi#e3BF8;w-u<0k0#oZc)5|jGN`&fZiA%O$6@+Z`auIsS7 m=&xGZV88v1k;C=oaw~qO875f=%crx0lzO`QxvXPyJscKIb$B>FSZ)Z4i9Z=w5*}U}s z|Dr0bmPf8j*PVECHn{B~OHzwvSI3DnTSTUpSaMyz^Hsr9yDRK*wPeNT>$5W?w@EWF zG^B~2IoCW-@7C!9Isf}-+&+BZl=c5(c|g-qK*O{D2Xd;)&Ti)E$vIiZ{LSXWL7A+Z SfqUPyJsWwj+$B>FSZ)Z4i9Z=w5F+cjh z{$|`Nk?KvEvHZsFjz&2KU6W=`SQ3@JRivL|Cri}XT6-t={tB+^e!1!VV0K mEO!6pXQa+&nIk@Fs_>x=8VR1v)`dV9F?hQAxvXPyJsd=6*jv*Cu-rhLKbwGiK`GUot z|M6w&tXma=ZpTb|Z1!UHgh1MN`0mfsqAFtYFBuH(+r1 z6aP_=p}UjCa=yy2(gqG#+f7aR%#9E!dJUCQ9; L>gTe~DWM4fQFTgr literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-01-11_r.png b/art/game/box_2x3_11-01-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..3b32467f6302049d24d89b5f10bc5ef56120dc7f GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsSZyU$B>FSZ)a@eVo>C9o_zTK z|EKpPyJsd7&j$B>FSZ*Lg#H7E$UT#S7D zcl{o-q>UmfTzzWwUbAW?nK(V3wWy?~MYXxN#59-{S63IDjS~;sUU;?c*gc>L47;im zrd0LKe^$@C<;*U_eC8#Vw-fI(fn*RMfxV>v^3C`E1NU8SczyWRJm!*{5=o&`W*-JA N@pScbS?83{1OWQOJu(0Q literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-10-10_g.png b/art/game/box_2x3_11-10-10_g.png new file mode 100644 index 0000000000000000000000000000000000000000..b03e643a114c874a231fae6c879ca84fe7234aa3 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsa{VP$B>FSZ*MsAH5hQXTPyJsd7&j$B>FSZ)X^CF(~q|l=uJs zKfQQr!o$*6T4&0_B-;=WjEep4WG+Z`^FP81G#UjM+~F<1%f0k6k4oOLLgtS(FJndW)Ti}d1}XA% L^>bP0l+XkK)-*Yb literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-10-11.meta b/art/game/box_2x3_11-10-11.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x3_11-10-11.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x3_11-10-11_b.png b/art/game/box_2x3_11-10-11_b.png new file mode 100644 index 0000000000000000000000000000000000000000..4449aa07ad2fd7ca36c0c796278c73295a0e8e34 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsV+|!$B>FSZ)Y6jI-tPgJbB~) z|4-i;9ly}Lp{%=k&+NEg9TBS&t;ucLK6V`c}rjb literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-10-11_g.png b/art/game/box_2x3_11-10-11_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f767b6dee3ce5b2da2481569b293cb10efea6b3c GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsWqN1jv*Cu-p)A4*I>Zm-2L%? zedRop!be6D9qr#%DBF0kKJ5-CP z=I+p4Jkga!q2X1Nd1}NJ7KS6yS9lnXY)H2?qr literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-10-11_r.png b/art/game/box_2x3_11-10-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..d04d2dab88c0e1378a6f90a35c76c7566a509a6b GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsXk8^$B>FSZ)bROF(~plPfmPS z|MZ-fK%m5j$y_J>%xi7zr!YMdU{F$0IqGTGb*S`SmE$D!u4~7NB{goAs#mo=W#dU` zc&9CqdfdKndgG+2|BuXN^9sAexs#Du;s67iK?5UDeq~?AHuE#)@;_$Zj5GLOlQ2az w{ocEiyg&ta!wa(FI8uxk%#b|Id*U;rlDt9*>y6rTK$kIiy85}Sb4q9e09|}X#{d8T literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-11-01.meta b/art/game/box_2x3_11-11-01.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_2x3_11-11-01.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_2x3_11-11-01_b.png b/art/game/box_2x3_11-11-01_b.png new file mode 100644 index 0000000000000000000000000000000000000000..9561e54ee87a95579dd7a1546f1cfe9bf8e46738 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsVYww$B>FSZ*Lg#H5l+X2eNnz39cQ2C3k(n6b=3wbA5DtgYGIqjjKqWFUIHf8*BmyfaMZ!f%Fck~|61O!;N zH(}5A^=YN+fA}$9?R}A1y!KO(KWqMf7O;{7d^6rLUtJ@Y^FQ;z*TcK#2yYTlh&wu| QY%56C)78&qol`;+01|dR*8l(j literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-11-01_g.png b/art/game/box_2x3_11-11-01_g.png new file mode 100644 index 0000000000000000000000000000000000000000..29e0ba718f1a794f3a641e06696eca6d4f39a2ef GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsXk8^$B>FSZ*OemYcSw&4K(=o zU;ptE&uFohX;1eB`c~b$;2@IO*VQp&=2n??t1hutoZqvzefMY6`HY`W%g*%HV|c%K zRmIbFvh1!*K+~Y0VYg^{_~#R0dl@!qSBls(_?g8sET7Ha(Dy9=Rz4$GQNj1d9Hq@m oWdvk>mNwW2Z{@l0^|19^_KYf%tlO`vjX-KVUHx3vIVCg!0CrGEc>n+a literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-11-01_r.png b/art/game/box_2x3_11-11-01_r.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6f53c631b8c84362a4b702b753c27104edb790 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsTxlg$B>FSZ>KwQ9Z=w5*}U}s z|Dr0bmPf8j*PVEyyPRk71eHTFt}ZEQQM0^v$@FHwi}JYCwe0GTIJSF#zN$yHy#<*C z2MczJp1;R#8~rtoE$w}yU~#oX#Ls8PyJsd7&j$B>FSZ*T18YcSw(4rKrM zf4_{_sR?{j7aUcH?T;;b!dL6@tVJa?Evn7EC8oiwxVpOFY@B%5_QI=m$L;}5K!9E4 z2Q|LN{Wtlay&&}(_bW4pS(|0Q=|beo9Lgom+P!!G>Bqc|Kf9Xmk(Wf$#8fK>kgTVx KpUXO@geCw0%{sCG literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-11-10_g.png b/art/game/box_2x3_11-11-10_g.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3b0a69ee76fdcb3bd76da26b892e211ace7c1c GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsXk8^$B>FSZ*MqqH5l-?T$KO# zFMORg>urrKDreKuRyxHo9SzXvW888r%CpdTF;~HLo4xHfE3Mu${yp9E#g~ua{o)lB zXJsW@)07$*m^c)m#JjLRQ+uY?axr|={%yjLq`r}*VTY#FVdQ&MBb@0HL@>cmMzZ literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-11-10_r.png b/art/game/box_2x3_11-11-10_r.png new file mode 100644 index 0000000000000000000000000000000000000000..e07ee6789759dbac2426b7c9d30e987541007746 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsR~aQ$B>FSZ)X^CF(~q|l=uJs zKfQQr!o$*6T4&0_B-PyJsTfZe$B>FSZ*M3HF(~jbADr^= zf4m->fUC2Bc;w`{C%m4usHCPvolPz!C{Gv1kcv5PZy0hNFyL_x-1+5S zc-b!gNCJ@6rjT&AW2GBNwWq6}%Q~loCIGUb BJD&gm literal 0 HcmV?d00001 diff --git a/art/game/box_2x3_11-11-11_r.png b/art/game/box_2x3_11-11-11_r.png new file mode 100644 index 0000000000000000000000000000000000000000..f143e9c8d82ddf85a4880d6f93a478e228c986ea GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJsU%Mq$B>FSZ*M5_F(~jjUz}F( zUz^|6sIgV4PBu%QcU6$Zv?Z%nohZDmT(~3sTYK()i(AtFS2xa$u77l;U=JhE1Psup meRK8RfM07HkEF@uE6ihU-Y<|M`1>8PSD;042K<*93 Y3$8L&jttxffv#ZiboFyt=akR{0LLIeC;$Ke literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_001-111_g.png b/art/game/box_3x2_001-111_g.png new file mode 100644 index 0000000000000000000000000000000000000000..fa79a6724bc51b4f51e5894ce39ad94950de7786 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qd2!$978JRyq$iLtHFT7b^XTw z|5K}Pt;h}Zbk481$1W!;&U!-dJrjdN=+#etE>2hSg;wOB`u_ArrB>0K8V$w=|DwN4 zddSl7+VjklZC{_RQDxoZ$(SE>V7AByHP$_v4Yl(94$;pJ$*}8N<}U7;EO9M!o2Sov z#$}!tmIrWEOlG?06WpQc#m=~lgVl<0*}3pp4AIZ)5A)qj)NvD-v8x>DKn71&KbLh* G2~7ZNV^81! literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_001-111_r.png b/art/game/box_3x2_001-111_r.png new file mode 100644 index 0000000000000000000000000000000000000000..0823bfa875e33da585368f7809d932ac8ebba34b GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qq`U=jv*Cu-d^+OI-nrHd|^q& zf9=~-9~^4(xGiz=Hn;F2egpTf3=9F;Yqei{e5$IRv0wBngYBeX>qYrGyfqJB`t(R` z%2!~#BIKY8CAc>HlfQpZlGkMO|BrL$Ty=O{qV`7GgJCO6fb=~lzxM|tc`fe#@2zG2 amgnVMB7{}K=wtgKOUq1dMJApx(bHhZ2 p*{5wk%zVGEea&UYYt8Szzd047Vbu}%;ReuA44$rjF6*2UngDeXPmllr literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_010-111_g.png b/art/game/box_3x2_010-111_g.png new file mode 100644 index 0000000000000000000000000000000000000000..3f2a208ec47db115852f8d529dc52677d96aa200 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QfoY2978JRyq$58uR(#sb>Ywd z`+fYkctxvCKXI&b)wY)6+;b|kWZZa^l#D{=NCw?M({W(MmzhlxE-!PrX4-@_yx3^;l(b`{`@*e{vT$V0=`@>lbJ3qaWDZg6%XZasM>ffHBIlgbhY>SuIPK=KQC3i z;8m*JyKdX%d&Z4kahd=4E6%bQRi^$5)nHxZ*_bhF^@Vi5Ggd2D7Htzfy-OcaR{wsv`@8>`ZD-ruEbv83ynGt*|RZu=d7ktri8ZR2+9U0G+E*=**OSv)>- zev0`4h71V?Ugiaf3?@7c%Q~O_di2v`%mM-aV)FVdQ&MBb@0IC;EEC2ui literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_011-110.meta b/art/game/box_3x2_011-110.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_011-110.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_011-110_b.png b/art/game/box_3x2_011-110_b.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ba1cc649e461a9463e3492d331be04dae199fb GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qq7(&jv*Cu-cAeTYB1n&j{f*B ze4V}4BKbur+?ti_8R9~-TstOrD29f1SjM09Iq_SQsc-J-H%BwVz8tuicPCl-eFN); zjSOaD2iWd0=O1`gf1K|R>(v`3jDj;PzIF(_w(oz?Bk;@W%p&)ebt{f~-ecrWNM_8@ nX*j!>{fgAie&#IRJ8ir>-YU2h$GpA+bPj{3tDnm{r-UW|*4#*V literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_011-110_g.png b/art/game/box_3x2_011-110_g.png new file mode 100644 index 0000000000000000000000000000000000000000..361355506bbad00116d287e2e421e259924fc179 GIT binary patch literal 222 zcmV<403rX0P)y!F0x@f9)rlE1YNa+anWjuWsp1pnDiRUHx3vIVCg!0HHuah5!Hn literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_011-111.meta b/art/game/box_3x2_011-111.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_011-111.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_011-111_b.png b/art/game/box_3x2_011-111_b.png new file mode 100644 index 0000000000000000000000000000000000000000..757228976fa5f456f6c678d5bd9e6d05c69c1b88 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qstg5jv*Cu-cAqXI$*%zT>9l- zcv-x5@?WhK-idpdGvo!g2tHC-m=$zh6&PsdN2QMq<=Jlj4;QlxFSb5G9;SCJZ z+#5DRiONR7gS(##p2-&ZW@+KmFIctM%b3i9Bc)I$ztaD0e0sz<#KsEpX literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_011-111_g.png b/art/game/box_3x2_011-111_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3d15d421376311612ac4e6efb67aee0abea89e GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QWHI0978JRyq)gIb-;jwW$Tmw z@!OWSnSBhppch>xw_v8|kr@*oi@GW)X}#KW^se_ke!(48eSM4W-kGc~8qr<8p)Evj zg6T>n?&mKuzNiX0C^MQs3F9*b-)mSu&v?C0X?I1;;-1Mj&Sh@%T=JiBndgOkMa~5i x8D^Dm8?L?N+mP8hOP9&#WV{dKwkP$6Ij_ytaZ5Vv;RAFWgQu&X%Q~loCIFuJPBQ=i literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_011-111_r.png b/art/game/box_3x2_011-111_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1d148f1453bd0d6b0a0b415dd2913a142c0b9179 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QdOQVjv*Cu-d+pjI-tPAd?Bsk zzjk?ill&ox6z++8m_wWbqEq>L6z|^cvCL;Yu+(Bkra?R70+U}Uxi-9SYD(41cyF6e zV94TJFbzs9_S$~lc+SNGU#{DoF9~Cwe0lDMdbP0l+XkKOY%T; literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_100-111.meta b/art/game/box_3x2_100-111.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_100-111.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_100-111_b.png b/art/game/box_3x2_100-111_b.png new file mode 100644 index 0000000000000000000000000000000000000000..f7395d19352ebb29218bb1e3aa28584fcde8798f GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QVpIijv*Cu-cEDmI$*%TQtti# ze`978JRyq$KCtHFTBIr!uM z`pS7)uSBj}d1%+F+wy!W;$WSm%y1zpd);v*BlAAt{)X@>v)3QfO+scoD->k7ci1&E z?j=jZ^9d7Yg^QInte?U#TPPuzDaWh9mvh6;y{&GE@?}a&d5qr@mp|RfqGYoEep;i( zS#7mOkF(k@!&k7}0BX1`n&iK<)vv*JYM39>%vs@OjX7ukxA9)KF!6HSHmMuvOa@O^ KKbLh*2~7Yu$xnj- literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_100-111_r.png b/art/game/box_3x2_100-111_r.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e1a2b30c688de9a718808de3b401799b5a4c7a GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QZ1e?jv*Cu-cEDmI-tPAvU%zM z|3y_=9T69{r1rkMBhs=)*y+q9W@F>>?-!C8?oTs5cTn$vZhGa5zZX|*w2wG_;Ou4o z^A|pwzU0+lkY-I-%#b6}(95(T^PSV)4cmhlZd_)l*491yJ~g3j-um~KqyretxDG6{ pY`sxj*Rqvo!}FS!FKm~J8T*1|yee`&E(5xU!PC{xWt~$(69E44O#=V` literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_101-111.meta b/art/game/box_3x2_101-111.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_101-111.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_101-111_b.png b/art/game/box_3x2_101-111_b.png new file mode 100644 index 0000000000000000000000000000000000000000..596bae42ec5772bd5f657c9ce072f5c0afb158c1 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qf;0tjv*Cu-cGy7)nLHkYWnMc z{I=x^QWu}~tbRN1_`#BNF0CLLQ9(oF;@GgO9qvBQzq5Q$>+LGNcXN?kW72;4J%8Oo zZrd2n+F!$}(a^?}0VS60aoBvOS72vQbs=}n-l^X<#c`)*%+`LY?Z9Xv;^53^a#rSq kQDXH^f7VUDH&QJaTuOC}?#cvw2fB#C)78&qol`;+01rGzDF6Tf literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_101-111_g.png b/art/game/box_3x2_101-111_g.png new file mode 100644 index 0000000000000000000000000000000000000000..543f21a500865bc5026cab5765dedabddbbba4fc GIT binary patch literal 219 zcmV<103`p3P)#hy}hn z?A{Owcu1aL3wTMMUYD$32Id8Z3{p@+^uE*9eN|JpMQm=|AGg%>T2?}fb^Y{xjBF0c3|k(F oNM)X@ewLMR#PYr8eTOP`Ej<-CsinW8fR1ADboFyt=akR{0EM$i@&Et; literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_110-011.meta b/art/game/box_3x2_110-011.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_110-011.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_110-011_b.png b/art/game/box_3x2_110-011_b.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfa35831add97097b203b0660541cb05382673b GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QmvjYjv*Cu-cB>*JD|YBJh$tA zy=CkvCU5PSH467nOgM4Fi%CSCLBTlql8ur^s|Ztst-hO}YHrPs+q_XZa;K~l7_)R7 zdRbS@{C42goO^q(o-a)J`uv9UH{ITgF{Njj)LlIomA4r&uDN056rbq7`x9S8gA{i_ oGGo?@>V)s1S?pG)Chsya@3q%)xoKK<6zCuZPgg&ebxsLQ0MR}~6aWAK literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_110-011_g.png b/art/game/box_3x2_110-011_g.png new file mode 100644 index 0000000000000000000000000000000000000000..dfda67bf0199a055ec5f12ee126539187286500f GIT binary patch literal 221 zcmV<303!d1P)|7`h*;8zIL^f$n9UJTa|F~ZQ)o9WGC#&iV0U@+KQi(XsC4g1jo20H!ul^F(5MC2R|{2?;uXy6MO weWtwu27rbEph>Ahl~XAVco0)*djsvc03`n?P!KEn?EnA(07*qoM6N<$f@kDRQ~&?~ literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_110-111.meta b/art/game/box_3x2_110-111.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_110-111.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_110-111_b.png b/art/game/box_3x2_110-111_b.png new file mode 100644 index 0000000000000000000000000000000000000000..6808a632793b35dba439350e50fa015577a1d132 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qgxm#jv*Cu-p+93YB1no+5G7L zei?nPB>zh<1n%zK+CC+bnYS~ePf5whc;a!@sUk`&tM0{Ubxl}vy?gm(jqKTTzi~!1 z9Ah#OTd}}r$S-a-gO9~SV zRZeK6C$q0x#(HH-!z{6Y%S>5O4rfcmqmEvm%gvC&6feGe!gLOUS^eLO7{fjv3}Q_C z?D#W&1z7b<{VBCkiAEeN&h_N)KvtV6i`d^yw(pwX+jw+jApbHs1UHx3vIVCg! E04PyS=l}o! literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_110-111_r.png b/art/game/box_3x2_110-111_r.png new file mode 100644 index 0000000000000000000000000000000000000000..e085d49901571e3092fcc5dfe1e54fddc95b663c GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qq7(&jv*Cu-p+93I-tPAvU%zM z|3y_=9v>I@mUO5>(ZrRrf4 zdif5FH#8WeSrZmB$dbsi^|m~?bs7Mf`XHZxbB$Bmng2DQugq5rcG|~L_0?A z3lR;+m`v`i?Y!r-$eTW literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-001_g.png b/art/game/box_3x2_111-001_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ce4fe4fbd69e43970e1fb677810237ec36492e GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qd2x#978JRyq$iKi$RgY<@nP7 z|5Lw*1XONp3j83OEnZVB!Q;`#(6CCYdV;Wv3&RtU7slqV4Xl(ab(mhKx?G!J&iHz< zM#RIq9>=&KrW~(^-kVNuw7zb6pmtzgKz_w!hh^jV`;l8p--TVX-uM~@LUZDFJJYD@<);T3K F0RXfbP8z*&CEZWW=b~9VzPbKE$cDGjBn1o-t9SZr_vpm za#RkuG36|?Gnlt|_nKcGCI2S=Pf@tlSYB?n`tf%C?sV44fqqZDJ)r8qicfL-yl>RF l`TeixDTn7@pu literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-010_g.png b/art/game/box_3x2_111-010_g.png new file mode 100644 index 0000000000000000000000000000000000000000..f19e173486f1e6add5fb168229e5e9290916528a GIT binary patch literal 220 zcmV<203-j2P)q!9~kA&)eK$W@0AQyK(Q2~31nS{rRM;^ Wo;*(Wd>k?W0000HELlT$BZ_9>bJ_57iz|73uogK&*0AOPWk!5cm0Kf|54QCw>3 za>JwHY!Tm?-*2M*<}3gARM=H?@kv=`ywABkbyM;cIX6sXkcJYP`WyDJFPgJ&s#c@l dH~GC=?gTX}*!i$+@&`JF!PC{xWt~$(698pwLR0_% literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-011_g.png b/art/game/box_3x2_111-011_g.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae838a50ceb69032dca602f2406421fb7085b3e GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qd2!$978JRyq)35cR+!IW%{xI z^)u(0tSnm9(%NDfB|OtsK}@5Mp<$KQ?g{oC9Skcp4YK8~C6$GJy20|TU-G829m^Wu z$PI^TC0Z*kG37)x^xkaEi_T0Dw`R%X@89Qc$24`)e4WOulm2bTAD)@LyGA^V(My&wOhjkIVbvWZOkGEs;k@ zOg(`)E62h2X6vrc38~_@wHx1^)l~Z_$LX``r}|^z4UDE{3y!f}xzQjc9T5DFeb<^h jUUMDXHcsvHPp}ccI!VTBb#632&?yX_u6{1-oD!M*JD|YBJa^Uq z|3$l|@EL?GZBG8s>tkuD#CC*};l!B~ej{fW76#u&v(E?Rp6I9l53ub`&&_)xyn#WQ zd&5SC*$?^lT>O7H=bQI}z^6(6+zh7IJnLF@4jg03ff8n+a literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-100_g.png b/art/game/box_3x2_111-100_g.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f664b9fbd107394814aa147157dfb30719d3ee GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qd2x#978JRyq)IA)#AXzqJ8?` z|I?e*TV<7BD3rJdxzBZ8#q7Jlg3;iZ#4E?Jjt+(_t{mg~&HeA*oHXV@C$a8Xa~BF!PC{xWt~$(699A` BN^AfC literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-100_r.png b/art/game/box_3x2_111-100_r.png new file mode 100644 index 0000000000000000000000000000000000000000..eb456d434c67378fc4536d21ff990553bf20a65d GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qgxm#jv*Cu-d;20J7B=U>=5(x zfBZ7xAU3U~ZxcLfqRn;GdDG4wJagvmT-y`k3E=dFGbJ15FfD!FeD{P-dQ3&N)cK7&J?A&D z-0*1VWw{Yjyufu&d-!GR_J7kI62Bgi^DT==SeB8JW_(Frk#oaD25BhasUKkbtZe`H k=r7m)`!T(dw=Aob5-)qHV&`g|19BOIr>mdKI;Vst076hl_W%F@ literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-101_g.png b/art/game/box_3x2_111-101_g.png new file mode 100644 index 0000000000000000000000000000000000000000..e52f10d7a2029f45eb68fbd202e3d734c59aafe7 GIT binary patch literal 219 zcmV<103`p3P) z|3y}=Neh@4u9g0f>vP0PK_l&GzMPIKu(0l$LKt)}$)@cs=*U z+zFr9L>hXTHoV;DR9~zE@L%hV p&kHC1y>4`19((FH{rm+s;(R6wUYzf~=mFit;OXk;vd$@?2>?pIOU?iQ literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-110.meta b/art/game/box_3x2_111-110.meta new file mode 100644 index 0000000..723fa60 --- /dev/null +++ b/art/game/box_3x2_111-110.meta @@ -0,0 +1 @@ +{class="moveable"} \ No newline at end of file diff --git a/art/game/box_3x2_111-110_b.png b/art/game/box_3x2_111-110_b.png new file mode 100644 index 0000000000000000000000000000000000000000..fa34e594642a750dd472310d660a355ec7773448 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QdOQVjv*Cu-p(-OJD|YB{C3s< z|3$mD$R;!^2tSdYSybe*h~cOrgNw@wZplU!#w#K}vi4nRJyW!ufA{i_+s}IcWYJl0 zj44ZJ!Lr%Rt26(9jGS{oBT_hCjp50b;Gbff8l<>aY=jWAJ~7=jn!b1a`e$=k%J!d- bJ(Ft2(nM{my|7$?8Ql%zO);F=RoBY5%xGE9IH|vJzopr0CO-qbpQYW literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-111_g.png b/art/game/box_3x2_111-111_g.png new file mode 100644 index 0000000000000000000000000000000000000000..d294f87ae265bc8cd32725767ae5372f54a1b995 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(QdOQVjv*Cu-rm^A*I>ZW^6>DF zf9rdKrI+rQp~n7fU!e5|VWaFkozYCI=7rp|VY14to56V3 c?7y`5;%^EL&d#xufv#ZiboFyt=akR{0078Bj{pDw literal 0 HcmV?d00001 diff --git a/art/game/box_3x2_111-111_r.png b/art/game/box_3x2_111-111_r.png new file mode 100644 index 0000000000000000000000000000000000000000..56d9ffd0d965e28ab15156a08d5cd14c14bce281 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qu&@Pjv*Cu-rg|eYcSwpIcR<4 z|Nb1UB_e`C0XZ^vOG@G_O{UG-tP&b}vAHJkHoNVS_~$vP zlD}+14&Ds9j9XYPpfGZ)roJeWpHz1Hz^d;H)Zdz4xW{UDLcpcG-MJrVHG`+CpUXO@ GgeCx=5 (2px ring, 2px gap, solid core) + green ON: k odd or k>=5 (alternating 1px rings, solid core) + blue ON: k==1 or k>=4 (1px ring, 2px gap, solid core) + +Run from inside art/game/ : python3 gen_composite_boxes.py +""" +from itertools import product +from collections import deque +from PIL import Image + +CELL = 16 + +RULES = { + 'r': lambda k: (1 <= k <= 2) or (k >= 5), + 'g': lambda k: (k >= 5) or (k >= 1 and k % 2 == 1), + 'b': lambda k: (k == 1) or (k >= 4), +} + + +def inset_grid(cells, W, H): + """Return k[y][x] for the W*CELL x H*CELL pixel grid (-1 = outside).""" + Wp, Hp = W * CELL, H * CELL + occ = [[False] * Wp for _ in range(Hp)] + for (cx, cy) in cells: + for y in range(cy * CELL, cy * CELL + CELL): + for x in range(cx * CELL, cx * CELL + CELL): + occ[y][x] = True + + INF = 10 ** 9 + dist = [[INF] * Wp for _ in range(Hp)] + dq = deque() + for y in range(Hp): + for x in range(Wp): + if not occ[y][x]: + dist[y][x] = 0 + dq.append((x, y)) + while dq: # multi-source BFS with chebyshev (8-neighbour) steps + x, y = dq.popleft() + for dy in (-1, 0, 1): + for dx in (-1, 0, 1): + if dx == 0 and dy == 0: + continue + nx, ny = x + dx, y + dy + if 0 <= nx < Wp and 0 <= ny < Hp and dist[ny][nx] > dist[y][x] + 1: + dist[ny][nx] = dist[y][x] + 1 + dq.append((nx, ny)) + + k = [[-1] * Wp for _ in range(Hp)] + for y in range(Hp): + for x in range(Wp): + if occ[y][x]: + # the region beyond the image edge counts as outside too + edged = min(x + 1, Wp - x, y + 1, Hp - y) + k[y][x] = min(dist[y][x], edged) - 1 + return k + + +def render(cells, W, H, channel): + k = inset_grid(cells, W, H) + rule = RULES[channel] + img = Image.new('RGBA', (W * CELL, H * CELL), (0, 0, 0, 0)) + px = img.load() + for y in range(H * CELL): + for x in range(W * CELL): + if k[y][x] >= 0 and rule(k[y][x]): + px[x, y] = (255, 255, 255, 255) + return img + + +def connected(cells): + cells = set(cells) + start = next(iter(cells)) + seen = {start} + stack = [start] + while stack: + x, y = stack.pop() + for dx, dy in ((1, 0), (-1, 0), (0, 1), (0, -1)): + n = (x + dx, y + dy) + if n in cells and n not in seen: + seen.add(n) + stack.append(n) + return len(seen) == len(cells) + + +def enum(W, H): + """All connected polyominoes whose bounding box is exactly W x H.""" + coords = [(x, y) for y in range(H) for x in range(W)] + out = [] + for bits in range(1, 1 << (W * H)): + cells = [coords[i] for i in range(W * H) if bits >> i & 1] + if len(cells) < 2: + continue + xs = [c[0] for c in cells] + ys = [c[1] for c in cells] + if min(xs) != 0 or max(xs) != W - 1 or min(ys) != 0 or max(ys) != H - 1: + continue + if not connected(cells): + continue + out.append(cells) + return out + + +def mask_name(cells, W, H): + rows = [['0'] * W for _ in range(H)] + for x, y in cells: + rows[y][x] = '1' + return '-'.join(''.join(r) for r in rows) + + +BBOXES = [(1, 2), (2, 1), (2, 2), (3, 2), (2, 3)] + +if __name__ == '__main__': + total = 0 + for (W, H) in BBOXES: + for cells in enum(W, H): + mask = mask_name(cells, W, H) + for ch in 'rgb': + fn = 'box_%dx%d_%s_%s.png' % (W, H, mask, ch) + render(cells, W, H, ch).save(fn) + total += 1 + print('wrote %d files' % total) diff --git a/generic_moveable.lua b/generic_moveable.lua index dced70c..f92ded3 100644 --- a/generic_moveable.lua +++ b/generic_moveable.lua @@ -2,14 +2,15 @@ require "entity" GenericMoveable = class("GenericMoveable", Entity) -function GenericMoveable:initialize(x, y, color, sprite, name) +function GenericMoveable:initialize(x, y, color, sprite, name, cellShape) Entity.initialize(self, { name = name, x = x, y = y, color = color, collision = "moveable", - sprite = sprite + sprite = sprite, + cellShape = cellShape }) end diff --git a/generic_unmoveable.lua b/generic_unmoveable.lua index 7ab390e..4c15b44 100644 --- a/generic_unmoveable.lua +++ b/generic_unmoveable.lua @@ -2,13 +2,14 @@ require "entity" GenericUnmoveable = class("GenericUnmoveable", Entity) -function GenericUnmoveable:initialize(x, y, color, sprite) +function GenericUnmoveable:initialize(x, y, color, sprite, cellShape) Entity.initialize(self, { x = x, y = y, color = color, collision = "unmoveable", - sprite = sprite + sprite = sprite, + cellShape = cellShape }) end diff --git a/level_editor/object_attributes.lua b/level_editor/object_attributes.lua index 2ab6257..71f0a64 100644 --- a/level_editor/object_attributes.lua +++ b/level_editor/object_attributes.lua @@ -43,10 +43,14 @@ function getAllAssets() local sprite = topFolder .. "/" .. folder .. "/" .. fileToAnalyze globalAssetProperties[name].sprites[color] = sprite - if not globalAssetProperties[name].cells or reanalyzeCells then - globalAssetProperties[name].cells = {} + -- Precompute the occupied-cell shape once per asset/colour and + -- cache it here; entities share this table by reference so + -- collision never rescans pixels at runtime. Keyed per colour + -- (each channel leaves its own gaps) rather than reset per file. + globalAssetProperties[name].cells = globalAssetProperties[name].cells or {} + if not globalAssetProperties[name].cells[color] or reanalyzeCells then globalAssetProperties[name].cells[color] = getCellsFromSprite(sprite) - end + end end end end diff --git a/room.lua b/room.lua index 99d0478..69c1314 100644 --- a/room.lua +++ b/room.lua @@ -570,10 +570,15 @@ function Room:createEntity(class, color, x, y) self:setActiveColor(color, true) elseif props and props.sprites and props.sprites[color] then local sprite = loadSprite(props.sprites[color]) + -- Reuse the cell shape precomputed by getAllAssets (nil/empty falls back + -- to the full sprite rectangle inside Entity), so an L/U/notched block + -- collides on its real cells and its gaps read as empty space. + local cellShape = props.cells and props.cells[color] + if cellShape and #cellShape == 0 then cellShape = nil end if behavior == "moveable" then - entity = GenericMoveable:new(x, y, color, sprite, class) + entity = GenericMoveable:new(x, y, color, sprite, class, cellShape) else - entity = GenericUnmoveable:new(x, y, color, sprite) + entity = GenericUnmoveable:new(x, y, color, sprite, cellShape) end self:registerCollidable(entity, {color}) end