UNPKG

puzzlescript

Version:

Play PuzzleScript games in your terminal!

497 lines (355 loc) 8.09 kB
title Linked background_color black verbose_logging ======== OBJECTS ======== Background black Player red grey ..... .111. .101. .111. ..... Golem blue 00000 00.00 0...0 00.00 00000 Robot white grey ..... .111. .101. .111. ..... Top_Wall grey LIGHTGRAY 00000 0...0 0...0 0...0 00000 Bottom_Wall darkgray grey 00000 00000 00000 00000 00000 Top_Prototype orange Brown 00000 ..1.. ..0.. ..1.. 00000 Bottom_Prototype DARKRed Red 0...0 0...0 01010 0...0 0...0 Top_Goal orange Brown 11111 00100 01110 00100 11111 Bottom_Goal Darkred Red 10001 10101 11111 10101 10001 (Status Ailments) Top_Paralyzed TRANSPARENT Bottom_Paralyzed TRANSPARENT Bonded TRANSPARENT ======= LEGEND ======= . = Background _ = Bottom_Wall - = Top_Wall # = Top_Wall and Bottom_Wall P = Player I = Top_Prototype H = Bottom_Prototype 8 = Top_Prototype and Bottom_Prototype T = Top_Goal B = Bottom_Goal G = Golem R = Robot \ = Bottom_Wall and Top_Prototype / = Top_Wall and Bottom_Prototype top_pushable = Top_Prototype bottom_pushable = Bottom_Prototype or Golem tops = Top_Wall or top_pushable or Player or Robot bottoms = Bottom_Wall or bottom_pushable goals = Top_Goal or Bottom_Goal top_sticky = Top_Prototype bottom_sticky = Bottom_Prototype Paralyzed = Top_Paralyzed or Bottom_Paralyzed Ailments = Paralyzed or Bonded ======= SOUNDS ======= Top_Prototype move 5116707 Bottom_Prototype move 23490907 sfx0 89911306 (* Bonded *) sfx1 411156904 (* Blocked *) EndLevel 68023700 ================ COLLISIONLAYERS ================ Background Top_Paralyzed Bottom_Paralyzed Bonded goals bottoms tops ====== RULES ====== (* Remove Lingering Status Ailments *) [Paralyzed] -> [] [Bonded] -> [] (* Overview : ) (* Pushable Objects Are Pushed By Objects On The Same Level *) (* Sticky Objects Are Dragged By Sticky Objects Directly Above Or Below *) (* Golems Are Activated When The Player Steps On Them *) (* Golems Move In Unison *) (* Robots Can Only Be Moved By Golems *) (* If A Sticky Object Is Blocked, Then It Cannot Drag Stickies *) (* If A Player Is Blocked, Then It Cannot Control A Golem *) (* If The Player's Golem Is Blocked, Then It Cannot Control The Golems *) (* Any Blocked Object Is Marked As Stationary Before It Can Move Objects On Another Layer *) (* Blocked Objects Are Marked As Paralyzed *) (* A Paralyzed Object Cannot Be Moved By Objects On Another Layer *) (* The Paralyzed Status Ailment Prevents An Object From Going Into An Infinite Moving <-> Stationary Loop *) StartLoop (Player Pushes Top Layer Pushables) [> player | top_pushable no Top_Paralyzed] -> [> player | > top_pushable no Top_Paralyzed] (Robot Pushes Top Layer Pushables) [> Robot | top_pushable no Top_Paralyzed] -> [> Robot | > top_pushable no Top_Paralyzed] (Top Layer Pushables Move Together) [> top_pushable | top_pushable no Top_Paralyzed] -> [> top_pushable | > top_pushable no Top_Paralyzed] (*- Keep Stopped Top Layer Objects From Moving Bottom Layer Objects) (Detect Top Layer Wall Collisions) [> tops | Top_Wall] -> [tops Top_Paralyzed| Top_Wall] (Detect Top Layer Pushing Other Stopped Objects) [> tops | stationary tops] -> [tops Top_Paralyzed| stationary tops] (-*) (Bottom Layer Stickies Stick to Top Layer Stickies) [ bottom_sticky > top_sticky no Bottom_Paralyzed] -> [> bottom_sticky > top_sticky no Bottom_Paralyzed] (A Golem Sticks To The Player) [> player golem no Bottom_Paralyzed] -> [> player > golem no Bottom_Paralyzed] (All Golems Follow The Players Golem) [player > golem] [golem no Bottom_Paralyzed] -> [player > golem][> golem no Bottom_Paralyzed] (Bottom Layer Pushables Move Together) [> bottom_pushable | bottom_pushable no Bottom_Paralyzed] -> [> bottom_pushable | > bottom_pushable no Bottom_Paralyzed] (*- Keep Stopped Bottom Layer Objects From Moving Top Level Objects) (Detect Bottom Layer Wall Collisions) [> bottoms | Bottom_Wall] -> [bottoms Bottom_Paralyzed| Bottom_Wall] (Detect Bottom Layer Pushables Pushing Other Stopped Pushables) [> bottoms | stationary bottoms] -> [bottoms Bottom_Paralyzed| stationary bottoms] (-*) (Stop The Follower Golems if the Players Golem is stopped) [player stationary golem] [golem] -> [player stationary golem] [stationary golem] (Top Layer Stickies Stick To Bottom Layer Stickies) [> bottom_sticky top_sticky no Top_Paralyzed] -> [> bottom_sticky > top_sticky no Top_Paralyzed] (Robots Are Controlled By Golems) [> Golem Robot no Top_Paralyzed] -> [> Golem > Robot no Top_Paralyzed] EndLoop (*- For Sound Effects Purposes -*) [player golem] -> [player golem Bonded] [> player > golem Bonded] -> [> player > golem > Bonded] late [Player Golem no Bonded] -> [Player Golem Bonded] sfx0 [Paralyzed] -> [Paralyzed] sfx1 (*- Rage Quit -*) [Action Player] [Top_Goal] -> [Action Player][Top_Goal Top_Prototype] [Action Player] [Bottom_Goal] -> [Action Player] [Bottom_Goal Bottom_Prototype] ============== WINCONDITIONS ============== All Top_Goal on Top_Prototype All Bottom_Goal on Bottom_Prototype ======= LEVELS ======= Message Press action (x) to rage quit. (############# #...........# #...........# #..P.TTT....# #..._____...# #...HIHIH...# #..._____...# #...........# #...#####...# #...IH/HI...# #...#####...# #...........# #...........# #############) (################## #................# #.p..............# #................# #................# #................# #................# #................# #.....#_######...# #.....#......#...# #.....#......#...# #.....#.ihhg.#...# #.....#......#...# #.....#......#...# #.....##----##...# #................# #................# #................# #.......hhh......# #......bbbbb.....# ################## ################## #................# #.p..............# #................# #................# ###............__# #t..............b# #t..............b# ###...___#####.__# #.....#i##...#...# #.....#..h.g.#...# #.....#..h...#...# #.....#-----##...# #................# #................# #................# #................# #................# ################## ################## #................# #.P.....II.......# #................# #....########....# ###..#......#..__# #T..._..HH..-...B# #T..._..HH..-...B# ###..#......#..__# #....########....# #................# #.......II.......# #................# ##################) Message Upper Layer ##### #-t-# #-.-# #-i-# #-.-# #-p-# ##### Message Lower Layer ###### #b.h.# #___.# #p._.# #___.# #g...# ###### Message Linked ###### #t_b_# ##_._# .#_h_# .#_i_# .#_._# .#_p_# .##### Message Level 1 ############## #......-.....# #P.....-.....# #......-TH.IB# #G.....-THGIB# #......-TH.IB# #......-.....# #......-.....# ############## Message Level 2 ################ #..............# #.P....II......# #....######....# ###..#....#..__# #T..._.HH.-...B# #T..._.HH.-...B# ###..#....#..__# #....######....# #......II......# #..............# ################ Message Level 3 .#########. .#.......#. ##...p...## #tIr...gHb# #tIr...gHb# ##.......## .#.......#. .#########. Message Level 4 ############# #..P.TTT....# #..._____...# #...HIHIH...# #..._____...# #...........# #...#####...# #...IH/HI...# #...#####...# #...........# ############# message Win. (* Notes Revision 1 -------------------- In general, rules of the form [> Thing | Obstacle] -> [...] don't apply if "Thing" is pushing against the outer boundary, that is: [> Thing | Out-of-Bounds]. In Level 3, pushing against a Top_Prototype on the far-left boundary, while standing on a Golem, will cause the Golem to slide under the Top-Prototype This should not happen, since the Golem should be moving with the player, and the player is blocked. To solve this issue, I put additional wall on the left and right boundaries so that this edge case never actually happens. Revision 2 -------------------- Levels were too big. So I slimmed them down. Revision 3 -------------------- Level 1 introduces too many mechanics. So I put in some tutorials. Revision A --------------------- Implementing rage quit. Revision 4 --------------------- Simplifying appearance. *)