Skip to content

Instantly share code, notes, and snippets.

@chz16
Last active March 11, 2025 12:51
Show Gist options
  • Save chz16/ae548878d890a6462690eb8c59c478a1 to your computer and use it in GitHub Desktop.
Save chz16/ae548878d890a6462690eb8c59c478a1 to your computer and use it in GitHub Desktop.
Out There high brightness code
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
(version 1.1.2 - high brightness)
title Out There
author CHz
homepage quiteajolt.com
noaction
background_color #303030
again_interval 0.1
realtime_interval 0.1 (used to count down timers, see TIMERS for more)
run_rules_on_level_start
(NOTE: If you want to *play* this game, you should go here:
http://quiteajolt.com/projects/puzzlescript/outthere/
instead of playing it here in the editor or in the puzzlescript.net player. The game code is exactly the same, but I've made a slight modification to the engine in the version on my site. Specifically, there are a couple of points in the game that I want to disable the undo button, which was only possible by modifying the JavaScript engine itself.
Technical deets:
I disable the undo button at the same time I disable the reset button, because it would be confusing if one worked and the other didn't. Situationally disabling resets is actually simple to do in PuzzleScript code: just have a rule that saves a checkpoint every turn. :J
The fact that I want to disable both undoing and resetting simultaneously makes the JS modification really easy: all we have to do is clear the undo stack every time a checkpoint is saved. We just need to add one line to the checkpoint saving section of the processInput() function in engine.js (https://github.com/increpare/PuzzleScript/blob/master/js/engine.js):
+ backups=[];
restartTarget=backupLevel();
curlevelTarget=restartTarget;
hasUsedCheckpoint=true;
The downside to this modification is that the player can no longer undo past checkpoints, so we have to be careful about using checkpoints and make sure there'd never be a reason to.
)
========
OBJECTS
========
(=======
SETTING
=======)
Background
Black
OuterBackground
#303030
GradientUp1
Black #303030
11111
11111
11111
01111
11001
GradientUp2
Black #303030
10111
00110
11000
01011
00100
GradientUp3
Black #303030
10000
10010
00000
00000
00000
GradientUpRightCorner1
Black #303030
11111
11111
11111
10111
01111
GradientUpRightCorner2
Black #303030
11011
01001
00110
11001
00101
GradientUpRightCorner3
Black #303030
11000
00100
00001
00010
00000
GradientRight1
Black #303030
10111
11111
01111
01111
11111
GradientRight2
Black #303030
00101
01100
10011
01011
01001
GradientRight3
Black #303030
00011
00000
00000
00010
00000
GradientRightDownCorner1
Black #303030
01111
10111
11111
11111
11111
GradientRightDownCorner2
Black #303030
01001
01011
10100
00101
11011
GradientRightDownCorner3
Black #303030
00001
00001
00010
01000
00100
GradientDown1
Black #303030
10011
11110
11111
11111
11111
GradientDown2
Black #303030
00100
11010
00011
01100
11101
GradientDown3
Black #303030
00000
00000
00000
01001
00001
GradientDownLeftCorner1
Black #303030
11110
11101
11111
11111
11111
GradientDownLeftCorner2
Black #303030
10100
10011
01100
10010
11011
GradientDownLeftCorner3
Black #303030
00000
01000
10000
00100
00011
GradientLeft1
Black #303030
11111
11110
11110
11111
11101
GradientLeft2
Black #303030
10010
11010
11001
00110
10100
GradientLeft3
Black #303030
00000
01000
00000
00000
11000
GradientLeftUpCorner1
Black #303030
11111
11111
11111
11101
11110
GradientLeftUpCorner2
Black #303030
11011
10100
00101
11010
10010
GradientLeftUpCorner3
Black #303030
00100
00010
01000
10000
10000
Wall1
#606060 #303030
00000
11111
00000
11111
00000
Wall2
#606060 #303030
11111
00000
11111
00000
11111
(Token used in level generation to alternate wall & window types by row)
Wall2Token
Transparent
WindowHoriz1
#606060
.....
.....
00000
.....
.....
WindowHoriz2
#303030
.....
.....
00000
.....
.....
WindowVert1
#606060 #303030
..0..
..1..
..0..
..1..
..0..
WindowVert2
#606060 #303030
..1..
..0..
..1..
..0..
..1..
(Borders; hands generate under these)
CoverRight
#303030 #606060
00001
00001
00001
00001
00001
CoverLeft
#303030 #606060
10000
10000
10000
10000
10000
CoverUp
#303030 #606060
11111
00000
00000
00000
00000
CoverDown
#303030 #606060
00000
00000
00000
00000
11111
(======
PLAYER
======)
NormalPlayer
#3030FF
..0..
.000.
00000
.000.
..0..
(Special player state used for the final cutscene-y levels)
TrekkingPlayer
#3030FF
..0..
.000.
00000
.000.
..0..
(Intermediate and extra tiredness values are used in cutscenes)
TiredPlayer1
#3737E8
..0..
.000.
00000
.000.
..0..
(Player after one chop)
TiredPlayer2
#3E3ED2
..0..
.000.
00000
.000.
..0..
TiredPlayer3
#4545BB
..0..
.000.
00000
.000.
..0..
(Player after two chops)
TiredPlayer4
#4B4BA4
..0..
.000.
00000
.000.
..0..
TiredPlayer5
#52528D
..0..
.000.
00000
.000.
..0..
TiredPlayer6
#595977
..0..
.000.
00000
.000.
..0..
TiredPlayer7
#606060
..0..
.000.
00000
.000.
..0..
(=============
INTERACTABLES
=============)
Box
#606060
.000.
0...0
0...0
0...0
.000.
Axe
#C08050 #C0C0C0
1....
110..
110..
1.0..
..0..
UsedAxeToken
#FF0000
0...0
.0.0.
..0..
.0.0.
0...0
(=====
HANDS
=====)
HandUp
#00A000
0.0.0
0.0.0
0.0.0
00000
.000.
HandDown
#00A000
.000.
00000
0.0.0
0.0.0
0.0.0
ArmVert
#00A000
.000.
.000.
.000.
.000.
.000.
HandLeft
#00A000
0000.
...00
00000
...00
0000.
HandRight
#00A000
.0000
00...
00000
00...
.0000
ArmHoriz
#00A000
.....
00000
00000
00000
.....
(Sight detection tokens for hands)
HandUpSniffer
Transparent
HandDownSniffer
Transparent
HandLeftSniffer
Transparent
HandRightSniffer
Transparent
(=====
BLOOD
=====)
Blood1
#600000 #400000
.1.11
10101
.1001
1001.
1111.
Blood2
#600000 #400000
11.1.
10101
1001.
11001
..111
Blood3
#600000 #400000
.1111
.1001
1001.
10101
11.1.
Blood4
#600000 #400000
111..
10011
.1001
10101
.1.11
(Token to generate a random blood pool after chopping)
BloodToken
Transparent
FootprintVert1
#500000
.....
...0.
.0.0.
.0...
.....
FootprintVert2
#300000
.....
...0.
.0.0.
.0...
.....
FootprintHoriz1
#500000
.....
.00..
.....
..00.
.....
FootprintHoriz2
#300000
.....
.00..
.....
..00.
.....
(Tokens to track what level of footprint to drop)
BloodyPlayerToken1
Transparent
BloodyPlayerToken2
Transparent
(Tokens to track what direction of footprint to drop)
VerticalMovementCheckToken
Transparent
HorizontalMovementCheckToken
Transparent
(==========
SOUND TEST
==========)
SoundTestTrigger
White
0...0
.0.0.
..0..
.0.0.
0...0
SoundTestTriggerDisabled
White
0...0
.0.0.
..0..
.0.0.
0...0
(=====================
INTRO LEVEL - SETTING
=====================)
BedroomDoorClosedLeft
#606060 #303030
.....
.....
.....
....1
.....
BedroomDoorClosedRight
#606060 #303030
0....
1....
0....
11...
0....
BedroomDoorOpenTop
#606060 #303030
.....
.....
.....
.0...
11111
BedroomDoorOpenBottom
#606060 #303030
.0...
.....
.....
.....
.....
BathroomDoorOpen
#606060
.....
....0
.....
.....
.....
LivingRoomLeftDoorTop
#606060 #303030
.....
.....
.....
.....
...1.
LivingRoomLeftDoorBottom
#606060 #303030
00000
...1.
.....
.....
.....
LivingRoomRightDoorTop
#606060 #303030
.....
.....
.....
.....
.1...
LivingRoomRightDoorBottom
#606060 #303030
00000
.1...
.....
.....
.....
OutsideDoorClosedLeft
#606060 #303030
.....
.....
.....
....0
.....
OutsideDoorClosedRight
#606060 #303030
1....
0....
1....
00...
1....
OutsideDoorOpen
#606060 #303030
...1.
.....
.....
.....
.....
(Solid object that blocks the player's movement through unopenable doors)
DoorBlocker
Transparent
BedUpperLeftOccupied
#606060 #303030 #9090FF
.....
11111
00000
11211
02200
BedLowerLeftOccupied
#606060 #303030 #9090FF
22211
02200
11211
00000
11111
BedUpperLeft
#606060 #303030
.....
11111
00000
11111
00000
BedLowerLeft
#606060 #303030
11111
00000
11111
00000
11111
BedUpperFoot
#606060 #303030
.....
11111
00000
11111
00000
BedLowerFoot
#606060 #303030
11111
00000
11111
00000
11111
(======================
INTRO LEVEL - CUTSCENE
======================)
(Gray background for the cutscene)
IntroCutsceneCover
#303030
(Animation state tracking tokens)
IntroCutscenePhase1
Transparent
IntroCutscenePhase2
Transparent
IntroCutscenePhase3
Transparent
IntroCutscenePhase4
Transparent
IntroCutscenePhase5
Transparent
IntroCutscenePhase6
Transparent
IntroCutscenePhase7
Transparent
IntroCutscenePhase8
Transparent
IntroCutscenePhase9
Transparent
IntroCutscenePhase10
Transparent
RealBedUpperLeft
#700000 #500000 #FFFFFF #504030 #A06030
.....
11100
22100
23400
33400
RealBedLowerLeft
#700000 #500000 #FFFFFF #504030 #A06030
33400
33400
23400
22100
11100
RealBedUpperFoot
#700000
.....
00000
00000
00000
00000
RealBedLowerFoot
#700000
(Cutscene controllable hands)
IntroHandUp
#00A000
0.0.0
0.0.0
0.0.0
00000
.000.
IntroHandDown
#00A000
.000.
00000
0.0.0
0.0.0
0.0.0
IntroArmVert
#00A000
.000.
.000.
.000.
.000.
.000.
IntroHandLeft
#00A000
0000.
...00
00000
...00
0000.
IntroHandRight
#00A000
.0000
00...
00000
00...
.0000
IntroArmHoriz
#00A000
.....
00000
00000
00000
.....
(=====================
AXE ACQUISITION LEVEL
=====================)
(Token that disables chopping until the player picks the axe up)
AxeDeactivator
Transparent
(Hides the axe counter until after the cutscene)
AxeCover
#303030
(Progressively chopped cutscene hands)
ChoppedHand1
#00A000 #206B00 #200000
.000.
00010
0.1.0
020.0
0.0.0
ChoppedHand2
#00A000 #206B00 #400000 #150000
.000.
00010
0.1.0
02130
0.0.0
ChoppedHand3
#00A000 #206B00 #403500 #200000 #156B00 #400000 #150000
.000.
00010
0.234
05160
0.0.0
ChoppedHand4
#00A000 #206B00 #156B00 #403500 #400000 #150000
.000.
00012
0.342
04350
0.0.0
ChoppedHand5
#00A000 #206B00 #156B00 #006B00 #150000 #600000 #400000 #403500
.000.
00012
34562
06740
0.0.0
ChoppedHand6
#00A000 #006B00 #403500 #156B00 #150000 #600000 #400000 #2B3500
.010.
00023
14567
06240
0.0.0
ChoppedHand7
#00A000 #006B00 #156B00 #403500 #150000 #600000 #2B3500 #400000
.010.
00232
14556
07341
0.0.0
ChoppedHand8
#00A000 #006B00 #156B00 #403500 #150000 #600000 #2B3500 #400000
.010.
00232
14556
07341
242.0
ChoppedHand9
#00A000 #006B00 #156B00 #206B00 #2B3500 #403500 #150000 #600000 #400000
.010.
23452
16774
08561
262.0
ChoppedHand10
#00A000 #006B00 #156B00 #403500 #2B3500 #150000 #600000 #400000 #2B0000
.010.
23432
15664
07381
252.0
ChoppedHand11
#00A000 #006B00 #156B00 #403500 #2B3500 #150000 #600000 #400000 #2B0000
.010.
23432
15664
07381
28450
ChoppedHand12
#00A000 #006B00 #156B00 #403500 #2B3500 #2B0000 #600000 #400000 #150000
.010.
23432
15664
06351
27480
ChoppedHand13
#00A000 #003500 #156B00 #600000 #2B3500 #403500 #2B0000 #006B00 #400000 #150000
.010.
23452
16334
03567
28490
ChoppedHand14
#00A000 #156B00 #150000 #600000 #2B3500 #403500 #003500 #2B0000 #006B00 #400000
.0.12
13451
67334
03578
19420
ChoppedHand15
#00A000 #156B00 #150000 #600000 #2B3500 #403500 #003500 #2B0000 #400000 #006B00
.0.12
13451
67334
03389
18420
ChoppedHand16
#00A000 #156B00 #150000 #600000 #400000 #2B3500 #003500 #2B0000 #006B00
.0.12
13435
67335
03348
14520
ChoppedHand17
#00A000 #2B3500 #2B0000 #156B00 #600000 #400000 #003500 #006B00 #150000
.0.12
34541
62441
04457
35180
ChoppedHand18
#00A000 #2B3500 #2B0000 #156B00 #600000 #400000 #003500 #006B00
.0.12
34541
62441
04457
35527
ChoppedHand19
#00A000 #2B3500 #2B0000 #156B00 #600000 #400000 #003500 #006B00
.0.12
34541
62441
04456
35527
ChoppedHand20
#00A000 #2B3500 #2B0000 #156B00 #600000 #400000 #003500 #006B00
.0.12
34541
65441
34456
35527
ChoppedHand21
#00A000 #2B3500 #2B0000 #156B00 #600000 #400000 #003500
.0.12
34541
65445
3445.
35526
ChoppedHand22
#00A000 #400000 #2B0000 #156B00 #600000 #2B3500 #003500
.0.12
34145
61441
3441.
31126
ChoppedHand23
#00A000 #400000 #2B0000 #2B3500 #600000 #003500 #156B00
.0.12
34143
51441
6441.
61125
ChoppedHand24
#00A000 #400000 #2B3500 #600000 #003500 #156B00 #2B0000
.0.11
23131
41331
5331.
51164
ChoppedHand25
#00A000 #400000 #2B3500 #600000 #003500 #156B00
.0.11
23131
41331
5331.
5111.
ChoppedHand26
#00A000 #400000 #2B3500 #600000
.0.11
23131
.1331
2331.
2111.
ChoppedHand27
#156B00 #400000 #2B3500 #600000
.0.11
23131
.1331
2331.
2111.
ChoppedHand28
#156B00 #400000 #2B3500 #600000
.0.11
23131
.1331
1331.
1111.
ChoppedHand29
#2B3500 #400000 #600000
.0.11
02121
.1221
1221.
1111.
ChoppedHand30
#2B3500 #400000 #600000
.0.11
12121
.1221
1221.
1111.
(Special final state that the player can chop indefinitely)
ChoppedBlood
#600000 #400000
.1.11
10101
.1001
1001.
1111.
(Tokens to check that the player stopped mashing up for ten ticks)
OverkillCheck1Token
Transparent
OverkillCheck2Token
Transparent
OverkillCheck3Token
Transparent
OverkillCheck4Token
Transparent
OverkillCheck5Token
Transparent
OverkillCheck6Token
Transparent
OverkillCheck7Token
Transparent
OverkillCheck8Token
Transparent
OverkillCheck9Token
Transparent
OverkillCheck10Token
Transparent
(Breathing animation state tokens)
Breath1Token
Transparent
Breath2Token
Transparent
Breath3Token
Transparent
Breath4Token
Transparent
Breath5Token
Transparent
Breath6Token
Transparent
Breath7Token
Transparent
BreathStep1Token
Transparent
BreathStep2Token
Transparent
BreathStep3Token
Transparent
BreathStep4Token
Transparent
BreathStep5Token
Transparent
BreathStep6Token
Transparent
(==============
TRAPPED LEVELS
==============)
(Flag to signify that this is a trapping level)
TrappedToken
Transparent
(Flag to signify if fading out to gray ends the level or not)
TrappedProceedAfterFade
Transparent
(Flag to signify if the player is instantly killed after exhausting chops or if they can fumble around for a bit)
TrappedInstantKill
Transparent
(Token to check if the player has used all axe swings)
TrappedCheckToken
Transparent
(Tokens to check if all the hands have moved to their final positions)
TrappedHandMovementCheck
Transparent
TrappedHandsHaveFinishedMovingCheck
Transparent
(Animation phase tokens)
TrappedPhase1Token
Transparent
TrappedPhase2Token
Transparent
TrappedPhase3Token
Transparent
TrappedPhase4Token
Transparent
TrappedPhase5Token
Transparent
TrappedPhase6Token
Transparent
TrappedPhase7Token
Transparent
TrappedPhase8Token
Transparent
TrappedPhase9Token
Transparent
(================
LIBERATION LEVEL
================)
(Various covers to "randomly" undissolve from gray)
OpenEyesCover11
#303030
00.00
0.000
0000.
0.000
00.00
OpenEyesCover12
#303030
00.00
...00
.0.0.
0.000
0..00
OpenEyesCover13
#303030
00...
...0.
.0.0.
...00
0..00
OpenEyesCover14
#303030
0....
...0.
.0...
....0
...0.
OpenEyesCover21
#303030
.0000
00000
0.00.
00..0
00000
OpenEyesCover22
#303030
.000.
00000
0..0.
.0...
000.0
OpenEyesCover23
#303030
..00.
..00.
0..0.
.0...
000..
OpenEyesCover24
#303030
...0.
.....
0..0.
.0...
.0...
OpenEyesCover31
#303030
000..
.0000
000.0
.0000
00000
OpenEyesCover32
#303030
000..
.000.
0...0
.00..
00000
OpenEyesCover33
#303030
.0...
.000.
0....
.0...
000.0
OpenEyesCover34
#303030
.....
..00.
0....
.....
..0.0
OpenEyesCover41
#303030
0.0.0
0.000
00000
0000.
.0000
OpenEyesCover42
#303030
0.0.0
0..00
.0.00
0.00.
.000.
OpenEyesCover43
#303030
0....
0..0.
.0.0.
..00.
.000.
OpenEyesCover44
#303030
.....
0....
.0.0.
..0..
.0...
(Tokens to track which undissolve step to use next)
OpenEyesPhase1Token
Transparent
OpenEyesPhase2Token
Transparent
OpenEyesPhase3Token
Transparent
OpenEyesPhase4Token
Transparent
(Tokens to track and activate the player's ability to chop freely)
SuperAxeToken
Transparent
SuperAxeChoppingToken
Transparent
SuperAxeBump1Token
Transparent
SuperAxeBump2Token
Transparent
SuperAxeBump3Token
Transparent
SuperAxeBump4Token
Transparent
SuperAxeActiveToken
Transparent
(Shattering the border)
BrokenCoverLeft1
#303030 #484848
10000
10000
10000
10000
10000
BrokenCoverLeft2
#303030 #3C3C3C #181818
10000
20000
10000
20000
10000
BrokenCoverRight1
#303030 #484848
00001
00001
00001
00001
00001
BrokenCoverRight2
#303030 #3C3C3C #181818
00001
00002
00001
00002
00001
BrokenCoverDown1
#303030 #484848
00000
00000
00000
00000
11111
BrokenCoverDown2
#303030 #3C3C3C #181818
00000
00000
00000
00000
12121
BrokenCoverUp1
#303030 #484848
11111
00000
00000
00000
00000
BrokenCoverUp2
#303030 #3C3C3C #181818
12121
00000
00000
00000
00000
(Tokens to cascade shatter the border)
ShatterToken
Transparent
QueueShatterToken
Transparent
(Token to check if the border has been shattered completely)
BeginKillingHandsToken
Transparent
(Animation phase tokens)
KillHandsPhase1
Transparent
KillHandsPhase2
Transparent
KillHandsPhase3
Transparent
DyingHandUp
#608810
0.0.0
0.0.0
0.0.0
00000
.000.
DeadHandUp
#807020
0.0.0
0.0.0
0.0.0
00000
.000.
DyingHandDown
#608810
.000.
00000
0.0.0
0.0.0
0.0.0
DeadHandDown
#807020
.000.
00000
0.0.0
0.0.0
0.0.0
DyingArmVert
#608810
.000.
.000.
.000.
.000.
.000.
DeadArmVert
#807020
.000.
.000.
.000.
.000.
.000.
DyingHandLeft
#608810
0000.
...00
00000
...00
0000.
DeadHandLeft
#807020
0000.
...00
00000
...00
0000.
DyingHandRight
#608810
.0000
00...
00000
00...
.0000
DeadHandRight
#807020
.0000
00...
00000
00...
.0000
DyingArmHoriz
#608810
.....
00000
00000
00000
.....
DeadArmHoriz
#807020
.....
00000
00000
00000
.....
(==============
RETURNING HOME
==============)
(Special token to randomly generate blood in these levels)
TrekRandomBlood
Transparent
(Tokens to make sure all the scheduled shattering happens at the proper times)
TrekShatterTrigger
Transparent
TrekShatterSeed
Transparent
TrekShatterPlaceholder
Transparent
TrekShatterFuse
Transparent
TrekKillingHandsToken
Transparent
TrekKillHandsTrigger
Transparent
(Generates the goal zone at the bottom of each level)
TrekWinBar
Transparent
(======================
ENDING LEVEL - SETTING
======================)
(Token to transform bits and pieces of the final level so that I could just copy large chunks of the map from the intro)
EndingGenerationToken
Transparent
EndingOuterBackground
#303030
EndingGradientUp1
Black #303030
11111
11111
11111
01111
11001
EndingGradientRight1
Black #303030
10111
11111
01111
01111
11111
EndingGradientDown1
Black #303030
10011
11110
11111
11111
11111
EndingGradientLeft1
Black #303030
11111
11110
11110
11111
11101
EndingBedroomDoorClosedLeft
#606060 #303030
.....
.....
.....
....1
.....
EndingBedroomDoorClosedRight
#606060 #303030
0....
1....
0....
11...
0....
EndingBedroomDoorOpenTop
#606060 #303030
.....
.....
.....
.0...
11111
EndingBedroomDoorOpenBottom
#606060 #303030
.0...
.....
.....
.....
.....
EndingOutsideDoorClosedLeft
#606060 #303030
.....
.....
.....
....0
.....
EndingOutsideDoorClosedRight
#606060 #303030
1....
0....
1....
00...
1....
EndingOutsideDoorOpen
#606060 #303030
...1.
.....
.....
.....
.....
(================================
ENDING LEVEL - OUTSIDE CROSSFADE
================================)
(Animation state tokens)
EndingOutsideRenewalToken1
Transparent
EndingOutsideRenewalToken2
Transparent
(Object state tokens)
PathToken
Transparent
PathSpawner
Transparent
WallToken
Transparent
Tile1Token
Transparent
Tile2Token
Transparent
CarpetToken
Transparent
(Real objects)
Grass
#005000 #006000
01000
00001
00000
00100
00000
Path
#503000 #402000
00000
00100
00000
10000
00010
RealWall
#502000 #482000
00110
11001
00000
00110
11001
Carpet
#100020 #080020
00100
00010
00001
10000
01000
Tile1
#C8A870 #C0A070 #B89870
00211
00211
22222
11200
11200
Tile2
#C0A070 #C8A870 #B89870
00211
00211
22222
11200
11200
(Crossfades)
HalfGrass
#002800 #003000
01000
00001
00000
00100
00000
HalfPath
#281800 #201000
00000
00100
00000
10000
00010
HalfWall1
#584030 #544030 #3C2818 #402818
00110
22332
00000
33223
11001
HalfWall2
#402818 #3C2818 #544030 #584030
00110
22332
00000
33223
11001
HalfOuterBackground
#184018 #184818
01000
00001
00000
00100
00000
HalfGradientUp1Grass
#184018 #184818 #002800
01000
00001
00000
20100
00220
HalfGradientUp1Path
#403018 #382818 #201000 #281800
00000
00100
00000
20000
00320
HalfGradientUp2Grass
#184018 #003000 #002800
01000
22001
00222
20100
22022
HalfGradientUp2Path
#403018 #281800 #382818 #201000
01000
11201
00111
30100
11031
HalfGradientUp3
#403018 #281800 #201000
01111
01201
11111
21111
11121
HalfGradientRight1
#184018 #003000 #184818 #002800
01000
00002
30000
30200
00000
HalfGradientDown1Grass
#184018 #003000 #002800 #184818
01200
00001
00000
00300
00000
HalfGradientDown1Path
#403018 #281800 #382818
01100
00201
00000
20000
00020
HalfGradientDown1Wall
#402818 #281000 #241000 #3C2818
01230
33002
00000
00330
33003
HalfGradientDown1Carpet
#201828 #080010 #040010 #1C1828
01200
00031
00003
30000
03000
HalfGradientDown1Tile1
#7C6C50 #645438 #5C4C38 #786850 #746450 #605038
01233
00435
44444
33400
33400
HalfGradientDown1Tile2
#786850 #605038 #5C4C38 #7C6C50 #746450 #645438
01233
00435
44444
33400
33400
HalfGradientLeft1
#184018 #184818 #003000 #002800
01000
00002
00003
00100
00030
HalfGradientLeft2
#184018 #003000 #002800 #184818
01202
00201
00220
22302
02022
HalfGradientLeft3
#002800 #003000 #184018
01000
02001
00000
00100
22000
HalfGradientLeftUpCorner1
#184018 #184818 #002800
01000
00001
00000
00120
00002
HalfGradientLeftUpCorner2
#184018 #184818 #002800 #003000
01200
02023
22020
00302
02202
HalfGradientLeftUpCorner3
#002800 #003000 #184018
01200
00021
02000
20100
20000
HalfHandDown
#285800 #285000
.011.
11110
1.1.1
1.0.1
1.1.1
HalfHandLeft
#285000 #285800
0100.
...01
00000
...00
0000.
HalfHandUpGrass
#285000 #285800
0.0.0
0.0.1
0.0.0
00100
.000.
HalfHandUpPath
#504000 #483800
0.0.0
0.1.0
0.0.0
10000
.001.
HalfArmVertGrass
#285800 #285000
.011.
.111.
.111.
.101.
.111.
HalfArmVertPath
#504000 #483800
.000.
.010.
.000.
.000.
.001.
(===============================
ENDING LEVEL - INSIDE CROSSFADE
===============================)
AxeDropoff
Transparent
(Animation state tokens)
EndingHouseRenewalToken1
Transparent
EndingHouseRenewalToken2
Transparent
(Object state tokens)
BottomWindowToken
Transparent
TopWindowToken
Transparent
(Real objects)
RealWindowVert
#100020 #080020 #C0C0FF #005000 #006000
00233
00234
00233
10233
01233
RealBottomWindow
#100020 #080020 #C0C0FF #005000 #006000
00100
00010
22222
33433
33333
RealTopWindow
#005000 #006000 #C0C0FF #C8A870 #C0A070 #B89870
01000
00001
22222
44533
44533
RealLivingRoomLeftDoorTop
#D0D0D0
.....
.....
.....
.....
...0.
RealLivingRoomLeftDoorBottom
#301000 #D0D0D0
00000
...1.
.....
.....
.....
RealLivingRoomRightDoorTop
#D0D0D0
.....
.....
.....
.....
.0...
RealLivingRoomRightDoorBottom
#301000 #D0D0D0
00000
.1...
.....
.....
.....
RealOutsideDoorClosedLeft
#D0D0D0
.....
.....
.....
....0
.....
RealOutsideDoorClosedRight
#301000 #D0D0D0
0....
0....
0....
01...
0....
RealBathroomDoorOpen
#D0D0D0
.....
....0
.....
.....
.....
(Crossfades)
HalfCarpet
#080010 #040010
00100
00010
00001
10000
01000
HalfTile1
#645438 #605038 #5C4C38
00211
00211
22222
11200
11200
HalfTile2
#605038 #645438 #5C4C38
00211
00211
22222
11200
11200
HalfWindowVert
#080010 #787897 #002800 #9090AF #003000 #040010
00122
00324
00122
50322
05122
HalfBottomWindow
#080010 #040010 #787897 #002800 #003000
00100
00010
22222
33433
33333
HalfTopWindow
#002800 #003000 #787897 #605038 #5C4C38 #645438
01000
00001
22222
33455
33455
HalfLivingRoomLeftDoorTop
#707070
.....
.....
.....
.....
...0.
HalfLivingRoomLeftDoorBottom
#281810 #707070
00000
...1.
.....
.....
.....
HalfLivingRoomRightDoorTop
#707070
.....
.....
.....
.....
.0...
HalfLivingRoomRightDoorBottom
#281810 #707070
00000
.1...
.....
.....
.....
HalfOutsideDoorClosedLeft
#787878
.....
.....
.....
....0
.....
HalfOutsideDoorClosedRight
#201008 #281810 #787878
0....
1....
0....
12...
0....
HalfBathroomDoorOpen
#787878
.....
....0
.....
.....
.....
HalfAxe
#585060 #583028 #545060
0....
001..
001..
2.1..
..1..
(=================================
ENDING LEVEL - BEDROOM CROSSFADES
=================================)
(Blocks off the flood fills of the previous renewal tokens to isolate the bedroom)
EndingHouseRenewalBedroomToken
Transparent
(Animation state tokens)
EndingBedroomRenewalStartToken
Transparent
EndingBedroomRenewalToken
Transparent
SleepPhase1Token
Transparent
SleepPhase2Token
Transparent
SleepPhase3Token
Transparent
SleepPhase4Token
Transparent
SleepPhase5Token
Transparent
SleepPhase6Token
Transparent
SleepPhase7Token
Transparent
SleepPhase8Token
Transparent
SleepPhase9Token
Transparent
SleepPhase10Token
Transparent
SleepPhase11Token
Transparent
SleepPhase12Token
Transparent
SleepPhase13Token
Transparent
SleepPhase14Token
Transparent
SleepPhase15Token
Transparent
SleepPhase16Token
Transparent
SleepPhase17Token
Transparent
SleepPhase18Token
Transparent
SleepPhase19Token
Transparent
SleepPhase20Token
Transparent
(Crossfades)
HalfBedUpperFoot
#501818 #683030
.....
00000
11111
00000
11111
HalfBedLowerFoot
#501818 #683030
00000
11111
00000
11111
00000
RealBedUpperLeftUnrealOccupied
#700000 #500000 #FFFFFF #2050F0
.....
11100
22100
22300
23300
RealBedLowerLeftUnrealOccupied
#700000 #500000 #FFFFFF #2050F0
33300
23300
22300
22100
11100
HalfRealBedUpperLeftUnrealOccupied
#401818 #501818 #AFAFAF #583030 #683030 #979797 #5870F7
.....
00011
22344
55611
26644
HalfRealBedLowerLeftUnrealOccupied
#5870F7 #501818 #AFAFAF #683030 #979797 #583030 #401818
00011
20033
44011
22533
66611
HalfRealBedUpperLeft
#500000 #700000 #FFFFFF #A79F97 #605890 #384890
.....
00011
22011
23411
35411
HalfRealBedLowerLeft
#384890 #605890 #700000 #A79F97 #FFFFFF #500000
00122
30122
43122
44522
55522
(Fade to gray - used in the trapped levels too)
EndingCover1
#303030
..0..
...0.
....0
0....
.0...
EndingCover2
#303030
..00.
...00
0...0
00...
.00..
EndingCover3
#303030
..000
0..00
00..0
000..
.000.
EndingCover4
#303030
0.000
00.00
000.0
0000.
.0000
EndingCover5
#303030
(======
TIMERS
======)
Timer20
Transparent
Timer19
Transparent
Timer18
Transparent
Timer17
Transparent
Timer16
Transparent
Timer15
Transparent
Timer14
Transparent
Timer13
Transparent
Timer12
Transparent
Timer11
Transparent
Timer10
Transparent
Timer9
Transparent
Timer8
Transparent
Timer7
Transparent
Timer6
Transparent
Timer5
Transparent
Timer4
Transparent
Timer3
Transparent
Timer2
Transparent
Timer1
Transparent
(When present with a timer, prevents the player from moving)
InteractionDisabled
Transparent
(Used to prevent the player from using the reset button, see the comment in the prelude)
ResetDisabled
Transparent
=======
LEGEND
=======
(Generic)
. = Background
# = Wall1
Wall = Wall1 or Wall2
• = Box
— = WindowHoriz1
| = WindowVert1
Window = WindowHoriz1 or WindowHoriz2 or WindowVert1 or WindowVert2
P = NormalPlayer and Wall2Token
TiredPlayer = TiredPlayer1 or TiredPlayer2 or TiredPlayer3 or TiredPlayer4 or TiredPlayer5 or TiredPlayer6 or TiredPlayer7
NoncutscenePlayer = NormalPlayer or TiredPlayer
Player = NormalPlayer or BedUpperLeftOccupied or TiredPlayer or TrekkingPlayer
Goal = OuterBackground or GradientUp1 or GradientDown1 or GradientRight1 or GradientLeft1
Blood = Blood1 or Blood2 or Blood3 or Blood4
BloodyPlayerToken = BloodyPlayerToken1 or BloodyPlayerToken2
Footprint = FootprintVert1 or FootprintVert2 or FootprintHoriz1 or FootprintHoriz2
MovementCheckToken = HorizontalMovementCheckToken or VerticalMovementCheckToken
: = OuterBackground
A = Axe and OuterBackground
1 = GradientUp1
2 = GradientUp2
3 = GradientUp3
! = GradientUpRightCorner1
@ = GradientUpRightCorner2
‹ = GradientUpRightCorner3
4 = GradientRight1
5 = GradientRight2
6 = GradientRight3
$ = GradientRightDownCorner1
% = GradientRightDownCorner2
fl = GradientRightDownCorner3
7 = GradientDown1
8 = GradientDown2
9 = GradientDown3
& = GradientDownLeftCorner1
* = GradientDownLeftCorner2
{ = GradientDownLeftCorner3
0 = GradientLeft1
- = GradientLeft2
≠ = GradientLeft3
} = GradientLeftUpCorner1
_ = GradientLeftUpCorner2
+ = GradientLeftUpCorner3
Gradient = GradientUp1 or GradientUp2 or GradientUp3 or GradientUpRightCorner1 or GradientUpRightCorner2 or GradientUpRightCorner3 or GradientRight1 or GradientRight2 or GradientRight3 or GradientRightDownCorner1 or GradientRightDownCorner2 or GradientRightDownCorner3 or GradientDown1 or GradientDown2 or GradientDown3 or GradientDownLeftCorner1 or GradientDownLeftCorner2 or GradientDownLeftCorner3 or GradientLeft1 or GradientLeft2 or GradientLeft3 or GradientLeftUpCorner1 or GradientLeftUpCorner2 or GradientLeftUpCorner3
v = HandDown and CoverDown and OuterBackground
^ = HandUp and CoverUp and OuterBackground
> = HandRight and CoverRight and OuterBackground
< = HandLeft and CoverLeft and OuterBackground
Hand = HandUp or HandDown or HandLeft or HandRight
Arm = ArmVert or ArmHoriz
ChoppablePart = Hand or Arm
HandSniffer = HandUpSniffer or HandDownSniffer or HandLeftSniffer or HandRightSniffer
SightBlocker = Wall or Hand or Arm or Box
CoverVert = CoverDown or CoverUp
CoverHoriz = CoverRight or CoverLeft
Cover = CoverHoriz or CoverVert
Timer = Timer20 or Timer19 or Timer18 or Timer17 or Timer16 or Timer15 or Timer14 or Timer13 or Timer12 or Timer11 or Timer10 or Timer9 or Timer8 or Timer7 or Timer6 or Timer5 or Timer4 or Timer3 or Timer2 or Timer1
(Sound test)
S = SoundTestTrigger
(Intro level)
IntroDoor = BedroomDoorClosedLeft or BedroomDoorClosedRight or BedroomDoorOpenTop or BedroomDoorOpenBottom or BathroomDoorOpen or LivingRoomLeftDoorBottom or LivingRoomLeftDoorTop or LivingRoomRightDoorBottom or LivingRoomRightDoorTop or OutsideDoorClosedLeft or OutsideDoorClosedRight or OutsideDoorOpen
ɑ = BedroomDoorClosedRight
Y = BathroomDoorOpen
β = LivingRoomLeftDoorBottom and DoorBlocker
ɣ = LivingRoomRightDoorBottom and DoorBlocker
δ = OutsideDoorClosedRight
Bed = BedUpperLeftOccupied or BedLowerLeftOccupied or BedUpperLeft or BedLowerLeft or BedUpperFoot or BedLowerFoot
RealBed = RealBedUpperLeft or RealBedLowerLeft or RealBedUpperFoot or RealBedLowerFoot
ε = RealBedUpperLeft and Wall2Token and IntroCutscenePhase1 and Timer20 and InteractionDisabled
IntroCutscenePhaseToken = IntroCutscenePhase1 or IntroCutscenePhase2 or IntroCutscenePhase3 or IntroCutscenePhase4 or IntroCutscenePhase5 or IntroCutscenePhase6 or IntroCutscenePhase7 or IntroCutscenePhase8 or IntroCutscenePhase9 or IntroCutscenePhase10
IntroChoppablePart = IntroHandUp or IntroHandDown or IntroHandRight or IntroHandLeft or IntroArmVert or IntroArmHoriz
(Axe intro level)
B = AxeDeactivator and Axe and OuterBackground and AxeCover
C = Axe
ChoppedHand = ChoppedHand1 or ChoppedHand2 or ChoppedHand3 or ChoppedHand4 or ChoppedHand5 or ChoppedHand6 or ChoppedHand7 or ChoppedHand8 or ChoppedHand9 or ChoppedHand10 or ChoppedHand11 or ChoppedHand12 or ChoppedHand13 or ChoppedHand14 or ChoppedHand15 or ChoppedHand16 or ChoppedHand17 or ChoppedHand18 or ChoppedHand19 or ChoppedHand20 or ChoppedHand21 or ChoppedHand22 or ChoppedHand23 or ChoppedHand24 or ChoppedHand25 or ChoppedHand26 or ChoppedHand27 or ChoppedHand28 or ChoppedHand29 or ChoppedHand30
OverkillCheckToken = OverkillCheck1Token or OverkillCheck2Token or OverkillCheck3Token or OverkillCheck4Token or OverkillCheck5Token or OverkillCheck6Token or OverkillCheck7Token or OverkillCheck8Token or OverkillCheck9Token or OverkillCheck10Token
ShortBreathToken = Breath1Token or Breath2Token or Breath3Token or Breath4Token
LongBreathToken = Breath5Token or Breath6Token
BreathToken = ShortBreathToken or LongBreathToken or Breath7Token
BreathStepToken = BreathStep1Token or BreathStep2Token or BreathStep3Token or BreathStep4Token or BreathStep5Token or BreathStep6Token
(Trapped levels)
E = Axe and OuterBackground and TrappedToken and TrappedProceedAfterFade and ResetDisabled
F = Axe and OuterBackground and TrappedToken and TrappedInstantKill and TrappedProceedAfterFade and ResetDisabled
TrappedPhaseToken = TrappedPhase1Token or TrappedPhase2Token or TrappedPhase3Token or TrappedPhase4Token or TrappedPhase5Token or TrappedPhase6Token or TrappedPhase7Token or TrappedPhase8Token or TrappedPhase9Token
(Liberation level)
OpenEyesCover = OpenEyesCover11 or OpenEyesCover12 or OpenEyesCover13 or OpenEyesCover14 or OpenEyesCover21 or OpenEyesCover22 or OpenEyesCover23 or OpenEyesCover24 or OpenEyesCover31 or OpenEyesCover32 or OpenEyesCover33 or OpenEyesCover34 or OpenEyesCover41 or OpenEyesCover42 or OpenEyesCover43 or OpenEyesCover44
OpenEyesPhaseToken = OpenEyesPhase1Token or OpenEyesPhase2Token or OpenEyesPhase3Token or OpenEyesPhase4Token
SuperAxePhaseToken = SuperAxeToken or SuperAxeBump1Token or SuperAxeBump2Token or SuperAxeBump3Token or SuperAxeBump4Token or SuperAxeActiveToken
D = Axe and OuterBackground and TrappedToken and TrappedInstantKill and SuperAxeToken and ResetDisabled
BrokenCover = BrokenCoverLeft1 or BrokenCoverLeft2 or BrokenCoverRight1 or BrokenCoverRight2 or BrokenCoverDown1 or BrokenCoverDown2 or BrokenCoverUp1 or BrokenCoverUp2
LeftBorder = CoverRight or BrokenCoverRight1 or BrokenCoverRight2
RightBorder = CoverLeft or BrokenCoverLeft1 or BrokenCoverLeft2
UpBorder = CoverDown or BrokenCoverDown1 or BrokenCoverDown2
DownBorder = CoverUp or BrokenCoverUp1 or BrokenCoverup2
KillHandsToken = KillHandsPhase1 or KillHandsPhase2 or KillHandsPhase3
DeadHand = DyingHandUp or DyingHandDown or DyingHandLeft or DyingHandRight or DeadHandUp or DeadHandDown or DeadHandLeft or DeadHandRight
DeadArm = DyingArmVert or DyingArmHoriz or DeadArmVert or DeadArmHoriz
DeadChoppablePart = DeadHand or DeadArm
(The way home)
T = TrekkingPlayer and OuterBackground
W = TrekWinBar and OuterBackground
(generic components)
下 = HandDown
左 = HandLeft
右 = HandRight
上 = HandUp
横 = ArmHoriz
縦 = ArmVert
血 = TrekRandomBlood
═ = FootprintHoriz1
━ = FootprintHoriz2
║ = FootprintVert1
┃ = FootprintVert2
Å = BrokenCoverRight2
Á = BrokenCoverUp2
À = BrokenCoverLeft2
à = BrokenCoverDown2
⁄ = OuterBackground and TrekShatterTrigger
€ = GradientUp1 and TrekShatterPlaceholder
› = GradientRight1 and TrekShatterPlaceholder
‡ = GradientDown1 and TrekShatterPlaceholder
~ = OuterBackground and TrekShatterFuse
° = OuterBackground and TrekShatterPlaceholder
` = OuterBackground and TrekKillHandsTrigger
ª = GradientRightDownCorner1 and TrekKillHandsTrigger
(level-specific layered components)
É = FootprintHoriz2 and HandDown (2)
È = FootprintHoriz1 and HandDown (2)
箱 = Box and GradientUp2 (1)
┉ = FootprintHoriz1 and GradientRight3 (old 1, unused)
┅ = FootprintHoriz2 and GradientRight2 (6)
™ = FootprintVert1 and GradientRight3 (6)
£ = ArmHoriz and Blood1 (6, 9)
¡ = FootprintVert2 and ArmHoriz (5)
¢ = FootprintHoriz1 and ArmHoriz (9)
∞ = FootprintHoriz2 and ArmHoriz (9)
¿ = GradientRight2 and HandRight (9)
§ = GradientRight2 and ArmHoriz (old 9, unused)
¶ = GradientRight3 and HandRight (old 9, unused)
(Final level)
Q = NormalPlayer and Wall2Token and GradientLeftUpCorner1 and EndingGenerationToken
EndingGradient = EndingGradientUp1 or EndingGradientDown1 or EndingGradientLeft1 or EndingGradientRight1 or GradientLeftUpCorner1 or GradientLeftUpCorner2 or GradientLeftUpCorner3 or GradientUp2 or GradientUp3 or GradientLeft2 or GradientLeft3
ω = BedUpperLeft and EndingBedroomRenewalStartToken
EndingDoor = EndingBedroomDoorOpenBottom or EndingBedroomDoorOpenTop or EndingBedroomDoorClosedLeft or EndingBedroomDoorClosedRight or EndingOutsideDoorOpen or EndingOutsideDoorClosedLeft or EndingOutsideDoorClosedRight
ψ = EndingBedroomDoorOpenBottom and EndingHouseRenewalBedroomToken
ι = LivingRoomRightDoorBottom and DoorBlocker and Tile1Token
χ = EndingOutsideDoorOpen
Door = IntroDoor or EndingDoor
φ = DeadHandDown
υ = DeadHandLeft
τ = DeadHandUp
σ = DeadArmVert
RenewalToken = EndingOutsideRenewalToken1 or EndingOutsideRenewalToken2 or EndingHouseRenewalBedroomToken or EndingHouseRenewalToken1 or EndingHouseRenewalToken2 or EndingBedroomRenewalToken
ρ = PathToken
π = PathSpawner
ο = EndingGradientDown1 and WallToken
ξ = EndingGradientDown1 and Tile1Token
ν = EndingGradientDown1 and Tile2Token
μ = EndingGradientDown1 and CarpetToken
TileToken = Tile1Token or Tile2Token
λ = AxeDropoff
κ = Wall1 and EndingHouseRenewalBedroomToken
θ = Tile1Token
η = Tile2Token
ζ = WindowHoriz1 and BottomWindowToken
Z = WindowHoriz1 and TopWindowToken
X = BathroomDoorOpen and Tile1Token
SleepPhaseToken = SleepPhase1Token or SleepPhase2Token or SleepPhase3Token or SleepPhase4Token or SleepPhase5Token or SleepPhase6Token or SleepPhase7Token or SleepPhase8Token or SleepPhase9Token or SleepPhase10Token or SleepPhase11Token or SleepPhase12Token or SleepPhase13Token or SleepPhase14Token or SleepPhase15Token or SleepPhase16Token or SleepPhase17Token or SleepPhase18Token or SleepPhase19Token or SleepPhase20Token
TransitionBackground = HalfGrass or HalfPath or HalfOuterBackground or HalfGradientUp1Grass or HalfGradientUp1Path or HalfGradientUp2Grass or HalfGradientUp2Path or HalfGradientUp3 or HalfGradientRight1 or HalfGradientDown1Grass or HalfGradientDown1Path or HalfGradientDown1Carpet or HalfGradientDown1Tile1 or HalfGradientDown1Tile2 or HalfGradientLeft1 or HalfGradientLeft2 or HalfGradientLeft3 or HalfGradientLeftUpCorner1 or HalfGradientLeftUpCorner2 or HalfGradientLeftUpCorner3 or HalfCarpet or HalfTile1 or HalfTile2
HalfChoppablePart = HalfHandDown or HalfHandLeft or HalfHandUpGrass or HalfHandUpPath or HalfArmVertGrass or HalfArmVertPath
TransitionSolid = HalfGradientDown1Wall or HalfWall1 or HalfWall2 or HalfChoppablePart or HalfWindowVert or HalfTopWindow or HalfBottomWindow or HalfBedUpperFoot or HalfBedLowerFoot or RealBedUpperLeftUnrealOccupied or RealBedLowerLeftUnrealOccupied or HalfRealBedUpperLeftUnrealOccupied or HalfRealBedLowerLeftUnrealOccupied or HalfRealBedUpperLeft or HalfRealBedLowerLeft
TransitionDoor = HalfLivingRoomLeftDoorTop or HalfLivingRoomLeftDoorBottom or HalfLivingRoomRightDoorTop or HalfLivingRoomRightDoorBottom or HalfOutsideDoorClosedLeft or HalfOutsideDoorClosedRight or HalfBathroomDoorOpen
RealBackground = Grass or Path or Carpet or Tile1 or Tile2
RealSolid = RealWall or RealWindowVert or RealTopWindow or RealBottomWindow
RealDoor = RealLivingRoomLeftDoorTop or RealLivingRoomLeftDoorBottom or RealLivingRoomRightDoorTop or RealLivingRoomRightDoorBottom or RealOutsideDoorClosedLeft or RealOutsideDoorClosedRight or RealBathroomDoorOpen
EndingCover = EndingCover1 or EndingCover2 or EndingCover3 or EndingCover4 or EndingCover5
=======
SOUNDS
=======
sfx0 99804907 (walking on blood)
sfx1 35001908 (chopping parts; invoked manually because we don't want it to play a few times)
sfx3 11004302 (same as Hand Move; invoked manually in the intro cutscene)
sfx4 17344302 (final level - border swing)
sfx5 27875502 (dead hand crumble; invoked manually so it doesn't trigger in the final level)
sfx6 25337907 (pick up axe)
sfx7 38200107 (get out of bed; invoked manually so it doesn't trigger in the final level)
Player CantMove 17402904
Hand Move 11004302
SoundTestTrigger Destroy 43550102
BedUpperLeftOccupied Create 38200107 (get in bed; same as sfx7 get out of bed)
BedroomDoorClosedRight Destroy 56950107 (open door)
OutsideDoorClosedLeft Destroy 56950107
IntroChoppablePart Create 11004302 (same as Hand Move)
ChoppedHand Destroy 35001908 (same as sfx1 chopping parts)
BreathStep1Token Destroy 594902 (inhale)
BreathStep5Token Destroy 87865702 (exhale)
SuperAxeToken Destroy 17402904 (rage intensifies)
SuperAxeBump1Token Destroy 24993704
SuperAxeBump2Token Destroy 90333504
SuperAxeBump3Token Destroy 49335504
SuperAxeBump4Token Destroy 99720704
BrokenCoverLeft2 Destroy 88982108 (border shatter)
BrokenCoverRight2 Destroy 88982108
BrokenCoverUp2 Destroy 88982108
BrokenCoverDown2 Destroy 88982108
EndingOutsideDoorOpen Destroy 73601104 (close door)
EndingBedroomDoorOpenBottom Destroy 73601104
Axe Create 38200107 (drop off the axe in the final level)
SleepPhase5Token Create 74801509 (chirp chirp)
SleepPhase6Token Create 787109
SleepPhase7Token Create 25857509
SleepPhase10Token Create 32489709
SleepPhase17Token Create 37159509
(93160508)
(17699502)
================
COLLISIONLAYERS
================
(This hierarchy is a complete mess, sorry)
Background
OuterBackground, Gradient, EndingOuterBackground, EndingGradient, TransitionBackground, RealBackground, SoundTestTrigger, SoundTestTriggerDisabled
TrekWinBar
Blood, Footprint, TrekRandomBlood, PathToken, PathSpawner, WallToken, CarpetToken, TileToken, BottomWindowToken, TopWindowToken
Axe, Door, TransitionDoor, RealDoor, HalfAxe
UsedAxeToken, AxeDeactivator, AxeDropoff
Player, Wall, Box, Window, ChoppablePart, Bed, DoorBlocker, ChoppedHand, ChoppedBlood, DeadChoppablePart, TrekShatterTrigger, TrekShatterSeed, TrekShatterPlaceholder, TrekKillHandsTrigger, TransitionSolid, RealSolid
TrekShatterFuse
HandSniffer
Wall2Token, BloodToken, MovementCheckToken, ShatterToken, QueueShatterToken
BeginKillingHandsToken
KillHandsToken
TrekKillingHandsToken
Cover, AxeCover, OverkillCheckToken, BreathToken, IntroCutscenePhaseToken, BrokenCover, SleepPhaseToken
BreathStepToken
IntroCutsceneCover, BloodyPlayerToken
RealBed, IntroChoppablePart
TrappedToken, TrappedCheckToken, TrappedPhaseToken, OpenEyesPhaseToken
SuperAxePhaseToken, SuperAxeChoppingToken, TrappedProceedAfterFade
EndingGenerationToken, EndingBedroomRenewalStartToken, RenewalToken, EndingCover, OpenEyesCover
TrappedInstantKill, TrappedHandMovementCheck, TrappedHandsHaveFinishedMovingCheck
InteractionDisabled
ResetDisabled
Timer
======
RULES
======
[> Player | Box] -> [> Player | > Box]
[ResetDisabled] -> checkpoint
(======
TIMERS
======)
(Here are implemented timers that count down, letting you wait for some amount of time before doing something.)
(These timers are by default *non-blocking*, meaning they use realtime mode to count down and the player can do whatever they want during them. This is behavior I want for a few cutscenes.)
(To stop a player from moving while a timer is going, instantiate one with an InteractionDisabled token on top of it, and the player's inputs will be eaten with again turns until the timer goes away.)
(Count down)
[Timer1] -> []
[Timer2] -> [Timer1]
[Timer3] -> [Timer2]
[Timer4] -> [Timer3]
[Timer5] -> [Timer4]
[Timer6] -> [Timer5]
[Timer7] -> [Timer6]
[Timer8] -> [Timer7]
[Timer9] -> [Timer8]
[Timer10] -> [Timer9]
[Timer11] -> [Timer10]
[Timer12] -> [Timer11]
[Timer13] -> [Timer12]
[Timer14] -> [Timer13]
[Timer15] -> [Timer14]
[Timer16] -> [Timer15]
[Timer17] -> [Timer16]
[Timer18] -> [Timer17]
[Timer19] -> [Timer18]
[Timer20] -> [Timer19]
(Kill movement while a timer is active, if that's what we want to do.)
[InteractionDisabled no Timer] -> []
late [InteractionDisabled] -> [InteractionDisabled] again
(================
LEVEL GENERATION
================)
(Alternate wall and window types by row.)
VERTICAL [Wall2Token | | ] -> [Wall2Token | | Wall2Token]
HORIZONTAL [Wall2Token | ] -> [Wall2Token | Wall2Token]
[Wall2Token Wall1] -> [Wall2Token Wall2]
[Wall2Token WindowHoriz1] -> [Wall2Token WindowHoriz2]
[Wall2Token WindowVert1] -> [Wall2Token WindowVert2]
[Wall2Token] -> []
(=============
HAND REACHING
=============)
(Used to kick off hand reaching on the next turn after the player moves.)
[Moving NoncutscenePlayer] -> [Moving NoncutscenePlayer] again
(Scan down from the player and see if there's a hand with a line of sight on them. If so, move that hand and any arm pieces attached to it one space toward the player, repeating the turn until it can't move.)
DOWN [NoncutscenePlayer | no SightBlocker] -> [NoncutscenePlayer | HandUpSniffer]
DOWN [HandUpSniffer | no SightBlocker] -> [HandUpSniffer | HandUpSniffer]
DOWN [HandUpSniffer | HandUp] -> [HandUpSniffer | < HandUp] again
DOWN [< HandUp | ArmVert] -> [< HandUp | < ArmVert]
(Same as above, except upward)
UP [NoncutscenePlayer | no SightBlocker] -> [NoncutscenePlayer | HandDownSniffer]
UP [HandDownSniffer | no SightBlocker] -> [HandDownSniffer | HandDownSniffer]
UP [HandDownSniffer | HandDown] -> [HandDownSniffer | < HandDown] again
UP [< HandDown | ArmVert] -> [< HandDown | < ArmVert]
(Arm stretching & movement propagation for vertical arms)
VERTICAL [< ArmVert | ArmVert] -> [< ArmVert | < ArmVert]
late [CoverVert no Hand no Arm] -> [CoverVert ArmVert]
(Same as above, except rightward)
RIGHT [NoncutscenePlayer | no SightBlocker] -> [NoncutscenePlayer | HandLeftSniffer]
RIGHT [HandLeftSniffer | no SightBlocker] -> [HandLeftSniffer | HandLeftSniffer]
RIGHT [HandLeftSniffer | HandLeft] -> [HandLeftSniffer | < HandLeft] again
RIGHT [< HandLeft | ArmHoriz] -> [< HandLeft | < ArmHoriz]
(Same as above, except leftward)
LEFT [NoncutscenePlayer | no SightBlocker] -> [NoncutscenePlayer | HandRightSniffer]
LEFT [HandRightSniffer | no SightBlocker] -> [HandRightSniffer | HandRightSniffer]
LEFT [HandRightSniffer | HandRight] -> [HandRightSniffer | < HandRight] again
LEFT [< HandRight | ArmHoriz] -> [< HandRight | < ArmHoriz]
(Arm stretching & movement propagation for horizontal arms)
HORIZONTAL [< ArmHoriz | ArmHoriz] -> [< ArmHoriz | < ArmHoriz]
late [CoverHoriz no Hand no Arm] -> [CoverHoriz ArmHoriz]
(Clean up)
[HandSniffer] -> []
(========
CHOPPIN'
========)
(Kill that hand or arm dead.)
[Axe OuterBackground no UsedAxeToken no AxeCover no AxeDeactivator] [ChoppablePart no Cover | < Player] -> [Axe OuterBackground UsedAxeToken] [BloodToken no ChoppablePart | Player] sfx1
(Tire out the player.)
[BloodToken] [TiredPlayer2] -> [BloodToken] [TiredPlayer4]
[BloodToken] [NormalPlayer] -> [BloodToken] [TiredPlayer2]
(Leave a random puddle of blood in its place. If there was already blood there, don't overwrite it.)
late [BloodToken Blood] -> [Blood]
late [BloodToken] -> [random Blood1 random Blood2 random Blood3 random Blood4]
(Dead parts crumble to the touch.)
[> Player | DeadChoppablePart] -> [Player | ] sfx5
(=====
BLOOD
=====)
(Before the player moves, leave a token on their location that records whether they were trying to move horizontally or vertically.)
VERTICAL [> Player] -> [VerticalMovementCheckToken > Player]
HORIZONTAL [> Player] -> [HorizontalMovementCheckToken > Player]
(Check if the player walked onto some blood: that is, their current position is on top of blood, and their position is different than the one they started the turn on. If so, play the sound effect.)
late [MovementCheckToken no Player] [Player Blood] -> sfx0
(Move any extant blood token back onto the player, if they moved.)
late [BloodyPlayerToken no Player] [Player] -> [] [Player BloodyPlayerToken]
(Get bloody.)
late [Player Blood] -> [Player BloodyPlayerToken1 Blood]
(If the player is bloody and moved, leave footprints at their current location based on the direction they moved.)
late [VerticalMovementCheckToken no Player] [BloodyPlayerToken1 no Blood] -> [] [BloodyPlayerToken2 FootprintVert1]
late [VerticalMovementCheckToken no Player] [BloodyPlayerToken2] -> [] [FootprintVert2]
(Copy/paste for horizontal)
late [HorizontalMovementCheckToken no Player] [BloodyPlayerToken1 no Blood] -> [] [BloodyPlayerToken2 FootprintHoriz1]
late [HorizontalMovementCheckToken no Player] [BloodyPlayerToken2] -> [] [FootprintHoriz2]
(Clean up)
late [MovementCheckToken] -> []
(==========
SOUND TEST
==========)
(Play a sound when the player steps on the X. The entity swapping here is necessariy because this is a realtime game, so if we just did a [Player SoundTestTrigger] -> sfx then it would play every tick.)
late [Player SoundTestTrigger] -> [Player SoundTestTriggerDisabled]
late [SoundTestTriggerDisabled no Player] -> [SoundTestTrigger]
(===========
FIRST LEVEL
===========)
(Part 1: Cutscene)
(Generate the bed and cover up the background.)
RIGHT [RealBedUpperLeft | | ] -> [RealBedUpperLeft BedUpperLeft | RealBedUpperFoot BedUpperFoot | RealBedUpperFoot BedUpperFoot]
DOWN [RealBedUpperLeft | ] -> [RealBedUpperLeft | RealBedLowerLeft BedLowerLeft]
RIGHT [RealBedLowerLeft | | ] -> [RealBedLowerLeft | RealBedLowerFoot BedLowerFoot | RealBedLowerFoot BedLowerFoot]
[RealBedUpperLeft no SleepPhaseToken] [] -> [RealBedUpperLeft] [IntroCutsceneCover]
(Move the opening cutscene hands.)
DOWN [IntroHandUp] -> [< IntroHandUp]
late DOWN [IntroHandUp | ] -> [IntroHandUp | IntroArmVert]
DOWN [IntroHandDown] -> [> IntroHandDown]
late DOWN [ | IntroHandDown] -> [IntroArmVert | IntroHandDown]
RIGHT [IntroHandLeft] -> [< IntroHandLeft]
late RIGHT [IntroHandLeft | ] -> [IntroHandLeft | IntroArmHoriz]
RIGHT [IntroHandRight] -> [> IntroHandRight]
late RIGHT [ | IntroHandRight] -> [IntroArmHoriz | IntroHandRight]
(Timed sound effect deployment)
[IntroCutscenePhase1 no Timer] -> [IntroCutscenePhase2 Timer17 InteractionDisabled] sfx3
[IntroCutscenePhase2 no Timer] -> [IntroCutscenePhase3 Timer1 InteractionDisabled] sfx3
[IntroCutscenePhase3 no Timer] -> [IntroCutscenePhase4 Timer1 InteractionDisabled] sfx3
[IntroCutscenePhase4 no Timer] -> [IntroCutscenePhase5 Timer12 InteractionDisabled] sfx3
[IntroCutscenePhase5 no Timer] -> [IntroCutscenePhase6 Timer20 InteractionDisabled] sfx3
[IntroCutscenePhase6 no Timer] -> [IntroCutscenePhase7 Timer10 InteractionDisabled]
(Spawn hands from each direction so they all reach the bed at the same time.)
DOWN [IntroCutscenePhase7 no Timer] [RealBed | | | | | | | | | | ] -> [IntroCutscenePhase7 no Timer] [RealBed | | | | | | | | | | IntroHandUp]
RIGHT [IntroCutscenePhase7 no Timer] [RealBed | | | | | | | | | | | ] -> [IntroCutscenePhase7 no Timer] [RealBed | | | | | | | | | | | IntroHandLeft]
[IntroCutscenePhase7 no Timer] -> [IntroCutscenePhase8 Timer2 InteractionDisabled]
RIGHT [IntroCutscenePhase8 no Timer] [ | | | | | | | | | RealBed] -> [IntroCutscenePhase8 no Timer] [IntroHandRight | | | | | | | | | RealBed]
[IntroCutscenePhase8 no Timer] -> [IntroCutscenePhase9 Timer3 InteractionDisabled]
DOWN [IntroCutscenePhase9 no Timer] [ | | | | | RealBed] -> [IntroCutscenePhase9 no Timer] [IntroHandDown | | | | | RealBed]
[IntroCutscenePhase9 no Timer] -> [IntroCutscenePhase10 Timer4 InteractionDisabled]
(When the hands reach the bed, clear the cutscene and activate the player.)
[IntroCutscenePhase10 no Timer] [IntroChoppablePart] -> [IntroCutscenePhase10] []
[IntroCutscenePhase10 no Timer] [IntroCutsceneCover] -> [IntroCutscenePhase10] []
DOWN [IntroCutscenePhase10 no Timer] [RealBedUpperLeft | RealBedLowerLeft] -> [IntroCutscenePhase10] [BedUpperLeftOccupied | BedLowerLeftOccupied]
[IntroCutscenePhase10 no Timer] [RealBed] -> [IntroCutscenePhase10] []
[IntroCutscenePhase10 no Timer] -> []
(Part 2: the actual level)
(Finish up the doors.)
RIGHT [ | BedroomDoorClosedRight] -> [BedroomDoorClosedLeft | BedroomDoorClosedRight]
DOWN [ | LivingRoomLeftDoorBottom] -> [LivingRoomLeftDoorTop | LivingRoomLeftDoorBottom]
DOWN [ | LivingRoomRightDoorBottom] -> [LivingRoomRightDoorTop | LivingRoomRightDoorBottom]
RIGHT [ | OutsideDoorClosedRight] -> [OutsideDoorClosedLeft | OutsideDoorClosedRight]
(Open the bedroom door when the player walks into it.)
RIGHT [> Player | BedroomDoorClosedRight] -> [Player BedroomDoorOpenBottom | ]
DOWN [ | BedroomDoorOpenBottom] -> [BedroomDoorOpenTop | BedroomDoorOpenBottom]
(Open the outside door when the player walks into it.)
RIGHT [OutsideDoorClosedLeft | OutsideDoorClosedRight | < Player] -> [ | OutsideDoorOpen | Player]
(Get out of bed.)
late DOWN [no BedUpperLeftOccupied | BedLowerLeftOccupied] -> [ | BedLowerLeft] sfx7
DOWN [ | < BedUpperLeftOccupied] -> [NormalPlayer | BedUpperLeft]
DOWN [> BedUpperLeftOccupied | | ] -> [BedUpperLeft | | NormalPlayer]
RIGHT [> BedUpperLeftOccupied | | | ] -> [BedUpperLeft | | | NormalPlayer]
(Get back into bed?)
[Bed | < Player] [BedLowerLeft] -> [Bed | < Player ] [BedLowerLeftOccupied]
[Bed | < Player] [BedUpperLeft] -> [Bed | ] [BedUpperLeftOccupied]
(===================
AXE INTRO CUTSCENES
===================)
(When the player picks up the axe, activate the axe swings.)
late [Player Axe] [AxeDeactivator] -> [Player Axe] []
late [Player Axe no OuterBackground no Gradient no AxeDropoff] -> [Player ResetDisabled] sfx6 checkpoint (additional entity checks here are so you can step on the axe in the last levels)
(This is the part where the player has to chop the hand apart piece by piece.)
DOWN [AxeCover Axe no AxeDeactivator] [HandDown | < Player] -> [AxeCover Axe] [ChoppedHand1 | Player] sfx1
DOWN [ChoppedHand1 | UP Player] -> [ChoppedHand2 | Player]
DOWN [ChoppedHand2 | UP Player] -> [ChoppedHand3 | Player]
DOWN [ChoppedHand3 | UP Player] -> [ChoppedHand4 | Player]
DOWN [ChoppedHand4 | UP Player] -> [ChoppedHand5 | Player]
DOWN [ChoppedHand5 | UP Player] -> [ChoppedHand6 | TiredPlayer1]
DOWN [ChoppedHand6 | UP Player] -> [ChoppedHand7 | Player]
DOWN [ChoppedHand7 | UP Player] -> [ChoppedHand8 | Player]
DOWN [ChoppedHand8 | UP Player] -> [ChoppedHand9 | Player]
DOWN [ChoppedHand9 | UP Player] -> [ChoppedHand10 | Player]
DOWN [ChoppedHand10 | UP Player] -> [ChoppedHand11 | Player]
DOWN [ChoppedHand11 | UP Player] -> [ChoppedHand12 | TiredPlayer2]
DOWN [ChoppedHand12 | UP Player] -> [ChoppedHand13 | Player]
DOWN [ChoppedHand13 | UP Player] -> [ChoppedHand14 | Player]
DOWN [ChoppedHand14 | UP Player] -> [ChoppedHand15 | Player]
DOWN [ChoppedHand15 | UP Player] -> [ChoppedHand16 | Player]
DOWN [ChoppedHand16 | UP Player] -> [ChoppedHand17 | Player]
DOWN [ChoppedHand17 | UP Player] -> [ChoppedHand18 | Player]
DOWN [ChoppedHand18 | UP Player] -> [ChoppedHand19 | TiredPlayer3]
DOWN [ChoppedHand19 | UP Player] -> [ChoppedHand20 | Player]
DOWN [ChoppedHand20 | UP Player] -> [ChoppedHand21 | Player]
DOWN [ChoppedHand21 | UP Player] -> [ChoppedHand22 | Player]
DOWN [ChoppedHand22 | UP Player] -> [ChoppedHand23 | Player]
DOWN [ChoppedHand23 | UP Player] -> [ChoppedHand24 | Player]
DOWN [ChoppedHand24 | UP Player] -> [ChoppedHand25 | TiredPlayer4]
DOWN [ChoppedHand25 | UP Player] -> [ChoppedHand26 | Player]
DOWN [ChoppedHand26 | UP Player] -> [ChoppedHand27 | Player]
DOWN [ChoppedHand27 | UP Player] -> [ChoppedHand28 | Player]
DOWN [ChoppedHand28 | UP Player] -> [ChoppedHand29 | Player]
DOWN [ChoppedHand29 | UP Player] -> [ChoppedHand30 | Player]
(Cancel movement besides up.)
DOWN [ChoppedHand | DOWN Player] -> [ChoppedHand | Player]
DOWN [ChoppedHand | LEFT Player] -> [ChoppedHand | Player]
DOWN [ChoppedHand | RIGHT Player] -> [ChoppedHand | Player]
(Overkill: let the player keep mashing up and making sounds happen until they get tired and don't push anything for 10 ticks.)
[UP TiredPlayer OverkillCheckToken] -> [TiredPlayer OverkillCheck1Token] sfx0
[Moving TiredPlayer OverkillCheckToken] -> [TiredPlayer OverkillCheckToken]
[TiredPlayer OverkillCheck10Token] -> [TiredPlayer Breath1Token BreathStep1Token Timer1]
[TiredPlayer OverkillCheck9Token] -> [TiredPlayer OverkillCheck10Token]
[TiredPlayer OverkillCheck8Token] -> [TiredPlayer OverkillCheck9Token]
[TiredPlayer OverkillCheck7Token] -> [TiredPlayer OverkillCheck8Token]
[TiredPlayer OverkillCheck6Token] -> [TiredPlayer OverkillCheck7Token]
[TiredPlayer OverkillCheck5Token] -> [TiredPlayer OverkillCheck6Token]
[TiredPlayer OverkillCheck4Token] -> [TiredPlayer OverkillCheck5Token]
[TiredPlayer OverkillCheck3Token] -> [TiredPlayer OverkillCheck4Token]
[TiredPlayer OverkillCheck2Token] -> [TiredPlayer OverkillCheck3Token]
[TiredPlayer OverkillCheck1Token] -> [TiredPlayer OverkillCheck2Token]
DOWN [ChoppedHand30 | UP Player] -> [ChoppedBlood | TiredPlayer5 OverkillCheck1Token]
(Breathe in)
[Moving TiredPlayer BreathToken] -> [TiredPlayer BreathToken]
[TiredPlayer5 BreathToken BreathStep1Token no Timer] -> [TiredPlayer4 BreathToken BreathStep2Token Timer1 InteractionDisabled]
(Short breath - hold)
[TiredPlayer4 Breath1Token BreathStep2Token no Timer] -> [TiredPlayer3 Breath1Token BreathStep5Token Timer4 InteractionDisabled]
[TiredPlayer4 Breath2Token BreathStep2Token no Timer] -> [TiredPlayer3 Breath2Token BreathStep5Token Timer5 InteractionDisabled]
[TiredPlayer4 Breath3Token BreathStep2Token no Timer] -> [TiredPlayer3 Breath3Token BreathStep5Token Timer6 InteractionDisabled]
[TiredPlayer4 Breath4Token BreathStep2Token no Timer] -> [TiredPlayer3 Breath4Token BreathStep5Token Timer8 InteractionDisabled]
(Long breath)
[TiredPlayer4 LongBreathToken BreathStep2Token no Timer] -> [TiredPlayer3 LongBreathToken BreathStep3Token Timer1 InteractionDisabled]
(hold)
[TiredPlayer3 Breath5Token BreathStep3Token no Timer] -> [TiredPlayer2 Breath5Token BreathStep4Token Timer10 InteractionDisabled]
[TiredPlayer3 Breath6Token BreathStep3Token no Timer] -> [TiredPlayer2 Breath6Token BreathStep4Token Timer12 InteractionDisabled]
(Breathe out)
[TiredPlayer2 LongBreathToken BreathStep4Token no Timer] -> [TiredPlayer3 LongBreathToken BreathStep5Token Timer1 InteractionDisabled]
[TiredPlayer3 BreathToken BreathStep5Token no Timer] -> [TiredPlayer4 BreathToken BreathStep6Token Timer1 InteractionDisabled]
(restart)
[TiredPlayer4 Breath1Token BreathStep6Token no Timer] -> [TiredPlayer5 Breath2Token BreathStep1Token Timer4 InteractionDisabled]
[TiredPlayer4 Breath2Token BreathStep6Token no Timer] -> [TiredPlayer5 Breath3Token BreathStep1Token Timer5 InteractionDisabled]
[TiredPlayer4 Breath3Token BreathStep6Token no Timer] -> [TiredPlayer5 Breath4Token BreathStep1Token Timer6 InteractionDisabled]
[TiredPlayer4 Breath4Token BreathStep6Token no Timer] -> [TiredPlayer5 Breath5Token BreathStep1Token Timer8 InteractionDisabled]
[TiredPlayer4 Breath5Token BreathStep6Token no Timer] -> [TiredPlayer5 Breath6Token BreathStep1Token Timer10 InteractionDisabled]
[TiredPlayer4 Breath6Token BreathStep6Token no Timer] -> [TiredPlayer5 Breath7Token BreathStep1Token Timer18 InteractionDisabled]
(Resume)
[TiredPlayer4 Breath7Token BreathStep2Token no Timer] -> [TiredPlayer3 Breath7Token BreathStep3Token Timer1 InteractionDisabled]
[TiredPlayer3 Breath7Token BreathStep3Token no Timer] -> [TiredPlayer2 Breath7Token BreathStep4Token]
[Breath7Token BreathStep4Token no Timer] [ChoppedBlood] -> [Breath7Token BreathStep4Token] [Blood1]
[Breath7Token BreathStep4Token no Timer] [AxeCover] -> [Breath7Token BreathStep4Token] []
[Breath7Token BreathStep4Token no Timer] [Axe] [ResetDisabled] -> [] [Axe UsedAxeToken] [] checkpoint
(=======
TRAPPED
=======)
(Check if the player has exhausted all their axe swings. If so, the player will have a TrappedCheckToken on them after this block.)
[TrappedToken] [Player] -> [TrappedToken] [Player TrappedCheckToken]
[Axe no UsedAxeToken] [TrappedCheckToken] -> [Axe] []
[TrappedCheckToken] [TrappedToken] -> [TrappedCheckToken] []
(If the player is trapped, first pause)
[TrappedCheckToken] -> [TrappedPhase1Token Timer5 InteractionDisabled]
[TrappedPhase1Token no Timer] -> [TrappedPhase2Token]
(Then extend every hand from the border.)
[TrappedPhase2Token] [Hand] -> [TrappedPhase2Token] [Hand TrappedHandMovementCheck]
[TrappedPhase2Token] [HandLeft] -> [TrappedPhase2Token] [LEFT HandLeft]
[TrappedPhase2Token] [HandRight] -> [TrappedPhase2Token] [RIGHT HandRight]
[TrappedPhase2Token] [HandUp] -> [TrappedPhase2Token] [UP HandUp]
[TrappedPhase2Token] [HandDown] -> [TrappedPhase2Token] [DOWN HandDown]
(Copy paste of the arm extension code from HAND REACHING above; could be removed by moving that code somewhere after this block, but I don't want to)
DOWN [< HandUp | ArmVert] -> [< HandUp | < ArmVert]
UP [< HandDown | ArmVert] -> [< HandDown | < ArmVert]
VERTICAL [< ArmVert | ArmVert] -> [< ArmVert | < ArmVert]
late [CoverVert no Hand no Arm] -> [CoverVert ArmVert]
RIGHT [< HandLeft | ArmHoriz] -> [< HandLeft | < ArmHoriz]
LEFT [< HandRight | ArmHoriz] -> [< HandRight | < ArmHoriz]
HORIZONTAL [< ArmHoriz | ArmHoriz] -> [< ArmHoriz | < ArmHoriz]
late [CoverHoriz no Hand no Arm] -> [CoverHoriz ArmHoriz]
(Clean up and check if any hands moved in the last turn)
late [TrappedPhase2Token] [Player] -> [TrappedPhase2Token] [Player TrappedHandsHaveFinishedMovingCheck]
late [TrappedHandMovementCheck no Hand] [TrappedHandsHaveFinishedMovingCheck] -> [TrappedHandMovementCheck] [] again
late [TrappedHandMovementCheck] -> []
(If no hands moved, then kill the player. If the instant kill token is present, then do it immediately without interaction.)
late [TrappedInstantKill] [Player TrappedPhase2Token TrappedHandsHaveFinishedMovingCheck] -> [TrappedInstantKill] [Player TrappedPhase3Token Timer3 InteractionDisabled] again (this is a late rule, so we need an again here to lock the controls or else the player will have one frame where they can move before the timer activates)
[TrappedInstantKill] [TiredPlayer4 TrappedPhase3Token no Timer] -> [TrappedInstantKill] [TiredPlayer5 TrappedPhase3Token Timer3 InteractionDisabled]
[TrappedInstantKill] [TiredPlayer5 TrappedPhase3Token no Timer] -> [TrappedInstantKill] [TiredPlayer6 TrappedPhase3Token Timer3 InteractionDisabled]
[TrappedInstantKill] [TiredPlayer6 TrappedPhase3Token no Timer] -> [TrappedInstantKill] [TiredPlayer7 TrappedPhase3Token Timer3 InteractionDisabled]
(If there's no instant kill token, then let the player flail around a bit while they die slowly.)
late [Player TrappedPhase2Token TrappedHandsHaveFinishedMovingCheck] -> [Player TrappedPhase3Token Timer20]
[TiredPlayer4] [TrappedPhase3Token no Timer] -> [TiredPlayer5] [TrappedPhase3Token Timer20]
[TiredPlayer5] [TrappedPhase3Token no Timer] -> [TiredPlayer6] [TrappedPhase3Token Timer20]
[TiredPlayer6] [TrappedPhase3Token no Timer] -> [TiredPlayer7] [TrappedPhase3Token Timer20 InteractionDisabled]
(Pause and fade out)
[TrappedPhase3Token no Timer] -> [TrappedPhase4Token Timer10 InteractionDisabled]
[TrappedPhase4Token no Timer] [] -> [TrappedPhase4Token] [EndingCover1]
[TrappedPhase4Token no Timer] -> [TrappedPhase5Token Timer2 InteractionDisabled]
[TrappedPhase5Token no Timer] [EndingCover1] -> [TrappedPhase5Token] [EndingCover2]
[TrappedPhase5Token no Timer] -> [TrappedPhase6Token Timer2 InteractionDisabled]
[TrappedPhase6Token no Timer] [EndingCover2] -> [TrappedPhase6Token] [EndingCover3]
[TrappedPhase6Token no Timer] -> [TrappedPhase7Token Timer2 InteractionDisabled]
[TrappedPhase7Token no Timer] [EndingCover3] -> [TrappedPhase7Token] [EndingCover4]
[TrappedPhase7Token no Timer] -> [TrappedPhase8Token Timer2 InteractionDisabled]
[TrappedPhase8Token no Timer] [EndingCover4] -> [TrappedPhase8Token] [EndingCover5]
[TrappedPhase8Token no Timer] -> [TrappedPhase9Token Timer10 InteractionDisabled]
(If we're on one of the first two trapped levels, then proceed after fading out. Otherwise, move on to the next ruleset...)
[TrappedProceedAfterFade] [TrappedPhase9Token no Timer] -> win
(======================
LIBERATION SHENANIGANS
======================)
(Part 1: open your eyes)
(Randomly assign one of four undissolve sequences to every tile.)
[TrappedPhase9Token no Timer MOVING Player] [EndingCover] -> [TrappedPhase9Token MOVING Player] [random OpenEyesCover11 random OpenEyesCover21 random OpenEyesCover31 random OpenEyesCover41]
[TrappedPhase9Token MOVING Player] -> [OpenEyesPhase1Token TiredPlayer5]
(Undissolve 1 -> 2)
[OpenEyesPhase1Token MOVING Player] [OpenEyesCover11] -> [OpenEyesPhase1Token MOVING Player] [OpenEyesCover12]
[OpenEyesPhase1Token MOVING Player] [OpenEyesCover21] -> [OpenEyesPhase1Token MOVING Player] [OpenEyesCover22]
[OpenEyesPhase1Token MOVING Player] [OpenEyesCover31] -> [OpenEyesPhase1Token MOVING Player] [OpenEyesCover32]
[OpenEyesPhase1Token MOVING Player] [OpenEyesCover41] -> [OpenEyesPhase1Token MOVING Player] [OpenEyesCover42]
[OpenEyesPhase1Token MOVING Player] -> [OpenEyesPhase2Token Player]
(Undissolve 2 -> 3)
[OpenEyesPhase2Token MOVING Player] [OpenEyesCover12] -> [OpenEyesPhase2Token MOVING Player] [OpenEyesCover13]
[OpenEyesPhase2Token MOVING Player] [OpenEyesCover22] -> [OpenEyesPhase2Token MOVING Player] [OpenEyesCover23]
[OpenEyesPhase2Token MOVING Player] [OpenEyesCover32] -> [OpenEyesPhase2Token MOVING Player] [OpenEyesCover33]
[OpenEyesPhase2Token MOVING Player] [OpenEyesCover42] -> [OpenEyesPhase2Token MOVING Player] [OpenEyesCover43]
[OpenEyesPhase2Token MOVING Player] -> [OpenEyesPhase3Token Player]
(Undissolve 3 -> 4)
[OpenEyesPhase3Token MOVING Player] [OpenEyesCover13] -> [OpenEyesPhase3Token MOVING Player] [OpenEyesCover14]
[OpenEyesPhase3Token MOVING Player] [OpenEyesCover23] -> [OpenEyesPhase3Token MOVING Player] [OpenEyesCover24]
[OpenEyesPhase3Token MOVING Player] [OpenEyesCover33] -> [OpenEyesPhase3Token MOVING Player] [OpenEyesCover34]
[OpenEyesPhase3Token MOVING Player] [OpenEyesCover43] -> [OpenEyesPhase3Token MOVING Player] [OpenEyesCover44]
[OpenEyesPhase3Token MOVING Player] -> [OpenEyesPhase4Token Player]
(Undissolve 4 -> 5 and return control to the player)
[OpenEyesPhase4Token MOVING Player] [OpenEyesCover] -> [OpenEyesPhase4Token MOVING Player] []
[OpenEyesPhase4Token MOVING Player] -> [Player]
(Part 2: getting mad)
(If this activates, the player has attempted a chop past the allotted two, so drop a token.)
[SuperAxePhaseToken] [ChoppablePart no Cover | < Player] -> [SuperAxePhaseToken] [ChoppablePart SuperAxeChoppingToken | Player]
(The player has to bump into a part five times before they snap and the super axe activates.)
[SuperAxeBump4Token] [SuperAxeChoppingToken] [TiredPlayer2] -> [SuperAxeActiveToken] [] [TiredPlayer1]
[SuperAxeBump3Token] [SuperAxeChoppingToken] [TiredPlayer3] -> [SuperAxeBump4Token] [] [TiredPlayer2]
[SuperAxeBump2Token] [SuperAxeChoppingToken] [TiredPlayer4] -> [SuperAxeBump3Token] [] [TiredPlayer3]
[SuperAxeBump1Token] [SuperAxeChoppingToken] [TiredPlayer5] -> [SuperAxeBump2Token] [] [TiredPlayer4]
[SuperAxeToken] [SuperAxeChoppingToken] -> [SuperAxeBump1Token] []
(Turn the player back to normal before they start chopping again.)
[SuperAxeChoppingToken] [TiredPlayer1] -> [SuperAxeChoppingToken] [NormalPlayer]
(Part 3: unlimited chopping)
(Try to add one more X to the bottom of the stack, if there's room.)
random DOWN [SuperAxeChoppingToken] [UsedAxeToken | no UsedAxeToken] -> [SuperAxeChoppingToken] [UsedAxeToken | UsedAxeToken]
(Chop the heck out of that part.)
[ChoppablePart SuperAxeChoppingToken no Cover] -> [BloodToken] sfx1
(Part 4: shattering the border)
(Well now, they're trying to chop the border.)
RIGHT [SuperAxeActiveToken] [> Player | CoverLeft ChoppablePart] -> [SuperAxeActiveToken] [Player | BrokenCoverLeft1] sfx4
RIGHT [> Player | BrokenCoverLeft1] -> [Player | BrokenCoverLeft2] sfx4
RIGHT [> Player | BrokenCoverLeft2 | ] -> [Player | BrokenCoverLeft2 ShatterToken GradientRight2 | GradientRight1] sfx4
LEFT [SuperAxeActiveToken] [> Player | CoverRight ChoppablePart] -> [SuperAxeActiveToken] [Player | BrokenCoverRight1] sfx4
LEFT [> Player | BrokenCoverRight1] -> [Player | BrokenCoverRight2] sfx4
LEFT [> Player | BrokenCoverRight2 | ] -> [Player | BrokenCoverRight2 ShatterToken GradientLeft2 | GradientLeft1] sfx4
UP [SuperAxeActiveToken] [> Player | CoverDown ChoppablePart] -> [SuperAxeActiveToken] [Player | BrokenCoverDown1] sfx4
UP [> Player | BrokenCoverDown1] -> [Player | BrokenCoverDown2] sfx4
UP [> Player | BrokenCoverDown2 | ] -> [Player | BrokenCoverDown2 ShatterToken GradientUp2 | GradientUp1] sfx4
DOWN [SuperAxeActiveToken] [> Player | CoverUp ChoppablePart] -> [SuperAxeActiveToken] [Player | BrokenCoverUp1] sfx4
DOWN [> Player | BrokenCoverUp1] -> [Player | BrokenCoverUp2] sfx4
DOWN [> Player | BrokenCoverUp2 | ] -> [Player | BrokenCoverUp2 ShatterToken GradientDown2 | GradientDown1] sfx4
(Shatter the border segment and cascade.)
DOWN [ | BrokenCoverLeft2 ShatterToken no Gradient | ] -> [QueueShatterToken | GradientRight1 | QueueShatterToken] sfx2
DOWN [ | BrokenCoverLeft2 ShatterToken Gradient | ] -> [QueueShatterToken | Gradient | QueueShatterToken] sfx2
DOWN [ | BrokenCoverRight2 ShatterToken no Gradient | ] -> [QueueShatterToken | GradientLeft1 | QueueShatterToken] sfx2
DOWN [ | BrokenCoverRight2 ShatterToken Gradient | ] -> [QueueShatterToken | Gradient | QueueShatterToken] sfx2
RIGHT [ | BrokenCoverDown2 ShatterToken no Gradient | ] -> [QueueShatterToken | GradientUp1 | QueueShatterToken] sfx2
RIGHT [ | BrokenCoverDown2 ShatterToken Gradient | ] -> [QueueShatterToken | Gradient | QueueShatterToken] sfx2
RIGHT [ | BrokenCoverUp2 ShatterToken no Gradient | ] -> [QueueShatterToken | GradientDown1 | QueueShatterToken] sfx2
RIGHT [ | BrokenCoverUp2 ShatterToken Gradient | ] -> [QueueShatterToken | Gradient | QueueShatterToken] sfx2
[UsedAxeToken no Axe] [QueueShatterToken] -> [UsedAxeToken] [QueueShatterToken] again (lock input on the liberation stage)
(Wrap around the corners.)
late VERTICAL [RightBorder | QueueShatterToken no Cover no BrokenCover no TrekShatterPlaceholder] -> [RightBorder QueueShatterToken | ]
late VERTICAL [LeftBorder | QueueShatterToken no Cover no BrokenCover no TrekShatterPlaceholder] -> [LeftBorder QueueShatterToken | ]
late HORIZONTAL [UpBorder | QueueShatterToken no Cover no BrokenCover no TrekShatterPlaceholder] -> [UpBorder QueueShatterToken | ]
late HORIZONTAL [DownBorder | QueueShatterToken no Cover no BrokenCover no TrekShatterPlaceholder] -> [DownBorder QueueShatterToken | ]
(Finalize the cascade for the next turn.)
late [QueueShatterToken RightBorder ChoppablePart] -> [ShatterToken BrokenCoverLeft2]
late [QueueShatterToken RightBorder] -> [ShatterToken BrokenCoverLeft2]
late [QueueShatterToken LeftBorder ChoppablePart] -> [ShatterToken BrokenCoverRight2]
late [QueueShatterToken LeftBorder] -> [ShatterToken BrokenCoverRight2]
late [QueueShatterToken UpBorder ChoppablePart] -> [ShatterToken BrokenCoverDown2]
late [QueueShatterToken UpBorder] -> [ShatterToken BrokenCoverDown2]
late [QueueShatterToken DownBorder ChoppablePart] -> [ShatterToken BrokenCoverUp2]
late [QueueShatterToken DownBorder] -> [ShatterToken BrokenCoverUp2]
(Clean up)
late [QueueShatterToken no TrekShatterPlaceholder no TrekKillHandsTrigger] -> []
(Part 5: killing the hands)
(Check if the border is gone.)
[SuperAxeActiveToken] -> [SuperAxeActiveToken BeginKillingHandsToken]
[BeginKillingHandsToken] [Cover] -> [] [Cover]
[BeginKillingHandsToken] [BrokenCover] -> [] [BrokenCover]
(If so, start killing the hands.)
[UsedAxeToken no Axe] [BeginKillingHandsToken] [Player] -> [UsedAxeToken] [BeginKillingHandsToken] [Player KillHandsPhase1 Timer3 InteractionDisabled]
[BeginKillingHandsToken SuperAxeActiveToken] -> []
(Phase 1)
[KillHandsPhase1 no Timer] [HandUp] -> [KillHandsPhase1 no Timer] [DyingHandUp]
[KillHandsPhase1 no Timer] [HandDown] -> [KillHandsPhase1 no Timer] [DyingHandDown]
[KillHandsPhase1 no Timer] [ArmVert] -> [KillHandsPhase1 no Timer] [DyingArmVert]
[KillHandsPhase1 no Timer] [HandLeft] -> [KillHandsPhase1 no Timer] [DyingHandLeft]
[KillHandsPhase1 no Timer] [HandRight] -> [KillHandsPhase1 no Timer] [DyingHandRight]
[KillHandsPhase1 no Timer] [ArmHoriz] -> [KillHandsPhase1 no Timer] [DyingArmHoriz]
[UsedAxeToken no Axe] [KillHandsPhase1 no Timer] -> [UsedAxeToken] [KillHandsPhase2 Timer3 InteractionDisabled]
(Phase 2)
[KillHandsPhase2 no Timer] [DyingHandUp] -> [KillHandsPhase2 no Timer] [DeadHandUp]
[KillHandsPhase2 no Timer] [DyingHandDown] -> [KillHandsPhase2 no Timer] [DeadHandDown]
[KillHandsPhase2 no Timer] [DyingArmVert] -> [KillHandsPhase2 no Timer] [DeadArmVert]
[KillHandsPhase2 no Timer] [DyingHandLeft] -> [KillHandsPhase2 no Timer] [DeadHandLeft]
[KillHandsPhase2 no Timer] [DyingHandRight] -> [KillHandsPhase2 no Timer] [DeadHandRight]
[KillHandsPhase2 no Timer] [DyingArmHoriz] -> [KillHandsPhase2 no Timer] [DeadArmHoriz]
[KillHandsPhase2 no Timer] -> []
(===============
TREK SHATTERING
===============)
(Randomly change up the blood puddles. The checkpointing here ensures that, should the player restart for some reason, they'll remain the same random blood puddles and not reroll.)
[TrekRandomBlood] -> [random Blood1 random Blood2 random Blood3 random Blood4] checkpoint
(Generate the win zone at the bottom row and check for wins.)
HORIZONTAL [TrekWinBar | ] -> [TrekWinBar | TrekWinBar]
late [TrekkingPlayer TrekWinBar] -> win
(Here we run the exact same border shattering and hand killing rules from the last section, except in realtime so the player has control. Because of the way the rules are defined back there, this mostly just works as long as the player is a TrekkingPlayer and no super chopping has been done.)
(When the player is in line with any of the shatter triggers, activate them all.)
late [Player | ... | TrekShatterTrigger] -> [Player | ... | TrekShatterSeed]
late [TrekShatterSeed] [TrekShatterTrigger] -> [TrekShatterSeed][TrekShatterSeed]
(Kick off shattering with a seed token that starts shattering all cover tiles next to it. We'll put one of these at the closest corner of each grid to the player.)
late [TrekShatterSeed | Cover] -> [TrekShatterSeed | Cover QueueShatterToken]
late [TrekShatterSeed | BrokenCover] -> [TrekShatterSeed | BrokenCover ShatterToken]
late [TrekShatterSeed | TrekShatterPlaceholder] -> [TrekShatterSeed | TrekShatterPlaceholder QueueShatterToken]
late [TrekShatterSeed] -> []
(All of the submaps here have openings in the borders that are filled with placeholder tokens for shatter continuity. Here we duplicate some of the shatter rules from the last section and make them apply to the placeholders too.)
(Shatter the border segment and cascade.)
[TrekShatterPlaceholder ShatterToken | ] -> [TrekShatterPlaceholder ShatterToken | QueueShatterToken]
[TrekShatterPlaceholder ShatterToken] -> []
(This fuse thing is just a timing hack to make sure some shattering happens at the same time on two different sides of one of the map.)
[TrekShatterFuse QueueShatterToken | ] -> [TrekShatterFuse QueueShatterToken | QueueShatterToken]
[TrekShatterFuse QueueShatterToken] -> []
(Wrap around the corners.)
[TrekShatterPlaceholder | QueueShatterToken no Cover no BrokenCover no TrekShatterPlaceholder] -> [TrekShatterPlaceholder QueueShatterToken | ]
(Finalize the cascade for the next turn.)
late [TrekShatterPlaceholder QueueShatterToken] -> [TrekShatterPlaceholder ShatterToken]
(Clean up)
late [QueueShatterToken no Cover no TrekKillHandsTrigger] -> []
(Now we start killing the hands. Again, mostly just duplicating the rules we need and the previous code will take care of the rest.)
(We can't just check if all the borders are gone because each of these maps has extra borders at the very bottom. Instead, we have a special trigger positioned next to the last border we care about, and once a shatter token hits it it goes away. So all we do is check for the presence of that token and start killing the hands once it's gone.)
late [TrekKillHandsTrigger QueueShatterToken] -> []
[TrekkingPlayer] [ChoppablePart] -> [TrekkingPlayer BeginKillingHandsToken] [ChoppablePart]
[BeginKillingHandsToken] [TrekKillingHandsToken] -> [] [TrekKillingHandsToken] (If we've already started killing hands, we don't need another one of these)
[BeginKillingHandsToken] [TrekKillHandsTrigger] -> [] [TrekKillHandsTrigger]
(Kick off the first timer.)
[BeginKillingHandsToken] [TrekkingPlayer] -> [TrekKillingHandsToken] [TrekkingPlayer KillHandsPhase1 Timer3]
(Kick off the second timer.)
[TrekkingPlayer] [KillHandsPhase1 no Timer] -> [TrekkingPlayer] [KillHandsPhase2 Timer3]
(===========
FINAL LEVEL
===========)
(Part 1: level generation)
(Make the bed.)
RIGHT [EndingGenerationToken] [BedUpperLeft | | ] -> [EndingGenerationToken] [BedUpperLeft | BedUpperFoot | BedUpperFoot]
DOWN [EndingGenerationToken] [BedUpperLeft | ] -> [EndingGenerationToken] [BedUpperLeft | BedLowerLeft]
RIGHT [EndingGenerationToken] [BedLowerLeft | | ] -> [EndingGenerationToken] [BedLowerLeft | BedLowerFoot | BedLowerFoot]
(Finish up the doors.)
DOWN [ | EndingBedroomDoorOpenBottom] -> [EndingBedroomDoorOpenTop | EndingBedroomDoorOpenBottom]
(Erase the barrier.)
[EndingGenerationToken] [CoverDown Hand] -> [EndingGenerationToken] [EndingGradientUp1]
[EndingGenerationToken] [CoverUp Hand] -> [EndingGenerationToken] [EndingGradientDown1]
[EndingGenerationToken] [CoverLeft Hand] -> [EndingGenerationToken] [EndingGradientRight1]
[EndingGenerationToken] [CoverRight Hand] -> [EndingGenerationToken] [EndingGradientLeft1]
[EndingGenerationToken] [OuterBackground] -> [EndingGenerationToken] [EndingOuterBackground]
(Extend the footpath vertically instead of tiling it out by hand.)
VERTICAL [PathSpawner | ... | ] -> [PathSpawner | ... | PathToken]
[PathSpawner] -> [PathToken]
(Clean up)
[EndingGenerationToken] -> []
(Part 2: outside door & renewal)
(Close the outside door after the player walks through the doorway.)
late RIGHT [ | EndingOutsideDoorOpen | Player] -> [EndingOutsideRenewalToken1 EndingOutsideDoorClosedLeft | EndingOutsideDoorClosedRight DoorBlocker | Player Timer5 InteractionDisabled]
(Expand the renewal area to the entire outside.)
late [EndingOutsideRenewalToken1 | no Wall no Door no Window] -> [EndingOutsideRenewalToken1 | EndingOutsideRenewalToken1] again
late HORIZONTAL [EndingOutsideRenewalToken1 | Wall | EndingOutsideRenewalToken1] -> [EndingOutsideRenewalToken1 | Wall EndingOutsideRenewalToken1 | EndingOutsideRenewalToken1]
(Phase 1 transformations)
[Player no Timer] [EndingOutsideRenewalToken1 no EndingGradient no EndingOuterBackground no PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfGrass]
[Player no Timer] [EndingOutsideRenewalToken1 PathToken no EndingGradient no EndingOuterBackground] -> [Player] [EndingOutsideRenewalToken1 PathToken HalfPath]
[Player no Timer] [EndingOutsideRenewalToken1 Wall1] -> [Player] [EndingOutsideRenewalToken1 HalfWall1]
[Player no Timer] [EndingOutsideRenewalToken1 Wall2] -> [Player] [EndingOutsideRenewalToken1 HalfWall2]
[Player no Timer] [EndingOutsideRenewalToken1 EndingOuterBackground] -> [Player] [EndingOutsideRenewalToken1 HalfOuterBackground]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientUp1 no PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientUp1Grass]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientUp1 PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientUp1Path PathToken]
[Player no Timer] [EndingOutsideRenewalToken1 GradientUp2 no PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientUp2Grass]
[Player no Timer] [EndingOutsideRenewalToken1 GradientUp2 PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientUp2Path PathToken]
[Player no Timer] [EndingOutsideRenewalToken1 GradientUp3] -> [Player] [EndingOutsideRenewalToken1 HalfGradientUp3]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientRight1] -> [Player] [EndingOutsideRenewalToken1 HalfGradientRight1]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientDown1 no PathToken no WallToken no CarpetToken no Tile1Token no Tile2Token] -> [Player] [EndingOutsideRenewalToken1 HalfGradientDown1Grass]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientDown1 PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientDown1Path PathToken]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientDown1 WallToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientDown1Wall]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientDown1 CarpetToken] -> [Player] [EndingOutsideRenewalToken1 HalfGradientDown1Carpet]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientDown1 Tile1Token] -> [Player] [EndingOutsideRenewalToken1 HalfGradientDown1Tile1]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientDown1 Tile2Token] -> [Player] [EndingOutsideRenewalToken1 HalfGradientDown1Tile2]
[Player no Timer] [EndingOutsideRenewalToken1 EndingGradientLeft1] -> [Player] [EndingOutsideRenewalToken1 HalfGradientLeft1]
[Player no Timer] [EndingOutsideRenewalToken1 GradientLeft2] -> [Player] [EndingOutsideRenewalToken1 HalfGradientLeft2]
[Player no Timer] [EndingOutsideRenewalToken1 GradientLeft3] -> [Player] [EndingOutsideRenewalToken1 HalfGradientLeft3]
[Player no Timer] [EndingOutsideRenewalToken1 GradientLeftUpCorner1] -> [Player] [EndingOutsideRenewalToken1 HalfGradientLeftUpCorner1]
[Player no Timer] [EndingOutsideRenewalToken1 GradientLeftUpCorner2] -> [Player] [EndingOutsideRenewalToken1 HalfGradientLeftUpCorner2]
[Player no Timer] [EndingOutsideRenewalToken1 GradientLeftUpCorner3] -> [Player] [EndingOutsideRenewalToken1 HalfGradientLeftUpCorner3]
[Player no Timer] [EndingOutsideRenewalToken1 DeadHandDown] -> [Player] [EndingOutsideRenewalToken1 HalfHandDown]
[Player no Timer] [EndingOutsideRenewalToken1 DeadHandLeft] -> [Player] [EndingOutsideRenewalToken1 HalfHandLeft]
[Player no Timer] [EndingOutsideRenewalToken1 DeadHandUp no PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfHandUpGrass]
[Player no Timer] [EndingOutsideRenewalToken1 DeadHandUp PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfHandUpPath PathToken]
[Player no Timer] [EndingOutsideRenewalToken1 DeadArmVert no PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfArmVertGrass]
[Player no Timer] [EndingOutsideRenewalToken1 DeadArmVert PathToken] -> [Player] [EndingOutsideRenewalToken1 HalfArmVertPath PathToken]
(Move on to phase 2.)
[Player no Timer] [EndingOutsideRenewalToken1] -> [Player EndingOutsideRenewalToken1] [EndingOutsideRenewalToken1]
[Player EndingOutsideRenewalToken1] [EndingOutsideRenewalToken1 no Player] -> [Player EndingOutsideRenewalToken1] [EndingOutsideRenewalToken2]
[Player EndingOutsideRenewalToken1] -> [Player Timer5 InteractionDisabled]
(Phase 2 transformations)
[Player no Timer] [EndingOutsideRenewalToken2 HalfGrass] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfPath] -> [Player] [EndingOutsideRenewalToken2 Path]
[Player no Timer] [EndingOutsideRenewalToken2 HalfWall1] -> [Player] [EndingOutsideRenewalToken2 RealWall]
[Player no Timer] [EndingOutsideRenewalToken2 HalfWall2] -> [Player] [EndingOutsideRenewalToken2 RealWall]
[Player no Timer] [EndingOutsideRenewalToken2 HalfOuterBackground] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientUp1Grass] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientUp1Path] -> [Player] [EndingOutsideRenewalToken2 Path]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientUp2Grass] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientUp2Path] -> [Player] [EndingOutsideRenewalToken2 Path]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientUp3] -> [Player] [EndingOutsideRenewalToken2 Path]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientRight1] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientDown1Grass] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientDown1Path] -> [Player] [EndingOutsideRenewalToken2 Path]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientDown1Wall] -> [Player] [EndingOutsideRenewalToken2 RealWall]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientDown1Carpet] -> [Player] [EndingOutsideRenewalToken2 Carpet]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientDown1Tile1] -> [Player] [EndingOutsideRenewalToken2 Tile1]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientDown1Tile2] -> [Player] [EndingOutsideRenewalToken2 Tile2]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientLeft1] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientLeft2] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientLeft3] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientLeftUpCorner1] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientLeftUpCorner2] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfGradientLeftUpCorner3] -> [Player] [EndingOutsideRenewalToken2 Grass]
[Player no Timer] [EndingOutsideRenewalToken2 HalfHandDown] -> [Player] [EndingOutsideRenewalToken2]
[Player no Timer] [EndingOutsideRenewalToken2 HalfHandLeft] -> [Player] [EndingOutsideRenewalToken2]
[Player no Timer] [EndingOutsideRenewalToken2 HalfHandUpGrass] -> [Player] [EndingOutsideRenewalToken2]
[Player no Timer] [EndingOutsideRenewalToken2 HalfHandUpPath] -> [Player] [EndingOutsideRenewalToken2]
[Player no Timer] [EndingOutsideRenewalToken2 HalfArmVertGrass] -> [Player] [EndingOutsideRenewalToken2]
[Player no Timer] [EndingOutsideRenewalToken2 HalfArmVertPath] -> [Player] [EndingOutsideRenewalToken2]
(Clean up)
[Player no Timer] [EndingOutsideRenewalToken2] -> [Player] []
(Part 3: drop off the axe)
late [Player AxeDropoff] -> [Player Axe AxeDropoff]
late DOWN [Player | AxeDropoff] -> [Player | Axe AxeDropoff]
(Part 4: bedroom door & house renewal)
(Close the bedroom door after the player walks through the doorway.)
late RIGHT [Player EndingBedroomDoorOpenBottom | ] -> [Player EndingBedroomDoorClosedLeft Timer5 InteractionDisabled | EndingBedroomDoorClosedRight DoorBlocker EndingHouseRenewalToken1]
late DOWN [EndingBedroomDoorOpenTop | Player EndingBedroomDoorClosedLeft] -> [ | Player EndingBedroomDoorClosedLeft]
(Expand the renewal area to everywhere but the bedroom.)
late [EndingHouseRenewalToken1 | no EndingHouseRenewalBedroomToken] -> [EndingHouseRenewalToken1 | EndingHouseRenewalToken1] again
(Phase 1 transformations)
[Player no Timer] [EndingHouseRenewalToken1 Wall1] -> [Player] [EndingHouseRenewalToken1 HalfWall1]
[Player no Timer] [EndingHouseRenewalToken1 Wall2] -> [Player] [EndingHouseRenewalToken1 HalfWall2]
[Player no Timer] [EndingHouseRenewalToken1 no TileToken no RealBackground no Window] -> [Player] [EndingHouseRenewalToken1 HalfCarpet]
[Player no Timer] [EndingHouseRenewalToken1 Tile1Token] -> [Player] [EndingHouseRenewalToken1 HalfTile1]
[Player no Timer] [EndingHouseRenewalToken1 Tile2Token] -> [Player] [EndingHouseRenewalToken1 HalfTile2]
[Player no Timer] [EndingHouseRenewalToken1 WindowVert2] -> [Player] [EndingHouseRenewalToken1 HalfWindowVert]
[Player no Timer] [EndingHouseRenewalToken1 BottomWindowToken] -> [Player] [EndingHouseRenewalToken1 HalfBottomWindow]
[Player no Timer] [EndingHouseRenewalToken1 TopWindowToken] -> [Player] [EndingHouseRenewalToken1 HalfTopWindow]
[Player no Timer] [EndingHouseRenewalToken1 LivingRoomLeftDoorTop] -> [Player] [EndingHouseRenewalToken1 HalfLivingRoomLeftDoorTop]
[Player no Timer] [EndingHouseRenewalToken1 LivingRoomLeftDoorBottom] -> [Player] [EndingHouseRenewalToken1 HalfLivingRoomLeftDoorBottom]
[Player no Timer] [EndingHouseRenewalToken1 LivingRoomRightDoorTop] -> [Player] [EndingHouseRenewalToken1 HalfLivingRoomRightDoorTop]
[Player no Timer] [EndingHouseRenewalToken1 LivingRoomRightDoorBottom] -> [Player] [EndingHouseRenewalToken1 HalfLivingRoomRightDoorBottom]
[Player no Timer] [EndingHouseRenewalToken1 EndingOutsideDoorClosedLeft] -> [Player] [EndingHouseRenewalToken1 HalfOutsideDoorClosedLeft]
[Player no Timer] [EndingHouseRenewalToken1 EndingOutsideDoorClosedRight] -> [Player] [EndingHouseRenewalToken1 HalfOutsideDoorClosedRight]
[Player no Timer] [EndingHouseRenewalToken1 BathroomDoorOpen] -> [Player] [EndingHouseRenewalToken1 HalfBathroomDoorOpen]
[Player no Timer] [EndingHouseRenewalToken1 Axe] -> [Player] [EndingHouseRenewalToken1 HalfAxe]
(Move on to phase 2.)
[Player no Timer] [EndingHouseRenewalToken1] -> [Player EndingHouseRenewalToken1] [EndingHouseRenewalToken1]
[Player EndingHouseRenewalToken1] [EndingHouseRenewalToken1 no Player] -> [Player EndingHouseRenewalToken1] [EndingHouseRenewalToken2]
[Player EndingHouseRenewalToken1] -> [Player Timer5 InteractionDisabled]
(Phase 2 transformations)
[Player no Timer] [EndingHouseRenewalToken2 HalfWall1] -> [Player] [EndingHouseRenewalToken2 RealWall]
[Player no Timer] [EndingHouseRenewalToken2 HalfWall2] -> [Player] [EndingHouseRenewalToken2 RealWall]
[Player no Timer] [EndingHouseRenewalToken2 HalfCarpet] -> [Player] [EndingHouseRenewalToken2 Carpet]
[Player no Timer] [EndingHouseRenewalToken2 HalfTile1] -> [Player] [EndingHouseRenewalToken2 Tile1]
[Player no Timer] [EndingHouseRenewalToken2 HalfTile2] -> [Player] [EndingHouseRenewalToken2 Tile2]
[Player no Timer] [EndingHouseRenewalToken2 HalfWindowVert] -> [Player] [EndingHouseRenewalToken2 RealWindowVert]
[Player no Timer] [EndingHouseRenewalToken2 HalfBottomWindow] -> [Player] [EndingHouseRenewalToken2 RealBottomWindow]
[Player no Timer] [EndingHouseRenewalToken2 HalfTopWindow] -> [Player] [EndingHouseRenewalToken2 RealTopWindow]
[Player no Timer] [EndingHouseRenewalToken2 HalfLivingRoomLeftDoorTop] -> [Player] [EndingHouseRenewalToken2 RealLivingRoomLeftDoorTop]
[Player no Timer] [EndingHouseRenewalToken2 HalfLivingRoomLeftDoorBottom] -> [Player] [EndingHouseRenewalToken2 RealLivingRoomLeftDoorBottom]
[Player no Timer] [EndingHouseRenewalToken2 HalfLivingRoomRightDoorTop] -> [Player] [EndingHouseRenewalToken2 RealLivingRoomRightDoorTop]
[Player no Timer] [EndingHouseRenewalToken2 HalfLivingRoomRightDoorBottom] -> [Player] [EndingHouseRenewalToken2 RealLivingRoomRightDoorBottom]
[Player no Timer] [EndingHouseRenewalToken2 HalfOutsideDoorClosedLeft] -> [Player] [EndingHouseRenewalToken2 RealOutsideDoorClosedLeft]
[Player no Timer] [EndingHouseRenewalToken2 HalfOutsideDoorClosedRight] -> [Player] [EndingHouseRenewalToken2 RealOutsideDoorClosedRight]
[Player no Timer] [EndingHouseRenewalToken2 HalfBathroomDoorOpen] -> [Player] [EndingHouseRenewalToken2 RealBathroomDoorOpen]
[Player no Timer] [EndingHouseRenewalToken2 HalfAxe] -> [Player] [EndingHouseRenewalToken2]
(Clean up)
[Player no Timer] [EndingHouseRenewalToken2] -> [Player] []
(Part 5: sleep time :] )
(Create the renewal area.)
late [Player EndingBedroomRenewalStartToken] -> [Player EndingBedroomRenewalToken SleepPhase1Token Timer5 InteractionDisabled]
late [EndingBedroomRenewalToken | ] -> [EndingBedroomRenewalToken | EndingBedroomRenewalToken] again
(Phase 1 transformations)
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken no RealBackground no Window] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfCarpet]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken Wall1] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfWall1]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken Wall2] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfWall2]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken EndingBedroomDoorClosedLeft] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfOutsideDoorClosedLeft]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken EndingBedroomDoorClosedRight] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfOutsideDoorClosedRight]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken BedUpperFoot] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfBedUpperFoot]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken BedLowerFoot] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfBedLowerFoot]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken BedUpperLeftOccupied] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfRealBedUpperLeftUnrealOccupied]
[SleepPhase1Token no Timer] [EndingBedroomRenewalToken BedLowerLeftOccupied] -> [SleepPhase1Token] [EndingBedroomRenewalToken HalfRealBedLowerLeftUnrealOccupied]
(Move on to phase 2.)
[SleepPhase1Token no Timer] -> [SleepPhase2Token Timer5 InteractionDisabled]
(Phrase 2 transformations)
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfCarpet] -> [SleepPhase2Token] [EndingBedroomRenewalToken Carpet]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfWall1] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealWall]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfWall2] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealWall]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfOutsideDoorClosedLeft] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealOutsideDoorClosedLeft]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfOutsideDoorClosedRight] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealOutsideDoorClosedRight]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfBedUpperFoot] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealBedUpperFoot]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfBedLowerFoot] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealBedLowerFoot]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfRealBedUpperLeftUnrealOccupied] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealBedUpperLeftUnrealOccupied]
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken HalfRealBedLowerLeftUnrealOccupied] -> [SleepPhase2Token] [EndingBedroomRenewalToken RealBedLowerLeftUnrealOccupied]
(Clean up)
[SleepPhase2Token no Timer] [EndingBedroomRenewalToken] -> [SleepPhase2Token] []
(Play some sound effects and do the last crossfade of the player.)
[SleepPhase2Token no Timer] -> [SleepPhase3Token Timer20 InteractionDisabled]
[SleepPhase3Token no Timer] -> [SleepPhase4Token Timer10 InteractionDisabled]
[SleepPhase4Token no Timer] -> [SleepPhase5Token Timer20 InteractionDisabled]
[SleepPhase5Token no Timer] -> [SleepPhase6Token Timer7 InteractionDisabled]
[SleepPhase6Token no Timer] -> [SleepPhase7Token Timer20 InteractionDisabled]
[SleepPhase7Token no Timer] [RealBedUpperLeftUnrealOccupied] -> [SleepPhase7Token] [HalfRealBedUpperLeft]
[SleepPhase7Token no Timer] [RealBedLowerLeftUnrealOccupied] -> [SleepPhase7Token] [HalfRealBedLowerLeft]
[SleepPhase7Token no Timer] -> [SleepPhase8Token Timer5 InteractionDisabled]
[SleepPhase8Token no Timer] [HalfRealBedUpperLeft] -> [SleepPhase8Token] [RealBedUpperLeft]
[SleepPhase8Token no Timer] [HalfRealBedLowerLeft] -> [SleepPhase8Token] [RealBedLowerLeft]
[SleepPhase8Token no Timer] -> [SleepPhase9Token Timer20 InteractionDisabled]
[SleepPhase9Token no Timer] -> [SleepPhase10Token Timer20 InteractionDisabled]
[SleepPhase10Token no Timer] -> [SleepPhase11Token Timer10 InteractionDisabled]
(Fade out.)
[SleepPhase11Token no Timer] [] -> [SleepPhase11Token] [EndingCover1]
[SleepPhase11Token no Timer] -> [SleepPhase12Token Timer2 InteractionDisabled]
[SleepPhase12Token no Timer] [EndingCover1] -> [SleepPhase12Token] [EndingCover2]
[SleepPhase12Token no Timer] -> [SleepPhase13Token Timer2 InteractionDisabled]
[SleepPhase13Token no Timer] [EndingCover2] -> [SleepPhase13Token] [EndingCover3]
[SleepPhase13Token no Timer] -> [SleepPhase14Token Timer2 InteractionDisabled]
[SleepPhase14Token no Timer] [EndingCover3] -> [SleepPhase14Token] [EndingCover4]
[SleepPhase14Token no Timer] -> [SleepPhase15Token Timer2 InteractionDisabled]
[SleepPhase15Token no Timer] [EndingCover4] -> [SleepPhase15Token] [EndingCover5]
[SleepPhase15Token no Timer] -> [SleepPhase16Token Timer10 InteractionDisabled]
(You win :] )
[SleepPhase16Token no Timer] -> [SleepPhase17Token Timer20 InteractionDisabled]
[SleepPhase17Token no Timer] -> win
==============
WINCONDITIONS
==============
some NoncutscenePlayer on Goal
=======
LEVELS
=======
message This game has a few very loud moments, so if you're playing with sound, I'm giving you a chance to adjust your volume before starting.
message Step on the X in the next room to play a test sound and turn your system volume down if it's too loud for you. Walk out of the room to start the game.
(sound test)
:vvvvvvv:
>#######<
>#...###<
>#.S.P654
>#...###<
>#######<
:^^^^^^^:
(opening)
(11)
}1111vvvvvvvvvvvvv:
0_222.............<
0-+33.#######—###.<
0-≠...#....#....#.<
0-≠...#ε...##Y###.<
0-≠...#....ɑ....#.<
0-≠...#....####.|.<
0-≠...#########.#.<
0-≠...#......##.##<
>#....#......#...#<
>#....δ..........|<
>#....#......#...#<
>#....#......##—##<
>#....#β####ɣ#....<
:^^^^^^^^^^^^^^^^^:
(10)
:vvvvvvvvvvv:
>#.#####.###<
>#.......#.#<
>#..##.#.#.#<
>....#......<
>#.#.##..#.#<
>#...###...#<
>###P#####.#<
>...........<
>######.##.#<
0-{9999999.#<
0*88888888.#<
&777777777^^:
(9)
::vvvvvvvvvvvvvv::
B>.........#....<:
B>......#.......<:
:>...#.#.....#654:
:>##—#...#..##654:
:>#....#.#...#654:
:>|.C.#..#..P#654:
:>#...#..#...#654:
:>##—##..#..##654:
:>............fl54:
:>........#...8%4:
::^^^^^^^^^^^^77$:
(8)
::vvvvvvvvvv::
A>###.#.....<:
A>##.......#<:
:0-#........<:
:0-#........<:
:0-#........<:
:0-#P..#....<:
:0-##.##....<:
:0-#...#....<:
:0-#———#....<:
:0-≠........<:
:>######..##<:
::^^^^^^^^^^::
(7)
::vv1111111vv::
A>.#2222222#.<:
A>.####3####.<:
:>...........<:
:>.#.#####.#.<:
:>.#...P...#.<:
:>...........<:
:>.##.###.##.<:
::^^^^^^^^^^^::
(6)
::vvvvvvvvv11!:
A>##..##..#2@4:
A>#.......#‹54:
:>#...P...#654:
:>........#654:
:>...##...#654:
:>...........<:
:>...#.#....#<:
:>...........<:
:>..#........<:
::^^^^^^^^^^^::
(5)
::vvvvvvvvv::
A>.........<:
A>.........<:
:>..•••••..<:
:>..#.P.#..<:
:>#.#———#.#<:
:>.........<:
:>####9####<:
:>##88888##<:
::^^77777^^::
(4)
:::vvvvvvv:::
A:}-≠.#.65!::
A>2_.....@2<:
:>3.......3<:
:>....•....<:
:>#..•P•..#<:
:>....•....<:
:>9.......9<:
:>8*.....%8<:
::&-≠.#.65$::
:::^^^^^^^:::
(3)
::vvvvvvvvvvvvvvv::
A>##...##......##<:
A>.....##.......#<:
:>.....##.......#<:
:>..#..##.......#<:
:0-≠#...#.......#<:
:0-≠#......•••.P#<:
:0-≠#...#.......#<:
:>..#..##.......#<:
:>.....##.......#<:
:>.....##.......#<:
:>##...##......##<:
::^^^^^^^^^^^^^^^::
(2)
::vvvvvvvvvvvvvv::
A>..#.....######<:
A>...........|654:
:>#.....•....|654:
:>#..........|.#<:
:>#...##.#.#.|.#<:
:>...........|.#<:
:>#.•.##.#.#.|.#<:
:>#...#P.#.#.|.#<:
:>########.#.|.#<:
:>..............<:
:>..............<:
::^^^^^^^^^^^^^^::
(1)
::vvvvvv1vvvvvvvv::
A>######222######<:
A>#....#333#....#<:
:>#.•..##.##..P.#<:
:>..............#<:
:>#.##.##.##.##.#<:
:>#..............<:
:>#.##.##.##.##.#<:
:>#.............#<:
:>######...######<:
:>#######.#######<:
::^^^^^^^^^^^^^^^::
(0)
::vvvvvvvvv::
E>.........<:
E>.........<:
:>....#....<:
:>.........<:
:>..#.P.#..<:
:>.........<:
:>....#....<:
:>.........<:
:>.........<:
::^^^^^^^^^::
(0)
:::::::::::::::::::
:::::::::::::::::::
:::::::::::::::::::
:::::vvvvvvvvv:::::
:::F>.........<::::
:::F>.........<::::
::::>....#....<::::
::::>.........<::::
::::>..#.P.#..<::::
::::>.........<::::
::::>....#....<::::
::::>.........<::::
::::>.........<::::
:::::^^^^^^^^^:::::
:::::::::::::::::::
:::::::::::::::::::
:::::::::::::::::::
(liberation)
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
::::::::vvvvvvvvv::::::::
::::::D>.........<:::::::
::::::A>.........<:::::::
:::::::>....#....<:::::::
:::::::>.........<:::::::
:::::::>..#.P.#..<:::::::
:::::::>.........<:::::::
:::::::>....#....<:::::::
:::::::>.........<:::::::
:::::::>.........<:::::::
::::::::^^^^^^^^^::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
:::::::::::::::::::::::::
(The way home)
(2 - 1)
::::::::::::::::777777777:::::::::::::::::
::::::::::::::::::::T:::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::vvvvvvvvvvvvvv⁄:::::::⁄vvvvvv€vvvvvvvv::
:>..#縦縦縦縦縦######<:::::::>######2箱2######<:
:>横横右縦縦縦縦縦...|65›:::::::>#...┃#333#....#<:
:>#..下下ÉÈ血═..|65›:::::::>#...║##上##....#<:
:>#.......┃..|上#<:::::::>横横横横血..縦横横横横右┃#<:
:>#.━║##.#.#.|縦#<:::::::>#.##║##縦##.##║#<:
:>横横横血.....横右|縦#<:::::::>#.左横┃..縦.....血横<:
:>#..║##.#.#.|縦#<:::::::>#.##.##縦##.##║#<:
:>#..┃#..#.#.|縦#<:::::::>#......縦.....┃#<:
:>########.#.|縦#<:::::::>######.縦.######<:
:>横横横横横横横横横横横右縦•<:::::::>#######縦#######<:
:>........•上上上縦.<::::::::^^^^^^^^^^^^^^^::
:`^^^^^^^^^^^^^^:::::::::°::::::::::::::::
:::::::::::::::::::::::::°::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::::::::::°~~~~~~~~~~~~~~°::::::::::::::::
:::vvvvvvv:::::::::::W:::vvvvvvvvvvvvvvv::
(Still going home)
(6 - 5)
::::::::::::::::::::T::::777777777777777::
::::::::::::::::::::⁄:::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::11111111111!:::::::::::111111111::::::::
⁄Å##縦縦##縦縦#2@4::::::::::0.血縦縦•.縦縦.4:::::::
:>#.縦縦..縦縦#‹54::::::::::0•═血下.•下縦.À⁄::::::
:>#.縦下..下縦#654::::::::::0横¡横横横横右縦•<:::::::
:>.上縦....縦#654::::::::::0右.#...#縦左<:::::::
:>.縦縦##.上縦#™┅4::::::::::0#.#———#下#<:::::::
:>.縦縦...縦下左血横4::::::::::0.•...左横横横<:::::::
:>.縦下#上#縦...#4::::::::::0####9####<:::::::
:>.縦..縦左£横横横横4::::::::::0##88888##<:::::::
:>.縦#上縦上縦....4:::::::::::77‡‡‡‡‡^^::::::::
:`^^^^^^^^Á77::::::::::::::⁄::::::::::::::
::::::::::⁄::::::::::::⁄°:::::::::::::::::
::::::::::::::::::::::::°:::::::::::::::::
::::::::::::°°°⁄:::::::::°::::::::::::::::
::vvvvvvvvvv::::::::W::::vv€€€€€€€vv::::::
(https://www.youtube.com/watch?v=F4HwR1jKjEs)
(10 - 9)
::7777777777::::::::T:::::::::::::::::::::
::::::::::::::::::::⁄:::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::11111111111::::::::::::11111111111111:::
:0#縦#####縦###4::::::::::0..縦.縦..縦下#....4::
:0#縦.....縦#.#4::::::::::0..縦.縦.#下左横横横横横4::
:0#縦.##.#下#.#4::::::::::0..下#縦#...上.#654::
:0.縦..#.左横横横横4::::::::::0##—#血═━#.縦##654::
:0#下#.##..#.#4::::::::::0#....#.#.縦.#654::
:0#...###...#4::::::::::0|...#..#.縦.#654::
:0###.#####上#4::::::::::0#...#..#.縦.#654::
:0横横横横横右...縦.4::::::::::0##—##..#.縦##654::
:0######.##縦#4::::::::::0横横横横横横横横横£¢∞¿54::
:0-{9999999縦#4::::::::::0........#縦上上8%4::
:0*88888888縦#4:::::::::::77777777777Á‡‡ª::
:&77777777777:::::::::::::::::::::::⁄:::::
::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::⁄:::::⁄::::::::::::::::::
W::::::::::}1111vÃ11111Ãvvvvv:::::::::::::
(ending)
Qvvvvvvvvvvvvvvvvv:
>_222σ.......φ....<
>-+33σκκκκκκ#Z###.<
>-≠..σκ....κθηθη#.<
>-≠..σκω...κ#X###.<
>-≠..σκ...ψ.....#.<
>-≠..σκ....κ###.|υ<
>-≠..σκκκκκκ###.#.<
>-≠..σ#......##.##<
>#τ..φ#......#...#<
>#σππρχ........λ.|<
>#στττ#......#...#<
>#σσσσ#......##ζ##<
>#σσσσ#β####ι#.τ..<
:ο^^^^ομοξνξνο^^^^:
message END
message Mechanically inspired by those jerk vines from Blobbo by Glenn Andreas.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment