Created
February 9, 2023 00:18
-
-
Save patrickgh3/db966bf1fc6b7fcc09704ce8f1b49906 to your computer and use it in GitHub Desktop.
An exploration of "edge cases" in "Sokoban" (PuzzleScript Script)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Play this game by pasting the script in http://www.puzzlescript.net/editor.html |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
title An exploration of "edge cases" in "Sokoban" | |
author Patrick Traynor 2023-02-08 | |
noaction | |
======== | |
OBJECTS | |
======== | |
Background | |
lightgreen green | |
11111 | |
01111 | |
11101 | |
11111 | |
10111 | |
Target | |
darkblue | |
..... | |
.000. | |
.0.0. | |
.000. | |
..... | |
Wall | |
brown darkbrown | |
00010 | |
11111 | |
01000 | |
11111 | |
00010 | |
WalkPlayer | |
black orange white blue | |
.000. | |
.111. | |
22222 | |
.333. | |
.3.3. | |
CrawlPlayer | |
black orange white blue lightgreen green | |
.000. | |
41002 | |
.224. | |
.333. | |
34..3 | |
Crate | |
orange | |
00000 | |
0...0 | |
0...0 | |
0...0 | |
00000 | |
Magic | |
orange white | |
..... | |
..0.. | |
.010. | |
..0.. | |
..... | |
Exp1 | |
red orange yellow | |
0.0.0 | |
.010. | |
01210 | |
.010. | |
0.0.0 | |
CrateRemains | |
transparent | |
..... | |
...0. | |
.0... | |
..0.. | |
..... | |
CrateSpawnPoint | |
transparent | |
KillBorder | |
black | |
======= | |
LEGEND | |
======= | |
. = Background | |
# = Wall | |
P = WalkPlayer | |
Q = CrawlPlayer | |
* = Crate | |
@ = Crate and Target | |
$ = WalkPlayer and Target | |
% = Wall and Target | |
! = WalkPlayer and CrawlPlayer | |
O = Target | |
M = Magic | |
S = CrateSpawnPoint | |
X = KillBorder | |
Player = WalkPlayer or CrawlPlayer | |
======= | |
SOUNDS | |
======= | |
Crate move 36772507 | |
Target move 72403107 | |
EndLevel 89451303 | |
sfx1 37636909 | |
sfx2 20778702 | |
sfx3 48410502 | |
================ | |
COLLISIONLAYERS | |
================ | |
Background | |
KillBorder, Magic, CrateSpawnPoint | |
Target, CrawlPlayer | |
CrateRemains | |
WalkPlayer, Wall, Crate | |
Exp1 | |
====== | |
RULES | |
====== | |
( Original sole sokoban rule) | |
[ > WalkPlayer | Crate ] -> [ > WalkPlayer | > Crate ] | |
( Crawl player ) | |
[ > CrawlPlayer | Target ] -> [ > CrawlPlayer | > Target ] | |
([ > Target | Wall ] -> [ Target | Wall ]) | |
([ > CrawlPlayer | Wall ] -> [ CrawlPlayer | Wall ]) | |
( Crates explode each other ) | |
[ Exp1 ] -> [ ] | |
[ > Player | > Crate | Crate ] -> [ Player | Exp1 CrateRemains | Exp1 CrateRemains ] again sfx3 | |
( Kill border ) | |
[ > Player | KillBorder ] -> [ | KillBorder ] sfx2 | |
[ > Crate | KillBorder ] -> [ | KillBorder ] sfx2 | |
[ > Target | KillBorder ] -> [ | KillBorder ] sfx2 | |
( Magic ) | |
late [ WalkPlayer Magic ] [ CrateSpawnPoint ] -> [ WalkPlayer ] [ Crate ] sfx1 | |
============== | |
WINCONDITIONS | |
============== | |
all Target on Crate | |
======= | |
LEVELS | |
======= | |
( | |
####.. | |
#.O#.. | |
#..### | |
#@P..# | |
#..*.# | |
#..### | |
####.. | |
) | |
message First, these are the basic rules. Walk around, push the crate, walls are solid for both you and the crate, put the crate on the target to win the level. | |
####.. | |
#o.#.. | |
#..### | |
#.p..# | |
#..*.# | |
#..### | |
####.. | |
message Edge case! What if the crate is on the edge of the level? (Ok, this isn't REALLY an edge case, but still) | |
####### | |
#.....# | |
#....o# | |
#.p..*# | |
#...#.# | |
#..#..# | |
#..#..# | |
#..#..# | |
####### | |
message Edge case! What if there are multiple crates and multiple targets? Do you think you win after placing just one, or does it require all of them to be placed? | |
######## | |
#o.*..o# | |
###....# | |
#...p.*# | |
#......# | |
#.*...## | |
####o### | |
######## | |
message Edge case! What if there are more crates than targets? Do you think the game lets you win this level, or not? | |
######## | |
#..*...# | |
###....# | |
#...p.*# | |
#......# | |
#.*...## | |
####o### | |
######## | |
message Edge case! What if there are more targets than crates? Do you think the game lets you win this level, or not? | |
#########........... | |
#.o.*.o.############ | |
#.......#...#...#.m# | |
#..sp...#.#.#.#.#.## | |
#.........#...#...#. | |
#..o.*..###########. | |
#########........... | |
message Edge case: What if the crate starts on top of the target? What happens then? | |
##### | |
#...# | |
#.p.# | |
#...# | |
#.@.# | |
#...# | |
##### | |
message Further exploration of that edge case: | |
######### | |
##.##.### | |
#.......# | |
##..@...# | |
#..@p@.## | |
##..@..## | |
#.......# | |
#..##.### | |
######### | |
message Edge case! What if there is more than 1 player? How do they behave? | |
######### | |
#.......# | |
#.p.o.p.# | |
#.......# | |
#.....*.# | |
####.#### | |
####..### | |
######### | |
message Edge case! What if the level is almost entirely filled with players? How the heck does the game handle that? | |
######## | |
#pppppp# | |
#pppppp# | |
#ppp*pp# | |
#pppppp# | |
#pppppo# | |
#p##p### | |
#pppp### | |
######## | |
message Edge case! What if you could reach the boundary of the level, past the outer walls? What would happen? | |
xxxxxxxxxxxxx | |
x###########x | |
x#...#######x | |
x#..........x | |
x#...#####.#x | |
x#.p.#####.#x | |
x#...##....#x | |
x#####o**###x | |
xxxxxxxxxxxxx | |
message Edge case! What if level boundaries could be arbitrarily shaped instead of just a rectangle? | |
########### | |
#ppppppppp# | |
#.........# | |
#.........# | |
#.........# | |
#....x....# | |
#.........# | |
#.........# | |
#.........# | |
#@@@@@@*@@# | |
xxxxxxx.xxx | |
xxxxxxx.xxx | |
xxxxxxxxxxx | |
message Edge case! What about a 1-wide level? Could the game handle that? | |
x#x | |
x@x | |
x.x | |
x#x | |
x.x | |
xox | |
x.x | |
x*x | |
x.x | |
xpx | |
x.x | |
x.x | |
x*x | |
x.x | |
x.x | |
xox | |
x.x | |
x@x | |
x.x | |
x#x | |
x#x | |
message Edge case! What happens if you push a crate into another crate? Could you push multiple in a row? Or... | |
########## | |
####o*.### | |
######.### | |
#.....*..# | |
#..####### | |
##.#p....# | |
##*#####.# | |
##.......# | |
########## | |
message Edge case! The player is normally standing up and resting on top of the ground, and interacts with other objects resting on top of the ground. What if instead, the player was on the "ground layer", crawling around in the grass, and interacts with other objects on the ground layer? | |
xxxxxxxxxxxxxx | |
x............x | |
x............x | |
x............x | |
x...####.o...x | |
x...#..#.....x | |
x...#*.###...x | |
x...#.q..#...x | |
x...#o.*.#...x | |
x...#..###...x | |
x...####.....x | |
x............x | |
x............x | |
x............x | |
xxxxxxxxxxxxxx | |
message Edge case! What if the crawling player and standing players are on the same level? | |
xxxxxxxxxxx | |
x.........x | |
x..o......x | |
x.........x | |
x.........x | |
x.#######.x | |
x.#.p*!.#.x | |
x.#######.x | |
x.........x | |
xxxxxxxxxxx | |
message Edge case! Hey, where's my target? How am I supposed to win? | |
xxxxxxxxxxxxxxxxx | |
x...............x | |
x...............x | |
x...............x | |
x...............x | |
x...............x | |
x.....#####.....x | |
x.....#..*#.....x | |
x.....#.q.#.....x | |
x.....#...#.....x | |
x.....#%###.....x | |
x...............x | |
x...............x | |
x...............x | |
x...............x | |
x...............x | |
xxxxxxxxxxxxxxxxx | |
message Edge case! Hey, where's my crate? How am I supposed to win? | |
xxxxxxxxxxx | |
x.........x | |
x.........x | |
x.........x | |
x...q.....x | |
x....o....x | |
x.........x | |
x.........x | |
x.........x | |
x.........x | |
xxxxxxxxxxx | |
message Edge case! What if there is no player? Now that would be a weird situation... What do you think would happen? | |
####.. | |
#.@#.. | |
#..### | |
#@...# | |
#....# | |
#..### | |
####.. | |
message Edge case! What if there are also no targets or crates? | |
####.. | |
#..#.. | |
#..### | |
#....# | |
#....# | |
#..### | |
####.. | |
message Edge case! What if there is a 1x1 level? | |
. | |
message Edge case! What if there is no level data? What happens then? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment