puzzlescript
Version:
Play PuzzleScript games in your terminal!
3,098 lines (2,497 loc) • 102 kB
Plain Text
(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] []
[I