diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index ca6f63b3d2a..a13318057df 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -230,7 +230,13 @@ del(src) return return - + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + if(occupant) + go_out() + ..(severity) alter_health(mob/living/M as mob) if (M.health > 0) diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm index 764ee3afd36..00aedd93636 100644 --- a/code/game/machinery/atmoalter/pump.dm +++ b/code/game/machinery/atmoalter/pump.dm @@ -27,6 +27,22 @@ return +/obj/machinery/portable_atmospherics/pump/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + if(prob(50/severity)) + on = !on + + if(prob(100/severity)) + direction_out = !direction_out + + target_pressure = rand(0,1300) + update_icon() + + ..(severity) + /obj/machinery/portable_atmospherics/pump/process() ..() if(on) diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index eae5dd9293e..6432aa755b3 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -10,6 +10,17 @@ volume = 750 +/obj/machinery/portable_atmospherics/scrubber/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + if(prob(50/severity)) + on = !on + update_icon() + + ..(severity) + /obj/machinery/portable_atmospherics/scrubber/huge name = "Huge Air Scrubber" icon_state = "scrubber:0" diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index d87f6f9225d..deb4bbf34ed 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -79,6 +79,14 @@ attack_ai(mob/user) return + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + if(charging) + charging.emp_act(severity) + ..(severity) + + process() //world << "ccpt [charging] [stat]" if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 8fbfee0e9eb..c857dda1856 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -270,3 +270,19 @@ A.icon_state = "4" del(src) +/obj/machinery/computer/arcade/emp_act(severity) + if(stat & (NOPOWER|BROKEN)) + ..(severity) + return + var/empprize = null + var/num_of_prizes = 0 + switch(severity) + if(1) + num_of_prizes = rand(1,4) + if(2) + num_of_prizes = rand(0,2) + for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) + empprize = pickweight(prizes) + new empprize(src.loc) + + ..(severity) \ No newline at end of file diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 6421c261e96..1819e423dc7 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -431,6 +431,34 @@ src.updateUsrDialog() return +/obj/machinery/computer/med_data/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + for(var/datum/data/record/R in data_core.medical) + if(prob(10/severity)) + switch(rand(1,6)) + if(1) + R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + if(2) + R.fields["sex"] = pick("Male", "Female") + if(3) + R.fields["age"] = rand(5, 85) + if(4) + R.fields["b_type"] = pick("A-", "B-", "AB-", "O-", "A+", "B+", "AB+", "O+") + if(5) + R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit") + if(6) + R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") + continue + + else if(prob(1)) + del(R) + continue + + ..(severity) + /obj/machinery/computer/med_data/laptop name = "Medical Laptop" diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 49fa09a2818..fe3f2dc8ad8 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -526,6 +526,34 @@ What a mess.*/ updateUsrDialog() return +/obj/machinery/computer/secure_data/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + + for(var/datum/data/record/R in data_core.security) + if(prob(10/severity)) + switch(rand(1,6)) + if(1) + R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" + if(2) + R.fields["sex"] = pick("Male", "Female") + if(3) + R.fields["age"] = rand(5, 85) + if(4) + R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released") + if(5) + R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit") + if(6) + R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") + continue + + else if(prob(1)) + del(R) + continue + + ..(severity) + /obj/machinery/computer/secure_data/detective_computer icon = 'icons/obj/computer.dmi' icon_state = "messyfiles" diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 171608be173..70010a74d5d 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -229,6 +229,13 @@ for reference: if (src.health <= 0) src.explode() return + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + if(prob(50/severity)) + locked = !locked + anchored = !anchored + icon_state = "barrier[src.locked]" meteorhit() src.explode() diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index ac2ec0da461..00ea9f620bf 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -88,6 +88,14 @@ O.eye_stat += rand(0, 2) +/obj/machinery/flasher/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + if(prob(75/severity)) + flash() + ..(severity) + /obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj) if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150)) return diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 0cacca07ed7..9f1b79c8dd0 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -100,6 +100,12 @@ location.hotspot_expose(1000,500,1) return 1 +/obj/machinery/sparker/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + ignite() + ..(severity) /obj/machinery/ignition_switch/attack_ai(mob/user as mob) return src.attack_hand(user) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 75a307e4781..c757e70dd02 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -60,3 +60,9 @@ updateicon() +/obj/machinery/light_switch/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + power_change() + ..(severity) \ No newline at end of file diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index ee23cc1ff50..036edb8730d 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -34,3 +34,9 @@ O.throw_at(target, drive_range * power, power) flick("mass_driver1", src) return + + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + drive() + ..(severity) \ No newline at end of file diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 664428d55a8..0a3f9b55cc8 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -80,6 +80,21 @@ obj/machinery/recharger/process() else icon_state = "recharger2" +obj/machinery/recharger/emp_act(severity) + if(stat & (NOPOWER|BROKEN) || !anchored) + ..(severity) + return + + if(istype(charging, /obj/item/weapon/gun/energy)) + var/obj/item/weapon/gun/energy/E = charging + if(E.power_supply) + E.power_supply.emp_act(severity) + + else if(istype(charging, /obj/item/weapon/melee/baton)) + var/obj/item/weapon/melee/baton/B = charging + B.charges = 0 + ..(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 = "recharger1" diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 95d0f342e87..9912e2e85db 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -34,6 +34,15 @@ src.go_out() return + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + if(occupant) + occupant.emp_act(severity) + go_out() + ..(severity) + proc build_icon() if(NOPOWER|BROKEN) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 09b89a83851..62496653cee 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -43,6 +43,13 @@ usr << "The charge meter reads [cell ? round(cell.percent(),1) : 0]%" return + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + if(cell) + cell.emp_act(severity) + ..(severity) attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/cell)) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index a7d8978f468..aaa98f16e60 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -52,6 +52,12 @@ update() + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + set_picture("ai_bsod") + ..(severity) // set what is displayed @@ -271,6 +277,13 @@ update() + emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + ..(severity) + return + set_picture("ai_bsod") + ..(severity) + proc/update() if(mode==0) //Blank