Skip to content

Instantly share code, notes, and snippets.

@Draknek
Last active December 26, 2018 16:29
Show Gist options
  • Select an option

  • Save Draknek/c051100c2a0741b0c75dba5aa9684551 to your computer and use it in GitHub Desktop.

Select an option

Save Draknek/c051100c2a0741b0c75dba5aa9684551 to your computer and use it in GitHub Desktop.
Untitled PuzzleScript Script
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
title Cell Escape
author Alan Hazelden (, Lee Shang Lun, and Jacopo Berta)
(verbose_logging)
background_color grey
noaction
run_rules_on_level_start
(TODO:
fix disconnection bugs
earlier levels about the 2-bond limit
visible arms
levels about pushing)
========
OBJECTS
========
Background
white white
11111
10111
11111
01111
11101
Exit
transparent (DarkBlue
.....
.111.
.1.1.
.111.
.....)
Hole
black
Wall_Full
#444
Wall_Alone
#444
.000.
00000
00000
00000
.000.
Wall_L
#444
0000.
00000
00000
00000
0000.
Wall_R
#444
.0000
00000
00000
00000
.0000
Wall_U
#444
00000
00000
00000
00000
.000.
Wall_D
#444
.000.
00000
00000
00000
00000
Wall_LU
#444
00000
00000
00000
00000
0000.
Wall_LD
#444
0000.
00000
00000
00000
00000
Wall_RU
#444
00000
00000
00000
00000
.0000
Wall_RD
#444
.0000
00000
00000
00000
00000
Player
#495e2b
.....
.000.
.000.
.000.
.....
Prisoner
darkblue
.....
.000.
.000.
.000.
.....
HoldL
#eb9141
.....
.....
0....
.....
.....
HoldR
#eb9141
.....
.....
....0
.....
.....
HoldU
#eb9141
..0..
.....
.....
.....
.....
HoldD
#eb9141
.....
.....
.....
.....
..0..
Gap
transparent
ChangeDir
red
StartDir
blue
=======
LEGEND
=======
. = Background
# = Wall_Alone
P = Player
Q = Prisoner
x = Exit
_ = Hole
Wall = Wall_Alone or Wall_Full or Wall_L or Wall_R or Wall_U or Wall_D or Wall_LU or Wall_LD or Wall_RU or Wall_RD
Person = Player or Prisoner
HoldDir = HoldL or HoldR or HoldU or HoldD
=======
SOUNDS
=======
================
COLLISIONLAYERS
================
Background
Hole, Exit
Player, Wall, Prisoner, Gap
HoldL
HoldR
HoldU
HoldD
ChangeDir
StartDir
======
RULES
======
(Walls)
[ Wall | Wall_Alone | Wall ] -> [ Wall | Wall_Full | Wall ]
up [ Wall_Alone | Wall ] -> [ Wall_U | Wall ]
right [ Wall | Exit | Wall ] -> [ < Wall | Exit | > Wall ]
[ moving Wall_U ] -> [ moving Wall_Full ]
[ left Wall_Alone ] -> [ left Wall_LD ]
[ right Wall_Alone ] -> [ right Wall_RD ]
[ > Wall | Wall ] -> [ Wall | > Wall_Full ]
up [ moving Wall | Wall ] -> [ Wall | up Wall_Full ]
right [ moving Wall | Wall ] -> [ Wall | action Wall_Full ]
down [ Wall_Alone | Wall ] -> [ Wall_D | Wall ]
left [ Wall_Alone | Wall ] -> [ Wall_L | Wall ]
right [ Wall_Alone | Wall ] -> [ Wall_R | Wall ]
left [ Wall_U | Wall ] -> [ Wall_LU | Wall ]
right [ Wall_U | Wall ] -> [ Wall_RU | Wall ]
left [ Wall_D | Wall ] -> [ Wall_LD | Wall ]
right [ Wall_D | Wall ] -> [ Wall_RD | Wall ]
up [ Wall_L | Wall ] -> [ Wall_LU | Wall ]
up [ Wall_R | Wall ] -> [ Wall_RU | Wall ]
down [ Wall_L | Wall ] -> [ Wall_LD | Wall ]
down [ Wall_R | Wall ] -> [ Wall_RD | Wall ]
(Setup)
[ HoldL ] -> [ left HoldL ]
[ HoldR ] -> [ right HoldR ]
[ HoldU ] -> [ up HoldU ]
[ HoldD ] -> [ down HoldD ]
(Escape)
[ Exit Person ] -> [ action Exit Person ]
[ moving Player ] [ action Exit ] -> [ moving Player ] [ Exit ]
[ action Exit ] [ stationary Player ] -> [ down Exit ] [ down Player ]
[ action Exit Person ] -> [ down Exit down Person ]
(Movement)
startloop
random [ moving Person > HoldDir | stationary Person ] -> [ moving Person > HoldDir | moving Person < ChangeDir ]
[ > Person ChangeDir | no Wall ] -> [ > Person | ]
[ > Person < ChangeDir | Wall ] -> cancel
[ > Person moving ChangeDir | Wall ] -> [ moving Person > ChangeDir | Wall ]
[ left ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldL | Person HoldR ]
[ right ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldR | Person HoldL ]
[ up ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldU | Person HoldD ]
[ down ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldD | Person HoldU ]
[ ChangeDir ] -> []
endloop
(Escape test)
[ down Person Exit ] -> [ down Person down Exit ]
[ stationary Person ] [ down Exit ] -> [ Person ] [ Exit ]
[ down Person down Exit ] -> [ Exit no HoldDir ] again
(Movement - repeated so we can push things)
[ > Person | stationary Person ] -> [ > Person | > Person ]
startloop
random [ moving Person > HoldDir | stationary Person ] -> [ moving Person > HoldDir | moving Person < ChangeDir ]
[ > Person ChangeDir | no Wall ] -> [ > Person | ]
[ > Person < ChangeDir | Wall ] -> cancel
[ > Person moving ChangeDir | Wall ] -> [ moving Person > ChangeDir | Wall ]
[ left ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldL | Person HoldR ]
[ right ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldR | Person HoldL ]
[ up ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldU | Person HoldD ]
[ down ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldD | Person HoldU ]
[ ChangeDir ] -> []
endloop
[ > Person | stationary Person ] -> [ > Person | > Person ]
startloop
random [ moving Person > HoldDir | stationary Person ] -> [ moving Person > HoldDir | moving Person < ChangeDir ]
[ > Person ChangeDir | no Wall ] -> [ > Person | ]
[ > Person < ChangeDir | Wall ] -> cancel
[ > Person moving ChangeDir | Wall ] -> [ moving Person > ChangeDir | Wall ]
[ left ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldL | Person HoldR ]
[ right ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldR | Person HoldL ]
[ up ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldU | Person HoldD ]
[ down ChangeDir > Person > HoldDir | Person < HoldDir ] -> [ > Person HoldD | Person HoldU ]
[ ChangeDir ] -> []
endloop
(Actual movement)
[ > Person | Wall ] -> cancel
[ > Person HoldDir | no Person ] -> [ > Person | HoldDir ]
+ [ > Person no HoldDir | no Person ] -> [ | Person ]
[ > Person ] -> cancel
(remove broken bonds)
left [ HoldL | no HoldR ] -> [ | ]
right [ HoldR | no HoldL ] -> [ | ]
up [ HoldU | no HoldD ] -> [ | ]
down [ HoldD | no HoldU ] -> [ | ]
(check bond counts - action Person means full on bonds)
[ HoldDir ] -> [ stationary HoldDir ]
[ Person ] -> [ action Person ]
[ action Person HoldDir ] -> [ Person action HoldDir ]
[ Person ] -> [ stationary Person ]
[ stationary HoldDir Person ] -> [ HoldDir action Person ]
left [ stationary Person no HoldL no ChangeDir | stationary Person no ChangeDir ] -> [ Person > ChangeDir | Person < ChangeDir ]
[ Person HoldDir ChangeDir ] -> [ action Person HoldDir ChangeDir ]
[ left ChangeDir ] -> [ HoldL ]
[ right ChangeDir ] -> [ HoldR ]
left [ stationary Person no HoldL no ChangeDir | stationary Person no ChangeDir ] -> [ Person > ChangeDir | Person < ChangeDir ]
[ Person HoldDir ChangeDir ] -> [ action Person HoldDir ChangeDir ]
[ left ChangeDir ] -> [ HoldL ]
[ right ChangeDir ] -> [ HoldR ]
up [ stationary Person no HoldU no ChangeDir | stationary Person no ChangeDir ] -> [ Person > ChangeDir | Person < ChangeDir ]
[ Person HoldDir ChangeDir ] -> [ action Person HoldDir ChangeDir ]
[ up ChangeDir ] -> [ HoldU ]
[ down ChangeDir ] -> [ HoldD ]
up [ stationary Person no HoldU no ChangeDir | stationary Person no ChangeDir ] -> [ Person > ChangeDir | Person < ChangeDir ]
[ Person HoldDir ChangeDir ] -> [ action Person HoldDir ChangeDir ]
[ up ChangeDir ] -> [ HoldU ]
[ down ChangeDir ] -> [ HoldD ]
(cleanup)
[ HoldDir ] -> [ stationary HoldDir ]
==============
WINCONDITIONS
==============
no player
no prisoner
=======
LEVELS
=======
#######
##...##
#q.p.q#
##...##
###x###
#######
#q#q#q#
#.....#
#..p..#
##...##
###x###
#######
#q.#.q#
#..#..#
#..p..#
#.....#
#q...q#
###x###
#######
#.q.q.#
#.#.#.#
#.#.#.#
#q.p.q#
###x###
########
##.....#
##q.q.q#
###...##
#.p.q.q#
#.#....#
#x######
#########
####p####
#.q...q.#
#.#...#.#
#q.....q#
####x####
########
###q.#q#
####...#
#....p.#
#.##...#
#.#q.#q#
#x######
#########
#.......#
#...#...#
#.q...q.#
###.p.###
####.####
###q.q###
####x####
#########
#q.....q#
##q.p.q##
#.......#
#q#.#.#q#
###...###
####x####
(test)
(
#########
##.....##
##...q..#
#..p.##.#
#..#....#
#qq#....#
####x####
#########
##.pq..##
#.qqq...#
#q#q..#.#
#.......#
####.####
#########
##.pq..##
#.q.qq..#
#.#####.#
#.......#
####.####
#########
##.pqqq##
#..q.qq.#
#.#...#.#
#.......#
####.####)
message Thanks for playing :)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment