diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index c00ba0f9061..3c3bb7ac977 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -172,6 +172,7 @@
icon_state = "beartrap0"
desc = "A trap used to catch bears and other legged creatures."
var/armed = 0
+ var/obj/item/weapon/grenade/iedcasing/IED = null
suicide_act(mob/user)
viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide."
@@ -184,33 +185,74 @@
icon_state = "beartrap[armed]"
user << "[src] is now [armed ? "armed" : "disarmed"]"
-
-/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj)
- if(armed && isturf(src.loc))
- if( (iscarbon(AM) || 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))
- var/mob/living/L = AM
- armed = 0
- icon_state = "beartrap0"
- playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
- L.visible_message("[L] triggers \the [src].", \
- "You trigger \the [src]!")
-
- if(ishuman(AM))
- var/mob/living/carbon/H = AM
- if(H.lying)
- H.apply_damage(20,BRUTE,"chest")
- else
- H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg")))
- if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
- H.legcuffed = src
- src.loc = H
- H.update_inv_legcuffed(0)
- 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.
-
+/obj/item/weapon/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive.
+ if(istype(I, /obj/item/weapon/grenade/iedcasing))
+ if(IED)
+ user << "This beartrap already has an IED hooked up to it!"
+ return
+ IED = I
+ switch(IED.assembled)
+ if(0,1) //if it's not fueled/hooked up
+ user << "You haven't prepared this IED yet!"
+ IED = null
+ return
+ if(2,3)
+ user.drop_item(src)
+ I.loc = src
+ var/turf/bombturf = get_turf(src)
+ var/area/A = get_area(bombturf)
+ var/log_str = "[key_name(usr)]? has rigged a beartrap with an IED at [A.name] (JMP)."
+ message_admins(log_str)
+ log_game(log_str)
+ user << "You sneak the [IED] underneath the pressure plate and connect the trigger wire."
+ desc = "A trap used to catch bears and other legged creatures. There is an IED hooked up to it."
else
- L.apply_damage(20,BRUTE)
+ user << "You shouldn't be reading this message! Contact a coder or someone, something broke!"
+ IED = null
+ return
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(IED)
+ IED.loc = get_turf(src.loc)
+ IED = null
+ user << "You remove the IED from the [src]."
+ return
..()
+/obj/item/weapon/legcuffs/beartrap/Crossed(AM as mob|obj)
+ if(armed)
+ if(IED && isturf(src.loc))
+ IED.active = 1
+ IED.overlays -= image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
+ IED.icon_state = initial(icon_state) + "_active"
+ IED.assembled = 3
+ var/turf/bombturf = get_turf(src)
+ var/area/A = get_area(bombturf)
+ var/log_str = "[key_name(usr)]? has triggered an IED-rigged [name] at [A.name] (JMP)."
+ message_admins(log_str)
+ log_game(log_str)
+ spawn(IED.det_time)
+ IED.prime()
+ if(ishuman(AM))
+ if(isturf(src.loc))
+ var/mob/living/carbon/H = AM
+ if(H.m_intent == "run")
+ armed = 0
+ H.legcuffed = src
+ src.loc = H
+ H.update_inv_legcuffed()
+ H << "You step on \the [src]!"
+ if(IED && IED.active)
+ H << "The [src]'s IED has been activated!"
+ 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.
+ for(var/mob/O in viewers(H, null))
+ if(O == H)
+ continue
+ O.show_message("\red [H] steps on \the [src].", 1)
+ 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))
+ armed = 0
+ var/mob/living/simple_animal/SA = AM
+ SA.health -= 20
+ ..()
/obj/item/weapon/holosign_creator
name = "holographic sign projector"
diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm
index aad334e45b8..d8441187a5a 100644
--- a/code/game/objects/items/weapons/grenades/ghettobomb.dm
+++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm
@@ -1,6 +1,70 @@
//improvised explosives//
+//iedcasing assembly crafting//
+/obj/item/weapon/reagent_containers/food/drinks/cans/attackby(var/obj/item/I, mob/user as mob)
+ if(istype(I, /obj/item/device/assembly/igniter))
+ var/obj/item/device/assembly/igniter/G = I
+ var/obj/item/weapon/grenade/iedcasing/W = new /obj/item/weapon/grenade/iedcasing
+ user.unEquip(G)
+ user.unEquip(src)
+ user.put_in_hands(W)
+ user << "You stuff the [I] in the [src], emptying the contents beforehand."
+ W.underlays += image(src.icon, icon_state = src.icon_state)
+ del(I)
+ del(src)
+
+
/obj/item/weapon/grenade/iedcasing
+ name = "improvised explosive assembly"
+ desc = "An igniter stuffed into an aluminum shell."
+ w_class = 2.0
+ icon = 'icons/obj/grenade.dmi'
+ icon_state = "improvised_grenade"
+ item_state = "flashbang"
+ throw_speed = 3
+ throw_range = 7
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+ var/assembled = 0
+ active = 1
+ det_time = 50
+ display_timer = 0
+ var/range = 3
+ var/times = list()
+
+
+
+/obj/item/weapon/grenade/iedcasing/afterattack(atom/target, mob/user , flag) //Filling up the can
+ if(assembled == 0)
+ if( istype(target, /obj/structure/reagent_dispensers/fueltank))
+ if(target.reagents.total_volume < 50)
+ user << "There's not enough fuel left to work with."
+ return
+ var/obj/structure/reagent_dispensers/fueltank/F = target
+ F.reagents.remove_reagent("fuel", 50, 1)//Deleting 50 fuel from the welding fuel tank,
+ assembled = 1
+ user << "You've filled the makeshift explosive with welding fuel."
+ playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
+ desc = "An improvised explosive assembly. Filled to the brim with 'Explosive flavor'"
+ overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
+ return
+
+
+/obj/item/weapon/grenade/iedcasing/attackby(var/obj/item/I, mob/user as mob) //Wiring the can for ignition
+ if(istype(I, /obj/item/stack/cable_coil))
+ if(assembled == 1)
+ var/obj/item/stack/cable_coil/C = I
+ C.use(1)
+ assembled = 2
+ user << "You wire the igniter to detonate the fuel."
+ desc = "A weak, improvised explosive."
+ overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired")
+ name = "improvised explosive"
+ active = 0
+ det_time = rand(30,80)
+
+
+/obj/item/weapon/grenade/iedcasing/filled
name = "improvised firebomb"
desc = "A weak, improvised incendiary device."
w_class = 2.0
@@ -13,11 +77,11 @@
slot_flags = SLOT_BELT
active = 0
det_time = 50
- display_timer = 0
- var/range = 3
- var/times = list()
+ assembled = 2
-/obj/item/weapon/grenade/iedcasing/New(loc)
+
+
+/obj/item/weapon/grenade/iedcasing/filled/New(loc)
..()
overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_filled")
overlays += image('icons/obj/grenade.dmi', icon_state = "improvised_grenade_wired")
@@ -57,6 +121,18 @@
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
update_mob()
explosion(src.loc,0,0,2,2) //explosion(src.loc,-1,-1,-1, flame_range = range)
+ if(istype(loc, /obj/item/weapon/legcuffs/beartrap))
+ var/obj/item/weapon/legcuffs/beartrap/boomtrap = loc
+ if(istype(boomtrap.loc, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = loc.loc
+ if(H.legcuffed)
+ var/datum/organ/external/l = H.get_organ("l_leg")
+ var/datum/organ/external/r = H.get_organ("r_leg")
+ if(l && !(l.status & ORGAN_DESTROYED))
+ l.status |= ORGAN_DESTROYED
+ if(r && !(r.status & ORGAN_DESTROYED))
+ r.status |= ORGAN_DESTROYED
+ qdel(H.legcuffed)
qdel(src)
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index dd90a185926..337c1e1115f 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -10,7 +10,7 @@
/datum/table_recipe/IED
name = "IED"
- result = /obj/item/weapon/grenade/iedcasing
+ result = /obj/item/weapon/grenade/iedcasing/filled
reqs = list(/datum/reagent/fuel = 50,
/obj/item/stack/cable_coil = 1,
/obj/item/device/assembly/igniter = 1,