From 5adff1b2ec958a3535b083985fe096e999b4c5cb Mon Sep 17 00:00:00 2001 From: Batrachophreno Date: Thu, 12 Mar 2026 09:45:30 -0400 Subject: [PATCH] Emergency Shield Projector activation guard logic (#22016) Fixes a bug introduced in https://github.com/Aurorastation/Aurora.3/pull/21862 that caused shield projectors to activate during certain delayed process() ticks and when dragged across an area boundary (only noticeable if doing so within the radius of open space turfs). --- code/modules/shieldgen/emergency_shield.dm | 23 +++++++++++----------- html/changelogs/Bat-ShieldCreation.yml | 4 ++++ 2 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 html/changelogs/Bat-ShieldCreation.yml diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index a14100842c8..44d62b06727 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -48,6 +48,8 @@ change_power_consumption(shield_power_usage, POWER_USE_IDLE) update_use_power(POWER_USE_IDLE) + return TRUE + /obj/machinery/shieldgen/proc/shields_down() if(!active) return FALSE //If it's already off, how did this get called? @@ -88,8 +90,6 @@ if(!active) return if(stat & NOPOWER) collapse_shields() - else - create_shields() update_icon() /obj/machinery/shieldgen/process() @@ -104,18 +104,17 @@ if(deployed_shields.len && prob(5)) qdel(pick(deployed_shields)) else - if (check_delay <= 0) - create_shields() + if(check_delay <= 0) + if(shields_up()) + var/new_power_usage = 0 + for(var/obj/machinery/shield/shield_tile in deployed_shields) + new_power_usage += shield_tile.shield_idle_power - var/new_power_usage = 0 - for(var/obj/machinery/shield/shield_tile in deployed_shields) - new_power_usage += shield_tile.shield_idle_power + if (new_power_usage != idle_power_usage) + change_power_consumption(new_power_usage, POWER_USE_IDLE) + use_power_oneoff(0) - if (new_power_usage != idle_power_usage) - change_power_consumption(new_power_usage, POWER_USE_IDLE) - use_power_oneoff(0) - - check_delay = 30 + check_delay = 30 else check_delay-- diff --git a/html/changelogs/Bat-ShieldCreation.yml b/html/changelogs/Bat-ShieldCreation.yml new file mode 100644 index 00000000000..a2bc379cd1a --- /dev/null +++ b/html/changelogs/Bat-ShieldCreation.yml @@ -0,0 +1,4 @@ +author: Batrachophrenoboocosmomachia +delete-after: True +changes: + - bugfix: "Fixes emergency shield projector sometimes attempting to project shields during power_change() or some inactive ticks."