Miscellaneous minor Horizon map improvements (#21716)

Fixes https://github.com/Aurorastation/Aurora.3/issues/21682
Fixes https://github.com/Aurorastation/Aurora.3/issues/21719

changes:
- bugfix: "Fixes shield diffusers no longer diffusing targeted shield
segments (used for mass driver ejection paths)."
- bugfix: "Moves air alarm hidden behind D3 starboard central hallway
shutters to visible free spot on opposite wall."
  - rscadd: "Adds tintable window control to the Horizon's exam room."
- rscadd: "Adds tintable window controls for both the interior and
exterior windows of the Horizon's recovery room."
- rscadd: "Adds an additional light to a particularly dark corner of the
Horizon's d2 hard storage room."
This commit is contained in:
Batrachophreno
2026-01-19 10:37:08 +00:00
committed by GitHub
parent b968d28670
commit f8c325666c
5 changed files with 391 additions and 355 deletions
+7
View File
@@ -84,6 +84,13 @@
var/obj/effect/energy_field/F = new(T, src)
field += F
/**
* Removes the field from the managed list and deletes it. Called by shield diffusion.
*/
/datum/energy_field/proc/remove_individual_field(var/obj/effect/energy_field/field_to_remove)
field.Remove(field_to_remove)
qdel(field_to_remove)
/**
* Adds a bunch of UI data for TGUIs with relevant field data.
*/
+3 -18
View File
@@ -16,8 +16,6 @@
/// The damage suffered by the field.
var/damage = 0
var/ticks_recovering = 10
var/diffused_for = 0
var/diffused = FALSE
/// If strength goes is 1 or above, this is set to TRUE, this is to prevent flickering and animate being called constantly
var/is_strong = FALSE
@@ -41,7 +39,7 @@
return ..()
/obj/effect/energy_field/proc/diffuse(var/duration)
diffused_for = max(duration, 0)
energy_field.remove_individual_field(src)
/obj/effect/energy_field/attackby(obj/item/attacking_item, mob/user)
user.do_attack_animation(src, attacking_item)
@@ -105,28 +103,17 @@
damage = max(damage - energy_field.strengthen_rate, 0)
/obj/effect/energy_field/proc/density_check(var/turn_on)
if(turn_on && !diffused)
if(turn_on)
alpha = 0
density = TRUE
mouse_opacity = MOUSE_OPACITY_ICON
animate(src, 2 SECONDS, alpha = 255)
else if(!turn_on)
else
alpha = 255
density = FALSE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
animate(src, 2 SECONDS, alpha = 0)
/obj/effect/energy_field/proc/diffuse_check()
diffused_for = max(0, diffused_for - 1)
if(diffused_for && !diffused)
diffused = TRUE
if(is_strong)
density_check(FALSE)
else if(!diffused_for && diffused)
diffused = FALSE
density_check(TRUE)
/obj/effect/energy_field/proc/update_strength()
SIGNAL_HANDLER
//if we take too much damage, drop out - the generator will bring us back up if we have enough power
@@ -142,8 +129,6 @@
if (density != old_density)
update_nearby_tiles()
diffuse_check()
/**
* Easy helper proc to return the shield's current health.
*/
+6 -6
View File
@@ -8,8 +8,8 @@
icon = 'icons/obj/machinery/shielding.dmi'
icon_state = "fdiffuser_on"
use_power = POWER_USE_IDLE
idle_power_usage = 100
active_power_usage = 2000
idle_power_usage = 0
active_power_usage = 0
anchored = TRUE
density = FALSE
level = 1
@@ -19,20 +19,20 @@
/obj/machinery/shield_diffuser/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
. += "It is [diffuser_enabled ? "diffuser_enabled" : "disabled"]."
. += "It is [diffuser_enabled ? "enabled" : "disabled"]."
/obj/machinery/shield_diffuser/process()
if(stat & BROKEN)
return PROCESS_KILL
if(!diffuser_enabled || stat & NOPOWER)
if(!diffuser_enabled)
return
for(var/obj/effect/energy_field/S in range(diffuser_range, src))
S.diffuse(5)
S.diffuse()
/obj/machinery/shield_diffuser/update_icon()
if(stat & NOPOWER || stat & BROKEN || !diffuser_enabled)
if(stat & BROKEN || !diffuser_enabled)
icon_state = "fdiffuser_off"
else
icon_state = "fdiffuser_on"