From e24c5f70ae3d306da1c21501b0d202bfbaa22f05 Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Fri, 13 Mar 2026 15:38:23 -0400 Subject: [PATCH] adds 'exterior' lights (#31695) --- .../LavaRuins/lavaland_biodome_winter.dmm | 8 ++-- .../RandomRuins/SpaceRuins/casino.dmm | 31 +++++---------- code/modules/power/exterior_lights.dm | 38 +++++++++++++++++++ paradise.dme | 1 + 4 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 code/modules/power/exterior_lights.dm diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm index ad2e757a85a..bb5d6759a07 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm @@ -284,12 +284,12 @@ /turf/simulated/floor/pod/dark, /area/ruin/powered/snow_biodome) "hA" = ( -/obj/machinery/light/built{ +/obj/effect/mapping_helpers/no_lava, +/obj/machinery/light/exterior/outdoors{ dir = 1 }, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/pod/dark/lavaland_air, -/area/ruin/powered/snow_biodome) +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors/explored) "jE" = ( /obj/effect/decal/cleanable/blood/drip, /turf/simulated/floor/wood, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/casino.dmm b/_maps/map_files/RandomRuins/SpaceRuins/casino.dmm index 5f17037772c..3ad72e771d0 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/casino.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/casino.dmm @@ -413,10 +413,8 @@ /turf/simulated/floor/mineral/plastitanium, /area/ruin/space/powered/casino/security) "kx" = ( -/obj/machinery/light{ - dir = 4; - brightness_color = "#FF0000"; - color = "#FF0000" +/obj/machinery/light/exterior/warning{ + dir = 4 }, /turf/template_noop, /area/template_noop) @@ -466,10 +464,8 @@ /turf/simulated/floor/plating, /area/ruin/space/powered/casino/security) "lZ" = ( -/obj/machinery/light{ - dir = 1; - brightness_color = "#FF0000"; - color = "#FF0000" +/obj/machinery/light/exterior/warning{ + dir = 1 }, /turf/template_noop, /area/template_noop) @@ -1036,10 +1032,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered/casino/maints) "DL" = ( -/obj/machinery/light{ - brightness_color = "#FF0000"; - color = "#FF0000" - }, +/obj/machinery/light/exterior/warning, /turf/template_noop, /area/template_noop) "DM" = ( @@ -1514,10 +1507,8 @@ /turf/simulated/floor/plasteel/freezer, /area/ruin/space/powered/casino/hall) "TA" = ( -/obj/machinery/light{ - dir = 8; - brightness_color = "#FF0000"; - color = "#FF0000" +/obj/machinery/light/exterior/warning{ + dir = 8 }, /turf/template_noop, /area/template_noop) @@ -1695,15 +1686,13 @@ /turf/simulated/floor/plating, /area/ruin/space/powered/casino/maints) "Xe" = ( -/obj/machinery/light{ - dir = 8; - brightness_color = "#FF0000"; - color = "#FF0000" - }, /obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "1-4" }, +/obj/machinery/light/exterior/warning{ + dir = 8 + }, /turf/template_noop, /area/template_noop) "Xo" = ( diff --git a/code/modules/power/exterior_lights.dm b/code/modules/power/exterior_lights.dm new file mode 100644 index 00000000000..0fa63098e11 --- /dev/null +++ b/code/modules/power/exterior_lights.dm @@ -0,0 +1,38 @@ +/// Exterior lights use the powernet of the wall they're installed on, +/// not the tile they're placed on. This allows them to be in a different +/// area than the area that powers them, making it possible to have a light +/// "outside" a structure that shares its power state. +/obj/machinery/light/exterior + +/obj/machinery/light/exterior/Initialize(mapload) + . = ..() + + reregister_machine() + +/obj/machinery/light/exterior/reregister_machine() + var/turf/mounted = get_step(src, dir) + var/area/machine_area = get_area(mounted) + + if(machine_powernet?.powernet_area != machine_area) + if(machine_area) + var/old_power_mode = power_state + change_power_mode(NO_POWER_USE) // Take away our current power from the old network + machine_powernet?.unregister_machine(src) + machine_powernet = machine_area.powernet + machine_powernet.register_machine(src) + change_power_mode(old_power_mode) // add it to the new network + +/obj/machinery/light/exterior/power_change() + var/turf/mounted = get_step(src, dir) + var/area/machine_area = get_area(mounted) + + if(machine_area) + seton(machine_area.lightswitch && machine_area.powernet.has_power(PW_CHANNEL_LIGHTING)) + +/obj/machinery/light/exterior/outdoors + brightness_color = "#facd7f" + nightshift_light_color = "#facd7f" + +/obj/machinery/light/exterior/warning + brightness_color = COLOR_RED_LIGHT + nightshift_light_color = COLOR_RED_LIGHT diff --git a/paradise.dme b/paradise.dme index 58dd5abfdd9..e76c1d5bfcd 100644 --- a/paradise.dme +++ b/paradise.dme @@ -3085,6 +3085,7 @@ #include "code\modules\power\alien_cache.dm" #include "code\modules\power\cell.dm" #include "code\modules\power\electrolyzer.dm" +#include "code\modules\power\exterior_lights.dm" #include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\laser_terminal.dm" #include "code\modules\power\lights.dm"