Introduces starlight to all Horizon exterior areas (#21396)

This introduces logic to place starlight onto turfs under
horizon/exterior, and extends that area across the entirety of the
Horizon's EVA areas, to remove the anachronistic darkness that's been
atop the wings up to now. Handling this at the area level was the
cleanest way I could think to implement it.

<details>
<summary>How it looks!</summary>
<img width="954" height="711" alt="image"
src="https://github.com/user-attachments/assets/ef82f1fe-0720-4559-8dca-390bf1ddff4d"
/>
<img width="924" height="878" alt="image"
src="https://github.com/user-attachments/assets/ffa37bd2-7814-42eb-99ae-ebfc1ed1b680"
/>
<img width="917" height="904" alt="image"
src="https://github.com/user-attachments/assets/8b36f9c9-dbe1-4c5a-bb0c-f5080eb359f4"
/>
<img width="953" height="952" alt="image"
src="https://github.com/user-attachments/assets/531724ba-2a19-4ddd-bd31-70a1ebfb4543"
/>
</details>

**Potential problems:**

<details>
<summary>Shuttle logic problems</summary>
To get this working, all of the Horizon's EVA areas have had to be
covered in the horizon/exterior area - which means there's now an area
clash on the south, west, and east shuttle port, which falls afoul of
the current is_valid check for shuttle landmarks. Notably, how this is
mapped also means that an rfloor silhouette of a shuttle is always left
on the Horizon after a shuttle undocks from any of these landmarks.

<img width="864" height="704" alt="image"
src="https://github.com/user-attachments/assets/4fd27d84-8d7c-4ed7-8333-f934a2d77e03"
/>

The problem here is on the mapping, not the logic - it seems like these
areas were formerly excluded from the horizon/exterior area exactly to
dance around this problem. The solution I've taken tentatively is simply
to remove the area check. This doesn't feel great, but I don't think
there's many situations in which it could bite us - maybe on exoplanets?

The only other solution here is to remap the Horizon's docking ports to
not suffer from this issue, which I'm not eager to do. I honestly just
attribute this to being another fundamental flaw of the Horizon's design
that we have to just dance around until we move off the map. I've
documented that it's purely a mapping issue on the commented code
segment, and that once the mapping issue is resolved there's no issue
with an area check.
</details>

- [x] Figure out how to have starlight carry over after a shuttle
departs
- [x] Resolve the Horizon's shuttles being unable to dock with its
docking ports

---------

Signed-off-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
This commit is contained in:
hazelrat
2025-10-01 18:14:21 +00:00
committed by GitHub
co-authored by Matt Atlas
parent 10c05af44b
commit eef80013fa
12 changed files with 4002 additions and 3969 deletions
+21 -8
View File
@@ -14,7 +14,8 @@ GLOBAL_LIST_INIT(area_blurb_stated_to, list())
var/uid
///Bitflag (Any of `AREA_FLAG_*`). See `code\__DEFINES\misc.dm`.
var/area_flags
var/holomap_color // Color of this area on the holomap. Must be a hex color (as string) or null.
/// Color of this area on the holomap. Must be a hex color (as string) or null.
var/holomap_color
///Do we have an active fire alarm?
var/fire = FALSE
@@ -33,22 +34,27 @@ GLOBAL_LIST_INIT(area_blurb_stated_to, list())
invisibility = INVISIBILITY_LIGHTING
var/obj/machinery/power/apc/apc = null
var/turf/base_turf // The base turf type of the area, which can be used to override the z-level's base turf.
/// The base turf type of the area, which can be used to override the z-level's base turf.
var/turf/base_turf
var/lightswitch = FALSE
var/eject = null
var/requires_power = 1
var/always_unpowered = 0 //this gets overridden to 1 for space in area/New()
/// This gets overridden to 1 for space in area/New()
var/always_unpowered = 0
var/power_equip = 1 // Status vars
// Status vars
var/power_equip = 1
var/power_light = 1
var/power_environ = 1
var/used_equip = 0 // Continuous drain; don't touch these directly.
// Continuous drain; don't touch these directly.
var/used_equip = 0
var/used_light = 0
var/used_environ = 0
var/oneoff_equip = 0 // Used once and cleared each tick.
// Used once and cleared each tick.
var/oneoff_equip = 0
var/oneoff_light = 0
var/oneoff_environ = 0
@@ -71,8 +77,10 @@ GLOBAL_LIST_INIT(area_blurb_stated_to, list())
///Used to decide what kind of reverb the area makes sound have
var/sound_environment = SOUND_AREA_STANDARD_STATION
var/no_light_control = FALSE // If TRUE, lights in area cannot be toggled with light controller.
var/allow_nightmode = FALSE // If TRUE, lights in area will be darkened by the night mode controller.
/// If TRUE, lights in area cannot be toggled with light controller.
var/no_light_control = FALSE
/// If TRUE, lights in area will be darkened by the night mode controller.
var/allow_nightmode = FALSE
var/emergency_lights = FALSE
/**
@@ -98,6 +106,11 @@ GLOBAL_LIST_INIT(area_blurb_stated_to, list())
var/tmp/is_outside = OUTSIDE_NO
/// Should the turfs in this area render starlight accurate to the starlight of the local sector?
/// This is intended for use with EVA areas of ships - such as the wings of the Horizon, for instance.
/// You probably shouldn't be setting this to true on any planet-based maps, or on any indoors areas.
var/needs_starlight = FALSE
/**
* Don't move this to Initialize(). Things in here need to run before SSatoms does.
*/