Skip to content

Instantly share code, notes, and snippets.

@inventortimer
Created April 25, 2024 12:32
Show Gist options
  • Save inventortimer/4fa86d0411104a4afcfdcbba5774a8d0 to your computer and use it in GitHub Desktop.
Save inventortimer/4fa86d0411104a4afcfdcbba5774a8d0 to your computer and use it in GitHub Desktop.
The Cable Guy (PuzzleScript Script)
Play this game by pasting the script in http://www.puzzlescript.net/editor.html
title The Cable Guy
author 4sandwiches
homepage https://store.steampowered.com/app/2541310/The_Cable_Guy
(debug)
again_interval 0.1
========
OBJECTS
========
(TODOs:
- Action on cable should remove whole cable path (including switch pass?)
- use NO keyword for deleting objects
- Start making levels
- Add another color of cable (red and maybe green) and then allow only vertical and horizontal overlap and maybe cross section
-
)
(Ideas:
- Create repeater/switch: allows to split single cable into 3
- Door should open after clearing the level and allow choosing next level? Or pass cable thrugh it?
)
Background
orange lightbrown orange
00000
01112
01112
01102
02222
WallV
lightgray gray
.101.
.101.
.101.
.101.
.101.
WallH
lightgray gray
.....
11111
00000
11111
.....
WallUL
lightgray gray
.101.
1101.
0001.
1111.
.....
WallDR
lightgray gray
.....
.1111
.1000
.1011
.101.
WallUR
lightgray gray
.101.
.1011
.1000
.1111
.....
WallDL
lightgray gray
.....
1111.
0001.
1101.
.101.
WindowV
lightblue lightblue white lightgray
.313.
.323.
.313.
.313.
.313.
WindowH
lightblue white lightgray
.....
22222
01000
22222
.....
DoorH
darkbrown
.....
.....
00000
.....
.....
DoorV
darkbrown
..0..
..0..
..0..
..0..
..0..
Plant
darkbrown brown green
22.22
.222.
..2..
11111
.000.
Water
lightgray gray blue lightblue
.223.
.222.
.222.
.010.
.000.
UnconnectedBluePC
lightblue darkgray
00000
01110
00000
.000.
00000
ConnectedBluePC
lightblue blue
00000
01110
00000
.000.
00000
Wall
brown darkbrown
00010
11111
01000
11111
00010
Server
black orange blue grey
33333
32223
33333
32223
33333
NonActivePlayer
white
00.00
0...0
.....
0...0
00.00
DeletingPlayer
white
.....
.0.0.
..0..
.0.0.
.....
ActiveBluePlayer
blue
00.00
0...0
.....
0...0
00.00
ConnectedCableVB
blue
..0..
..0..
..0..
..0..
..0..
ConnectedCableHB
blue
.....
.....
00000
.....
.....
(
ConnectedCableDLB
blue
.....
.....
000..
..0..
..0..
ConnectedCableDRB
blue
.....
.....
..000
..0..
..0..
ConnectedCableULB
blue
..0..
..0..
000..
.....
.....
ConnectedCableURB
blue
..0..
..0..
..000
.....
.....
)
ConnectedCableLVB
blue
..0..
..0..
000..
..0..
..0..
ConnectedCableRVB
blue
..0..
..0..
..000
..0..
..0..
ConnectedCableDHB
blue
.....
.....
00000
..0..
..0..
ConnectedCableUHB
blue
..0..
..0..
00000
.....
.....
ConnectedCableCB
blue
..0..
..0..
00000
..0..
..0..
UnconnectedCableD
gray
.....
.....
..0..
..0..
..0..
UnconnectedCableU
gray
..0..
..0..
..0..
.....
.....
UnconnectedCableR
gray
.....
.....
..000
.....
.....
UnconnectedCableL
gray
.....
.....
000..
.....
.....
ConnectedCableDB
blue
.....
.....
..0..
..0..
..0..
ConnectedCableUB
blue
..0..
..0..
..0..
.....
.....
ConnectedCableRB
blue
.....
.....
..000
.....
.....
ConnectedCableLB
blue
.....
.....
000..
.....
.....
SourceD
transparent
SourceU
transparent
SourceL
transparent
SourceR
transparent
EraserL
transparent
EraserR
transparent
EraserD
transparent
EraserU
transparent
EraserML
transparent
EraserMR
transparent
EraserMD
transparent
EraserMU
transparent
=======
LEGEND
=======
player = ActiveBluePlayer or NonActivePlayer or DeletingPlayer
ConnectedBlueCable = ConnectedCableUB or ConnectedCableDB or ConnectedCableLB or ConnectedCableRB
ConnectedBlueCableUnused = ConnectedCableVB or ConnectedCableHB or ConnectedCableLVB or ConnectedCableRVB or ConnectedCableDHB or ConnectedCableUHB or ConnectedCableCB
UnconnectedCable = UnconnectedCableD or UnconnectedCableU or UnconnectedCableR or UnconnectedCableL
Source = SourceD or SourceL or SourceR or SourceU
Eraser = EraserD or EraserL or EraserR or EraserU
EraserM = EraserMD or EraserML or EraserMR or EraserMU
WallD = WallV or WallH or WallDR or WallDL or WallUR or WallUL
Window = WindowV or WindowH
Door = DoorH or DoorV
EraserV = EraserU or EraserD
EraserH = EraserL or EraserR
Obstacle = WallD or Window or Plant or Water
. = Background
# = Wall
S = Server
N = NonActivePlayer
A = ActiveBluePlayer
U = UnconnectedBluePC
C = ConnectedBluePC
- = ConnectedCableHB
/ = ConnectedCableVB
8 = WallV
6 = WallH
3 = WallDR
1 = WallDL
7 = WallUL
9 = WallUR
4 = WindowV
2 = WindowH
5 = Plant
B = Water
H = DoorH
D = DoorV
=======
SOUNDS
=======
ActiveBluePlayer move 10467107
NonActivePlayer move 36772507
Player CantMove 4123412
Cancel 4123412
sfx0 40707106
sfx1 10467107
sfx2 4123412
sfx3 113500
sfx4 2868907 (Remove cable)
================
COLLISIONLAYERS
================
Background
EraserM
EraserL
EraserR
EraserD
EraserU
Source
ConnectedCableUB, UnconnectedCableU
ConnectedCableDB, UnconnectedCableD
ConnectedCableRB, UnconnectedCableR
ConnectedCableLB, UnconnectedCableL
UnconnectedBluePC, ConnectedBluePC, Server
ConnectedBlueCableUnused
player, Wall, WallD, window, Plant, Water, Door
======
RULES
======
(Player actions)
[Action NonActivePlayer Server] -> [ActiveBluePlayer Server] sfx0
[Action ActiveBluePlayer] -> [NonActivePlayer]
late [NonActivePlayer connectedbluecable] -> [DeletingPlayer connectedbluecable]
late [DeletingPlayer NO connectedbluecable] -> [NonActivePlayer NO connectedbluecable]
([Action NonActivePlayer connectedbluecable] -> [NonActivePlayer Background])
([Action NonActivePlayer connectedbluecable | ... | connectedbluecable] -> [NonActivePlayer | ... | Background])
(Erase active connection)
[Action DeletingPlayer connectedcableLB connectedcableRB] -> [NonActivePlayer NO connectedcableLB NO connectedcableRB LEFT EraserL RIGHT EraserR]
[Action DeletingPlayer connectedcableUB connectedcableDB] -> [NonActivePlayer NO connectedcableUB NO connectedcableDB UP EraserU DOWN EraserD]
[Action DeletingPlayer connectedcableLB connectedcableUB] -> [NonActivePlayer NO connectedcableLB NO connectedcableUB LEFT EraserL UP EraserU]
[Action DeletingPlayer connectedcableRB connectedcableUB] -> [NonActivePlayer NO connectedcableRB NO connectedcableUB RIGHT EraserR UP EraserU]
[Action DeletingPlayer connectedcableLB connectedcableDB] -> [NonActivePlayer NO connectedcableLB NO connectedcableDB LEFT EraserL DOWN EraserD]
[Action DeletingPlayer connectedcableRB connectedcableDB] -> [NonActivePlayer NO connectedcableRB NO connectedcableDB RIGHT EraserR DOWN EraserD]
[EraserL connectedcableRB connectedcableDB] -> [DOWN EraserD] again sfx4
[EraserL connectedcableRB connectedcableUB] -> [UP EraserU] again sfx4
[EraserL connectedcableRB connectedcableLB] -> [LEFT EraserL] again sfx4
[EraserR connectedcableLB connectedcableDB] -> [DOWN EraserD] again sfx4
[EraserR connectedcableLB connectedcableUB] -> [UP EraserU] again sfx4
[EraserR connectedcableLB connectedcableRB] -> [RIGHT EraserR] again sfx4
[EraserU connectedcableDB connectedcableRB] -> [RIGHT EraserR] again sfx4
[EraserU connectedcableDB connectedcableLB] -> [LEFT EraserL] again sfx4
[EraserU connectedcableDB connectedcableUB] -> [UP EraserU] again sfx4
[EraserD connectedcableUB connectedcableRB] -> [RIGHT EraserR] again sfx4
[EraserD connectedcableUB connectedcableLB] -> [LEFT EraserL] again sfx4
[EraserD connectedcableUB connectedcableDB] -> [DOWN EraserD] again sfx4
[EraserL ConnectedBluePC] -> [UnconnectedBluePC]
[EraserR ConnectedBluePC] -> [UnconnectedBluePC]
[EraserD ConnectedBluePC] -> [UnconnectedBluePC]
[EraserU ConnectedBluePC] -> [UnconnectedBluePC]
[EraserL connectedcableRB] -> []
[EraserR connectedcableLB] -> []
[EraserD connectedcableUB] -> []
[EraserU connectedcableDB] -> []
[Eraser Server] -> [Server]
(removal of cables starts late by one turn, but it's ok, for now)
([stationary EraserL] -> [LEFT EraserL])
([EraserL])
([EraserL] -> [left EraserL])
([EraserL ConnectedBlueCable] -> [EraserL] again)
(Server rules)
(Server = BlueServer, RedServer...)
UP [UP ActiveBluePlayer Server | NO Obstacle] -> [UP ActiveBluePlayer Server | ConnectedCableDB SourceD NO Obstacle] sfx1
DOWN [DOWN ActiveBluePlayer Server | NO Obstacle] -> [DOWN ActiveBluePlayer Server | ConnectedCableUB SourceU NO Obstacle]sfx1
LEFT [LEFT ActiveBluePlayer Server | NO Obstacle] -> [LEFT ActiveBluePlayer Server | ConnectedCableRB SourceR NO Obstacle] sfx1
RIGHT [RIGHT ActiveBluePlayer Server | NO Obstacle] -> [RIGHT ActiveBluePlayer Server | ConnectedCableLB SourceL NO Obstacle] sfx1
(Cable rules)
(Down)
LEFT [LEFT ActiveBluePlayer ConnectedCableDB | NO Obstacle] -> [ConnectedCableDB ConnectedCableLB | ActiveBluePlayer ConnectedCableRB SourceR NO Obstacle] sfx1
RIGHT [RIGHT ActiveBluePlayer ConnectedCableDB | NO Obstacle] -> [ConnectedCableDB ConnectedCableRB | ActiveBluePlayer ConnectedCableLB SourceL NO Obstacle] sfx1
UP [UP ActiveBluePlayer ConnectedCableDB | NO Obstacle] -> [ConnectedCableDB ConnectedCableUB | ActiveBluePlayer ConnectedCableDB SourceD NO Obstacle] sfx1
DOWN [DOWN ActiveBluePlayer ConnectedCableDB | NO Obstacle] -> [ActiveBluePlayer ConnectedCableDB | NO Obstacle] sfx2
(Up)
LEFT [LEFT ActiveBluePlayer ConnectedCableUB | NO Obstacle] -> [ConnectedCableUB ConnectedCableLB | ActiveBluePlayer ConnectedCableRB SourceR NO Obstacle] sfx1
RIGHT [RIGHT ActiveBluePlayer ConnectedCableUB | NO Obstacle] -> [ConnectedCableUB ConnectedCableRB | ActiveBluePlayer ConnectedCableLB SourceL NO Obstacle] sfx1
DOWN [DOWN ActiveBluePlayer ConnectedCableUB | NO Obstacle] -> [ConnectedCableUB ConnectedCableDB | ActiveBluePlayer ConnectedCableUB SourceU NO Obstacle] sfx1
UP [UP ActiveBluePlayer ConnectedCableUB | NO Obstacle] -> [ActiveBluePlayer ConnectedCableUB | NO Obstacle] sfx2
(Left)
RIGHT [RIGHT ActiveBluePlayer ConnectedCableLB | NO Obstacle] -> [ConnectedCableLB ConnectedCableRB | ActiveBluePlayer ConnectedCableLB SourceL NO Obstacle] sfx1
LEFT [LEFT ActiveBluePlayer ConnectedCableLB | NO Obstacle] -> [ActiveBluePlayer ConnectedCableLB| NO Obstacle] sfx2
DOWN [DOWN ActiveBluePlayer ConnectedCableLB | NO Obstacle] -> [ConnectedCableLB ConnectedCableDB | ActiveBluePlayer ConnectedCableUB SourceU NO Obstacle] sfx1
UP [UP ActiveBluePlayer ConnectedCableLB | NO Obstacle] -> [ConnectedCableLB ConnectedCableUB | ActiveBluePlayer ConnectedCableDB SourceD NO Obstacle] sfx1
(Right)
LEFT [LEFT ActiveBluePlayer ConnectedCableRB | NO Obstacle] -> [ConnectedCableRB ConnectedCableLB | ActiveBluePlayer ConnectedCableRB SourceR NO Obstacle] sfx1
RIGHT [RIGHT ActiveBluePlayer ConnectedCableRB | NO Obstacle] -> [ActiveBluePlayer ConnectedCableRB | NO Obstacle] sfx2
DOWN [DOWN ActiveBluePlayer ConnectedCableRB | NO Obstacle] -> [ConnectedCableRB ConnectedCableDB | ActiveBluePlayer ConnectedCableUB SourceU NO Obstacle] sfx1
UP [UP ActiveBluePlayer ConnectedCableRB | NO Obstacle] -> [ConnectedCableRB ConnectedCableUB | ActiveBluePlayer ConnectedCableDB SourceD NO Obstacle] sfx1
[ActiveBluePlayer ConnectedCableLB ConnectedCableRB ConnectedCableUB ] -> CANCEL
[ActiveBluePlayer ConnectedCableLB ConnectedCableRB ConnectedCableDB ] -> CANCEL
[ActiveBluePlayer ConnectedCableLB ConnectedCableUB ConnectedCableDB ] -> CANCEL
[ActiveBluePlayer ConnectedCableRB ConnectedCableUB ConnectedCableDB ] -> CANCEL
( [ ConnectedCableLB ConnectedCableRB ConnectedCableUB] CANCEL )(message "Shortcircuit! Don't overlap cables of the same color.")
(
LEFT [LEFT ActiveBluePlayer ConnectedCableVB | Background] -> [LEFT ActiveBluePlayer ConnectedCableLVB | ConnectedCableHB SourceR Background]
RIGHT [RIGHT ActiveBluePlayer ConnectedCableVB | Background] -> [RIGHT ActiveBluePlayer ConnectedCableRVB | ConnectedCableHB SourceL Background]
UP [UP ActiveBluePlayer ConnectedCableVB | Background] -> [UP ActiveBluePlayer ConnectedCableVB | ConnectedCableVB SourceU Background]
DOWN [DOWN ActiveBluePlayer ConnectedCableVB | Background] -> [DOWN ActiveBluePlayer ConnectedCableVB | ConnectedCableVB SourceD Background]
)
([> ActiveBluePlayer | connectedbluecable] -> [ActiveBluePlayer | conn])
(
LEFT [LEFT ActiveBluePlayer ConnectedCableRVB | Background] -> [ConnectedCableCB | ActiveBluePlayer ConnectedCableHB Background]
)
(
RIGHT [RIGHT ActiveBluePlayer ConnectedCableUHB | Background] -> [ConnectedCableRVB | ActiveBluePlayer ConnectedCableHB Background]
)
(
RIGHT [RIGHT ActiveBluePlayer ConnectedCableHB | Background] -> [ConnectedCableHB | ActiveBluePlayer ConnectedCableHB Background]
RIGHT [RIGHT ActiveBluePlayer ConnectedCableVB | Background] -> [ConnectedCableDHB | ActiveBluePlayer ConnectedCableHB Background]
UP [UP ActiveBluePlayer ConnectedCableHB | Background] -> [ConnectedCableUHB | ActiveBluePlayer ConnectedCableVB Background]
)
(PC connection)
late [ActiveBluePlayer UnconnectedBluePC | ConnectedBlueCable] -> [NonActivePlayer ConnectedBluePC SourceR | connectedbluecable] sfx3
(
late [ConnectedBluePC SourceR | NO ConnectedCableLB] -> [UnconnectedBluePC | NO ConnectedCableLB] sfx3
EraserShould unplug PC instead
)
==============
WINCONDITIONS
==============
No UnconnectedBluePC
=======
LEVELS
=======
3666h6666661
8uub...5uuu8
8..........8
8..........8
8..........d
8....361...8
8....8s8...8
8..........8
d..........8
8..........8
8....n.....8
85uuu.....u8
96666666h667
366626666661
8..........8
4..........4
4.....u....4
4..........4
8....361...8
8....8s8...8
8..........8
4..........4
4.....n....4
4..........4
8..........8
96666666h667
............
............
............
......u.....
............
............
......s.....
............
......n.....
............
............
............
............
#######
#..u..#
#.....#
#.....#
#..s..#
#.....#
#..n..#
#.....#
#######
#######
#..u..#
#.....#
#..n..#
#.....#
#..s..#
#######
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment