Skip to content

Instantly share code, notes, and snippets.

@jamesamiles
Last active June 19, 2018 04:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesamiles/4183971eb94557d86479d4cced4c3d24 to your computer and use it in GitHub Desktop.
Save jamesamiles/4183971eb94557d86479d4cced4c3d24 to your computer and use it in GitHub Desktop.
Linked (PuzzleScript Script)
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
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.
*)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment