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