diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm
index d2748567979e..97912e4d1e72 100644
--- a/code/game/objects/items/implants/implant_explosive.dm
+++ b/code/game/objects/items/implants/implant_explosive.dm
@@ -27,7 +27,6 @@
return dat
/obj/item/implant/explosive/activate(cause)
- . = ..()
if(!cause || !imp_in || active)
return 0
if(cause == "action_button" && !popup)
@@ -41,6 +40,7 @@
weak = round(weak)
to_chat(imp_in, "You activate your [name].")
active = TRUE
+ . = ..()
var/turf/boomturf = get_turf(imp_in)
message_admins("[ADMIN_LOOKUPFLW(imp_in)] has activated their [name] at [ADMIN_VERBOSEJMP(boomturf)], with cause of [cause].")
//If the delay is short, just blow up already jeez
diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm
index 9352e918779b..ed538a560974 100644
--- a/code/modules/antagonists/ninja/ninja.dm
+++ b/code/modules/antagonists/ninja/ninja.dm
@@ -1,3 +1,5 @@
+GLOBAL_LIST_EMPTY(ninja_capture)
+
/datum/antagonist/ninja
name = "Ninja"
antagpanel_category = "Ninja"
@@ -15,10 +17,16 @@
/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
+ for(var/obj/item/implant/explosive/E in M.implants)
+ if(E)
+ RegisterSignal(E, COMSIG_IMPLANT_ACTIVATED, .proc/on_death)
update_ninja_icons_added(M)
/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override)
var/mob/living/M = mob_override || owner.current
+ for(var/obj/item/implant/explosive/E in M.implants)
+ if(E)
+ UnregisterSignal(M, COMSIG_IMPLANT_ACTIVATED, .proc/on_death)
update_ninja_icons_removed(M)
/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/H = owner.current)
@@ -125,6 +133,24 @@
equip_space_ninja(owner.current)
. = ..()
+/datum/antagonist/ninja/proc/on_death()
+ for(var/mob/L in GLOB.ninja_capture)
+ if(get_area(L) == GLOB.areas_by_type[/area/centcom/holding])
+ if(!L)
+ continue
+ var/atom/movable/target = L
+ if(isobj(L.loc))
+ target = L.loc
+ target.forceMove(get_turf(pick(GLOB.generic_event_spawns)))
+ if(isliving(L))
+ var/mob/living/LI = L
+ LI.Knockdown(120)
+ LI.blind_eyes(10)
+ to_chat(L, "You lose your footing as the dojo suddenly disappears. You're free!")
+ playsound(L, 'sound/effects/phasein.ogg', 25, 1)
+ playsound(L, 'sound/effects/sparks2.ogg', 50, 1)
+ GLOB.ninja_capture -= L
+
/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin)
var/adj
switch(input("What kind of ninja?", "Ninja") as null|anything in list("Random","Syndicate","Nanotrasen","No objectives"))
diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm
index 270e1f106f61..146d110ce0e9 100644
--- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm
+++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm
@@ -36,7 +36,7 @@ It is possible to destroy the net by the occupant or someone else.
if(!QDELETED(affecting))
affecting.visible_message("[affecting.name] was recovered from the energy net!", "You were recovered from the energy net!", "You hear a grunt.")
if(!QDELETED(master))//As long as they still exist.
- to_chat(master, "ERROR: unable to initiate transport protocol. Procedure terminated.")
+ to_chat(master, "ERROR: unable to initiate capture protocol. Procedure terminated.")
return ..()
/obj/structure/energy_net/process()
@@ -64,10 +64,11 @@ It is possible to destroy the net by the occupant or someone else.
visible_message("[affecting] suddenly vanishes!")
affecting.forceMove(pick(GLOB.holdingfacility)) //Throw mob in to the holding facility.
- to_chat(affecting, "You appear in a strange place!")
+ GLOB.ninja_capture += affecting
+ to_chat(affecting, "You appear in a strange place. You feel very trapped.")
if(!QDELETED(master))//As long as they still exist.
- to_chat(master, "SUCCESS: transport procedure of [affecting] complete.")
+ to_chat(master, "SUCCESS: capture procedure of [affecting] complete.")
do_sparks(5, FALSE, affecting)
playsound(affecting, 'sound/effects/phasein.ogg', 25, 1)
playsound(affecting, 'sound/effects/sparks2.ogg', 50, 1)