diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index c1fc0566e2..3dd6aed05b 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -175,47 +175,91 @@
origin_tech = "materials=1"
var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
-/obj/item/weapon/legcuffs/beartrap
+/obj/item/weapon/beartrap
name = "bear trap"
throw_speed = 2
throw_range = 1
+ gender = PLURAL
+ icon = 'icons/obj/items.dmi'
icon_state = "beartrap0"
desc = "A trap used to catch bears and other legged creatures."
+ throwforce = 0
+ w_class = 3.0
+ origin_tech = "materials=1"
var/armed = 0
+ var/deployed = 0
suicide_act(mob/user)
- viewers(user) << "\red [user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide."
+ viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide."
return (BRUTELOSS)
-/obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob)
+/obj/item/weapon/beartrap/attack_self(mob/user as mob)
..()
if(ishuman(user) && !user.stat && !user.restrained())
- armed = !armed
- icon_state = "beartrap[armed]"
- user << "[src] is now [armed ? "armed" : "disarmed"]"
+ if(deployed==0)
+ user.visible_message("[user] is deploying \the [src]", "You are deploying \the [src]!")
+ if (do_after(user, 60))
+ user.visible_message("[user] has deployed \the [src]", "You have deployed \the [src]!")
+ deployed = 1
+ armed = 1
+ user.drop_from_inventory(src, user.loc)
+ update_icon()
+ anchored = 1
-/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj)
+/obj/item/weapon/beartrap/attack_hand(mob/user as mob)
+ if(ishuman(user) && !user.stat && !user.restrained())
+ if(deployed==1)
+ user.visible_message("[user] is disarming \the [src]", "You are disarming \the [src]!")
+ if (do_after(user, 60))
+ user.visible_message("[user] has disarmed \the [src]", "You have disarmed \the [src]!")
+ deployed = 0
+ armed = 0
+ anchored = 0
+ update_icon()
+
+ if(deployed==0)
+ ..()
+
+/obj/item/weapon/beartrap/Crossed(AM as mob|obj)
if(armed)
if(ishuman(AM))
if(isturf(src.loc))
var/mob/living/carbon/human/H = AM
if(H.m_intent == "run")
armed = 0
- H.legcuffed = src
- src.loc = H
- H.update_inv_legcuffed()
+ update_icon()
+ //H.legcuffed = src
+ //src.loc = H
+ //H.update_inv_legcuffed()
H << "You step on \the [src]!"
- var/obj/item/organ/external/affecting = H.get_organ(pick("l_leg", "r_leg"))
- feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
+ feedback_add_details("handcuffs","B")
for(var/mob/O in viewers(H, null))
if(O == H)
continue
O.show_message("[H] steps on \the [src].", 1)
-
- affecting.take_damage(35, 0)
- H.UpdateDamageIcon()
- H.updatehealth()
+ if(H.lying)
+ var/list/potentialorgans = list()
+ for(var/organ in list("l_leg", "l_foot", "r_leg", "r_foot", "groin", "chest", "head", "r_arm", "r_hand", "l_arm", "l_hand")) //iterate over names
+ var/obj/item/organ/external/R = H.get_organ(organ)
+ if(R && !(R.status & ORGAN_DESTROYED))
+ potentialorgans += R
+ var/obj/item/organ/external/affecting = pick(potentialorgans)
+ affecting.take_damage(30, 0)
+ affecting.embed(src, 1)
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ else
+ var/list/potentialorgans = list()
+ for(var/organ in list("l_leg", "r_leg", "l_foot", "r_foot"))
+ var/obj/item/organ/external/R = H.get_organ(organ)
+ if(R && !(R.status & ORGAN_DESTROYED))
+ potentialorgans += R
+ var/obj/item/organ/external/affecting = pick(potentialorgans)
+ affecting.take_damage(30, 0)
+ affecting.embed(src, 1)
+ H.UpdateDamageIcon()
+ H.updatehealth()
if(isanimal(AM) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
@@ -224,6 +268,13 @@
SA.health -= 20
..()
+/obj/item/weapon/beartrap/update_icon()
+ ..()
+
+ if(armed == 0)
+ icon_state = "beartrap0"
+ else
+ icon_state = "beartrap1"
/obj/item/weapon/caution
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index 521da5e4aa..3f3d3c95c2 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -191,7 +191,7 @@
if(9)
item_type = "[pick("wicked","evil","byzantine","dangerous")] looking [pick("device","contraption","thing","trap")]"
apply_prefix = 0
- new_item = new /obj/item/weapon/legcuffs/beartrap(src.loc)
+ new_item = new /obj/item/weapon/beartrap/(src.loc)
additional_desc = "[pick("It looks like it could take a limb off",\
"Could be some kind of animal trap",\
"There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains along part of it")]."
diff --git a/html/changelogs/Yoshax - trapping.YML b/html/changelogs/Yoshax - trapping.YML
index 140afce721..0de61852a9 100644
--- a/html/changelogs/Yoshax - trapping.YML
+++ b/html/changelogs/Yoshax - trapping.YML
@@ -33,4 +33,5 @@ delete-after: True
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- - rscadd: "Bear traps now do damage when stood on, enough to break bones!"
+ - tweak: "Bear traps now do damage when stood on, enough to break bones! Bear traps can now affect any limb of a person who is on the ground, including head! Bear traps are no longer legcuffs and instead embed in the limb they attack."
+ - tweak: "Bear traps now take several seconds to deploy and cannot be picked up when armed, they must be disarmed by clicking on them. They also cannot be moved then they were deployed."
\ No newline at end of file
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index 0af561fa81..4f13080afc 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -4927,7 +4927,7 @@
"bQM" = (/obj/structure/table,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/janitor)
"bQN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/turf/simulated/floor,/area/janitor)
"bQO" = (/obj/structure/janitorialcart,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/janitor)
-"bQP" = (/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/janitor)
+"bQP" = (/obj/item/weapon/beartrap,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/janitor)
"bQQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/janitor)
"bQR" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/janitor)
"bQS" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/engineering)