diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 9de4f014a29..27f18b4f43a 100644
--- a/code/__defines/dcs/signals.dm
+++ b/code/__defines/dcs/signals.dm
@@ -521,12 +521,12 @@
#define COMSIG_ON_CARBON_SLIP "carbon_slip"
// /mob/living/silicon signals
-///called when a silicon is emp'd. from /mob/living/silicon/emp_act(severity)
+///called when a silicon is emp'd. from /mob/living/silicon/emp_act(severity, recursive)
#define COMSIG_SILICON_EMP_ACT "silicon_emp_act"
#define COMPONENT_BLOCK_EMP (1<<0) //If this is set, the EMP will not go through. Used by other EMP acts as well.
// /mob/living/silicon/robot signals
-///called when a robot is emp'd. from /mob/living/silicon/robot/emp_act(severity)
+///called when a robot is emp'd. from /mob/living/silicon/robot/emp_act(severity, recursive)
#define COMSIG_ROBOT_EMP_ACT "robot_emp_act"
///from base of obj/deconstruct(): (disassembled)
diff --git a/code/datums/components/antags/changeling/powers/fabricate_clothing.dm b/code/datums/components/antags/changeling/powers/fabricate_clothing.dm
index 56180fcff29..07cc532710c 100644
--- a/code/datums/components/antags/changeling/powers/fabricate_clothing.dm
+++ b/code/datums/components/antags/changeling/powers/fabricate_clothing.dm
@@ -32,7 +32,7 @@
canremove = FALSE //Since this is essentially flesh impersonating clothes, tearing someone's skin off as if it were clothing isn't possible.
has_sensor = FALSE // Reveals ling, and doesn't make sense anyway!
-/obj/item/clothing/under/chameleon/changeling/emp_act(severity) //As these are purely organic, EMP does nothing to them.
+/obj/item/clothing/under/chameleon/changeling/emp_act(severity, recursive) //As these are purely organic, EMP does nothing to them.
return
/obj/item/clothing/under/chameleon/changeling/verb/shred() //Remove individual pieces if needed.
@@ -53,7 +53,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/clothing/head/chameleon/changeling/emp_act(severity)
+/obj/item/clothing/head/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/clothing/head/chameleon/changeling/verb/shred() //The copypasta is real.
@@ -78,7 +78,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/clothing/suit/chameleon/changeling/emp_act(severity)
+/obj/item/clothing/suit/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/clothing/suit/chameleon/changeling/verb/shred()
@@ -103,7 +103,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/clothing/shoes/chameleon/changeling/emp_act()
+/obj/item/clothing/shoes/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/clothing/shoes/chameleon/changeling/verb/shred()
@@ -128,7 +128,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/storage/backpack/chameleon/changeling/emp_act()
+/obj/item/storage/backpack/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/storage/backpack/chameleon/changeling/verb/shred()
@@ -156,7 +156,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/clothing/gloves/chameleon/changeling/emp_act()
+/obj/item/clothing/gloves/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/clothing/gloves/chameleon/changeling/verb/shred()
@@ -182,7 +182,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/clothing/mask/chameleon/changeling/emp_act()
+/obj/item/clothing/mask/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/clothing/mask/chameleon/changeling/verb/shred()
@@ -203,7 +203,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/clothing/glasses/chameleon/changeling/emp_act()
+/obj/item/clothing/glasses/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/clothing/glasses/chameleon/changeling/verb/shred()
@@ -228,7 +228,7 @@
origin_tech = list()
canremove = FALSE
-/obj/item/storage/belt/chameleon/changeling/emp_act()
+/obj/item/storage/belt/chameleon/changeling/emp_act(severity, recursive)
return
/obj/item/storage/belt/chameleon/changeling/verb/shred()
diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm
index 4edbe81809b..352f9d59f96 100644
--- a/code/game/atom/_atom.dm
+++ b/code/game/atom/_atom.dm
@@ -138,7 +138,14 @@
UnregisterSignal(T, COMSIG_OBSERVER_TURF_ENTERED)
-/atom/proc/emp_act(var/severity)
+/atom/proc/emp_act(severity, recursive)
+ recursive++
+ if(recursive > 5) //After a certain depth, we're just going to assume that it's too insulated to be EMP'd.
+ return
+ for(var/atom/A in contents)
+ if(isbelly(A)) //Prey are protected
+ continue
+ A.emp_act(severity, recursive)
return
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 5809b8fe6f0..bbf5e4b22ba 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -427,7 +427,7 @@
return
go_out()
-/obj/machinery/sleeper/emp_act(var/severity)
+/obj/machinery/sleeper/emp_act(severity, recursive)
if(filtering)
toggle_filter()
@@ -435,13 +435,13 @@
toggle_pump()
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
if(occupant)
go_out()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/sleeper/proc/toggle_filter()
if(!occupant || !beaker)
filtering = 0
diff --git a/code/game/machinery/airconditioner_vr.dm b/code/game/machinery/airconditioner_vr.dm
index e7592ae1778..0ff8a6c8938 100644
--- a/code/game/machinery/airconditioner_vr.dm
+++ b/code/game/machinery/airconditioner_vr.dm
@@ -120,7 +120,7 @@
add_overlay("lasergen-cool")
/obj/machinery/power/thermoregulator/proc/turn_off()
- on = 0
+ on = FALSE
change_mode(MODE_IDLE)
update_icon()
@@ -130,12 +130,12 @@
mode = new_mode
update_icon()
-/obj/machinery/power/thermoregulator/emp_act(severity)
+/obj/machinery/power/thermoregulator/emp_act(severity, recursive)
if(!on)
- on = 1
+ on = TRUE
target_temp += rand(0, 1000)
update_icon()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/power/thermoregulator/overload(var/obj/machinery/power/source)
if(!anchored || !powernet)
diff --git a/code/game/machinery/atm_ret_field.dm b/code/game/machinery/atm_ret_field.dm
index 83f40627f7b..fb5805cfa3b 100644
--- a/code/game/machinery/atm_ret_field.dm
+++ b/code/game/machinery/atm_ret_field.dm
@@ -109,7 +109,7 @@
disable_field()
update_icon()
-/obj/machinery/atmospheric_field_generator/emp_act()
+/obj/machinery/atmospheric_field_generator/emp_act(severity, recursive)
if(!(stat & EMPED))
stat |= EMPED
disable_field() //shutting dowwwwwwn
diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm
index 98aa44c18de..880cba9eb26 100644
--- a/code/game/machinery/atmoalter/pump.dm
+++ b/code/game/machinery/atmoalter/pump.dm
@@ -48,9 +48,9 @@
return
-/obj/machinery/portable_atmospherics/powered/pump/emp_act(severity)
+/obj/machinery/portable_atmospherics/powered/pump/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
if(prob(50/severity))
@@ -62,7 +62,7 @@
target_pressure = rand(0,1300)
update_icon()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/portable_atmospherics/powered/pump/process()
..()
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index a6aabf54208..5de5e1e7b0e 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -26,16 +26,16 @@
cell = new/obj/item/cell/apc(src)
AddElement(/datum/element/climbable)
-/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity)
+/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
if(prob(50/severity))
on = !on
update_icon()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/portable_atmospherics/powered/scrubber/update_icon()
cut_overlays()
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 64bf98efca7..25a49fbefe6 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -92,7 +92,7 @@
/obj/machinery/camera/proc/internal_process()
return
-/obj/machinery/camera/emp_act(severity)
+/obj/machinery/camera/emp_act(severity, recursive)
if(!isEmpProof() && prob(100/severity))
if(!affected_by_emp_until || (world.time > affected_by_emp_until))
affected_by_emp_until = max(affected_by_emp_until, world.time + (90 SECONDS / severity))
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 81154cdca07..1f66829d6c2 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -108,14 +108,6 @@
charging = null
update_icon()
-/obj/machinery/cell_charger/emp_act(severity)
- if(stat & (BROKEN|NOPOWER))
- return
- if(charging)
- charging.emp_act(severity)
- ..(severity)
-
-
/obj/machinery/cell_charger/process()
//to_world("ccpt [charging] [stat]")
if((stat & (BROKEN|NOPOWER)) || !anchored)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 7a67b18d157..a454b69898b 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -399,7 +399,7 @@
return
go_out()
-/obj/machinery/clonepod/emp_act(severity)
+/obj/machinery/clonepod/emp_act(severity, recursive)
if(prob(100/severity))
malfunction()
..()
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index e751969f17d..4dd4ad02df7 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -61,9 +61,9 @@
return attack_hand(user)
-/obj/machinery/computer/arcade/emp_act(severity)
+/obj/machinery/computer/arcade/emp_act(severity, recursive)
if(stat & (NOPOWER|BROKEN))
- ..(severity)
+ ..(severity, recursive)
return
var/empprize = null
var/num_of_prizes = 0
@@ -80,7 +80,7 @@
empprize = pickweight(prizes)
new empprize(src.loc)
- ..(severity)
+ ..(severity, recursive)
///////////////////
// BATTLE HERE //
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 6038b3920c6..7039394e7c4 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -29,7 +29,7 @@
return 0
return 1
-/obj/machinery/computer/emp_act(severity)
+/obj/machinery/computer/emp_act(severity, recursive)
if(prob(20/severity)) set_broken()
..()
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index a26c7adbdb5..9d68d801db2 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -478,9 +478,9 @@
if(update_now)
SStgui.update_uis(src)
-/obj/machinery/computer/med_data/emp_act(severity)
+/obj/machinery/computer/med_data/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
for(var/datum/data/record/R in GLOB.data_core.medical)
@@ -506,7 +506,7 @@
qdel(R)
continue
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/computer/med_data/laptop //[TO DO] Change name to PCU and update mapdata to include replacement computers
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 550b27712eb..00e45f8c720 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -489,9 +489,9 @@
if (selection)
return selection.img
-/obj/machinery/computer/secure_data/emp_act(severity)
+/obj/machinery/computer/secure_data/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
for(var/datum/data/record/R in GLOB.data_core.security)
@@ -517,7 +517,7 @@
qdel(R)
continue
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/computer/secure_data/detective_computer
icon_state = "forensic"
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index d47c85f12ef..f2e78e3cd31 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -366,9 +366,9 @@
if(update_now)
SStgui.update_uis(src)
-/obj/machinery/computer/skills/emp_act(severity)
+/obj/machinery/computer/skills/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
for(var/datum/data/record/R in GLOB.data_core.security)
@@ -394,7 +394,7 @@
qdel(R)
continue
- ..(severity)
+ ..(severity, recursive)
#undef GENERAL_RECORD_LIST
#undef GENERAL_RECORD_MAINT
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index cdf5722a6fc..f99a77fbc19 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -97,7 +97,7 @@ Deployable items
CheckHealth()
return
-/obj/machinery/deployable/barrier/emp_act(severity)
+/obj/machinery/deployable/barrier/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
return
if(prob(50/severity))
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 8f8ffa2e73f..6ab90d96b4a 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1079,7 +1079,7 @@ About the new airlock wires panel:
electronics.conf_access = req_one_access
electronics.one_access = 1
-/obj/machinery/door/airlock/emp_act(var/severity)
+/obj/machinery/door/airlock/emp_act(severity, recursive)
if(prob(40/severity))
var/duration = world.time + ((30 / severity) SECONDS)
if(duration > electrified_until)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 1dcc813d44b..17006588205 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -409,7 +409,7 @@
return
-/obj/machinery/door/emp_act(severity)
+/obj/machinery/door/emp_act(severity, recursive)
if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) )
open()
..()
diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm
index 8f7a2e868b3..f8e27b959ff 100644
--- a/code/game/machinery/exonet_node.dm
+++ b/code/game/machinery/exonet_node.dm
@@ -57,10 +57,10 @@
update_idle_power_usage(0)
update_icon()
-// Proc: emp_act()
+// Proc: emp_act(severity, recursive)
// Parameters: 1 (severity - how strong the EMP is, with lower numbers being stronger)
// Description: Shuts off the machine for awhile if an EMP hits it. Ion anomalies also call this to turn it off.
-/obj/machinery/exonet_node/emp_act(severity)
+/obj/machinery/exonet_node/emp_act(severity, recursive)
if(!(stat & EMPED))
stat |= EMPED
var/duration = (300 * 10)/severity
diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm
index 289620d1205..e9ff22dc68c 100644
--- a/code/game/machinery/fire_alarm.dm
+++ b/code/game/machinery/fire_alarm.dm
@@ -110,7 +110,7 @@ FIRE ALARM
/obj/machinery/firealarm/bullet_act()
return alarm()
-/obj/machinery/firealarm/emp_act(severity)
+/obj/machinery/firealarm/emp_act(severity, recursive)
if(prob(50 / severity))
alarm(rand(30 / severity, 60 / severity))
..()
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index fe2ff76b0f9..77931f9d8c5 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -99,13 +99,13 @@
L.flash_eyes()
O.Weaken(flash_time)
-/obj/machinery/flasher/emp_act(severity)
+/obj/machinery/flasher/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
if(prob(75/severity))
flash()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/flasher/portable/HasProximity(turf/T, datum/weakref/WF, oldloc)
if(isnull(WF))
diff --git a/code/game/machinery/holoposter.dm b/code/game/machinery/holoposter.dm
index eea5c071a97..6eb1d7ab3b5 100644
--- a/code/game/machinery/holoposter.dm
+++ b/code/game/machinery/holoposter.dm
@@ -111,6 +111,6 @@ GLOBAL_LIST_EMPTY(holoposters)
if(wasUnpowered != (stat & NOPOWER))
update_icon()
-/obj/machinery/holoposter/emp_act()
+/obj/machinery/holoposter/emp_act(severity, recursive)
stat |= BROKEN
update_icon()
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index f3d4b0d20ed..b26689e38e7 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -107,12 +107,12 @@
location.hotspot_expose(1000,500,1)
return 1
-/obj/machinery/sparker/emp_act(severity)
+/obj/machinery/sparker/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
ignite()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/button/ignition
name = "ignition switch"
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 41b813b144a..d07f955e054 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -372,7 +372,7 @@
return
/obj/machinery/media/jukebox/ghost/power_change()
return
-/obj/machinery/media/jukebox/ghost/emp_act(severity)
+/obj/machinery/media/jukebox/ghost/emp_act(severity, recursive)
return
/obj/machinery/media/jukebox/ghost/emag_act(remaining_charges, mob/user)
return
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 713ef06e3c9..8e62a56d31f 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -81,12 +81,12 @@
update_icon()
-/obj/machinery/light_switch/emp_act(severity)
+/obj/machinery/light_switch/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
power_change()
- ..(severity)
+ ..(severity, recursive)
//Breakers for event maps
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 3ee0f784453..e8f6cdba4fe 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -162,7 +162,7 @@ Class Procs:
/obj/machinery/process() // Steady power usage is handled separately. If you dont use process why are you here?
return PROCESS_KILL
-/obj/machinery/emp_act(severity)
+/obj/machinery/emp_act(severity, recursive)
if(use_power && stat == 0)
use_power(7500/severity)
@@ -172,9 +172,7 @@ Class Procs:
pulse2.name = "emp sparks"
pulse2.anchored = TRUE
pulse2.set_dir(pick(GLOB.cardinal))
-
- spawn(10)
- qdel(pulse2)
+ QDEL_IN(pulse2, 1 SECOND)
..()
/obj/machinery/ex_act(severity)
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 5e0cd5abd4c..605333fde54 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -55,8 +55,8 @@
flick("mass_driver1", src)
return
-/obj/machinery/mass_driver/emp_act(severity)
+/obj/machinery/mass_driver/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
return
drive()
- ..(severity)
+ ..(severity, recursive)
diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm
index 852ea08de41..275b8dad4a7 100644
--- a/code/game/machinery/pda_multicaster.dm
+++ b/code/game/machinery/pda_multicaster.dm
@@ -86,7 +86,7 @@
/obj/machinery/pda_multicaster/process()
update_power()
-/obj/machinery/pda_multicaster/emp_act(severity)
+/obj/machinery/pda_multicaster/emp_act(severity, recursive)
if(!(stat & EMPED))
stat |= EMPED
var/duration = (300 * 10)/severity
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index f615278d035..7336c8ef508 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -605,7 +605,7 @@
take_damage(damage)
-/obj/machinery/porta_turret/emp_act(severity)
+/obj/machinery/porta_turret/emp_act(severity, recursive)
if(enabled)
//if the turret is on, the EMP no matter how severe disables the turret for a while
//and scrambles its settings, with a slight chance of having an emag effect
@@ -624,12 +624,12 @@
..()
-/obj/machinery/porta_turret/ai_defense/emp_act(severity)
+/obj/machinery/porta_turret/ai_defense/emp_act(severity, recursive)
if(prob(33)) // One in three chance to resist an EMP. This is significant if an AoE EMP is involved against multiple turrets.
return
..()
-/obj/machinery/porta_turret/alien/emp_act(severity) // This is overrided to give an EMP resistance as well as avoid scambling the turret settings.
+/obj/machinery/porta_turret/alien/emp_act(severity, recursive) // This is overrided to give an EMP resistance as well as avoid scambling the turret settings.
if(prob(75)) // Superior alien technology, I guess.
return
enabled = FALSE
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 89d77f1607c..8ee26b5dad2 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -283,18 +283,6 @@ GLOBAL_LIST_INIT(recharger_battery_exempt, list(
return
-/obj/machinery/recharger/emp_act(severity)
- if(stat & (NOPOWER|BROKEN) || !anchored)
- ..(severity)
- return
-
- if(charging)
- var/obj/item/cell/C = charging.get_cell()
- if(istype(C))
- C.emp_act(severity)
-
- ..(severity)
-
/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
if(charging)
icon_state = icon_state_charging
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 467a1ecd9cd..858f4c3c5ea 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -156,14 +156,6 @@
go_out()
return
-/obj/machinery/recharge_station/emp_act(severity)
- if(occupant)
- occupant.emp_act(severity)
- go_out()
- if(cell)
- cell.emp_act(severity)
- ..(severity)
-
/obj/machinery/recharge_station/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(!occupant)
if(default_deconstruction_screwdriver(user, O))
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index a360455f3fc..ab0e7b86ac9 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -89,14 +89,6 @@
return 1
return 0
-/obj/machinery/space_heater/emp_act(severity)
- if(stat & (BROKEN|NOPOWER))
- ..(severity)
- return
- if(cell)
- cell.emp_act(severity)
- ..(severity)
-
/obj/machinery/space_heater/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/cell))
if(panel_open)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 7a17654cb36..0674566f167 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -77,12 +77,12 @@
return
update()
-/obj/machinery/status_display/emp_act(severity)
+/obj/machinery/status_display/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
set_picture("ai_bsod")
- ..(severity)
+ ..(severity, recursive)
// set what is displayed
/obj/machinery/status_display/proc/update()
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index 49d2ef47942..91dd6239a47 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -185,7 +185,7 @@
if(traffic > 0)
traffic -= netspeed
-/obj/machinery/telecomms/emp_act(severity)
+/obj/machinery/telecomms/emp_act(severity, recursive)
if(prob(100/severity))
if(!(stat & EMPED))
stat |= EMPED
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index 25d1bc0e178..f11067dedd8 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -226,7 +226,7 @@
icon_state = "control_standby"
set_light(1.5, 1,"#003300")
-/obj/machinery/turretid/emp_act(severity)
+/obj/machinery/turretid/emp_act(severity, recursive)
if(enabled)
//if the turret is on, the EMP no matter how severe disables the turret for a while
//and scrambles its settings, with a slight chance of having an emag effect
@@ -237,12 +237,12 @@
check_access = pick(0, 0, 0, 0, 1) // check_access is a pretty big deal, so it's least likely to get turned on
check_anomalies = pick(0, 1)
- enabled=0
+ enabled = FALSE
updateTurrets()
spawn(rand(60,600))
if(!enabled)
- enabled=1
+ enabled = TRUE
updateTurrets()
..()
diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm
index a687f8f0308..1c095b75b79 100644
--- a/code/game/machinery/virtual_reality/vr_console.dm
+++ b/code/game/machinery/virtual_reality/vr_console.dm
@@ -118,9 +118,9 @@
-/obj/machinery/vr_sleeper/emp_act(var/severity)
+/obj/machinery/vr_sleeper/emp_act(severity, recursive)
if(stat & (BROKEN|NOPOWER))
- ..(severity)
+ ..(severity, recursive)
return
if(occupant)
@@ -134,7 +134,7 @@
smoke.start("#202020")
perform_exit()
- ..(severity)
+ ..(severity, recursive)
/obj/machinery/vr_sleeper/verb/eject()
set src in view(1)
diff --git a/code/game/mecha/components/_component.dm b/code/game/mecha/components/_component.dm
index b561189830c..e44458c3f7b 100644
--- a/code/game/mecha/components/_component.dm
+++ b/code/game/mecha/components/_component.dm
@@ -55,7 +55,7 @@
// Damage code.
-/obj/item/mecha_parts/component/emp_act(var/severity = 4)
+/obj/item/mecha_parts/component/emp_act(severity = 4, recursive)
if(severity + emp_resistance > 4)
return
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 07b3c466583..1b966f02966 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1325,7 +1325,7 @@
return
*/
-/obj/mecha/emp_act(severity)
+/obj/mecha/emp_act(severity, recursive)
if(get_charge())
use_power((cell.charge/2)/severity)
take_damage(50 / severity,"energy")
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 8ab37b94fea..99b29b0642b 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -103,7 +103,7 @@
return data
-/obj/item/mecha_parts/mecha_tracking/emp_act()
+/obj/item/mecha_parts/mecha_tracking/emp_act(severity, recursive)
qdel(src)
return
diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm
index 7162e212607..bb851b890d6 100644
--- a/code/game/objects/items/devices/communicator/communicator.dm
+++ b/code/game/objects/items/devices/communicator/communicator.dm
@@ -147,10 +147,10 @@
else
. += span_notice("The device doesn't appear to be transmitting any data.")
-// Proc: emp_act()
+// Proc: emp_act(severity, recursive)
// Parameters: None
// Description: Drops all calls when EMPed, so the holder can then get murdered by the antagonist.
-/obj/item/communicator/emp_act()
+/obj/item/communicator/emp_act(severity, recursive)
close_connection(reason = "Hardware error de%#_^@%-BZZZZZZZT")
// Proc: add_to_EPv2()
diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm
index dd95e0c42a3..205ed84f077 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -512,7 +512,7 @@
update_icon()
return 1
-/obj/item/shockpaddles/emp_act(severity)
+/obj/item/shockpaddles/emp_act(severity, recursive)
var/new_safety = rand(0, 1)
if(safety != new_safety)
safety = new_safety
@@ -592,7 +592,7 @@
else
STOP_PROCESSING(SSobj, src)
-/obj/item/shockpaddles/standalone/emp_act(severity)
+/obj/item/shockpaddles/standalone/emp_act(severity, recursive)
..()
var/new_fail = 0
switch(severity)
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index a5a5f9262e3..9202c331d9b 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -276,7 +276,7 @@
return
-/obj/item/flash/emp_act(severity)
+/obj/item/flash/emp_act(severity, recursive)
if(broken) return
flash_recharge()
if(!check_capacitor())
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index e3bcda64a50..d69845e93ae 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -109,11 +109,6 @@
user.update_mob_action_buttons()
return 1
-/obj/item/flashlight/emp_act(severity)
- for(var/obj/O in contents)
- O.emp_act(severity)
- ..()
-
/obj/item/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
add_fingerprint(user)
if(on && user.zone_sel.selecting == O_EYES)
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index b8b4ed705b9..424b989b36c 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
update_holder()
update_icon()
-/obj/item/gps/emp_act(severity)
+/obj/item/gps/emp_act(severity, recursive)
if(emped) // Without a fancy callback system, this will have to do.
return
var/severity_modifier = severity ? severity : 4 // In case emp_act gets called without any arguments.
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 303c231bd95..909fb1c27a6 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -417,9 +417,9 @@
audible_message(span_notice("\The [src] flashes a message across its screen, \"Additional personalities available for download.\""), hearing_distance = world.view, runemessage = "bleeps!")
last_notify = world.time
-/obj/item/paicard/emp_act(severity)
+/obj/item/paicard/emp_act(severity, recursive)
for(var/mob/M in src)
- M.emp_act(severity)
+ M.emp_act(severity, recursive)
/obj/item/paicard/ex_act(severity)
if(pai)
diff --git a/code/game/objects/items/devices/personal_shield_generator_vr.dm b/code/game/objects/items/devices/personal_shield_generator_vr.dm
index 33a36363eca..5eee7bc1105 100644
--- a/code/game/objects/items/devices/personal_shield_generator_vr.dm
+++ b/code/game/objects/items/devices/personal_shield_generator_vr.dm
@@ -112,12 +112,12 @@
add_overlay("[initial(icon_state)]-nocell")
*/
-/obj/item/personal_shield_generator/emp_act(severity)
+/obj/item/personal_shield_generator/emp_act(severity, recursive)
if(bcell && shield_active)
switch(severity)
if(1) //Point blank EMP shots have a good chance of burning the cell charge.
if(prob(50))
- bcell.emp_act(severity)
+ bcell.emp_act(severity, recursive)
if(prob(5)) //1 in 20% chance to fry the battery completly, which has a 1/10 chance of making the battery explode on next use.
bcell.corrupt() //Not too bad if you slotted a battery in. Disasterous if it has a self-charging battery.
if(bcell.rigged) //Did the above just rig the cell? Turn it off. Don't immediately have it go boom. Instead have the cell blow soon-ish.
@@ -135,8 +135,8 @@
update_icon()
else
if(prob(25))
- bcell.emp_act(severity)
- ..()
+ bcell.emp_act(severity, recursive)
+ //Intentionally not calling ..() here, as we have special cell handling.
/obj/item/personal_shield_generator/ui_action_click(mob/user, actiontype)
toggle_shield()
@@ -431,14 +431,6 @@
return 0
return 1
-// TODO: EMP ACT
-// The cell already gets hit and can have some nasty effects when EMP'd, so this isn't too much of a concern.
-
-/*
-/obj/item/gun/energy/gun/generator/emp_act(severity)
- ..()
-*/
-
/obj/item/gun/energy/gun/generator/dropped(mob/user)
..() //update twohanding
if(shield_generator)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 389e5537798..1765e7a650e 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -601,9 +601,9 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer)
return
else return
-/obj/item/radio/emp_act(severity)
- broadcasting = 0
- listening = 0
+/obj/item/radio/emp_act(severity, recursive)
+ broadcasting = FALSE
+ listening = FALSE
for (var/ch_name in channels)
channels[ch_name] = 0
..()
diff --git a/code/game/objects/items/stacks/matter_synth.dm b/code/game/objects/items/stacks/matter_synth.dm
index 66a42ccb735..3a4842c75f8 100644
--- a/code/game/objects/items/stacks/matter_synth.dm
+++ b/code/game/objects/items/stacks/matter_synth.dm
@@ -22,7 +22,7 @@
/datum/matter_synth/proc/add_charge(var/amount)
energy = min(energy + amount, max_energy)
-/datum/matter_synth/proc/emp_act(var/severity)
+/datum/matter_synth/proc/emp_act(severity, recursive)
use_charge(max_energy * 0.1 / severity)
/datum/matter_synth/medicine
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 848f2a0a5a8..14ddf317b8f 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -154,7 +154,7 @@ circuitry. As a result neurotoxins can cause massive damage.
Implant Specifics:
"}
return dat
-/obj/item/implant/tracking/emp_act(severity)
+/obj/item/implant/tracking/emp_act(severity, recursive)
if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning
return
malfunction = MALFUNCTION_TEMPORARY
@@ -294,7 +294,7 @@ Implant Specifics:
"}
usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0)
to_chat(usr, "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.")
-/obj/item/implant/explosive/emp_act(severity)
+/obj/item/implant/explosive/emp_act(severity, recursive)
if (malfunction)
return
malfunction = MALFUNCTION_TEMPORARY
@@ -398,7 +398,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
qdel(src)
return
-/obj/item/implant/chem/emp_act(severity)
+/obj/item/implant/chem/emp_act(severity, recursive)
if (malfunction)
return
malfunction = MALFUNCTION_TEMPORARY
@@ -557,7 +557,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
qdel(a)
STOP_PROCESSING(SSobj, src)
-/obj/item/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this
+/obj/item/implant/death_alarm/emp_act(severity, recursive) //for some reason alarms stop going off in case they are emp'd, even without this
if (malfunction) //so I'm just going to add a meltdown chance here
return
malfunction = MALFUNCTION_TEMPORARY
diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm
index f74043d79ee..874a9042edd 100644
--- a/code/game/objects/items/weapons/implants/implant_vr.dm
+++ b/code/game/objects/items/weapons/implants/implant_vr.dm
@@ -112,7 +112,7 @@
owner = user
-/obj/item/implant/sizecontrol/emp_act(severity)
+/obj/item/implant/sizecontrol/emp_act(severity, recursive)
if(isliving(imp_in))
var/newsize = pick(RESIZE_HUGE,RESIZE_BIG,RESIZE_NORMAL,RESIZE_SMALL,RESIZE_TINY,RESIZE_A_HUGEBIG,RESIZE_A_BIGNORMAL,RESIZE_A_NORMALSMALL,RESIZE_A_SMALLTINY)
var/mob/living/H = imp_in
diff --git a/code/game/objects/items/weapons/implants/implantcircuits.dm b/code/game/objects/items/weapons/implants/implantcircuits.dm
index 199adf9f6d8..4cdf8b497d7 100644
--- a/code/game/objects/items/weapons/implants/implantcircuits.dm
+++ b/code/game/objects/items/weapons/implants/implantcircuits.dm
@@ -32,8 +32,8 @@
Integrity: Implant is not shielded from electromagnetic interference, otherwise it is independent of subject's status."}
return dat
-/obj/item/implant/integrated_circuit/emp_act(severity)
- IC.emp_act(severity)
+/obj/item/implant/integrated_circuit/emp_act(severity, recursive)
+ IC.emp_act(severity, recursive)
/obj/item/implant/integrated_circuit/examine(mob/user)
. = ..()
diff --git a/code/game/objects/items/weapons/implants/neuralbasic.dm b/code/game/objects/items/weapons/implants/neuralbasic.dm
index 296784adbfd..dfcdab01fe9 100644
--- a/code/game/objects/items/weapons/implants/neuralbasic.dm
+++ b/code/game/objects/items/weapons/implants/neuralbasic.dm
@@ -50,7 +50,7 @@ circuitry. Resulting faults can cause damage to the host's brain.
Implant Specifics:
"}
return dat
-/obj/item/implant/neural/emp_act(severity)
+/obj/item/implant/neural/emp_act(severity, recursive)
if(!my_brain)
return
if(malfunction) //Don't malfunction while malfunctioning.
diff --git a/code/game/objects/items/weapons/inducer_vr.dm b/code/game/objects/items/weapons/inducer_vr.dm
index 842c785a479..73f58a67063 100644
--- a/code/game/objects/items/weapons/inducer_vr.dm
+++ b/code/game/objects/items/weapons/inducer_vr.dm
@@ -38,11 +38,6 @@
/obj/item/inducer/get_cell()
return cell
-/obj/item/inducer/emp_act(severity)
- . = ..()
- if(cell)
- cell.emp_act(severity)
-
/obj/item/inducer/attack(mob/living/M, mob/living/user)
if(user.a_intent == I_HURT)
return ..()
diff --git a/code/game/objects/items/weapons/melee/shock_maul.dm b/code/game/objects/items/weapons/melee/shock_maul.dm
index 85dbd4e4e91..88ceca36c42 100644
--- a/code/game/objects/items/weapons/melee/shock_maul.dm
+++ b/code/game/objects/items/weapons/melee/shock_maul.dm
@@ -256,11 +256,9 @@
update_held_icon()
powercheck(hitcost)
-/obj/item/melee/shock_maul/emp_act(severity)
- if(bcell)
- bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please.
+/obj/item/melee/shock_maul/emp_act(severity, recursive)
if(status)
- status = 0
+ status = FALSE
visible_message(span_warning("\The [src]'s power field hisses and sputters out."))
update_held_icon()
..()
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 573c02d5439..0bacc016755 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -696,12 +696,6 @@
total_storage_space += I.get_storage_cost()
max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents.
-/obj/item/storage/emp_act(severity)
- if(!isliving(src.loc))
- for(var/obj/O in contents)
- O.emp_act(severity)
- ..()
-
/obj/item/storage/attack_self(mob/user as mob)
if((user.get_active_hand() == src) || (isrobot(user)) && allow_quick_empty)
if(src.verbs.Find(/obj/item/storage/verb/quick_empty))
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 58d1ffcad6e..f4dd4f285ec 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -125,7 +125,7 @@
if(new_color && (new_color != color))
color = new_color
-/obj/item/storage/wallet/poly/emp_act()
+/obj/item/storage/wallet/poly/emp_act(severity, recursive)
var/original_state = icon_state
icon_state = "wallet-emp"
update_icon()
@@ -134,6 +134,7 @@
if(src)
icon_state = original_state
update_icon()
+ ..()
/obj/item/storage/wallet/womens
name = "women's wallet"
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 041e4662b48..a1f78a668f7 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -213,11 +213,6 @@
H.forcesay(GLOB.hit_appends)
powercheck()
-/obj/item/melee/baton/emp_act(severity)
- if(bcell)
- bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please.
- ..()
-
//Makeshift stun baton. Replacement for stun gloves.
/obj/item/melee/baton/cattleprod
name = "stunprod"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index caa5e47744c..4c43523ae87 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -18,9 +18,7 @@
return 0
return ..()
-/obj/structure/closet/secure_closet/emp_act(severity)
- for(var/obj/O in src)
- O.emp_act(severity)
+/obj/structure/closet/secure_closet/emp_act(severity, recursive)
if(!broken)
if(prob(50/severity))
locked = !locked
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index c061b28f260..844e9fc45f4 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -223,15 +223,13 @@
update_icon()
return 1
-/obj/structure/closet/crate/secure/emp_act(severity)
- for(var/obj/O in src)
- O.emp_act(severity)
+/obj/structure/closet/crate/secure/emp_act(severity, recursive)
if(!broken && !opened && prob(50/severity))
if(!locked)
- locked = 1
+ locked = TRUE
else
playsound(src, 'sound/effects/sparks4.ogg', 75, 1)
- locked = 0
+ locked = FALSE
if(!opened && prob(20/severity))
if(!locked)
open()
diff --git a/code/modules/blob2/blobs/base_blob.dm b/code/modules/blob2/blobs/base_blob.dm
index 4a42a78d175..2394d314858 100644
--- a/code/modules/blob2/blobs/base_blob.dm
+++ b/code/modules/blob2/blobs/base_blob.dm
@@ -81,7 +81,7 @@ GLOBAL_LIST_EMPTY(all_blobs)
return overmind.blob_type.effect_desc
return ..()
-/obj/structure/blob/emp_act(severity)
+/obj/structure/blob/emp_act(severity, recursive)
if(overmind)
overmind.blob_type.on_emp(src, severity)
diff --git a/code/modules/clothing/accessories/holster.dm b/code/modules/clothing/accessories/holster.dm
index 8face57dfd7..5bdbc8fd0f1 100644
--- a/code/modules/clothing/accessories/holster.dm
+++ b/code/modules/clothing/accessories/holster.dm
@@ -80,11 +80,6 @@
/obj/item/clothing/accessory/holster/attackby(obj/item/W as obj, mob/user as mob)
holster(W, user)
-/obj/item/clothing/accessory/holster/emp_act(severity)
- if (holstered)
- holstered.emp_act(severity)
- ..()
-
/obj/item/clothing/accessory/holster/examine(mob/user)
. = ..(user)
if(holstered)
diff --git a/code/modules/clothing/accessories/storage.dm b/code/modules/clothing/accessories/storage.dm
index 3386963d0cf..be26aee9369 100644
--- a/code/modules/clothing/accessories/storage.dm
+++ b/code/modules/clothing/accessories/storage.dm
@@ -37,10 +37,6 @@
/obj/item/clothing/accessory/storage/attackby(obj/item/W, mob/user)
return hold.attackby(W, user)
-/obj/item/clothing/accessory/storage/emp_act(severity)
- hold.emp_act(severity)
- ..()
-
/obj/item/clothing/accessory/storage/attack_self(mob/user)
to_chat(user, span_notice("You empty [src]."))
var/turf/T = get_turf(src)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 13689e047ba..40edd58bd99 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -48,13 +48,14 @@
var/blocked = list(src.type, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits.
GLOB.chamelion_jumpsuit_choices = generate_chameleon_choices(/obj/item/clothing/under, blocked)
-/obj/item/clothing/under/chameleon/emp_act(severity)
+/obj/item/clothing/under/chameleon/emp_act(severity, recursive)
name = "psychedelic"
desc = "Groovy!"
icon_state = "psyche"
LAZYSET(item_state_slots, slot_w_uniform_str, "psyche")
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/under/chameleon/verb/change(picked in GLOB.chamelion_jumpsuit_choices)
set name = "Change Jumpsuit Appearance"
@@ -84,12 +85,13 @@
var/blocked = list(src.type)//Prevent infinite loops and bad hats.
GLOB.chamelion_head_choices = generate_chameleon_choices(/obj/item/clothing/head, blocked)
-/obj/item/clothing/head/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/head/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "grey cap"
desc = "It's a baseball hat in a tasteful grey colour."
icon_state = "greysoft"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/head/chameleon/verb/change(picked in GLOB.chamelion_head_choices)
set name = "Change Hat/Helmet Appearance"
@@ -118,12 +120,13 @@
var/blocked = list(src.type, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, /obj/item/clothing/suit/greatcoat)
GLOB.chamelion_suit_choices = generate_chameleon_choices(/obj/item/clothing/suit, blocked)
-/obj/item/clothing/suit/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/suit/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "armor"
desc = "An armored vest that protects against some damage."
icon_state = "armor"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/suit/chameleon/verb/change(picked in GLOB.chamelion_suit_choices)
set name = "Change Oversuit Appearance"
@@ -151,12 +154,13 @@
var/blocked = list(src.type, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes.
GLOB.chamelion_shoe_choices = generate_chameleon_choices(/obj/item/clothing/shoes, blocked)
-/obj/item/clothing/shoes/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/shoes/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "black shoes"
desc = "A pair of black shoes."
icon_state = "black"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/shoes/chameleon/verb/change(picked in GLOB.chamelion_shoe_choices)
set name = "Change Footwear Appearance"
@@ -184,7 +188,7 @@
var/blocked = list(src.type, /obj/item/storage/backpack/satchel/withwallet)
GLOB.chamelion_back_choices = generate_chameleon_choices(/obj/item/storage/backpack, blocked)
-/obj/item/storage/backpack/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/storage/backpack/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "backpack"
desc = "You wear this on your back and put items into it."
icon_state = "backpack"
@@ -192,6 +196,7 @@
if (ismob(src.loc))
var/mob/M = src.loc
M.update_inv_back()
+ ..()
/obj/item/storage/backpack/chameleon/verb/change(picked in GLOB.chamelion_back_choices)
set name = "Change Backpack Appearance"
@@ -235,12 +240,13 @@
if(!GLOB.chamelion_glove_choices)
GLOB.chamelion_glove_choices = generate_chameleon_choices(/obj/item/clothing/gloves, list(src.type))
-/obj/item/clothing/gloves/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/gloves/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "black gloves"
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
icon_state = "black"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/gloves/chameleon/verb/change(picked in GLOB.chamelion_glove_choices)
set name = "Change Gloves Appearance"
@@ -268,12 +274,13 @@
if(!GLOB.chamelion_mask_choices)
GLOB.chamelion_mask_choices = generate_chameleon_choices(/obj/item/clothing/mask, list(src.type))
-/obj/item/clothing/mask/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/mask/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "gas mask"
desc = "It's a gas mask."
icon_state = "gas_old"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/mask/chameleon/verb/change(picked in GLOB.chamelion_mask_choices)
set name = "Change Mask Appearance"
@@ -303,12 +310,13 @@
if(!clothing_choices)
clothing_choices = generate_chameleon_choices(/obj/item/clothing/glasses, list(src.type))
-/obj/item/clothing/glasses/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/glasses/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "Optical Meson Scanner"
desc = "It's a set of mesons."
icon_state = "meson"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/glasses/chameleon/verb/change(picked in clothing_choices)
set name = "Change Glasses Appearance"
@@ -336,7 +344,7 @@
if(!GLOB.chamelion_belt_choices)
GLOB.chamelion_belt_choices = generate_chameleon_choices(/obj/item/storage/belt, list(src.type))
-/obj/item/storage/belt/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/storage/belt/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "belt"
desc = "Can hold various things."
icon_state = "utilitybelt"
@@ -344,6 +352,7 @@
if(ismob(src.loc))
var/mob/M = src.loc
M.update_inv_belt()
+ ..()
/obj/item/storage/belt/chameleon/verb/change(picked in GLOB.chamelion_belt_choices)
set name = "Change Belt Appearance"
@@ -376,12 +385,13 @@
var/blocked = list(src.type, /obj/item/clothing/accessory/storage)
GLOB.chamelion_accessory_choices = generate_chameleon_choices(/obj/item/clothing/accessory, blocked)
-/obj/item/clothing/accessory/chameleon/emp_act(severity) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
+/obj/item/clothing/accessory/chameleon/emp_act(severity, recursive) //Because we don't have psych for all slots right now but still want a downside to EMP. In this case your cover's blown.
name = "black tie"
desc = "Looks like a black tie, but his one also has a dial inside."
icon_state = "blacktie"
update_icon()
update_clothing_icon()
+ ..()
/obj/item/clothing/accessory/chameleon/verb/change(picked in GLOB.chamelion_accessory_choices)
set name = "Change Accessory Appearance"
@@ -436,7 +446,7 @@
P.impact_type = initial(copy_projectile.impact_type)
return P
-/obj/item/gun/energy/chameleon/emp_act(severity)
+/obj/item/gun/energy/chameleon/emp_act(severity, recursive)
name = "desert eagle"
desc = "It's a desert eagle."
icon_state = "deagle"
@@ -445,6 +455,7 @@
var/mob/M = src.loc
M.update_inv_r_hand()
M.update_inv_l_hand()
+ ..()
/obj/item/gun/energy/chameleon/disguise(var/newtype)
var/obj/item/gun/copy = ..()
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index b3f0561ca39..d22c419ae63 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -338,13 +338,6 @@
var/mob/M = src.loc
M.update_inv_gloves()
-/obj/item/clothing/gloves/emp_act(severity)
- if(cell)
- cell.emp_act(severity)
- if(ring)
- ring.emp_act(severity)
- ..()
-
// Called just before an attack_hand(), in mob/UnarmedAttack()
/obj/item/clothing/gloves/proc/Touch(var/atom/A, var/proximity)
return 0 // return 1 to cancel attack_hand()
diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm
index a0f437d563f..3c85875f142 100644
--- a/code/modules/clothing/clothing_accessories.dm
+++ b/code/modules/clothing/clothing_accessories.dm
@@ -144,9 +144,3 @@
if(!LAZYLEN(accessories))
src.verbs -= /obj/item/clothing/proc/removetie_verb
accessories = null
-
-/obj/item/clothing/emp_act(severity)
- if(LAZYLEN(accessories))
- for(var/obj/item/clothing/accessory/A in accessories)
- A.emp_act(severity)
- ..()
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index bc3de42bbed..94d66d1ec53 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -545,7 +545,7 @@ BLIND // can't see anything
enables_planes = list(VIS_FULLBRIGHT, VIS_CLOAKED)
flash_protection = FLASH_PROTECTION_REDUCED
-/obj/item/clothing/glasses/thermal/emp_act(severity)
+/obj/item/clothing/glasses/thermal/emp_act(severity, recursive)
if(ishuman(src.loc))
var/mob/living/carbon/human/M = src.loc
to_chat(M, span_red("The Optical Thermal Scanner overloads and blinds you!"))
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index 522752fd866..bd894f701ff 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -98,13 +98,12 @@
. += "\n " + span_notice("The HUD indicator reads OFF.")
-/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
+/obj/item/clothing/glasses/omnihud/emp_act(severity, recursive)
if(tgarscreen)
SStgui.close_uis(src)
var/disconnect_tgar = tgarscreen
tgarscreen = null
- spawn(20 SECONDS)
- tgarscreen = disconnect_tgar
+ VARSET_IN(src, tgarscreen, disconnect_tgar, 20 SECONDS)
//extra fun for non-sci variants; a small chance flip the state to the dumb 3d glasses when EMP'd
if(icon_state == "glasses" || icon_state == "sun")
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 334c01d54d7..83a08569a59 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -817,18 +817,18 @@
/obj/item/rig/proc/malfunction()
return 0
-/obj/item/rig/emp_act(severity_class)
+/obj/item/rig/emp_act(severity, recursive)
//set malfunctioning
if(emp_protection < 30) //for ninjas, really.
malfunctioning += 10
if(malfunction_delay <= 0)
- malfunction_delay = max(malfunction_delay, round(30/severity_class))
+ malfunction_delay = max(malfunction_delay, round(30/severity))
//drain some charge
- if(cell) cell.emp_act(severity_class + 15)
+ if(cell) cell.emp_act(severity + 15)
//possibly damage some modules
- take_hit((100/severity_class), "electrical pulse", 1)
+ take_hit((100/severity), "electrical pulse", 1)
/obj/item/rig/proc/shock(mob/user)
if (electrocute_mob(user, cell, src)) //electrocute_mob() handles removing charge from the cell, no need to do that here.
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 6d2f530d05e..636e2f4495f 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -207,8 +207,8 @@
add_fingerprint(user)
return
-/obj/item/clothing/suit/armor/reactive/emp_act(severity)
- active = 0
+/obj/item/clothing/suit/armor/reactive/emp_act(severity, recursive)
+ active = FALSE
icon_state = "reactiveoff"
..()
diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm
index 5c4d3f597be..b7eb8888a0f 100644
--- a/code/modules/clothing/suits/storage.dm
+++ b/code/modules/clothing/suits/storage.dm
@@ -24,10 +24,6 @@
..()
pockets.attackby(W, user)
-/obj/item/clothing/suit/storage/emp_act(severity)
- pockets.emp_act(severity)
- ..()
-
//Jackets with buttons, used for labcoats, IA jackets, First Responder jackets, and brown jackets.
/obj/item/clothing/suit/storage/toggle
name = DEVELOPER_WARNING_NAME
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 152eb94577c..fe870e906b1 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -443,11 +443,6 @@
else
return ..()
-/obj/item/electronic_assembly/emp_act(severity)
- ..()
- for(var/atom/movable/AM in contents)
- AM.emp_act(severity)
-
// Returns true if power was successfully drawn.
/obj/item/electronic_assembly/proc/draw_power(amount)
if(battery)
diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm
index 58ef7b23bb5..3f60371998b 100644
--- a/code/modules/integrated_electronics/core/assemblies/clothing.dm
+++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm
@@ -38,11 +38,6 @@
var/obj/item/electronic_assembly/clothing/IC = null
var/obj/item/integrated_circuit/built_in/action_button/action_circuit = null // This gets pulsed when someone clicks the button on the hud.
-/obj/item/clothing/emp_act(severity)
- if(IC)
- IC.emp_act(severity)
- ..()
-
/obj/item/clothing/examine(mob/user)
. = ..()
if(IC)
diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm
index 75721a2f965..b326195c3f2 100644
--- a/code/modules/integrated_electronics/core/integrated_circuit.dm
+++ b/code/modules/integrated_electronics/core/integrated_circuit.dm
@@ -52,7 +52,7 @@ a creative player the means to solve many problems. Circuits are held inside an
qdel(A)
. = ..()
-/obj/item/integrated_circuit/emp_act(severity)
+/obj/item/integrated_circuit/emp_act(severity, recursive)
for(var/datum/integrated_io/io in inputs + outputs + activators)
io.scramble()
diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm
index d21faa7740a..14286442d26 100644
--- a/code/modules/integrated_electronics/subtypes/memory.dm
+++ b/code/modules/integrated_electronics/subtypes/memory.dm
@@ -86,7 +86,7 @@
var/datum/integrated_io/O = outputs[1]
O.push_data()
-/obj/item/integrated_circuit/memory/constant/emp_act(severity)
+/obj/item/integrated_circuit/memory/constant/emp_act(severity, recursive)
// Prevents default EMP behavior for single-slot constants memory.
return
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 23f463b4bcf..020e2d2a36f 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -164,7 +164,7 @@
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio. Wait, don't they all?"
origin_tech = list(TECH_BIO = 4)
-/obj/item/mmi/emp_act(severity)
+/obj/item/mmi/emp_act(severity, recursive)
if(!brainmob)
return
else
@@ -218,21 +218,6 @@
else
. += span_deadsay("It appears to be completely inactive.")
-/obj/item/mmi/digital/emp_act(severity)
- if(!src.brainmob)
- return
- else
- switch(severity)
- if(1)
- src.brainmob.emp_damage += rand(20,30)
- if(2)
- src.brainmob.emp_damage += rand(10,20)
- if(3)
- src.brainmob.emp_damage += rand(5,10)
- if(4)
- src.brainmob.emp_damage += rand(0,5)
- ..()
-
/obj/item/mmi/digital/transfer_identity(var/mob/living/carbon/H)
QDEL_SWAP(brainmob.dna, H.dna.Clone())
brainmob.timeofhostdeath = H.timeofdeath
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index bf8730f585d..457ea32f2b0 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -28,7 +28,7 @@
qdel(dna)
return ..()
-/mob/living/carbon/brain/emp_act(severity) //Brains can't be EMP'd...
+/mob/living/carbon/brain/emp_act(severity, recursive) //Brains can't be EMP'd...
return
/mob/living/carbon/brain/say_understands(var/other)//Goddamn is this hackish, but this say code is so odd
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 8d48176be5f..ac5337dcf18 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -85,7 +85,7 @@
M.show_message(span_blue("The positronic brain buzzes and beeps, and the golden lights fade away. Perhaps you could try again?"))
playsound(src, 'sound/misc/buzzbeep.ogg', 50, 1)
-/obj/item/mmi/digital/posibrain/emp_act(severity)
+/obj/item/mmi/digital/posibrain/emp_act(severity, recursive)
if(!src.brainmob)
return
else
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 82a4bf51076..7d15d6ef0ef 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -79,7 +79,7 @@
//the species' emp_sensitivity var needs to be greater than 0 for this to proc, and it defaults to 0 - shouldn't stack with prosthetics/fbps in most cases
//higher sensitivity values incur additional effects, starting with confusion/blinding/knockdown and ending with increasing amounts of damage
//the degree of damage and duration of effects can be tweaked up or down based on the species emp_dmg_mod and emp_stun_mod vars (default 1) on top of tuning the random ranges
-/mob/living/carbon/emp_act(severity)
+/mob/living/carbon/emp_act(severity, recursive)
//pregen our stunning stuff, had to do this seperately or else byond complained. remember that severity falls off with distance based on the source, so we don't need to do any extra distance calcs here.
var/agony_str = ((rand(4,6)*15)-(15*severity))*species.emp_stun_mod //big ouchies at high severity, causes 0-75 halloss/agony; shotgun beanbags and revolver rubbers do 60
var/deafen_dur = (rand(9,16)-severity)*species.emp_stun_mod //5-15 deafen, on par with a flashbang
diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm
index e105d4371e6..89c32ec7d64 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm
@@ -295,9 +295,9 @@
else
return ..()
-/mob/living/simple_mob/protean_blob/emp_act(severity)
+/mob/living/simple_mob/protean_blob/emp_act(severity, recursive)
if(humanform)
- return humanform.emp_act(severity)
+ return humanform.emp_act(severity, recursive)
else
return ..()
diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm
index f3cc21df866..55f31d70d76 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm
@@ -419,7 +419,7 @@
/obj/item/rig/protean/take_hit(damage, source, is_emp=0)
return //We don't do that here
-/obj/item/rig/protean/emp_act(severity_class)
+/obj/item/rig/protean/emp_act(severity, recursive)
return //Same here
/obj/item/rig/protean/cut_suit()
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 23b4a8aedc8..90c3e53ed27 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -148,8 +148,7 @@
/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
return 0 //only carbon liveforms have this proc
-/mob/living/emp_act(severity)
- var/list/L = src.get_contents()
+/mob/living/emp_act(severity, recursive)
if(LAZYLEN(modifiers))
for(var/datum/modifier/M in modifiers)
@@ -158,9 +157,6 @@
if(severity == 5) // Effectively nullified.
return
-
- for(var/obj/O in L)
- O.emp_act(severity)
..()
/mob/living/blob_act(var/obj/structure/blob/B)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index db92c2dc6dd..ff92d847fc4 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -447,7 +447,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/restrained()
return 0
-/mob/living/silicon/ai/emp_act(severity)
+/mob/living/silicon/ai/emp_act(severity, recursive)
disconnect_shell("Disconnected from remote shell due to ionic interfe%*@$^___")
if (prob(30))
view_core()
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 354bce3d561..e949a598920 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -135,7 +135,7 @@
return 0
..()
-/mob/living/silicon/pai/emp_act(severity)
+/mob/living/silicon/pai/emp_act(severity, recursive)
// Silence for 2 minutes
// 20% chance to damage critical components
// 50% chance to damage a non critical component
diff --git a/code/modules/mob/living/silicon/robot/drone/swarm_items.dm b/code/modules/mob/living/silicon/robot/drone/swarm_items.dm
index b551e0380e7..b748802f5e2 100644
--- a/code/modules/mob/living/silicon/robot/drone/swarm_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/swarm_items.dm
@@ -123,7 +123,7 @@
pulses_remaining = 5
pulse_delay = 2 SECONDS
-/obj/effect/temporary_effect/pulse/disintegrate/emp_act()
+/obj/effect/temporary_effect/pulse/disintegrate/emp_act(severity, recursive)
visible_message(span_warning("\The [src] flickers, before dispersing energetically."))
qdel(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm
index 4085d4b5353..dd229f478ef 100644
--- a/code/modules/mob/living/silicon/robot/robot_damage.dm
+++ b/code/modules/mob/living/silicon/robot/robot_damage.dm
@@ -156,7 +156,7 @@
parts -= picked
-/mob/living/silicon/robot/emp_act(severity)
+/mob/living/silicon/robot/emp_act(severity, recursive)
if(SEND_SIGNAL(src, COMSIG_ROBOT_EMP_ACT, severity) & COMPONENT_BLOCK_EMP)
return // Cancelled by a component
uneq_all()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index 5da5a7b40f5..85cb519cd3b 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -88,17 +88,16 @@
QDEL_LIST(synths)
return ..()
-/obj/item/robot_module/emp_act(severity)
+/obj/item/robot_module/emp_act(severity, recursive)
if(modules)
for(var/obj/O in modules)
- O.emp_act(severity)
+ O.emp_act(severity, recursive)
if(emag)
for(var/obj/O in emag)
- O.emp_act(severity)
+ O.emp_act(severity, recursive)
if(synths)
for(var/datum/matter_synth/S in synths)
- S.emp_act(severity)
- ..()
+ S.emp_act(severity, recursive)
return
/obj/item/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 34c01e71cf4..2846ba55cd1 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -71,7 +71,7 @@
/mob/living/silicon/drop_item(var/atom/Target)
return
-/mob/living/silicon/emp_act(severity)
+/mob/living/silicon/emp_act(severity, recursive)
if(SEND_SIGNAL(src, COMSIG_SILICON_EMP_ACT, severity) & COMPONENT_BLOCK_EMP)
return
switch(severity)
diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm
index 949d7a82523..d5348200448 100644
--- a/code/modules/mob/living/simple_mob/defense.dm
+++ b/code/modules/mob/living/simple_mob/defense.dm
@@ -231,7 +231,7 @@
// Electromagnetism
-/mob/living/simple_mob/emp_act(severity)
+/mob/living/simple_mob/emp_act(severity, recursive)
..() // To emp_act() its contents.
if(!isSynthetic())
return
diff --git a/code/modules/modular_computers/computers/modular_computer/damage.dm b/code/modules/modular_computers/computers/modular_computer/damage.dm
index 0db2e969f3d..8ff1560888c 100644
--- a/code/modules/modular_computers/computers/modular_computer/damage.dm
+++ b/code/modules/modular_computers/computers/modular_computer/damage.dm
@@ -39,7 +39,7 @@
take_damage(rand(100,200) / severity, 30 / severity)
// EMPs are similar to explosions, but don't cause physical damage to the casing. Instead they screw up the components
-/obj/item/modular_computer/emp_act(var/severity)
+/obj/item/modular_computer/emp_act(severity, recursive)
take_damage(rand(100,200) / severity, 50 / severity, 0)
// "Stun" weapons can cause minor damage to components (short-circuits?)
diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm
index 7fde532642a..edabb705a8b 100644
--- a/code/modules/nifsoft/nif.dm
+++ b/code/modules/nifsoft/nif.dm
@@ -184,7 +184,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable
update_icon()
//EMP adds wear and disables all nifsoft
-/obj/item/nif/emp_act(var/severity)
+/obj/item/nif/emp_act(severity, recursive)
notify("Danger! Significant electromagnetic interference!",TRUE)
for(var/nifsoft in nifsofts)
if(nifsoft)
diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm
index 2a2dc5d81f8..a88b58deb79 100644
--- a/code/modules/organs/internal/eyes.dm
+++ b/code/modules/organs/internal/eyes.dm
@@ -106,7 +106,7 @@
/obj/item/organ/internal/eyes/proc/additional_flash_effects(var/intensity)
return -1
-/obj/item/organ/internal/eyes/emp_act(severity)
- if(robotic >= ORGAN_ASSISTED)
- return
- owner.eye_blurry += (4/severity)
+/obj/item/organ/internal/eyes/emp_act(severity, recursive)
+ ..()
+ if(owner && robotic)
+ owner.eye_blurry += (4/severity)
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 140afe92bfe..3184d47556c 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -370,9 +370,9 @@ var/list/organ_cache = list()
/obj/item/organ/proc/digitize() //Used to make the circuit-brain. On this level in the event more circuit-organs are added/tweaks are wanted.
robotize()
-/obj/item/organ/emp_act(severity)
+/obj/item/organ/emp_act(severity, recursive)
for(var/obj/O as anything in src.contents)
- O.emp_act(severity)
+ O.emp_act(severity, recursive)
if(!(robotic >= ORGAN_ASSISTED))
return
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 3696e2cad49..ee55a340ec8 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -126,9 +126,9 @@
return ..()
-/obj/item/organ/external/emp_act(severity)
+/obj/item/organ/external/emp_act(severity, recursive)
for(var/obj/O as anything in src.contents)
- O.emp_act(severity)
+ O.emp_act(severity, recursive)
if(!(robotic >= ORGAN_ROBOT))
return
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
index 9a4042efcfc..66f3b6fa2dd 100644
--- a/code/modules/organs/subtypes/machine.dm
+++ b/code/modules/organs/subtypes/machine.dm
@@ -18,7 +18,7 @@
owner.set_stat(CONSCIOUS)
owner.visible_message(span_danger("\The [owner] twitches visibly!"))
-/obj/item/organ/internal/cell/emp_act(severity)
+/obj/item/organ/internal/cell/emp_act(severity, recursive)
..()
owner.adjust_nutrition(-rand(10 / severity, 50 / severity))
@@ -110,9 +110,8 @@
holder_mob.drop_from_inventory(src)
qdel(src)
-/obj/item/organ/internal/mmi_holder/emp_act(severity)
- // ..() // VOREStation Edit - Don't take damage
- owner?.adjustToxLoss(rand(6/severity, 12/severity))
+/obj/item/organ/internal/mmi_holder/emp_act(severity, recursive)
+ stored_mmi.emp_act(severity, recursive)
/obj/item/organ/internal/mmi_holder/posibrain
name = "positronic brain interface"
diff --git a/code/modules/organs/subtypes/nano.dm b/code/modules/organs/subtypes/nano.dm
index 250ae6199b7..c3f28c720f1 100644
--- a/code/modules/organs/subtypes/nano.dm
+++ b/code/modules/organs/subtypes/nano.dm
@@ -185,7 +185,7 @@
stored_mmi.icon_state = "posi1"
stored_mmi.brainmob.languages = owner.languages
-/obj/item/organ/internal/mmi_holder/posibrain/nano/emp_act()
+/obj/item/organ/internal/mmi_holder/posibrain/nano/emp_act(severity, recursive)
return //Proteans handle EMP's differently
// The 'out on the ground' object, not the organ holder
diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm
index b752f55a9d8..5b372f14db5 100644
--- a/code/modules/overmap/ships/computers/sensors.dm
+++ b/code/modules/overmap/ships/computers/sensors.dm
@@ -234,7 +234,7 @@
range = nrange
change_power_consumption(1500 * (range**2), USE_POWER_IDLE) //Exponential increase, also affects speed of overheating
-/obj/machinery/shipsensors/emp_act(severity)
+/obj/machinery/shipsensors/emp_act(severity, recursive)
if(!use_power)
return
take_damage(20/severity)
diff --git a/code/modules/pda/cart_vr.dm b/code/modules/pda/cart_vr.dm
index 065775c364c..fd42bde4a15 100644
--- a/code/modules/pda/cart_vr.dm
+++ b/code/modules/pda/cart_vr.dm
@@ -52,10 +52,6 @@
hold.remove_from_storage(I, T)
add_fingerprint(user)
-/obj/item/cartridge/storage/emp_act(severity)
- hold.emp_act(severity)
- ..()
-
/obj/item/cartridge/storage/deluxe
name = "\improper BLU-PAK DELUXE cartridge"
programs = list(
diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm
index 4ee3eaf470f..2394583104d 100644
--- a/code/modules/pda/pda.dm
+++ b/code/modules/pda/pda.dm
@@ -499,8 +499,3 @@
/obj/item/cartridge/signal/science,
/obj/item/cartridge/quartermaster)
new newcart(src)
-
-// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
-/obj/item/pda/emp_act(severity)
- for(var/atom/A in src)
- A.emp_act(severity)
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index 13c3da89220..193492c185e 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -82,7 +82,7 @@
return
-/obj/machinery/power/am_control_unit/emp_act(severity)
+/obj/machinery/power/am_control_unit/emp_act(severity, recursive)
switch(severity)
if(1)
if(active) toggle_power()
@@ -97,7 +97,7 @@
if(active) toggle_power()
stability -= rand(5,10)
..()
- return 0
+ return FALSE
/obj/machinery/power/am_control_unit/ex_act(severity)
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 08d361286ed..462863bf2d8 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -88,8 +88,8 @@
return
-/obj/machinery/am_shielding/emp_act()//Immune due to not really much in the way of electronics.
- return 0
+/obj/machinery/am_shielding/emp_act(severity, recursive)//Immune due to not really much in the way of electronics.
+ return FALSE
/obj/machinery/am_shielding/ex_act(severity)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index a32527ab350..c2fd07c671c 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1189,24 +1189,23 @@ GLOBAL_LIST_EMPTY(apcs)
// damage and destruction acts
-/obj/machinery/power/apc/emp_act(severity)
+/obj/machinery/power/apc/emp_act(severity, recursive)
// Fail for 8-12 minutes (divided by severity)
// Division by 2 is required, because machinery ticks are every two seconds. Without it we would fail for 16-24 minutes.
+
if(is_critical)
// Critical APCs are considered EMP shielded and will be offline only for about half minute. Prevents AIs being one-shot disabled by EMP strike.
// Critical APCs are also more resilient to cell corruption/power drain.
energy_fail(rand(240, 360) / severity / CRITICAL_APC_EMP_PROTECTION)
- if(cell)
- cell.emp_act(severity+2)
+ severity = severity+2 //Anything inside the APC is also shielded.
else
// Regular APCs fail for normal time.
energy_fail(rand(240, 360) / severity)
- //Cells are partially shielded by the APC frame.
- if(cell)
- cell.emp_act(severity+1)
+ //Cells (or anything else within) is partially shielded by the APC frame.
+ severity = severity+1
update_icon()
- ..()
+ ..(severity, recursive)
/obj/machinery/power/apc/ex_act(severity)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index d1ca0b9bf8b..0f0fdda8055 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -223,7 +223,7 @@
if (prob(10))
rigged = 1 //broken batterys are dangerous
-/obj/item/cell/emp_act(severity)
+/obj/item/cell/emp_act(severity, recursive)
if(emp_proof)
return
//remove this once emp changes on dev are merged in
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index fcdefef69c1..66c5fa7e377 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -71,7 +71,7 @@
else
. += span_notice("The generator is off.")
-/obj/machinery/power/port_gen/emp_act(severity)
+/obj/machinery/power/port_gen/emp_act(severity, recursive)
var/duration = 6000 //ten minutes
switch(severity)
if(1)
diff --git a/code/modules/power/port_gen_vr.dm b/code/modules/power/port_gen_vr.dm
index 0f6467d975e..3420722aae8 100644
--- a/code/modules/power/port_gen_vr.dm
+++ b/code/modules/power/port_gen_vr.dm
@@ -458,7 +458,7 @@
power_gen = cool_rotations
runner.nutrition -= nutrition_drain
-/obj/machinery/power/rtg/reg/emp_act(severity)
+/obj/machinery/power/rtg/reg/emp_act(severity, recursive)
return
/obj/item/circuitboard/machine/reg_d
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index d95d7ed1ae3..8d575cae75a 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -79,13 +79,8 @@
return 1
-/obj/machinery/power/emitter/emp_act(var/severity)//Emitters are hardened but still might have issues
-// add_load(1000)
-/* if((severity == 1)&&prob(1)&&prob(1))
- if(src.active)
- src.active = 0
- src.use_power = 1 */
- return 1
+/obj/machinery/power/emitter/emp_act(severity, recursive)
+ return TRUE
/obj/machinery/power/emitter/process()
if(stat & (BROKEN))
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 7e91ac5bc02..277ebd5a830 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -170,8 +170,8 @@
return
-/obj/machinery/field_generator/emp_act()
- return 0
+/obj/machinery/field_generator/emp_act(severity, recursive)
+ return FALSE
/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj, /obj/item/projectile/beam))
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 891f77fb0dc..8d5468b1bba 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -498,7 +498,7 @@ GLOBAL_LIST_EMPTY(smeses)
explosion(get_turf(src), 0, 1, 2)
qdel(src) // Either way we want to ensure the SMES is deleted.
-/obj/machinery/power/smes/emp_act(severity)
+/obj/machinery/power/smes/emp_act(severity, recursive)
inputting(rand(0,1))
outputting(rand(0,1))
output_level = rand(0, output_level_max)
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index 594eb2bd187..ac998714a25 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -315,7 +315,7 @@
projectile_type = /obj/item/projectile/energy/electrode/stunshot
matter = list(MAT_STEEL = 360, MAT_GLASS = 720)
-/obj/item/ammo_casing/a12g/stunshell/emp_act(severity)
+/obj/item/ammo_casing/a12g/stunshell/emp_act(severity, recursive)
if(prob(100/severity)) BB = null
update_icon()
diff --git a/code/modules/projectiles/ammunition/smartmag.dm b/code/modules/projectiles/ammunition/smartmag.dm
index 72421fc13aa..1bd192dd0be 100644
--- a/code/modules/projectiles/ammunition/smartmag.dm
+++ b/code/modules/projectiles/ammunition/smartmag.dm
@@ -122,12 +122,6 @@
return
..()
-// Classic emp_act, just drains the battery
-/obj/item/ammo_magazine/smart/emp_act(severity)
- ..()
- if(attached_cell)
- attached_cell.emp_act(severity)
-
// Finds the cell for the magazine, used by rechargers
/obj/item/ammo_magazine/smart/get_cell()
return attached_cell
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index c5799150473..71f01ef1927 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -233,10 +233,6 @@
explosion(src, 0, 0, 3, 4)
QDEL_IN(src, 1)
-/obj/item/gun/emp_act(severity)
- for(var/obj/O in contents)
- O.emp_act(severity)
-
/obj/item/gun/afterattack(atom/A, mob/living/user, adjacent, params)
if(adjacent) return //A is adjacent, is the user, or is on the user's person
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 8d186a22ccc..89609b8afe8 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -110,7 +110,7 @@
if(..())
update_icon()
-/obj/item/gun/energy/emp_act(severity)
+/obj/item/gun/energy/emp_act(severity, recursive)
..()
update_icon()
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm
index b9ec5d36af3..22f51906cde 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm
@@ -211,7 +211,7 @@
deltimer(recharge_timerid)
recharge_timerid = addtimer(CALLBACK(src, PROC_REF(reload)), recharge_time * carried, TIMER_STOPPABLE)
-/obj/item/gun/energy/kinetic_accelerator/emp_act(severity)
+/obj/item/gun/energy/kinetic_accelerator/emp_act(severity, recursive)
return
/obj/item/gun/energy/kinetic_accelerator/proc/reload()
diff --git a/code/modules/projectiles/guns/energy/pump.dm b/code/modules/projectiles/guns/energy/pump.dm
index 0d933ce57fa..50fbacfadaf 100644
--- a/code/modules/projectiles/guns/energy/pump.dm
+++ b/code/modules/projectiles/guns/energy/pump.dm
@@ -107,8 +107,8 @@
return
..()
-/obj/item/gun/energy/locked/frontier/emp_act(severity)
- return ..(severity+2)
+/obj/item/gun/energy/locked/frontier/emp_act(severity, recursive)
+ return ..(severity+2, recursive)
/obj/item/gun/energy/locked/frontier/ex_act() //|rugged|
return
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index cba78d20c75..40e1488ba58 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -11,8 +11,8 @@
slot_flags = SLOT_BACK
projectile_type = /obj/item/projectile/ion
-/obj/item/gun/energy/ionrifle/emp_act(severity)
- ..(max(severity, 4)) //so it doesn't EMP itself, I guess
+/obj/item/gun/energy/ionrifle/emp_act(severity, recursive)
+ return
/obj/item/gun/energy/ionrifle/empty
cell_type = null
diff --git a/code/modules/research/tg/server.dm b/code/modules/research/tg/server.dm
index d07cd7c2ceb..f6ba9de14a0 100644
--- a/code/modules/research/tg/server.dm
+++ b/code/modules/research/tg/server.dm
@@ -51,7 +51,7 @@
// update_current_power_usage()
update_icon()
-/obj/machinery/rnd/server/emp_act(severity)
+/obj/machinery/rnd/server/emp_act(severity, recursive)
. = ..()
stat |= EMPED
addtimer(CALLBACK(src, PROC_REF(fix_emp)), 60 SECONDS)
diff --git a/code/modules/shieldgen/directional_shield.dm b/code/modules/shieldgen/directional_shield.dm
index e902a9addb9..eb7c91bde2a 100644
--- a/code/modules/shieldgen/directional_shield.dm
+++ b/code/modules/shieldgen/directional_shield.dm
@@ -218,7 +218,7 @@
if(Adjacent(user))
. += "Its shield matrix is at [round( (shield_health / max_shield_health) * 100, 0.01)]% strength."
-/obj/item/shield_projector/emp_act(var/severity)
+/obj/item/shield_projector/emp_act(severity, recursive)
adjust_health(-max_shield_health / severity) // A strong EMP will kill the shield instantly, but weaker ones won't on the first hit.
// Subtypes
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 538a224c728..b6b4ee95efa 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -76,7 +76,7 @@
qdel(src)
return
-/obj/machinery/shield/emp_act(severity)
+/obj/machinery/shield/emp_act(severity, recursive)
switch(severity)
if(1)
qdel(src)
@@ -243,7 +243,7 @@
src.checkhp()
return
-/obj/machinery/shieldgen/emp_act(severity)
+/obj/machinery/shieldgen/emp_act(severity, recursive)
switch(severity)
if(1)
src.health /= 2 //cut health in half
diff --git a/code/modules/shieldgen/energy_shield.dm b/code/modules/shieldgen/energy_shield.dm
index 6fcec11fa81..dadc18e1553 100644
--- a/code/modules/shieldgen/energy_shield.dm
+++ b/code/modules/shieldgen/energy_shield.dm
@@ -214,7 +214,7 @@
// EMP. It may seem weak but keep in mind that multiple shield segments are likely to be affected.
-/obj/effect/shield/emp_act(var/severity)
+/obj/effect/shield/emp_act(severity, recursive)
if(!disabled_for)
take_damage(rand(30,60) / severity, SHIELD_DAMTYPE_EM)
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 1628ace5ba6..53f608dba6c 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -152,7 +152,7 @@
/obj/machinery/computer/shuttle_control/ex_act()
return
-/obj/machinery/computer/shuttle_control/emp_act()
+/obj/machinery/computer/shuttle_control/emp_act(severity, recursive)
return
/obj/item/paper/dockingcodes
diff --git a/code/modules/telesci/gps_advanced.dm b/code/modules/telesci/gps_advanced.dm
index 3cd14985300..9686f7a12d2 100644
--- a/code/modules/telesci/gps_advanced.dm
+++ b/code/modules/telesci/gps_advanced.dm
@@ -18,12 +18,12 @@
. = ..()
add_overlay("working")
-/obj/item/gps/advanced/emp_act(severity)
- emped = 1
+/obj/item/gps/advanced/emp_act(severity, recursive)
+ emped = TRUE
cut_overlay("working")
add_overlay("emp")
spawn(300)
- emped = 0
+ emped = FALSE
cut_overlay("emp")
add_overlay("working")
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index 0e97411c492..e15dbb70617 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -161,7 +161,7 @@
return
return
-/obj/vehicle/emp_act(severity)
+/obj/vehicle/emp_act(severity, recursive)
if(!mechanical)
return