Area definitions cleanup (Horizon/Runtime) (#20914)

**Goals:**
1. Delete area definitions no longer used in any map or file.
2. Update area definitions such that everything used in mapping the
Horizon exists in 'maps\sccv_horizon\areas' with the parent
'area\horizon\'.
3. Reorganize/rename/restructure those Horizon area definitions to make
future mapping easier and code that hooks into area properties easier.
4. Present area names and blurbs in the status panel.

This PR only handles Horizon and Runtime areas, for digestibility/ease
of reviewing. Offsite areas for another PR.

Naming convention reference:
The /area/ 'name' variable no longer contains either 'Horizon' or the
Deck# of the area or its approx location on the ship. All Horizon areas
now have several new variables as metadata-- area names now need only be
strictly descriptive, and the appropriate constants used in the area
definition, and a new function generates the display name with
consistent formatting for us.

Detailed documentation to follow after any adjustments are made to
mappers' preferences.

This also adds area blurbs to most areas- if not bespoke, then general
department-wide blurbs to parents. I know feature creep always sucks,
but while some areas having pre-existing blurbs, the overwhelming
majority of areas don't, and while testing it was very distracting to
see them randomly appearing and disappearing. Most blurbs are pretty
basic but I feel are entirely presentable- more clever individual ones
can follow in a separate PR.
This commit is contained in:
Batrachophreno
2025-07-25 19:16:33 +00:00
committed by GitHub
parent 8962bb5f89
commit 0851144182
68 changed files with 127943 additions and 126964 deletions
+1 -1
View File
@@ -10,7 +10,7 @@
/datum/event/blob/start()
..()
var/turf/T = pick_subarea_turf(/area/maintenance, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects))
var/turf/T = pick_subarea_turf(/area/horizon/maintenance, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects))
if(!T)
log_and_message_admins("Blob failed to find a viable turf.")
kill(TRUE)
+6 -6
View File
@@ -13,21 +13,21 @@
//Names of areas mentioned in AI and Engineering announcements
var/list/areaName = list("Security")
//Area types to include.
var/list/areaType = list(/area/security)
var/list/areaType = list(/area/horizon/security)
//Area types to specifically exclude.
var/list/areaNotType = list(/area/security/armory, /area/security/nuke_storage, /area/security/checkpoint, /area/security/checkpoint2, /area/security/bridge_surface_checkpoint, /area/security/penal_colony)
var/list/areaNotType = list(/area/horizon/security/checkpoint, /area/horizon/security/checkpoint2)
/datum/event/prison_break/xenobiology
eventDept = "Science"
areaName = list("Xenobiology")
areaType = list(/area/rnd/xenobiology)
areaNotType = list(/area/rnd/xenobiology/xenoflora, /area/rnd/xenobiology/xenoflora_storage)
areaType = list(/area/horizon/rnd/xenobiology)
areaNotType = list(/area/horizon/rnd/xenobiology/xenoflora)
/datum/event/prison_break/bridge
eventDept = "Bridge"
areaName = list("Bridge")
areaType = list(/area/bridge, /area/teleporter, /area/crew_quarters/heads/cryo, /area/maintenance/maintcentral)
areaNotType = list(/area/bridge/aibunker, /area/bridge/levela, /area/bridge/selfdestruct)
areaType = list(/area/horizon/command/bridge, /area/horizon/command/teleporter, /area/horizon/maintenance/deck_3/bridge)
areaNotType = list(/area/horizon/command/bridge/aibunker, /area/horizon/command/bridge/selfdestruct)
/datum/event/prison_break/setup()
announceWhen = rand(75, 105)
+1 -1
View File
@@ -15,7 +15,7 @@
hat_x_offset = 1
hat_y_offset = -12
standard_drone = FALSE
var/list/allowed_areas = list(/area/exoplanet, /area/shuttle/mining, /area/shuttle/intrepid) //Needed for the bot to go mining
var/list/allowed_areas = list(/area/exoplanet, /area/horizon/shuttle/mining, /area/horizon/shuttle/intrepid) //Needed for the bot to go mining
var/seeking_player = FALSE
var/health_upgrade
var/ranged_upgrade
@@ -55,10 +55,6 @@
to_chat(brainmob, "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>")
to_chat(brainmob, "<b>Remember, the purpose of your existence is to serve the crew and the [station_name(TRUE)]. Above all else, do no harm.</b>")
var/area/A = get_area(src)
if(istype(A, /area/assembly/robotics))
GLOB.global_announcer.autosay("A positronic brain has completed its boot process in: [A.name].", "Robotics Oversight", "Science")
brainmob.client.init_verbs()
return src
+20 -2
View File
@@ -206,6 +206,24 @@
/mob/living/carbon/human/get_status_tab_items()
. = ..()
/// This needs to be updated to use signals.
var/holding_gps = FALSE
if(istype(src.get_active_hand(), /obj/item/device/gps) || istype(src.get_inactive_hand(), /obj/item/device/gps))
holding_gps = TRUE
var/area/A = get_area(src)
var/area_name
if(holding_gps)
if(is_station_area(A))
area_name = get_area_display_name(A)
else
area_name = A.name
. += "[area_name]"
. += ""
if(A.area_blurb)
. += "[A.area_blurb]"
. += ""
. += "Intent: [a_intent]"
. += "Move Mode: [m_intent]"
if(is_diona() && DS)
@@ -213,8 +231,8 @@
. += "Energy: [round(DS.stored_energy)] / [round(DS.max_energy)]"
if(DS.regen_limb)
. += "Regeneration Progress: [round(DS.regen_limb_progress)] / [LIMB_REGROW_REQUIREMENT]"
if (internal)
if (!internal.air_contents)
if(internal)
if(!internal.air_contents)
qdel(internal)
else
. += "Internal Atmosphere Info: [internal.name]"
@@ -82,6 +82,7 @@
/datum/computer_file/program/power_monitor/process_tick()
..()
refresh_sensors()
if(has_alarm())
if(!has_alert)
program_icon_state = "power_monitor_warn"
+7 -4
View File
@@ -162,10 +162,11 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
init(mapload)
else
area = get_area(src)
var/area_display_name = get_area_display_name(area)
area.apc = src
opened = COVER_OPENED
operating = FALSE
name = "[area.name] APC"
name = "[area_display_name] APC"
stat |= MAINT
update_icon()
@@ -250,14 +251,15 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value)
var/area/A = loc.loc
var/area_display_name = get_area_display_name(A)
//if area isn't specified use current
if(isarea(A) && areastring == null)
area = A
name = "\improper [area.name] APC"
name = "[area_display_name] APC"
else
area = get_area_name(areastring)
name = "\improper [area.name] APC"
name = "[area_display_name] APC"
area.apc = src
update_icon()
@@ -939,7 +941,8 @@ ABSTRACT_TYPE(/obj/machinery/power/apc)
/obj/machinery/power/apc/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Apc", "[area.name] - APC", 665, (isobserver(user) && check_rights(R_ADMIN, FALSE, user) || issilicon(user) || isstoryteller(user)) ? 540 : 480)
var/area_display_name = get_area_display_name(area)
ui = new(user, src, "Apc", "[area_display_name] - APC", 665, (isobserver(user) && check_rights(R_ADMIN, FALSE, user) || issilicon(user) || isstoryteller(user)) ? 540 : 480)
ui.open()
/obj/machinery/power/apc/proc/update()
+3 -2
View File
@@ -347,20 +347,21 @@
// Sound the alert if gravity was just enabled or disabled.
var/alert = 0
var/area/area = get_area(src)
var/areadisplayname = get_area_display_name(area)
if(new_state) // If we turned on
if(!area.has_gravity())
alert = 1
GLOB.gravity_is_on = 1
soundloop.start(src)
investigate_log("was brought online and is now producing gravity for this level.", "gravity")
message_admins("The gravity generator was brought online. (<A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[area.name]</a>)")
message_admins("The gravity generator was brought online. (<A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[areadisplayname]</a>)")
else
if(area.has_gravity())
alert = 1
GLOB.gravity_is_on = 0
soundloop.stop(src)
investigate_log("was brought offline and there is now no gravity for this level.", "gravity")
message_admins("The gravity generator was brought offline with no backup generator. (<A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[area.name]</a>)")
message_admins("The gravity generator was brought offline with no backup generator. (<A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>[areadisplayname]</a>)")
update_icon()
update_list(gravity_changed)
@@ -164,11 +164,8 @@
APC_entry["cell_status"] = A.cell ? chg[A.charging+1] : 0
// Other info
APC_entry["total_load"] = reading_to_text(A.lastused_total)
// Hopefully removes those goddamn \improper s which are screwing up the UI
var/N = A.area.name
if(findtext(N, ""))
N = copytext(N, 3)
APC_entry["name"] = N
var/area_display_name = get_area_display_name(A.area)
APC_entry["name"] = area_display_name
// Add data into main list of APC data.
APC_data += list(APC_entry)
// Add load of this APC to total APC load calculation
@@ -1,4 +0,0 @@
/area/engineering/power_alert(var/alarming)
if (alarming)
investigate_log("has a power alarm!","singulo")
..()
+1 -1
View File
@@ -179,7 +179,7 @@ GLOBAL_LIST_EMPTY(escape_pods_by_name)
#define AURORA_ESCAPE_POD(NUMBER) \
/datum/shuttle/autodock/ferry/escape_pod/pod/escape_pod##NUMBER { \
name = "Escape Pod " + #NUMBER; \
shuttle_area = /area/shuttle/escape_pod/pod##NUMBER; \
shuttle_area = /area/horizon/shuttle/escape_pod/pod##NUMBER; \
location = 0; \
dock_target = "escape_pod_" + #NUMBER; \
arming_controller = "escape_pod_"+ #NUMBER +"_berth"; \
+3 -2
View File
@@ -161,7 +161,7 @@ GLOBAL_LIST_EMPTY(gps_list)
/obj/item/device/gps/ui_interact(mob/user, var/datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "GPS", capitalize_first_letters(name), 460, 600)
ui = new(user, src, "GPS", capitalize_first_letters(name), 720, 960)
ui.open()
/obj/item/device/gps/process()
@@ -247,7 +247,8 @@ GLOBAL_LIST_EMPTY(gps_list)
update_icon()
return
var/area/gpsarea = get_area(src)
GLOB.gps_list[gpstag] = list("tag" = gpstag, "pos_x" = T.x, "pos_y" = T.y, "pos_z" = T.z, "area" = "[gpsarea.name]", "emped" = emped, "compass_color" = compass_color)
var/gps_areaname = get_area_display_name(gpsarea, TRUE, FALSE, FALSE, TRUE)
GLOB.gps_list[gpstag] = list("tag" = gpstag, "pos_x" = T.x, "pos_y" = T.y, "pos_z" = T.z, "area" = "[gps_areaname]", "emped" = emped, "compass_color" = compass_color)
if(check_held_by && held_by && (held_by.get_active_hand() == src || held_by.get_inactive_hand() == src))
update_compass(TRUE)
+9 -12
View File
@@ -189,26 +189,23 @@
switch(target)
if("recreational_areas")
var/list/recreational_areas_list = list(
/area/horizon/crew_quarters/fitness/hallway = 25,
/area/horizon/crew_quarters/fitness/changing = 25,
/area/horizon/crew_quarters/fitness/pool = 25,
/area/horizon/crew_quarters/fitness/gym = 25
/area/horizon/crew/fitness/changing = 25,
/area/horizon/crew/fitness/gym = 25
)
A = pickweight(recreational_areas_list)
if("operations")
var/list/ops_list = list(
/area/operations/break_room = 15,
/area/maintenance/wing/starboard = 20,
/area/maintenance/wing/starboard/deck1 = 20,
/area/operations/office = 10,
/area/operations/storage = 15,
/area/outpost/mining_main/refinery = 20
/area/horizon/operations/break_room = 15,
/area/horizon/maintenance/deck_1/operations/starboard = 20,
/area/horizon/operations/office = 10,
/area/horizon/operations/warehouse = 15,
/area/horizon/operations/mining_main/refinery = 20
)
A = pickweight(ops_list)
if("starboard_wing")
var/list/starboard_wing_list = list(
/area/maintenance/wing/starboard = 50,
/area/maintenance/wing/starboard/far = 50
/area/horizon/maintenance/deck_1/wing/starboard = 50,
/area/horizon/maintenance/deck_1/wing/starboard/far = 50
)
A = pickweight(starboard_wing_list)
if(A)