diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm
index ce42d0251ed..d92289cd745 100644
--- a/code/game/objects/items/weapons/legcuffs.dm
+++ b/code/game/objects/items/weapons/legcuffs.dm
@@ -10,7 +10,7 @@
w_class = WEIGHT_CLASS_NORMAL
origin_tech = "engineering=3;combat=3"
slowdown = 7
- breakouttime = 300 //Deciseconds = 30s = 0.5 minute
+ breakouttime = 30 SECONDS
/obj/item/restraints/legcuffs/beartrap
name = "bear trap"
@@ -19,6 +19,7 @@
icon_state = "beartrap0"
desc = "A trap used to catch bears and other legged creatures."
origin_tech = "engineering=4"
+ breakouttime = 20 SECONDS
var/armed = FALSE
var/trap_damage = 20
///Do we want the beartrap not to make a visable message on arm? Use when a beartrap is applied by something else.
@@ -41,7 +42,11 @@
/obj/item/restraints/legcuffs/beartrap/attack_self(mob/user)
..()
- if(ishuman(user) && !user.stat && !user.restrained())
+
+ if(!ishuman(user) || user.restrained())
+ return
+
+ if(do_after(user, 2 SECONDS, target = user))
armed = !armed
update_icon(UPDATE_ICON_STATE)
to_chat(user, "[src] is now [armed ? "armed" : "disarmed"]")
@@ -94,42 +99,58 @@
return TRUE
/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj, oldloc)
- if(armed && isturf(src.loc))
- if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !isconstruct(AM) && !isshade(AM) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
- var/mob/living/L = AM
- armed = FALSE
- update_icon()
- playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
- if(!silent_arming)
- L.visible_message("[L] triggers \the [src].", \
- "You trigger \the [src]!")
+ if(!armed || !isturf(loc))
+ return ..()
- if(IED && isturf(src.loc))
- IED.active = TRUE
- message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].")
- log_game("[key_name(usr)] has triggered an IED-rigged [name].")
- spawn(IED.det_time)
- IED.prime()
-
- if(sig && isturf(src.loc))
- sig.signal()
-
- if(ishuman(AM))
- var/mob/living/carbon/H = AM
- if(IS_HORIZONTAL(H))
- H.apply_damage(trap_damage, BRUTE,"chest")
- else
- H.apply_damage(trap_damage, BRUTE,(pick("l_leg", "r_leg")))
- if(!H.legcuffed && H.get_num_legs() >= 2) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
- H.legcuffed = src
- forceMove(H)
- H.update_inv_legcuffed()
- SSblackbox.record_feedback("tally", "handcuffs", 1, type)
+ var/mob/living/L = AM
+ if((iscarbon(AM) || isanimal(AM)) && !L.flying)
+ spring_trap(AM)
+ if(ishuman(AM))
+ var/mob/living/carbon/H = AM
+ if(IS_HORIZONTAL(H))
+ H.apply_damage(trap_damage, BRUTE, "chest")
else
- L.apply_damage(trap_damage, BRUTE)
+ H.apply_damage(trap_damage, BRUTE, pick("l_leg", "r_leg"))
+ if(!H.legcuffed && H.get_num_legs() >= 2) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
+ H.legcuffed = src
+ forceMove(H)
+ H.update_inv_legcuffed()
+ SSblackbox.record_feedback("tally", "handcuffs", 1, type)
+ else
+ if(istype(L, /mob/living/simple_animal/hostile/bear))
+ L.apply_damage(trap_damage * 2.5, BRUTE)
+ else
+ L.apply_damage(trap_damage * 1.75, BRUTE)
..()
+/obj/item/restraints/legcuffs/beartrap/on_found(mob/finder)
+ if(!armed)
+ return FALSE
+ spring_trap(finder)
+
+ if(ishuman(finder))
+ var/mob/living/carbon/H = finder
+ H.apply_damage(trap_damage, BRUTE, pick("l_hand", "r_hand"))
+ return TRUE
+
+/obj/item/restraints/legcuffs/beartrap/proc/spring_trap(mob/user)
+ armed = FALSE
+ update_icon()
+ playsound(loc, 'sound/effects/snap.ogg', 50, TRUE)
+ if(!silent_arming)
+ user.visible_message("[user] triggers [src].", "You trigger [src].")
+
+ if(sig)
+ sig.signal()
+
+ if(IED)
+ IED.active = TRUE
+ message_admins("[key_name_admin(usr)] has triggered an IED-rigged [name].")
+ log_game("[key_name(usr)] has triggered an IED-rigged [name].")
+ spawn(IED.det_time)
+ IED.prime()
+
/obj/item/restraints/legcuffs/beartrap/energy
name = "energy snare"
armed = TRUE