Documents the_station_areas global list, fixes some things which read from it incorrectly (#73279)

## About The Pull Request

At a glance this list may confuse people, so it should have
documentation.

It contains area typepaths, not area instances. 

Some things got this wrong, fixed those.

Perhaps this list can be changed to be associated `[type] to [area
instance]` - though that brings in some redundancies when it comes to
`areas_by_type`.

Fixes #73298

## Changelog

🆑 Melbert
fix: False alarm radiation leaks should be less obvious
fix: Fixes some traitor objectives from dropping in blacklisted areas,
like security.
/🆑
This commit is contained in:
MrMelbert
2023-02-07 16:40:18 -07:00
committed by GitHub
parent fedf2f3a26
commit d8077e6b11
6 changed files with 13 additions and 5 deletions
+8
View File
@@ -436,8 +436,16 @@ Used by the AI doomsday and the self-destruct nuke.
// And as the file is now removed set the next map to default.
next_map_config = load_default_map_config()
/**
* Global list of AREA TYPES that are associated with the station.
*
* This tracks the types of all areas in existence that are a UNIQUE_AREA and are on the station Z.
*
* This does not track the area instances themselves - See [GLOB.areas] for that.
*/
GLOBAL_LIST_EMPTY(the_station_areas)
/// Generates the global station area list, filling it with typepaths of unique areas found on the station Z.
/datum/controller/subsystem/mapping/proc/generate_station_area_list()
for(var/area/station/station_area in GLOB.areas)
if (!(station_area.area_flags & UNIQUE_AREA))
@@ -14,7 +14,7 @@
var/list/possible_areas = GLOB.the_station_areas.Copy()
for(var/area/possible_area as anything in possible_areas)
//remove areas too close to the destination, too obvious for our poor shmuck, or just unfair
if(istype(possible_area, /area/station/hallway) || istype(possible_area, /area/station/security))
if(ispath(possible_area, /area/station/hallway) || ispath(possible_area, /area/station/security))
possible_areas -= possible_area
if(length(possible_areas) == 0)
return FALSE
@@ -18,7 +18,7 @@
var/list/possible_areas = GLOB.the_station_areas.Copy()
for(var/area/possible_area as anything in possible_areas)
//remove areas too close to the destination, too obvious for our poor shmuck, or just unfair
if(istype(possible_area, /area/station/hallway) || istype(possible_area, /area/station/security))
if(ispath(possible_area, /area/station/hallway) || ispath(possible_area, /area/station/security))
possible_areas -= possible_area
if(length(possible_areas) == 0)
return FALSE
@@ -25,7 +25,7 @@
var/list/possible_areas = GLOB.the_station_areas.Copy()
for(var/area/possible_area as anything in possible_areas)
//remove areas too close to the destination, too obvious for our poor shmuck, or just unfair
if(istype(possible_area, /area/station/hallway) || istype(possible_area, /area/station/security))
if(ispath(possible_area, /area/station/hallway) || ispath(possible_area, /area/station/security))
possible_areas -= possible_area
if(length(possible_areas) == 0)
return FALSE
@@ -181,7 +181,7 @@
AddComponent(/datum/component/traitor_objective_register, victim, fail_signals = list(COMSIG_PARENT_QDELETING))
var/list/possible_areas = GLOB.the_station_areas.Copy()
for(var/area/possible_area as anything in possible_areas)
if(istype(possible_area, /area/station/hallway) || istype(possible_area, /area/station/security) || initial(possible_area.outdoors))
if(ispath(possible_area, /area/station/hallway) || ispath(possible_area, /area/station/security) || initial(possible_area.outdoors))
possible_areas -= possible_area
dropoff_area = pick(possible_areas)
+1 -1
View File
@@ -48,7 +48,7 @@
var/area/station/location_descriptor
if(fake)
location_descriptor = pick(GLOB.the_station_areas)
location_descriptor = GLOB.areas_by_type[pick(GLOB.the_station_areas)]
else if(the_source_of_our_problems)
location_descriptor = get_area(the_source_of_our_problems)