(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.