Skip to content

Instantly share code, notes, and snippets.

Created November 11, 2013 06:40
Show Gist options
  • Save anonymous/7408913 to your computer and use it in GitHub Desktop.
Save anonymous/7408913 to your computer and use it in GitHub Desktop.
title
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
title Aperture Science Sokoban Testing Initiative
author Ed Turner
homepage www.thoughtcheckgames.com
again_interval 0.05
key_repeat_interval 0.2
========
OBJECTS
========
Background
Grey LightGrey
11111
11111
11111
11111
11111
Hole
Black
Button
DarkGrey Red
.....
.000.
.010.
.000.
.....
WeighedButton
Red
..0..
.....
0...0
.....
..0..
Door
Grey DarkGrey
11111
00100
00100
00100
11111
DoorOpen
Red DarkGrey
11.11
.....
.....
.....
11.11
Target
White DarkGray LightBlue
.111.
12021
10201
12021
.111.
Wall
Grey White
00000
01110
01110
01110
00000
Metal
DarkGray LightGray
00000
01010
00000
01010
00000
Sentry
White Blue Black
..0..
.010.
.000.
.202.
2.2.2
LaserH
Red
.....
.....
0.0.0
.....
.....
LaserV
Red
..0..
.....
..0..
.....
..0..
ChellD
Black LightBrown Orange White Blue
.000.
.111.
2032.
0402.
.2.2.
ChellU
Black LightBrown Orange White Blue
.000.
.101.
.2022
.2223
.2.2.
ChellR
Black LightBrown Orange White Blue
.000.
0111.
02230
.2334
.22..
ChellL
Black LightBrown Orange White Blue
.000.
.1110
03220
4322.
..22.
Temp
Orange
.....
..0..
.000.
..0..
.....
Crate
Black DarkGray LightGray
11.11
11011
.000.
11011
11.11
BlueShot
Blue LightBlue
.....
..0..
.010.
..0..
.....
ShotD
Orange Yellow white
..2..
..0..
.010.
..0..
.....
ShotU
Orange Yellow white
.....
..0..
.010.
..0..
..2..
ShotR
Orange Yellow white
.....
..0..
2010.
..0..
.....
ShotL
Orange Yellow white
.....
..0..
.0102
..0..
.....
OrPortU
Orange Yellow Grey White
22222
23332
23332
23332
00100
OrPortD
Orange Yellow Grey White
00100
23332
23332
23332
22222
OrPortL
Orange Yellow Grey White
22220
23330
23331
23330
22220
OrPortR
Orange Yellow grey white
02222
03332
13332
03332
02222
BlPortU
Blue LightBlue grey white
22222
23332
23332
23332
00100
BlPortD
Blue LightBlue Grey White
00100
23332
23332
23332
22222
BlPortL
Blue LightBlue Gray White
22220
23330
23331
23330
22220
BlPortR
Blue LightBlue gray white
02222
03332
13332
03332
02222
NextShotBlue
Orange
.....
.....
.....
.....
.....
=======
LEGEND
=======
Player = ChellU or ChellD or ChellR or ChellL
laser = LaserH or LaserV
Weight = Crate or Player
Solid = Crate or Metal or Door or player or sentry
LaserBlock = Crate or Metal or Door or Sentry or Wall or player
fizzler = crate or sentry
OrangePortal = OrPortU or OrPortD or OrPortR or OrPortL
BluePortal = BlPortU or BlPortD or BlPortR or BlPortL
Portal = OrangePortal or BluePortal
UPortal = OrPortU or BlPortU
DPortal = OrPortD or BlPortD
RPortal = OrPortR or BlPortR
LPortal = OrPortL or BlPortL
HPortal = RPortal or Lportal
VPortal = UPortal or DPortal
NotUPortal = DPortal or RPortal or LPortal
NotDPortal = UPortal or RPortal or LPortal
NotRPortal = Uportal or DPortal or LPortal
NotLPortal = Uportal or RPortal or DPortal
Shot = ShotU or ShotD or ShotL or ShotR
LaserBlock2 = Crate or Metal or Door or Sentry or Portal
. = Background
# = Wall
M = Metal
P = ChellD
* = Crate
@ = Crate and WeighedButton
D = Door
B = Button
O = Target and NextShotBlue
Q = Target and WeighedButton
H = Hole
1 = OrPortD
2 = BlPortR
S = Sentry
=======
SOUNDS
=======
sfx0 89899302
sfx1 63061703
temp create 87522305
Shot create 65312101
sfx2 39997307
EndLevel 70025105
sfx3 54287301
================
COLLISIONLAYERS
================
Background
Button, DoorOpen, WeighedButton, NextShotBlue, hole
Player, Wall, Crate, Metal, Door, sentry, laser
Portal, target
Shot,
BlueShot, temp
======
RULES
======
(Portals can only be entered from one side)
down [ > solid | NotDPortal] -> [solid | NotDPortal]
up [ > solid | NotUPortal] -> [solid | NotUPortal]
right [ > solid | NotRPortal] -> [solid | NotRPortal]
left [ > solid | NotLPortal] -> [solid | NotLPortal]
down [ > player |solid | NotDPortal] -> [player |solid | NotDPortal]
up [ > player |solid | NotUPortal] -> [player |solid | NotUPortal]
right [ > player | solid | NotRPortal] -> [player |solid | NotRPortal]
left [ > player |solid | NotLPortal] -> [player |solid | NotLPortal]
down [ > player |solid|sentry | NotDPortal] -> [player |solid |sentry| NotDPortal]
up [ > player |solid |sentry| NotUPortal] -> [player |solid |sentry| NotUPortal]
right [ > player | solid |sentry| NotRPortal] -> [player |solid |sentry| NotRPortal]
left [ > player |solid |sentry| NotLPortal] -> [player |solid |sentry| NotLPortal]
[> player | portal temp] -> [player | portal temp]
[> player | Portal solid ]-> [player | portal solid]
(Orange Portal leads to Blue Portal)
late [Solid BluePortal] [temp] -> [BluePortal] [Solid]
late [Solid OrangePortal] [temp] -> [OrangePortal] [Solid]
[> Player | Orangeportal] [Blueportal] -> [ | temp Orangeportal] [Player Blueportal]
[ > Player | Solid |OrangePortal] [BluePortal] -> [ > player | | temp OrangePortal ] [BluePortal Solid]
[ > Player | Solid | Sentry| Orangeportal] [BluePortal] -> [> player | > solid | |temp Orangeportal ] [BluePortal Sentry]
[Solid BlPortU] -> [down solid BlPortU]
[Solid BlPortD] -> [up solid BlPortD]
[Solid BlPortR] -> [left solid BlPortR]
[Solid BlPortL] -> [right solid BlPortL]
(Blue Portal leads to Orange Portal)
[> Player | Blueportal] [Orangeportal] -> [ |temp Blueportal] [Player Orangeportal]
[ > Player | Solid |BluePortal] [OrangePortal] -> [ | player |temp BluePortal ] [OrangePortal Solid]
[ > Player | Solid | Sentry| Blueportal] [OrangePortal] -> [> player | > solid | |temp Blueportal ] [OrangePortal Sentry]
[Solid orPortU] -> [down solid OrPortU]
[Solid OrPortD] -> [up solid OrPortD]
[Solid ORPortR] -> [left solid OrPortR]
[Solid OrPortL] -> [right solid OrPortL]
late [temp] -> []
(Basic Crate interactions)
[ > Player | Crate ] -> [ > Player | > Crate ]
[ > solid | sentry] -> [ > solid | > sentry ]
[ > Crate | Player ] -> [> Crate | > Player]
[ > sentry| Crate | Player] -> [> Sentry | > Crate | > Player ]
late [Crate Button] -> [Crate WeighedButton] sfx2
late [WeighedButton no Crate no target] -> [Button]
late [Door] [Button Player] -> [DoorOpen] [Button Player] sfx2
late [Door] [WeighedButton] -> [DoorOpen] [WeighedButton]
late [DoorOpen] [Button no Player] -> [Door] [Button]
[ fizzler target ] -> [target] sfx1
[> solid | hole ] -> [ | hole ] sfx0
(LAZARS!)
late [laser] -> []
[ > Player | laser ] -> [ | Laser] sfx3
[ > LaserBlock | laser ] -> [ > LaserBlock | ]
late horizontal [ Sentry no portal| no LaserBlock ] -> [Sentry | laserH ]
late horizontal [laserH no portal | no LaserBlock] -> [laserH | laserH ]
late vertical [ Sentry no portal| no LaserBlock ] -> [Sentry | laserV ]
late vertical [laserV no portal| no LaserBlock] -> [laserV | laserV ]
late horizontal [laserH|Player] -> [LaserH | ] sfx3
late vertical [LaserV | Player] -> [LaserV | ] sfx3
late [Laser Portal] [HPortal no LaserH] -> [Laser Portal] [ HPortal LaserH]
late [Laser Portal] [VPortal no LaserV] -> [Laser Portal] [VPortal LaserV]
late up [Dportal LaserV | no LaserBlock] -> [DPortal LaserV | LaserV]
late down [Uportal LaserV | no LaserBlock] -> [UPortal LaserV | LaserV]
late right [Lportal LaserH | no LaserBlock] -> [LPortal LaserH | LaserH]
late left [Rportal LaserH | no LaserBlock] -> [RPortal LaserH | LaserH]
late horizontal [laserH no portal | no LaserBlock] -> [laserH | laserH ]
late vertical [laserV no portal| no LaserBlock] -> [laserV | laserV ]
(Shooting Portals)
[action ChellD ] [Target no WeighedButton ] -> [ChellD ShotD] [Target no WeighedButton]
random down [ ShotD | Solid ] -> [ | Solid]
random down [ShotD | Portal ] -> [ShotD | Wall]
random down [ ShotD | Wall ] [target no nextshotblue] [OrangePortal] -> [ | OrPortD] [target NextShotBlue] [wall]
random down [ShotD | Wall ] [ target NextShotBlue] [BluePortal] -> [ | BlPortD] [target] [wall]
random down [ ShotD | Wall ] [target no NextShotBlue] -> [ | OrPortD] [target NextShotBlue]
random down [ShotD | Wall ] [target NextShotBlue] -> [ |BlPortD] [target]
random down [ ShotD | no Solid ] -> [ | ShotD ] again
[action ChellU ] [Target no WeighedButton ] -> [ChellU ShotU] [Target no WeighedButton]
random up [ ShotU | Solid ] -> [ | Solid]
random up [ShotU | Portal ] -> [ShotU | Wall]
random up [ ShotU | Wall ] [target no NextShotBlue] [OrangePortal] -> [ | OrPortU ] [target NextShotBlue] [wall]
random up [ShotU | Wall ] [target NextShotBlue] [BluePortal] -> [ | BlPortU] [Target ] [wall]
random up [ ShotU | Wall ] [target no nextshotblue] -> [ | OrPortU ] [target NextShotBlue]
random up [ShotU | Wall ] [target NextShotBlue] -> [ | BlPortU ] [target]
random up [ ShotU | no Solid ] -> [ | ShotU ] again
[action ChellR ] [Target no WeighedButton ] -> [ChellR ShotR] [Target no WeighedButton]
random right [ ShotR | Solid ] -> [ | Solid]
random right [ShotR | Portal ] -> [ShotR | Wall]
random right [ ShotR | Wall ] [Target no NextShotBlue] [OrangePortal]-> [ | OrPortR] [Target NextShotBlue] [Wall]
random right [ShotR | Wall ] [target NextShotBlue] [BluePortal] -> [ |BlPortR] [target] [Wall]
random right [ ShotR | Wall ] [target no nextshotblue] -> [ | OrPortR ] [Target NextShotBlue]
random right [ShotR | Wall ] [Target NextShotBlue] -> [ | BlPortR] [Target]
random Right [ ShotR | no Solid ] -> [ | ShotR ] again
[action ChellL ] [Target no WeighedButton ] -> [ChellL ShotL] [Target no WeighedButton]
random left [ ShotL | Solid ] -> [ | Solid]
random left [ShotL | Portal ] -> [ShotL | Wall]
random left [ ShotL | Wall ] [Target no NextShotBlue] [OrangePortal] -> [ | OrPortL ] [Target NextShotBlue] [wall]
random left [ShotL | Wall ] [Target NextShotBlue] [BluePortal]-> [ | BlPortL] [Target][Wall]
random left [ ShotL | Wall ] [Target no NextShotBlue] -> [ | OrPortL ] [Target NextShotBlue]
random left [ShotL | Wall ] [Target NextShotBlue] -> [ | BlPortL ] [Target]
random left [ ShotL | no Solid ] -> [ | ShotL ] again
)
(Making Blue shots look right, in an object-saving manner)
late [shot portal ] -> [portal]
[Shot] [NextShotBlue] -> [Shot BlueShot] [NextShotBlue]
late [BlueShot no Shot] -> [ ]
(Where are you facing?)
[right Player] -> [right ChellR]
[left Player] -> [left ChellL]
[up Player] -> [up ChellU]
[down Player] -> [down ChellD]
==============
WINCONDITIONS
==============
All Target on Player
=======
LEVELS
=======
Message Hello and, again, welcome. Aperture Science thanks you for your involuntary contribution to this testing intiative.
Message You have been provided with a non-functional Aperture Science Handheld Portal Device. Do not open, drop, or lick it.
Message Please proceed to the Aperture Science Level Evacuation Terminal.
h##########
h#.....#..#
h#.....#..#
##....*#..#
#p...**..Q#
##....*#..#
h##########
Message Well done, Test Subject. You licked less than
Message ZERO POINT ZERO ONE PERCENT
Message of your Aperture Science Handheld Portal Device.
.#####....
##.Q.##...
##...##...
###d######
#........#
#..b..*.p#
##########
Message Please note: Aperture Science Sokoban Crates are not crates. Do not attempt to open Aperture Science Sokoban Crates.
Message Any emplyee who suggests that Aperture Science Sokoban Crates are full of candy will be marked for immediate deletion.
##########
#..b..m..#
#...*.d..#
#..b*.m..#
#...*.m.Q#
#p.b..m..#
##########
Message Notice: Aperture Science Handheld Portal Device activation sequence started.
Message Please keep the Aperture Science Handheld Portal Device at least one meter from your eyes, genitals, and hands during the next two tests.
Message Blue and orange portals are linked through Aperture Science Quantum Tunnelling Side Effects. Try it out, Test Subject!
#########
#.....P.#
#..b....2
#.......#
#########
#..#....#
#..#.*..#
#Q.D....#
######1##
Message If you feel a burning sensation when passing though the portal, please do not report feeling a burning sensation when passing through the portal.
Message If your Aperture Science Sokoban Crate appears to contain candy after passing through a portal, immediately do not open your Aperture Science Sokoban Crate.
Message You may wish to dispose of a dishonest Aperture Science Sokoban Crate. We have provided an Aperture Science permanent disposal pit for you, Test Subject.
#############
#hhbhhhh#...2
#hh.hhhh#.*.#
#hh.hhhh#***#
#hh.hhhh#hhh#
#.......#####
#[email protected]...#
#....p..#..Q#
###1#########
Message Portal Device Active. Congratulations, Test Subject.
Message Due to a shortage in triggering mechanisms, your Aperture Science Handheld Portal Device will alternate blue and orange portals automatically.
Message Press X to fire a portal.
########
#....P.#
#......#
#......#
#HHHHHH#
#......#
#O.....#
########
Message Note that failure to properly utilize portals may create unwinnable situations.
Message In the event that you become trapped, do not panic. Do not attempt to move. Do not lick the Aperture Science Handheld Portal Device.
Message Press Z to undo or R to reset the level.
#####........
#.O.#........
#...#........
###D#########
#.......#...#
#....B..D...#
#P......#.*.#
#.......#...#
#############
Message The Aperture Science Handheld Portal Device will not allow portals to form on metal surfaces.
Message Any Test Subject attempting to circumvent this Feature will be fatally irradiated and terminated without references.
MM######
M......#
#*..b..#
#......#
#.##d###
#.#..H.#
#p#..Ho#
###mmm##
Message For your safety, test chambers have been supplied with fully-automated armed-response sentries.
Message Under no circumstances are you to act in an unsafe manner within view of these sentries.
########mmm
#p*.s...hhm
######..hhm
#...s.....#
mhh.......#
mhh......o#
mmm########
Message Those sentries are quite expensive, you know.
Message Records now indicate that Test Subject has been censured for profligate waste of Aperture Science resources.
############
#.......s..#
#.*........#
#...*......#
#.....s....#
#...#####..#
#...#####.o#
#...h.*.#mmm
#p..h...#...
#########...
Message Well done, Test Subject! You have completed all available test chambers in
Message ERROR: TIMING SUBROUTINE NOT FOUND
Message seconds! That might be the fastest time on record.
Message Please return to your isolated comfort station while we prepare additional tests.
Message We are done for now, Test Subject, but not for good.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment