diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
index c16be0cf8bd..9e826de1379 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
@@ -38,7 +38,7 @@
"aaL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate)
"aaM" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"aaN" = (/obj/structure/closet/syndicate/suits,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
-"aaO" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
+"aaO" = (/obj/structure/table,/obj/item/weapon/grenade/plastic/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
"aaP" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
"aaQ" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate)
"aaR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm
index 90fdad55ab1..0e4001575fc 100644
--- a/_maps/map_files/MetaStation/z2.dmm
+++ b/_maps/map_files/MetaStation/z2.dmm
@@ -580,7 +580,7 @@
"nD" = (/obj/structure/extinguisher_cabinet{pixel_y = -28},/turf/unsimulated/floor{tag = "icon-darkbrown"; icon_state = "darkbrown"; dir = 2},/area/centcom/ferry)
"nE" = (/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/ferry)
"nF" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
-"nG" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"nG" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/plastic/c4,/obj/item/weapon/grenade/plastic/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"nH" = (/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/tdome/tdomeobserve)
"nI" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/tdome/tdomeobserve)
"nJ" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome/tdomeobserve)
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 4d072ce53cb..101330b700c 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -8525,7 +8525,7 @@
"dhW" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "synd_outer"; locked = 0; name = "Ship External Access"; req_access = null; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door_control{id = "smindicate"; name = "External Door Control"; pixel_x = -26; pixel_y = -2; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; roundstart_move = "syndicate_away"; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_nw"; name = "northwest of station"; width = 18},/turf/simulated/shuttle/plating,/area/shuttle/syndicate)
"dhX" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate)
"dhY" = (/obj/structure/closet/syndicate/suits,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
-"dhZ" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
+"dhZ" = (/obj/structure/table,/obj/item/weapon/grenade/plastic/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
"dia" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
"dib" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1331; id_tag = "synd_pump"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
"dic" = (/obj/machinery/atmospherics/unary/tank/air{dir = 1},/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/shuttle/syndicate)
diff --git a/code/datums/cargoprofile.dm b/code/datums/cargoprofile.dm
index 40a065e5bad..91a4420b31c 100644
--- a/code/datums/cargoprofile.dm
+++ b/code/datums/cargoprofile.dm
@@ -156,7 +156,7 @@
blacklist = null
whitelist = list(/obj/item/weapon/tank,/obj/item/weapon/reagent_containers,
/obj/item/stack/medical,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/gun/syringe,
- /obj/item/weapon/c4,/obj/item/weapon/grenade,/obj/item/ammo_box,
+ /obj/item/weapon/grenade/plastic/c4,/obj/item/weapon/grenade,/obj/item/ammo_box,
/obj/item/weapon/gun/grenadelauncher,/obj/item/weapon/flamethrower, /obj/item/weapon/lighter,
/obj/item/weapon/match,/obj/item/weapon/weldingtool)
@@ -258,7 +258,7 @@
whitelist = list(/obj/item/weapon/banhammer,/obj/item/weapon/sord,/obj/item/weapon/claymore,/obj/item/weapon/holo/esword,
/obj/item/weapon/flamethrower,/obj/item/weapon/grenade,/obj/item/weapon/gun,/obj/item/weapon/hatchet,/obj/item/weapon/katana,
/obj/item/weapon/kitchen/knife,/obj/item/weapon/melee,/obj/item/weapon/nullrod,/obj/item/weapon/pickaxe,/obj/item/weapon/twohanded,
- /obj/item/weapon/c4,/obj/item/weapon/scalpel,/obj/item/weapon/shield,/obj/item/weapon/grown/nettle/death)
+ /obj/item/weapon/grenade/plastic/c4,/obj/item/weapon/scalpel,/obj/item/weapon/shield,/obj/item/weapon/grown/nettle/death)
/datum/cargoprofile/tools
name = "Devices & Tools"
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 3ecf203ea02..4ca4c38f68a 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -953,11 +953,19 @@ var/list/uplink_items = list()
/datum/uplink_item/device_tools/plastic_explosives
name = "Composition C-4"
- desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaller to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
+ desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect an assembly to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds."
reference = "C4"
- item = /obj/item/weapon/c4
+ item = /obj/item/weapon/grenade/plastic/c4
cost = 1
+/datum/uplink_item/device_tools/breaching_charge
+ name = "Composition X-4"
+ desc = "X-4 is a shaped charge designed to be safe to the user while causing maximum damage to the occupants of the room beach breached. It has a modifiable timer with a minimum setting of 10 seconds."
+ reference = "X4"
+ item = /obj/item/weapon/grenade/plastic/x4
+ cost = 2
+ gamemodes = list(/datum/game_mode/nuclear)
+
/datum/uplink_item/device_tools/powersink
name = "Power Sink"
desc = "When screwed to wiring attached to an electric grid, then activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink cannot be carried because of its excessive size. Ordering this sends you a small beacon that will teleport the power sink to your location on activation."
diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm
index 9a9e892acd9..d653729dfd3 100644
--- a/code/datums/wires/explosive.dm
+++ b/code/datums/wires/explosive.dm
@@ -17,19 +17,6 @@ var/const/WIRE_EXPLODE = 1
if(!mended)
explode()
-/datum/wires/explosive/plastic
- holder_type = /obj/item/weapon/c4
-
-/datum/wires/explosive/plastic/CanUse(var/mob/living/L)
- var/obj/item/weapon/c4/P = holder
- if(P.open_panel)
- return 1
- return 0
-
-/datum/wires/explosive/plastic/explode()
- var/obj/item/weapon/c4/P = holder
- P.explode(get_turf(P))
-
/datum/wires/explosive/gibtonite
holder_type = /obj/item/weapon/twohanded/required/gibtonite
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 2ee085c908a..394f29a1ccf 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -997,7 +997,7 @@ About the new airlock wires panel:
if(istype(C, /obj/item/device/detective_scanner) || istype(C, /obj/item/taperoll))
return
- if(istype(C, /obj/item/weapon/c4))
+ if(istype(C, /obj/item/weapon/grenade/plastic/c4))
to_chat(user, "The hatch is coated with a product that prevents the shaped charge from sticking!")
return
diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm
index 83b58d19d1c..f34e28dcd18 100644
--- a/code/game/machinery/transformer.dm
+++ b/code/game/machinery/transformer.dm
@@ -244,7 +244,7 @@
badcount++
for(var/obj/item/weapon/kitchen/knife/K in src.loc)
badcount++
- for(var/obj/item/weapon/c4/KK in src.loc)
+ for(var/obj/item/weapon/grenade/plastic/c4/KK in src.loc)
badcount++
for(var/obj/item/weapon/melee/ML in src.loc)
badcount++
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 44387314147..3269aefde0e 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -1,31 +1,96 @@
-/obj/item/weapon/c4
- name = "plastic explosives"
+/obj/item/weapon/grenade/plastic
+ name = "plastic explosive"
desc = "Used to put holes in specific areas without too much extra hole."
- gender = PLURAL
- icon = 'icons/obj/assemblies.dmi'
icon_state = "plastic-explosive0"
- item_state = "plasticx"
+ item_state = "plastic-explosive"
flags = NOBLUDGEON
- w_class = 2
+ det_time = 10
+ display_timer = 0
origin_tech = "syndicate=2"
- var/datum/wires/explosive/plastic/wires = null
- var/timer = 10
var/atom/target = null
- var/open_panel = 0
+ var/image_overlay = null
+ var/obj/item/device/assembly_holder/nadeassembly = null
+ var/assemblyattacher
-/obj/item/weapon/c4/New()
- wires = new(src)
+/obj/item/weapon/grenade/plastic/New()
+ image_overlay = image('icons/obj/grenade.dmi', "[item_state]2")
..()
-/obj/item/weapon/c4/Destroy()
- qdel(wires)
- wires = null
+/obj/item/weapon/grenade/plastic/Destroy()
+ qdel(nadeassembly)
+ nadeassembly = null
target = null
- return ..()
+ ..()
-/obj/item/weapon/c4/suicide_act(var/mob/user)
- . = (BRUTELOSS)
- to_chat(viewers(user), "[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!")
+/obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params)
+ if(!nadeassembly && istype(I, /obj/item/device/assembly_holder))
+ var/obj/item/device/assembly_holder/A = I
+ if(!user.unEquip(I))
+ return ..()
+ nadeassembly = A
+ A.master = src
+ A.loc = src
+ assemblyattacher = user.ckey
+ to_chat(user, "You add [A] to the [name].")
+ playsound(src, 'sound/weapons/tap.ogg', 20, 1)
+ update_icon()
+ return
+ if(nadeassembly && istype(I, /obj/item/weapon/wirecutters))
+ playsound(src, 'sound/items/Wirecutter.ogg', 20, 1)
+ nadeassembly.loc = get_turf(src)
+ nadeassembly.master = null
+ nadeassembly = null
+ update_icon()
+ return
+ ..()
+
+//assembly stuff
+/obj/item/weapon/grenade/plastic/receive_signal()
+ prime()
+
+/obj/item/weapon/grenade/plastic/Crossed(atom/movable/AM)
+ if(nadeassembly)
+ nadeassembly.Crossed(AM)
+
+/obj/item/weapon/grenade/plastic/on_found(mob/finder)
+ if(nadeassembly)
+ nadeassembly.on_found(finder)
+
+/obj/item/weapon/grenade/plastic/attack_self(mob/user)
+ if(nadeassembly)
+ nadeassembly.attack_self(user)
+ return
+ var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
+ if(user.get_active_hand() == src)
+ newtime = Clamp(newtime, 10, 60000)
+ det_time = newtime
+ to_chat(user, "Timer set for [det_time] seconds.")
+
+/obj/item/weapon/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
+ if (!flag)
+ return
+ if (istype(AM, /mob/living/carbon))
+ return
+ to_chat(user, "You start planting the [src]. The timer is set to [det_time]...")
+
+ if(do_after(user, 50, target = AM))
+ if(!user.unEquip(src))
+ return
+ src.target = AM
+ loc = null
+
+ message_admins("[key_name_admin(user)](?) (FLW) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [det_time] second fuse",0,1)
+ log_game("[key_name(user)] planted [name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse")
+
+ target.overlays += image_overlay
+ if(!nadeassembly)
+ to_chat(user, "You plant the bomb. Timer counting down from [det_time].")
+ addtimer(src, "prime", det_time*10)
+
+/obj/item/weapon/grenade/plastic/suicide_act(mob/user)
+ message_admins("[key_name_admin(user)](?) (FLW) suicided with [src.name] at ([user.x],[user.y],[user.z] - JMP)",0,1)
+ message_admins("[key_name(user)] suicided with [name] at ([user.x],[user.y],[user.z])")
+ user.visible_message("[user] activates the [name] and holds it above \his head! It looks like \he's going out with a bang!")
var/message_say = "FOR NO RAISIN!"
if(user.mind)
if(user.mind.special_role)
@@ -44,81 +109,125 @@
message_say = "FOR THE REVOLOUTION!"
else if(role == "death commando" || role == ROLE_ERT)
message_say = "FOR NANOTRASEN!"
-
user.say(message_say)
target = user
- message_admins("[key_name_admin(user)] suicided with [src.name] at ([x],[y],[z] - JMP)",0,1)
- message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])")
- explode(get_turf(user))
- return .
+ sleep(10)
+ prime()
+ user.gib()
-/obj/item/weapon/c4/attackby(var/obj/item/I, var/mob/user, params)
- if(istype(I, /obj/item/weapon/screwdriver))
- open_panel = !open_panel
- to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.")
- else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
- wires.Interact(user)
+/obj/item/weapon/grenade/plastic/update_icon()
+ if(nadeassembly)
+ icon_state = "[item_state]1"
else
- ..()
+ icon_state = "[item_state]0"
-/obj/item/weapon/c4/attack_self(mob/user as mob)
- var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num|null
- if(newtime == null)
- return
- if(newtime < 10)
- newtime = 10
- if(newtime > 60000)
- newtime = 60000
- timer = newtime
- to_chat(user, "Timer set for [timer] seconds.")
+//////////////////////////
+///// The Explosives /////
+//////////////////////////
+/obj/item/weapon/grenade/plastic/c4
+ name = "C4"
+ desc = "Used to put holes in specific areas without too much extra hole. A saboteurs favourite."
-/obj/item/weapon/c4/afterattack(atom/target as obj|turf, mob/user as mob, flag)
- if(!flag)
- return
- if(ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/item/clothing/accessory/storage) || istype(target, /obj/item/clothing/under))
- return
- to_chat(user, "Planting explosives...")
-
- if(do_after(user, 50, target = target) && in_range(user, target))
- user.drop_item()
- src.target = target
- loc = null
-
- if(ismob(target))
- add_logs(target, user, "planted [name] on")
- user.visible_message("\red [user.name] finished planting an explosive on [target.name]!")
- message_admins("[key_name_admin(user)] planted [src.name] on [key_name_admin(target)] with [timer] second fuse",0,1)
- log_game("[key_name(user)] planted [src.name] on [key_name(target)] with [timer] second fuse")
-
- else
- message_admins("[key_name_admin(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1)
- log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
-
- target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2")
- to_chat(user, "Bomb has been planted. Timer counting down from [timer].")
- spawn(timer*10)
- explode(get_turf(target))
-
-/obj/item/weapon/c4/proc/explode(var/location)
-
- if(!target)
- target = get_atom_on_turf(src)
- if(!target)
- target = src
- if(location)
- explosion(location, -1, -1, 4, 4)
-
+/obj/item/weapon/grenade/plastic/c4/prime()
+ var/turf/location
if(target)
- if(istype(target, /turf/simulated/wall))
- var/turf/simulated/wall/W = target
- W.dismantle_wall(1)
- else
- target.ex_act(1)
- if(isobj(target))
- if(target)
- qdel(target)
+ if(!qdeleted(target))
+ location = get_turf(target)
+ target.overlays -= image_overlay
+ else
+ location = get_turf(src)
+ if(location)
+ location.ex_act(2, target)
+ explosion(location,0,0,3)
+ if(istype(target, /mob))
+ var/mob/M = target
+ M.gib()
qdel(src)
-/obj/item/weapon/c4/attack(mob/M as mob, mob/user as mob, def_zone)
- return
\ No newline at end of file
+// X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of.
+// C4 is intended to be used for infiltration, and destroying tech. X4 is intended to be used for heavy breaching and tight spaces.
+// Intended to replace C4 for nukeops, and to be a randomdrop in surplus/random traitor purchases.
+
+/obj/item/weapon/grenade/plastic/x4
+ name = "X4"
+ desc = "A specialized shaped high explosive breaching charge. Designed to be safer for the user, and less so, for the wall."
+ var/aim_dir = NORTH
+ icon_state = "plasticx40"
+ item_state = "plasticx4"
+
+/obj/item/weapon/grenade/plastic/x4/prime()
+ var/turf/location
+ if(target)
+ if(!qdeleted(target))
+ location = get_turf(target)
+ target.overlays -= image_overlay
+ else
+ location = get_turf(src)
+ if(location)
+ if(target && target.density)
+ var/turf/T = get_step(location, aim_dir)
+ explosion(get_step(T, aim_dir),0,0,3)
+ explosion(T,0,2,0)
+ location.ex_act(2, target)
+ else
+ explosion(location, 0, 2, 3)
+ location.ex_act(2, target)
+ if(istype(target, /mob))
+ var/mob/M = target
+ M.gib()
+ qdel(src)
+
+/obj/item/weapon/grenade/plastic/x4/afterattack(atom/movable/AM, mob/user, flag)
+ aim_dir = get_dir(user,AM)
+ ..()
+
+// Shaped charge
+// Same blasting power as C4, but with the same idea as the X4 -- Everyone on one side of the wall is safe.
+
+/obj/item/weapon/grenade/plastic/c4_shaped
+ name = "C4 (shaped)"
+ desc = "A brick of C4 shaped to allow more precise breaching."
+ var/aim_dir = NORTH
+
+/obj/item/weapon/grenade/plastic/c4_shaped/prime()
+ var/turf/location
+ if(target)
+ if(!qdeleted(target))
+ location = get_turf(target)
+ target.overlays -= image_overlay
+ else
+ location = get_turf(src)
+ if(location)
+ if(target && target.density)
+ var/turf/T = get_step(location, aim_dir)
+ explosion(get_step(T, aim_dir),0,0,3)
+ location.ex_act(2, target)
+ else
+ explosion(location, 0, 0, 3)
+ location.ex_act(2, target)
+ if(istype(target, /mob))
+ var/mob/M = target
+ M.gib()
+ qdel(src)
+
+/obj/item/weapon/grenade/plastic/c4_shaped/afterattack(atom/movable/AM, mob/user, flag)
+ aim_dir = get_dir(user,AM)
+ ..()
+
+/obj/item/weapon/grenade/plastic/c4_shaped/flash
+ name = "C4 (flash)"
+ desc = "A C4 charge with an altered chemical composition, designed to blind and deafen the occupants of a room before breaching."
+
+/obj/item/weapon/grenade/plastic/c4_shaped/flash/prime()
+ if(target && target.density)
+ T = get_step(get_turf(target), aim_dir)
+ else if(target)
+ T = get_turf(target)
+ else
+ T = get_turf(src)
+
+ var/obj/item/weapon/grenade/flashbang/CB = new/obj/item/weapon/grenade/flashbang(T)
+ CB.prime()
+
+ ..()
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 3c972b9d041..096879d267e 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -37,7 +37,7 @@
new /obj/item/weapon/gun/projectile/revolver(src)
new /obj/item/ammo_box/a357(src)
new /obj/item/weapon/card/emag(src)
- new /obj/item/weapon/c4(src)
+ new /obj/item/weapon/grenade/plastic/c4(src)
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/clothing/mask/gas/clown_hat(src)
new /obj/item/clothing/under/suit_jacket/really_black(src)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index fde2ec0579e..d58c39a9484 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -843,7 +843,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
- sec_briefcase.contents += new /obj/item/weapon/c4
+ sec_briefcase.contents += new /obj/item/weapon/grenade/plastic/c4
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
var/obj/item/device/pda/heads/pda = new(M)
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index 98ef8d7b3b8..1aeb425b8be 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -144,7 +144,7 @@ var/global/sent_strike_team = 0
equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
if(!leader_selected)
- equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/disk/nuclear(src), slot_in_backpack)
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm
index abb6de5ceb7..2fdd388d0ca 100644
--- a/code/modules/admin/verbs/striketeam_syndicate.dm
+++ b/code/modules/admin/verbs/striketeam_syndicate.dm
@@ -148,10 +148,10 @@ var/global/sent_syndicate_strike_team = 0
equip_to_slot_or_del(new /obj/item/ammo_box/magazine/m45(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_in_backpack)
- equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_in_backpack)
if(!syndicate_leader_selected)
- equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_in_backpack)
+ equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_in_backpack)
else
equip_to_slot_or_del(new /obj/item/weapon/pinpointer(src), slot_in_backpack)
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 42eda2be496..81038eaf463 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -516,7 +516,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
/obj/item/clothing/mask/gas/voice, /obj/item/clothing/glasses/thermal,\
/obj/item/device/chameleon, /obj/item/weapon/card/emag,\
/obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/aiModule,\
- /obj/item/device/radio/headset/syndicate, /obj/item/weapon/c4,\
+ /obj/item/device/radio/headset/syndicate, /obj/item/weapon/grenade/plastic/c4,\
/obj/item/device/powersink, /obj/item/weapon/storage/box/syndie_kit,\
/obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/laser/captain,\
/obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 04e6c0d7a2f..e0196fbcec2 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -164,7 +164,7 @@
if(!item_to_add)
usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.")
return
- if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
+ if(istype(item_to_add,/obj/item/weapon/grenade/plastic/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
@@ -208,7 +208,7 @@
//Many hats added, Some will probably be removed, just want to see which ones are popular.
/mob/living/simple_animal/pet/corgi/proc/place_on_head(obj/item/item_to_add, var/mob/user as mob)
- if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess
+ if(istype(item_to_add,/obj/item/weapon/grenade/plastic/c4)) // last thing he ever wears, I guess
item_to_add.afterattack(src,user,1)
return
diff --git a/code/modules/paperwork/frames.dm b/code/modules/paperwork/frames.dm
index f988cf117cc..46f4e12d97e 100644
--- a/code/modules/paperwork/frames.dm
+++ b/code/modules/paperwork/frames.dm
@@ -224,7 +224,7 @@
explosive.forceMove(user.loc)
explosive = null
qdel(src)
- if(istype(I, /obj/item/weapon/grenade) || istype(I, /obj/item/weapon/c4))
+ if(istype(I, /obj/item/weapon/grenade) || istype(I, /obj/item/weapon/grenade/plastic/c4))
if(explosive)
to_chat(user, "There is already a device attached behind \the [src], remove it first.")
return 1
@@ -268,11 +268,6 @@
var/obj/item/weapon/grenade/G = explosive
explosive = null
G.prime()
- else if(istype(explosive, /obj/item/weapon/c4))
- var/obj/item/weapon/c4/C = explosive
- explosive = null
- C.target = get_step(get_turf(src), dir)
- C.explode(get_turf(loc))
/obj/structure/sign/picture_frame/proc/toggle_tilt(mob/user)
if(!isliving(usr) || usr.stat)
@@ -312,4 +307,4 @@
/obj/structure/sign/picture_frame/hear_message(mob/living/M as mob, msg)
..()
for(var/obj/O in contents)
- O.hear_message(M, msg)
\ No newline at end of file
+ O.hear_message(M, msg)
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index 27168c30865..0ac606eb617 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index 2f7154777fd..1a84149f45f 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi
index 1a24c945dff..2fd457f5638 100644
Binary files a/icons/obj/assemblies.dmi and b/icons/obj/assemblies.dmi differ
diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi
index e0b3b047628..ad8268ad59d 100644
Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ