diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm
index 9de4f014a2..27f18b4f43 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 56180fcff2..07cc532710 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 28c6305357..502b7aab3a 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 4582e6127a..6b856cb0fb 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 e7592ae177..0ff8a6c893 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 83f40627f7..fb5805cfa3 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 98aa44c18d..880cba9eb2 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 a6aabf5420..5de5e1e7b0 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 64bf98efca..25a49fbefe 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 81154cdca0..1f66829d6c 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 7a67b18d15..a454b69898 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 e751969f17..4dd4ad02df 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 6038b3920c..7039394e7c 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 a26c7adbdb..9d68d801db 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 550b27712e..00e45f8c72 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 d47c85f12e..f2e78e3cd3 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 cdf5722a6f..f99a77fbc1 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 529061d929..c548521132 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 1dcc813d44..1700658820 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 dcf1b35cd6..0533e6fcc3 100644
--- a/code/game/machinery/exonet_node.dm
+++ b/code/game/machinery/exonet_node.dm
@@ -85,10 +85,10 @@
noisy = TRUE // CHOMPStation Add: Hummy noises
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 b5673396a1..6fb00da62b 100644
--- a/code/game/machinery/fire_alarm.dm
+++ b/code/game/machinery/fire_alarm.dm
@@ -133,7 +133,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 d32200af96..7d333ecc76 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 eea5c071a9..6eb1d7ab3b 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 f3d4b0d20e..b26689e38e 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 bcd8c997a4..01d021f335 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -374,7 +374,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 713ef06e3c..8e62a56d31 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 3ee0f78445..e8f6cdba4f 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 5e0cd5abd4..605333fde5 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 3a95a01b1f..27ff82b1f6 100644
--- a/code/game/machinery/pda_multicaster.dm
+++ b/code/game/machinery/pda_multicaster.dm
@@ -111,7 +111,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 7a5be3a990..996a3beae4 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 89d77f1607..8ee26b5dad 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 467a1ecd9c..858f4c3c5e 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 9469024f1c..b7e9c9eae0 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -95,14 +95,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 7a17654cb3..0674566f16 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 44751feebe..4b2c57a424 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -209,7 +209,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 956fd67f1f..5571db5d34 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -224,7 +224,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
@@ -235,12 +235,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 a687f8f030..1c095b75b7 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 b561189830..e44458c3f7 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 6d1286c709..26736268fe 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1332,7 +1332,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 8ab37b94fe..99b29b0642 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 37cb9571ec..c499e23b53 100644
--- a/code/game/objects/items/devices/communicator/communicator.dm
+++ b/code/game/objects/items/devices/communicator/communicator.dm
@@ -232,10 +232,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 ca5040bd12..b3b50bff33 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -513,7 +513,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
@@ -593,7 +593,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 a5a5f9262e..9202c331d9 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 9352985e1c..13eddb3904 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 d0ca620645..7f68598bc0 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 c6a0a3af2e..3bc9d2a39f 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -419,9 +419,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 b0d596b22b..93b98afe58 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()
@@ -434,14 +434,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 389e553779..1765e7a650 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 66a42ccb73..3a4842c75f 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 14fc3498b7..f380d59381 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 6562e617ba..adf7d1f88c 100644
--- a/code/game/objects/items/weapons/implants/implant_vr.dm
+++ b/code/game/objects/items/weapons/implants/implant_vr.dm
@@ -113,7 +113,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 199adf9f6d..4cdf8b497d 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 296784adbf..dfcdab01fe 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 842c785a47..73f58a6706 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 89c0e748e1..1b910e87c5 100644
--- a/code/game/objects/items/weapons/melee/shock_maul.dm
+++ b/code/game/objects/items/weapons/melee/shock_maul.dm
@@ -267,11 +267,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 67710cb3f4..1c5c7d7558 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -702,12 +702,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 340d866c5c..87477a778d 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 c1e1959c4a..f415e20912 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 b557acf5fd..753d7121d8 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
@@ -19,9 +19,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 ce6ee04a26..9300bda1bb 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 4a42a78d17..2394d31485 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 fa5a4298b5..358e798c01 100644
--- a/code/modules/clothing/accessories/holster.dm
+++ b/code/modules/clothing/accessories/holster.dm
@@ -94,11 +94,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 3386963d0c..be26aee936 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 476172b6ab..9cd8c4c47a 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_alt" //ChompEdit: file change
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 3601267434..47ce840f49 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 0722c759db..e5e0f80124 100644
--- a/code/modules/clothing/clothing_accessories.dm
+++ b/code/modules/clothing/clothing_accessories.dm
@@ -157,9 +157,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 bc3de42bbe..94d66d1ec5 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 522752fd86..bd894f701f 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 2c2f1019f6..9898471278 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -818,18 +818,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 c1728ed922..dae3ab2086 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 5c4d3f597b..b7eb8888a0 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 152eb94577..fe870e906b 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 58ef7b23bb..3f60371998 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 75721a2f96..b326195c3f 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 d21faa7740..14286442d2 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 23f463b4bc..020e2d2a36 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 c1c7d7bce4..9ec657fe8a 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -30,7 +30,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 8d48176be5..ac5337dcf1 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 5c362e4e1d..c9666f1347 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 3492ebaae8..9928a898d0 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
@@ -297,9 +297,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 11459b27fd..abe6e94fea 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 4f6df255c3..1474db964e 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -156,8 +156,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)
@@ -166,9 +165,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 40190de74e..9d0c789c0f 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -445,7 +445,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 2817de3be5..0689e9a01f 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -136,7 +136,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 b551e0380e..b748802f5e 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 4085d4b535..dd229f478e 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 0ea40f5596..d1abb1bab5 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -89,17 +89,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 c4e46c48d3..68541cd4ea 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 949d7a8252..d534820044 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 0db2e969f3..8ff1560888 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 2c171b71fb..a202b19de6 100644
--- a/code/modules/nifsoft/nif.dm
+++ b/code/modules/nifsoft/nif.dm
@@ -186,7 +186,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable
/* CHOMPedit Remove: Disabling EMP effect on all Nifs. *
//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 2a2dc5d81f..a88b58deb7 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 16e07f1f6e..0cd99c4a76 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 4960052470..86ed4be4d7 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -127,10 +127,11 @@
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)
- if(!(robotic >= ORGAN_ROBOT) || robotic == ORGAN_NANOFORM) //CHOMPEdit - Proteans handle EMP's differently
+ O.emp_act(severity, recursive)
+
+ if(!(robotic >= ORGAN_ROBOT))
return
var/burn_damage = 0
switch (severity)
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
index 9a4042efcf..66f3b6fa2d 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 250ae6199b..c3f28c720f 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 b752f55a9d..5b372f14db 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 065775c364..fd42bde4a1 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 ceafbfbba0..72753d4f5c 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 13c3da8922..193492c185 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 08d361286e..462863bf2d 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 535c841c18..07a7c08714 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1191,24 +1191,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 ea7e34354b..2a73fbdda4 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 fcdefef69c..66c5fa7e37 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 86c98ac6c0..fe0ae64f0d 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 d95d7ed1ae..8d575cae75 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 7e91ac5bc0..277ebd5a83 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 07edb61b92..80bfa282e1 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -521,7 +521,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 6f15da0bd9..063063c2dc 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 72421fc13a..1bd192dd0b 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 8018ff8387..3b4d6168e7 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 8d186a22cc..89609b8afe 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 5e14f5fc62..14b51adba6 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 4788b8e94c..d01a84aaae 100644
--- a/code/modules/projectiles/guns/energy/pump.dm
+++ b/code/modules/projectiles/guns/energy/pump.dm
@@ -106,8 +106,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 5a5bba14f7..46f92f3f47 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -13,8 +13,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 d07cd7c2ce..f6ba9de14a 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 e902a9addb..eb7c91bde2 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 538a224c72..b6b4ee95ef 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 3cfb1b5775..b344cfac61 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 1fc90ab0ea..cf649615d3 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 3cd1498530..9686f7a12d 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 d2437dad42..ff75df11a1 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -170,7 +170,7 @@
return
return
-/obj/vehicle/emp_act(severity)
+/obj/vehicle/emp_act(severity, recursive)
if(!mechanical)
return