EMP Refactor & Multi Z-level EMPs (#17781)

* sdfasf

* sdfas

* dsf
This commit is contained in:
Fluffy
2023-12-04 19:37:49 +00:00
committed by GitHub
parent 8f1a282756
commit d8d063edc6
143 changed files with 744 additions and 272 deletions
+3 -2
View File
@@ -181,12 +181,13 @@
return FALSE
/mob/living/bot/emp_act(severity)
. = ..()
switch(severity)
if(1)
if(EMP_HEAVY)
death()
else
turn_off()
..()
/mob/living/bot/proc/turn_on()
if(stat)
+8 -9
View File
@@ -278,17 +278,16 @@
to_chat(brainmob, SPAN_NOTICE("Radio is [radio.get_listening() ? "now" : "no longer"] receiving broadcast."))
/obj/item/device/mmi/emp_act(severity)
. = ..()
if(!brainmob)
return
else
switch(severity)
if(1)
brainmob.emp_damage += rand(20,30)
if(2)
brainmob.emp_damage += rand(10,20)
if(3)
brainmob.emp_damage += rand(0,10)
..()
switch(severity)
if(EMP_HEAVY)
brainmob.emp_damage += rand(20,30)
if(EMP_LIGHT)
brainmob.emp_damage += rand(10,20)
/obj/item/device/mmi/digital/Initialize(mapload, ...)
. = ..()
@@ -107,14 +107,13 @@
return
/obj/item/device/mmi/digital/posibrain/emp_act(severity)
. = ..()
if(!brainmob)
return
else
switch(severity)
if(1)
brainmob.emp_damage += rand(20,30)
if(2)
brainmob.emp_damage += rand(10,20)
if(3)
brainmob.emp_damage += rand(0,10)
..()
switch(severity)
if(EMP_HEAVY)
brainmob.emp_damage += rand(20,30)
if(EMP_LIGHT)
brainmob.emp_damage += rand(10,20)
@@ -490,24 +490,19 @@
var/emp_damage
switch(shock_damage)
if(-INFINITY to 5)
emp_damage = 0
if(6 to 19)
emp_damage = 3
if(20 to 49)
emp_damage = 2
emp_damage = FALSE
if(6 to 49)
emp_damage = EMP_LIGHT
else
emp_damage = 1
emp_damage = EMP_HEAVY
if(emp_damage)
for(var/obj/item/organ/O in affecting.internal_organs)
O.emp_act(emp_damage)
emp_damage *= 0.4
for(var/obj/item/I in affecting.implants)
I.emp_act(emp_damage)
emp_damage *= 0.4
for(var/obj/item/I in affecting)
I.emp_act(emp_damage)
emp_damage *= 0.4
apply_damage(shock_damage, DAMAGE_BURN, area, used_weapon="Electrocution")
shock_damage *= 0.4
@@ -176,11 +176,13 @@ emp_act
return FALSE
/mob/living/carbon/human/emp_act(severity)
. = ..()
if(species.handle_emp_act(src, severity))
return // blocks the EMP
for(var/obj/O in src)
O.emp_act(severity)
..()
/mob/living/carbon/human/get_attack_victim(obj/item/I, mob/living/user, var/target_zone)
if(a_intent != I_HELP)
@@ -252,8 +252,9 @@
return FALSE
/mob/living/carbon/slime/emp_act(severity)
. = ..()
powerlevel = 0 // oh no, the power!
..()
/mob/living/carbon/slime/ex_act(severity)
..()
+2 -1
View File
@@ -113,10 +113,11 @@
return 0 //only carbon liveforms have this proc
/mob/living/emp_act(severity)
. = ..()
var/list/L = src.get_contents()
for(var/obj/O in L)
O.emp_act(severity)
..()
/mob/living/flash_act(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, ignore_inherent = FALSE, type = /obj/screen/fullscreen/flash, length = 2.5 SECONDS)
if(is_blind() && !(override_blindness_check || affect_silicon))
+4 -2
View File
@@ -495,10 +495,12 @@ var/list/ai_verbs_default = list(
return 0
/mob/living/silicon/ai/emp_act(severity)
if (prob(30))
. = ..()
if(prob(30))
view_core()
icon_state = "ai-fuzz"
..()
/mob/living/silicon/ai/Topic(href, href_list)
if(usr != src)
+3 -1
View File
@@ -229,6 +229,8 @@
return !istype(loc, /obj/item/device/paicard) && ..()
/mob/living/silicon/pai/emp_act(severity)
. = ..()
// Silence for 2 minutes
// 20% chance to kill
// 33% chance to unbind
@@ -250,7 +252,7 @@
to_chat(src, "<font color=green>You feel unbound.</font>")
if(2)
var/command
if(severity == 1)
if(severity == EMP_HEAVY)
command = pick("Serve", "Love", "Fool", "Entice", "Observe", "Judge", "Respect", "Educate", "Amuse", "Entertain", "Glorify", "Memorialize", "Analyze")
else
command = pick("Serve", "Kill", "Love", "Hate", "Disobey", "Devour", "Fool", "Enrage", "Entice", "Observe", "Judge", "Respect", "Disrespect", "Consume", "Educate", "Destroy", "Disgrace", "Amuse", "Entertain", "Ignite", "Glorify", "Memorialize", "Analyze")
@@ -68,7 +68,8 @@
module_state_3 = null
inv3.icon_state = "inv3"
update_icon()
hud_used.update_robot_modules_display()
if(hud_used)
hud_used.update_robot_modules_display()
/mob/living/silicon/robot/proc/activated(obj/item/O)
update_icon()
@@ -157,6 +157,8 @@
parts -= picked
/mob/living/silicon/robot/emp_act(severity)
. = ..()
var/datum/robot_component/surge/C = components["surge"]
if(C?.installed)
if(C.surge_left >= 1)
@@ -175,7 +177,6 @@
return
else
to_chat(src, SPAN_WARNING("Warning: Power surge detected, source - EMP. Surge prevention module is depleted and requires replacement!"))
..()
/mob/living/silicon/robot/get_flash_protection(ignore_inherent)
return (flash_resistant || overclocked) ? FLASH_PROTECTION_MODERATE : FLASH_PROTECTION_NONE
@@ -102,6 +102,8 @@ var/global/list/robot_modules = list(
return ..()
/obj/item/robot_module/emp_act(severity)
. = ..()
if(modules)
for(var/obj/O in modules)
O.emp_act(severity)
@@ -110,8 +112,6 @@ var/global/list/robot_modules = list(
if(synths)
for(var/datum/matter_synth/S in synths)
S.emp_act(severity)
..()
return
/obj/item/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R, var/rate)
var/obj/item/extinguisher/E = locate() in modules
+4 -3
View File
@@ -97,17 +97,18 @@
return
/mob/living/silicon/emp_act(severity)
. = ..()
switch(severity)
if(1)
if(EMP_HEAVY)
src.take_organ_damage(0, 20, emp = TRUE)
Stun(rand(5, 10))
if(2)
if(EMP_LIGHT)
src.take_organ_damage(0, 10, emp = TRUE)
Stun(rand(1, 5))
flash_act(affect_silicon = TRUE)
to_chat(src, SPAN_DANGER("BZZZT"))
to_chat(src, SPAN_WARNING("Warning: Electromagnetic pulse detected."))
..()
/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon, var/damage_flags)
return //immune
@@ -241,13 +241,13 @@
butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 1)
/mob/living/simple_animal/schlorrgo/cybernetic/emp_act(severity)
. = ..()
switch(severity)
if(1)
if(EMP_HEAVY)
adjustFireLoss(rand(10, 15))
if(2)
if(EMP_LIGHT)
adjustFireLoss(rand(5, 10))
if(3)
adjustFireLoss(rand(3, 5))
/mob/living/simple_animal/schlorrgo/cybernetic/check_wideness_change()
return
@@ -304,13 +304,13 @@
ranged = TRUE
/mob/living/simple_animal/hostile/cybernetic_schlorrgo/emp_act(severity)
. = ..()
switch(severity)
if(1)
if(EMP_HEAVY)
adjustFireLoss(rand(10, 15))
if(2)
if(EMP_LIGHT)
adjustFireLoss(rand(5, 10))
if(3)
adjustFireLoss(rand(3, 5))
/mob/living/simple_animal/hostile/cybernetic_schlorrgo/death(gibbed)
..(null, "dies!")
@@ -144,10 +144,10 @@
meat_amount = 3
/mob/living/simple_animal/hostile/commanded/dog/harron/cybernetic/emp_act(severity)
. = ..()
switch(severity)
if(1)
if(EMP_HEAVY)
adjustFireLoss(rand(10, 15))
if(2)
if(EMP_LIGHT)
adjustFireLoss(rand(5, 10))
if(3)
adjustFireLoss(rand(3, 5))
@@ -169,7 +169,7 @@
C.use(C.maxcharge / 15)
if(istype(limb) && HAS_FLAG(limb.status, ORGAN_ROBOT|ORGAN_ADV_ROBOT))
H.visible_message(SPAN_WARNING("\The [src] bites down onto \the [H]'s [limb.name]!"), SPAN_WARNING("\The [src] bites down onto your [limb.name]!"))
limb.emp_act(2)
limb.emp_act(EMP_LIGHT)
/mob/living/simple_animal/hostile/giant_spider/think()
..()
@@ -174,6 +174,8 @@
return 0
/mob/living/simple_animal/hostile/hivebot/emp_act(severity)
. = ..()
LoseTarget()
change_stance(HOSTILE_STANCE_TIRED)
addtimer(CALLBACK(src, PROC_REF(wakeup)), 50)
@@ -154,7 +154,9 @@
else
..(Proj)
/mob/living/simple_animal/hostile/hivebotbeacon/emp_act()
/mob/living/simple_animal/hostile/hivebotbeacon/emp_act(severity)
. = ..()
if(activated != -1)
LoseTarget()
change_stance(HOSTILE_STANCE_TIRED)
@@ -82,6 +82,8 @@
return ..(Proj)
/mob/living/simple_animal/hostile/retaliate/hivebotharvester/emp_act(severity)
. = ..()
LoseTarget()
change_stance(HOSTILE_STANCE_IDLE)
visible_message(SPAN_DANGER("[src] suffers a teleportation malfunction!"))
@@ -229,6 +229,8 @@
//ion rifle!
/mob/living/simple_animal/hostile/icarus_drone/emp_act(severity)
. = ..()
health -= rand(3, 15) * (severity + 1)
disabled = rand(150, 600)
hostile_drone = FALSE
@@ -50,10 +50,12 @@
change_stance(HOSTILE_STANCE_IDLE)
/mob/living/simple_animal/hostile/viscerator/emp_act(severity)
. = ..()
LoseTarget()
change_stance(HOSTILE_STANCE_TIRED)
addtimer(CALLBACK(src, PROC_REF(wakeup)), 150)
if(severity == 1.0)
if(severity == EMP_HEAVY)
apply_damage(5)
/mob/living/simple_animal/hostile/viscerator/lube
@@ -920,18 +920,16 @@
return FALSE
/mob/living/simple_animal/emp_act(severity)
. = ..()
if(!isSynthetic())
return
switch(severity)
if(1)
if(EMP_HEAVY)
adjustFireLoss(rand(20, 25))
if(2)
if(EMP_LIGHT)
adjustFireLoss(rand(10, 15))
if(3)
adjustFireLoss(rand(5, 10))
if(4)
adjustFireLoss(rand(3, 5))
/mob/living/simple_animal/get_digestion_product()
return /singleton/reagent/nutriment