UNPKG

puzzlescript

Version:

Play PuzzleScript games in your terminal!

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