diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 43a2cc90e4f..2441c741073 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -720,6 +720,18 @@
color="pink"
icon = 'power_cond_pink.dmi'
+/obj/structure/cable/orange
+ color="orange"
+ icon = 'power_cond_orange.dmi'
+
+/obj/structure/cable/cyan
+ color="cyan"
+ icon = 'power_cond_cyan.dmi'
+
+/obj/structure/cable/white
+ color="white"
+ icon = 'power_cond_white.dmi'
+
/obj/effect/manifest
name = "manifest"
icon = 'screen1.dmi'
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 020b93dd222..a13ae184f41 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -794,6 +794,18 @@
color = "pink"
icon_state = "coil_pink"
+/obj/item/weapon/cable_coil/orange
+ color = "orange"
+ icon_state = "coil_orange"
+
+/obj/item/weapon/cable_coil/cyan
+ color = "cyan"
+ icon_state = "coil_cyan"
+
+/obj/item/weapon/cable_coil/white
+ color = "white"
+ icon_state = "coil_white"
+
/obj/item/weapon/cable_coil/random/New()
color = pick("red","yellow","green","blue","pink")
icon_state = "coil_[color]"
@@ -972,14 +984,41 @@
m_amt = 500
origin_tech = "materials=1"
var/dispenser = 0
-
-/obj/item/weapon/handcuffs/cyborg
- dispenser = 1
+ var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes
/obj/item/weapon/handcuffs/cable
name = "cable restraints"
desc = "Looks like some cables tied together. Could be used to tie something up."
icon_state = "cuff_red"
+ breakouttime = 300 //Deciseconds = 30s
+
+/obj/item/weapon/handcuffs/cable/red
+ icon_state = "cuff_red"
+
+/obj/item/weapon/handcuffs/cable/yellow
+ icon_state = "cuff_yellow"
+
+/obj/item/weapon/handcuffs/cable/blue
+ icon_state = "cuff_blue"
+
+/obj/item/weapon/handcuffs/cable/green
+ icon_state = "cuff_green"
+
+/obj/item/weapon/handcuffs/cable/pink
+ icon_state = "cuff_pink"
+
+/obj/item/weapon/handcuffs/cable/orange
+ icon_state = "cuff_orange"
+
+/obj/item/weapon/handcuffs/cable/cyan
+ icon_state = "cuff_cyan"
+
+/obj/item/weapon/handcuffs/cable/white
+ icon_state = "cuff_white"
+
+/obj/item/weapon/handcuffs/cyborg
+ dispenser = 1
+
/obj/item/weapon/locator
name = "locator"
diff --git a/code/game/objects/closets/firecloset.dm b/code/game/objects/closets/firecloset.dm
index c3a6ad2fbc5..245991be54d 100644
--- a/code/game/objects/closets/firecloset.dm
+++ b/code/game/objects/closets/firecloset.dm
@@ -60,11 +60,11 @@
if(prob(20))
new /obj/item/weapon/storage/belt/utility(src)
if(prob(30))
- new /obj/item/weapon/cable_coil(src)
+ new /obj/item/weapon/cable_coil/random(src)
if(prob(30))
- new /obj/item/weapon/cable_coil(src)
+ new /obj/item/weapon/cable_coil/random(src)
if(prob(30))
- new /obj/item/weapon/cable_coil(src)
+ new /obj/item/weapon/cable_coil/random(src)
if(prob(20))
new /obj/item/device/multitool(src)
if(prob(5))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 38918eb1725..e420545917a 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -23,8 +23,10 @@
for(var/mob/O in viewers(user, null))
O.show_message("\red [user] is trying to put handcuffs on [M]!", 1)
spawn(30)
+ if(!M) return
if(p_loc == user.loc && p_loc_m == M.loc)
M.handcuffed = new /obj/item/weapon/handcuffs(M)
+ M.update_inv_handcuffed()
else
if ((CLUMSY in usr.mutations) && prob(50))
@@ -64,8 +66,10 @@
M.requests += O
spawn( 0 )
if(istype(src, /obj/item/weapon/handcuffs/cable))
+// feedback_add_details("handcuffs","C")
playsound(src.loc, 'cablecuff.ogg', 30, 1, -2)
else
+// feedback_add_details("handcuffs","H")
playsound(src.loc, 'handcuffs.ogg', 30, 1, -2)
O.process()
return
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 4bc4a25de19..723d9afa816 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -397,11 +397,11 @@ WELDINGTOOOL
/obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob)
if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable)))
- M.visible_message("You cut \the [M]'s restraints with \the [src]!",\
- "\The [usr] cuts \the [M]'s restraints with \the [src]!",\
+ usr.visible_message("\The [usr] cuts \the [M]'s restraints with \the [src]!",\
+ "You cut \the [M]'s restraints with \the [src]!",\
"You hear cable being cut.")
M.handcuffed = null
- M.update_clothing()
+ M.update_inv_handcuffed()
return
else
- ..()
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm
index fc5c1aa2f7e..b707c10fc41 100644
--- a/code/game/objects/storage/belt.dm
+++ b/code/game/objects/storage/belt.dm
@@ -9,33 +9,33 @@
max_w_class = 3
max_combined_w_class = 21
- proc/can_use()
- if(!ismob(loc)) return 0
- var/mob/M = loc
- if(src in M.get_equipped_items())
- return 1
+/obj/item/weapon/storage/belt/proc/can_use()
+ if(!ismob(loc)) return 0
+ var/mob/M = loc
+ if(src in M.get_equipped_items())
+ return 1
+ else
+ return 0
+
+
+/obj/item/weapon/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location)
+ var/mob/M = usr
+ if(!istype(over_object, /obj/screen))
+ return ..()
+ playsound(src.loc, "rustle", 50, 1, -5)
+ if (!M.restrained() && !M.stat && can_use())
+ if (over_object.name == "r_hand")
+ if (!( M.r_hand ))
+ M.u_equip(src)
+ M.r_hand = src
else
- return 0
-
-
- MouseDrop(obj/over_object as obj, src_location, over_location)
- var/mob/M = usr
- if(!istype(over_object, /obj/screen))
- return ..()
- playsound(src.loc, "rustle", 50, 1, -5)
- if (!M.restrained() && !M.stat && can_use())
- if (over_object.name == "r_hand")
- if (!( M.r_hand ))
+ if (over_object.name == "l_hand")
+ if (!( M.l_hand ))
M.u_equip(src)
- M.r_hand = src
- else
- if (over_object.name == "l_hand")
- if (!( M.l_hand ))
- M.u_equip(src)
- M.l_hand = src
- M.update_clothing()
- src.add_fingerprint(usr)
- return
+ M.l_hand = src
+ M.update_clothing()
+ src.add_fingerprint(usr)
+ return
@@ -65,7 +65,7 @@
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
- new /obj/item/weapon/cable_coil(src,30,pick("red","yellow"))
+ new /obj/item/weapon/cable_coil(src,30,pick("red","yellow","orange"))
/obj/item/weapon/storage/belt/utility/atmostech/New()
diff --git a/code/game/objects/storage/toolbox.dm b/code/game/objects/storage/toolbox.dm
index 846aafcec41..512d8ef88de 100644
--- a/code/game/objects/storage/toolbox.dm
+++ b/code/game/objects/storage/toolbox.dm
@@ -17,7 +17,7 @@
/obj/item/weapon/storage/toolbox/electrical/New()
..()
- var/color = pick("red","yellow","green","blue")
+ var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
@@ -31,7 +31,7 @@
/obj/item/weapon/storage/toolbox/syndicate/New()
..()
- var/color = pick("red","yellow","green","blue")
+ var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm
index 726f141841a..06a21173169 100644
--- a/code/modules/mob/screen.dm
+++ b/code/modules/mob/screen.dm
@@ -694,6 +694,10 @@
if(resisting)
for(var/mob/O in viewers(usr, null))
O.show_message(text("\red [] resists!", usr), 1)
+
+
+
+ //breaking out of handcuffs
if(usr:handcuffed && usr:canmove && (usr.last_special <= world.time))
var/breakouttime = 1200
var/displaytime = 2
@@ -716,10 +720,13 @@
del(usr:handcuffed)
usr:handcuffed = null
else
- if(istype(usr:handcuffed, /obj/item/weapon/handcuffs/cable))
- breakouttime = 300
- displaytime = 0.5
- usr << "\red You attempt to remove \the [usr:handcuffed]. (This will take around [displaytime] minutes and you need to stand still)"
+ var/obj/item/weapon/handcuffs/HC = usr:handcuffed
+ var/breakouttime = 1200 //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type
+ var/displaytime = 2 //Minutes to display in the "this will take X minutes."
+ if(istype(HC)) //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
+ breakouttime = HC.breakouttime
+ displaytime = breakouttime / 600 //Minutes
+ usr << "\red You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
for(var/mob/O in viewers(usr))
O.show_message(text("\red [] attempts to remove \the [usr:handcuffed]!", usr), 1)
spawn(0)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index ce87f5a4caf..a94ae012ae4 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -246,19 +246,18 @@
set name = "Make Cable Restraints"
set category = "Object"
var/mob/M = usr
- if (istype(M, /mob/dead/)) return
- if (usr.stat) return
- if(!istype(usr.loc,/turf)) return
- if(src.amount <= 14)
- usr << "\red You need at least 15 lengths to make restraints!"
- return
- var/obj/item/weapon/handcuffs/cable/B = new /obj/item/weapon/handcuffs/cable(usr.loc)
- usr << "\blue You wind some cable together to make some restraints."
- if(src.amount == 15)
- del(src)
+
+ if(ishuman(M) && !M.restrained() && !M.stat && !M.paralysis && ! M.stunned)
+ if(!istype(usr.loc,/turf)) return
+ if(src.amount <= 14)
+ usr << "\red You need at least 15 lengths to make restraints!"
+ return
+ var/obj/item/weapon/handcuffs/cable/B = new /obj/item/weapon/handcuffs/cable(usr.loc)
+ B.icon_state = "cuff_[color]"
+ usr << "\blue You wind some cable together to make some restraints."
+ src.use(15)
else
- src.amount -= 15
- B.layer = 20
+ usr << "\blue You cannot do that."
..()
/obj/item/weapon/cable_coil/attackby(obj/item/weapon/W, mob/user)
@@ -561,3 +560,11 @@ obj/structure/cable/proc/cableColor(var/colorC)
icon = 'power_cond_green.dmi'
if("blue")
icon = 'power_cond_blue.dmi'
+ if("pink")
+ icon = 'power_cond_pink.dmi'
+ if("orange")
+ icon = 'power_cond_orange.dmi'
+ if("cyan")
+ icon = 'power_cond_cyan.dmi'
+ if("white")
+ icon = 'power_cond_white.dmi'
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 79293e5ab56..e3f5eab968e 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index a95d01cdff9..d424877853b 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/power_cond_cyan.dmi b/icons/obj/power_cond_cyan.dmi
new file mode 100644
index 00000000000..6e1fa1238e6
Binary files /dev/null and b/icons/obj/power_cond_cyan.dmi differ
diff --git a/icons/obj/power_cond_orange.dmi b/icons/obj/power_cond_orange.dmi
new file mode 100644
index 00000000000..e3c3d0aa8c8
Binary files /dev/null and b/icons/obj/power_cond_orange.dmi differ
diff --git a/icons/obj/power_cond_white.dmi b/icons/obj/power_cond_white.dmi
new file mode 100644
index 00000000000..9036341ee13
Binary files /dev/null and b/icons/obj/power_cond_white.dmi differ