From f71ea26f72ad92ce5635918c127e78fc7d8c5fec Mon Sep 17 00:00:00 2001
From: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Date: Sat, 15 Jul 2023 16:17:46 -0400
Subject: [PATCH] Machine list is now stored in SSmachines | Remove excessive
use of global lists for specific machine types (#76822)
## About The Pull Request
Removes all of the duplicate global lists for specific machine types
where the only thing they do is store all machines of that type.
Adds machine tracking to SSmachines in the form of a list for all
machines, and then an associative list for machines by their type.
Previously we have machines in multiple global lists, such as airlocks
being in GLOB.doors, GLOB.airlocks, GLOB.machines.
This makes that not a thing, and also means that iterating through
GLOB.machines looking for a specific type is no longer as expensive.
---
code/__HELPERS/game.dm | 2 +-
code/_globalvars/lists/objects.dm | 52 ++++++++---------
code/controllers/subsystem/economy.dm | 2 +-
code/controllers/subsystem/machines.dm | 57 ++++++++++++++++++-
code/controllers/subsystem/nightshift.dm | 2 +-
code/controllers/subsystem/shuttle.dm | 6 +-
.../run_away_from_target.dm | 3 +-
code/datums/station_traits/negative_traits.dm | 2 +-
.../dynamic/dynamic_rulesets_midround.dm | 3 +-
.../dynamic/dynamic_rulesets_roundstart.dm | 21 +++----
code/game/gamemodes/events.dm | 50 ++++++++--------
code/game/machinery/_machinery.dm | 4 +-
code/game/machinery/camera/motion.dm | 4 +-
code/game/machinery/civilian_bounties.dm | 2 +-
code/game/machinery/computer/apc_control.dm | 33 ++++++-----
code/game/machinery/computer/arena.dm | 6 +-
code/game/machinery/computer/mechlaunchpad.dm | 2 +-
code/game/machinery/computer/telescreen.dm | 2 +-
code/game/machinery/doors/airlock.dm | 4 +-
code/game/machinery/doors/door.dm | 2 -
.../embedded_controller/access_controller.dm | 8 +--
code/game/machinery/mass_driver.dm | 2 +-
code/game/machinery/mechlaunchpad.dm | 5 --
.../machinery/satellite/satellite_control.dm | 4 +-
code/game/machinery/status_display.dm | 8 ---
code/game/machinery/syndicatebomb.dm | 2 +-
.../effects/anomalies/anomalies_gravity.dm | 2 +-
.../items/implants/implant_abductor.dm | 2 +-
code/game/objects/items/mail.dm | 2 +-
code/game/objects/items/teleportation.dm | 2 +-
.../construction_console_aux.dm | 2 +-
code/modules/admin/admin_fax_panel.dm | 2 +-
code/modules/admin/topic.dm | 2 +-
code/modules/admin/verbs/adminevents.dm | 2 +-
code/modules/admin/verbs/atmosdebug.dm | 6 +-
code/modules/admin/verbs/debug.dm | 6 +-
code/modules/admin/verbs/ert.dm | 2 +-
code/modules/admin/verbs/secrets.dm | 10 ++--
code/modules/antagonists/abductor/abductor.dm | 2 +-
.../equipment/gear/abductor_clothing.dm | 2 +-
.../antagonists/abductor/machinery/console.dm | 10 ++--
.../antagonists/malf_ai/malf_ai_modules.dm | 14 ++---
.../equipment/nuclear_bomb/_nuclear_bomb.dm | 2 -
.../nukeop/equipment/pinpointer.dm | 11 ++--
code/modules/antagonists/nukeop/nukeop.dm | 8 +--
code/modules/antagonists/pirate/pirate.dm | 2 +-
.../pirate/pirate_shuttle_equipment.dm | 2 +-
.../final_objective/battlecruiser.dm | 2 +-
.../grand_ritual/grand_ritual_finale.dm | 2 +-
code/modules/assembly/doorcontrol.dm | 16 +++---
code/modules/events/brand_intelligence.dm | 2 +-
code/modules/events/electrical_storm.dm | 7 +--
.../events/ghost_role/alien_infestation.dm | 2 +-
.../events/gravity_generator_blackout.dm | 4 +-
code/modules/events/scrubber_overflow.dm | 4 +-
code/modules/events/vent_clog.dm | 4 +-
code/modules/holiday/holidays.dm | 2 +-
.../industrial_lift/tram/tram_lift_master.dm | 2 +-
code/modules/mafia/controller.dm | 2 +-
.../ruins/spaceruin_code/TheDerelict.dm | 2 +-
code/modules/mining/aux_base.dm | 4 +-
code/modules/mob/living/silicon/ai/ai.dm | 6 +-
.../computers/item/computer.dm | 1 -
.../computers/machinery/console_presets.dm | 2 +-
.../file_system/programs/alarm.dm | 8 ---
.../file_system/programs/bounty_board.dm | 4 --
.../file_system/programs/radar.dm | 4 +-
.../file_system/programs/sm_monitor.dm | 2 +-
code/modules/paperwork/fax.dm | 6 +-
code/modules/paperwork/ticketmachine.dm | 2 +-
code/modules/power/apc/apc_main.dm | 4 --
code/modules/power/singularity/singularity.dm | 2 +-
.../delamination_effects.dm | 4 +-
.../modules/power/turbine/turbine_computer.dm | 2 +-
.../projectile/energy/net_snare.dm | 2 +-
code/modules/requests/request_manager.dm | 2 +-
code/modules/shuttle/assault_pod.dm | 2 +-
.../modules/shuttle/battlecruiser_starfury.dm | 2 +-
code/modules/shuttle/navigation_computer.dm | 3 -
code/modules/shuttle/shuttle.dm | 2 +-
code/modules/station_goals/dna_vault.dm | 3 +-
code/modules/station_goals/meteor_shield.dm | 6 +-
82 files changed, 259 insertions(+), 246 deletions(-)
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 2f862f5df6f..b1b359bbb74 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -414,7 +414,7 @@
///Disable power in the station APCs
/proc/power_fail(duration_min, duration_max)
- for(var/obj/machinery/power/apc/current_apc as anything in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/current_apc as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc))
if(!current_apc.cell || !SSmapping.level_trait(current_apc.z, ZTRAIT_STATION))
continue
var/area/apc_area = current_apc.area
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index fb6be9e1b9c..2fd384e69a9 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -1,36 +1,35 @@
-/// Index for all cables, so that powernets don't have to look through the entire world all the time
+/// List of all cables, so that powernets don't have to look through the entire world all the time
GLOBAL_LIST_EMPTY(cable_list)
-/// list of all /obj/effect/portal
+
+/// List of all portals
GLOBAL_LIST_EMPTY(portals)
-/// list of all airlocks
-GLOBAL_LIST_EMPTY(airlocks)
-/// list of all curtains
+
+/// List of all curtains for button tracking
GLOBAL_LIST_EMPTY(curtains)
-/// list of all mechs. Used by hostile mobs target tracking.
+
+/// List of all mechs for hostile mob target tracking
GLOBAL_LIST_EMPTY(mechas_list)
-/// list of all communication consoles and AIs, for automatic shuttle calls when there are none.
+
+/// List of all atoms that can call the shuttle, for automatic shuttle calls when there are none.
GLOBAL_LIST_EMPTY(shuttle_caller_list)
-/// list of ALL machines
-GLOBAL_LIST_EMPTY(machines)
-/// list of all /obj/machinery/computer/camera_advanced/shuttle_docker
-GLOBAL_LIST_EMPTY(navigation_computers)
-/// important to keep track of for managing nukeops war declarations.
+
+/// List of all nukie shuttle boards, for forcing launch delay if they declare war
GLOBAL_LIST_EMPTY(syndicate_shuttle_boards)
-/// list of all bot nagivation beacons, used for patrolling.
+
+/// List of all nav beacons indexed by stringified z level
GLOBAL_LIST_EMPTY(navbeacons)
-/// list of all tracking beacons used by teleporters
+
+/// List of all active teleport beacons
GLOBAL_LIST_EMPTY(teleportbeacons)
-/// list of all MULEbot delivery beacons.
+
+/// List of all active delivery beacons
GLOBAL_LIST_EMPTY(deliverybeacons)
-/// list of all tags associated with delivery beacons.
+
+/// List of all active delivery beacon locations
GLOBAL_LIST_EMPTY(deliverybeacontags)
-GLOBAL_LIST_EMPTY(nuke_list)
-/// list of all machines or programs that can display station alerts
-GLOBAL_LIST_EMPTY(alarmdisplay)
-/// list of all singularities on the station
+
+/// List of all singularity components that exist
GLOBAL_LIST_EMPTY_TYPED(singularities, /datum/component/singularity)
-/// list of all /obj/machinery/mechpad
-GLOBAL_LIST_EMPTY(mechpad_list)
/// list of all /datum/chemical_reaction datums indexed by their typepath. Use this for general lookup stuff
GLOBAL_LIST(chemical_reactions_list)
@@ -64,8 +63,6 @@ GLOBAL_LIST_EMPTY(cooking_recipes_atoms)
GLOBAL_LIST_EMPTY(rcd_list)
/// list of wallmounted intercom radios.
GLOBAL_LIST_EMPTY(intercoms_list)
-/// list of all Area Power Controller machines, separate from machines for powernet speeeeeeed.
-GLOBAL_LIST_EMPTY(apcs_list)
/// list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented...
GLOBAL_LIST_EMPTY(tracked_implants)
/// list of implants the prisoner console can track and send inject commands too
@@ -83,23 +80,22 @@ GLOBAL_LIST_EMPTY(stairs)
GLOBAL_LIST_EMPTY(janitor_devices)
GLOBAL_LIST_EMPTY(trophy_cases)
GLOBAL_LIST_EMPTY(experiment_handlers)
+
///This is a global list of all signs you can change an existing sign or new sign backing to, when using a pen on them.
GLOBAL_LIST_INIT(editable_sign_types, populate_editable_sign_types())
GLOBAL_LIST_EMPTY(wire_color_directory)
GLOBAL_LIST_EMPTY(wire_name_directory)
-GLOBAL_LIST_EMPTY(ai_status_displays)
-
/// List of all instances of /obj/effect/mob_spawn/ghost_role in the game world
GLOBAL_LIST_EMPTY(mob_spawners)
+
/// List of all mobs with the "ghost_direct_control" component
GLOBAL_LIST_EMPTY(joinable_mobs)
-/// List of all station alert consoles, /obj/machinery/computer/station_alert
-GLOBAL_LIST_EMPTY(alert_consoles)
/// List of area names of roundstart station cyborg rechargers, for the low charge/no charge cyborg screen alert tooltips.
GLOBAL_LIST_EMPTY(roundstart_station_borgcharger_areas)
+
/// List of area names of roundstart station mech rechargers, for the low charge/no charge mech screen alert tooltips.
GLOBAL_LIST_EMPTY(roundstart_station_mechcharger_areas)
diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm
index 1b80210f888..88b877d26aa 100644
--- a/code/controllers/subsystem/economy.dm
+++ b/code/controllers/subsystem/economy.dm
@@ -117,7 +117,7 @@ SUBSYSTEM_DEF(economy)
// Assoc list of "z level" -> if it's on the station
// Hack, is station z level is too expensive to do for each machine, I hate this place
var/list/station_z_status = list()
- for(var/obj/machinery/vending/vending_lad in GLOB.machines)
+ for(var/obj/machinery/vending/vending_lad as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/vending))
if(istype(vending_lad, /obj/machinery/vending/custom))
continue
var/vending_level = vending_lad.z
diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm
index 51578de0c34..8a0b17f195b 100644
--- a/code/controllers/subsystem/machines.dm
+++ b/code/controllers/subsystem/machines.dm
@@ -3,6 +3,13 @@ SUBSYSTEM_DEF(machines)
init_order = INIT_ORDER_MACHINES
flags = SS_KEEP_TIMING
wait = 2 SECONDS
+
+ /// Assosciative list of all machines that exist.
+ VAR_PRIVATE/list/machines_by_type = list()
+
+ /// All machines, not just those that are processing.
+ VAR_PRIVATE/list/all_machines = list()
+
var/list/processing = list()
var/list/currentrun = list()
///List of all powernets on the server.
@@ -13,6 +20,46 @@ SUBSYSTEM_DEF(machines)
fire()
return SS_INIT_SUCCESS
+/// Registers a machine with the machine subsystem; should only be called by the machine itself during its creation.
+/datum/controller/subsystem/machines/proc/register_machine(obj/machinery/machine)
+ LAZYADD(machines_by_type[machine.type], machine)
+ all_machines |= machine
+
+/// Removes a machine from the machine subsystem; should only be called by the machine itself inside Destroy.
+/datum/controller/subsystem/machines/proc/unregister_machine(obj/machinery/machine)
+ var/list/existing = machines_by_type[machine.type]
+ existing -= machine
+ if(!length(existing))
+ machines_by_type -= machine.type
+ all_machines -= machine
+
+/// Gets a list of all machines that are either the passed type or a subtype.
+/datum/controller/subsystem/machines/proc/get_machines_by_type_and_subtypes(obj/machinery/machine_type)
+ if(!ispath(machine_type))
+ machine_type = machine_type.type
+ if(!ispath(machine_type, /obj/machinery))
+ CRASH("called get_machines_by_type_and_subtypes with a non-machine type [machine_type]")
+ var/list/machines = list()
+ for(var/next_type in typesof(machine_type))
+ var/list/found_machines = machines_by_type[next_type]
+ if(found_machines)
+ machines += found_machines
+ return machines
+
+
+/// Gets a list of all machines that are the exact passed type.
+/datum/controller/subsystem/machines/proc/get_machines_by_type(obj/machinery/machine_type)
+ if(!ispath(machine_type))
+ machine_type = machine_type.type
+ if(!ispath(machine_type, /obj/machinery))
+ CRASH("called get_machines_by_type with a non-machine type [machine_type]")
+
+ var/list/machines = machines_by_type[machine_type]
+ return machines?.Copy() || list()
+
+/datum/controller/subsystem/machines/proc/get_all_machines()
+ return all_machines.Copy()
+
/datum/controller/subsystem/machines/proc/makepowernets()
for(var/datum/powernet/power_network as anything in powernets)
qdel(power_network)
@@ -25,7 +72,7 @@ SUBSYSTEM_DEF(machines)
propagate_network(power_cable, power_cable.powernet)
/datum/controller/subsystem/machines/stat_entry(msg)
- msg = "M:[length(processing)]|PN:[length(powernets)]"
+ msg = "M:[length(all_machines)]|MT:[length(machines_by_type)]|PM:[length(processing)]|PN:[length(powernets)]"
return ..()
/datum/controller/subsystem/machines/fire(resumed = FALSE)
@@ -56,7 +103,11 @@ SUBSYSTEM_DEF(machines)
propagate_network(PC,PC.powernet)
/datum/controller/subsystem/machines/Recover()
- if (istype(SSmachines.processing))
+ if(islist(SSmachines.processing))
processing = SSmachines.processing
- if (istype(SSmachines.powernets))
+ if(islist(SSmachines.powernets))
powernets = SSmachines.powernets
+ if(islist(SSmachines.all_machines))
+ all_machines = SSmachines.all_machines
+ if(islist(SSmachines.machines_by_type))
+ machines_by_type = SSmachines.machines_by_type
diff --git a/code/controllers/subsystem/nightshift.dm b/code/controllers/subsystem/nightshift.dm
index f1b9bb8a48d..c82c7c1e771 100644
--- a/code/controllers/subsystem/nightshift.dm
+++ b/code/controllers/subsystem/nightshift.dm
@@ -46,7 +46,7 @@ SUBSYSTEM_DEF(nightshift)
/datum/controller/subsystem/nightshift/proc/update_nightshift(active, announce = TRUE, resumed = FALSE, forced = FALSE)
if(!resumed)
- currentrun = GLOB.apcs_list.Copy()
+ currentrun = SSmachines.get_machines_by_type(/obj/machinery/power/apc)
nightshift_active = active
if(announce)
if (active)
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index 74fc736af6e..8e290309069 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -789,9 +789,9 @@ SUBSYSTEM_DEF(shuttle)
hidden_shuttle_turf_images -= remove_images
hidden_shuttle_turf_images += add_images
- for(var/V in GLOB.navigation_computers)
- var/obj/machinery/computer/camera_advanced/shuttle_docker/C = V
- C.update_hidden_docking_ports(remove_images, add_images)
+ for(var/obj/machinery/computer/camera_advanced/shuttle_docker/docking_computer \
+ as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/camera_advanced/shuttle_docker))
+ docking_computer.update_hidden_docking_ports(remove_images, add_images)
QDEL_LIST(remove_images)
diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm
index c082817f4fb..b00f3ee2766 100644
--- a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm
+++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm
@@ -31,7 +31,8 @@
var/turf/target_destination = get_turf(controller.pawn)
for (var/i in 1 to run_distance)
var/turf/test_destination = get_ranged_target_turf_direct(controller.pawn, target, range = i, offset = 180)
- if (test_destination.is_blocked_turf(exclude_mobs = TRUE, source_atom = controller.pawn, ignore_atoms = GLOB.airlocks))
+ var/list/airlocks = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock)
+ if (test_destination.is_blocked_turf(exclude_mobs = TRUE, source_atom = controller.pawn, ignore_atoms = airlocks))
break
target_destination = test_destination
if (target_destination == get_turf(controller.pawn))
diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm
index da28ce782fd..4fc6a464a9c 100644
--- a/code/datums/station_traits/negative_traits.dm
+++ b/code/datums/station_traits/negative_traits.dm
@@ -81,7 +81,7 @@
/datum/station_trait/blackout/on_round_start()
. = ..()
- for(var/obj/machinery/power/apc/apc as anything in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
if(is_station_level(apc.z) && prob(60))
apc.overload_lighting()
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index bf500dc75f2..456cb07f70a 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -472,7 +472,8 @@
/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute()
// 50% chance of being incremented by one
required_candidates += prob(50)
- for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines)
+ var/list/vent_pumps = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump)
+ for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent as anything in vent_pumps)
if(QDELETED(temp_vent))
continue
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index 8a3b5eb5736..975b5dc7e2b 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -632,16 +632,17 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE)
/datum/dynamic_ruleset/roundstart/nuclear/clown_ops/pre_execute()
. = ..()
- if(.)
- var/obj/machinery/nuclearbomb/syndicate/syndicate_nuke = locate() in GLOB.nuke_list
- if(syndicate_nuke)
- var/turf/nuke_turf = get_turf(syndicate_nuke)
- if(nuke_turf)
- new /obj/machinery/nuclearbomb/syndicate/bananium(nuke_turf)
- qdel(syndicate_nuke)
- for(var/datum/mind/clowns in assigned)
- clowns.set_assigned_role(SSjob.GetJobType(/datum/job/clown_operative))
- clowns.special_role = ROLE_CLOWN_OPERATIVE
+ if(!.)
+ return
+
+ var/list/nukes = SSmachines.get_machines_by_type(/obj/machinery/nuclearbomb/syndicate)
+ for(var/obj/machinery/nuclearbomb/syndicate/nuke as anything in nukes)
+ new /obj/machinery/nuclearbomb/syndicate/bananium(nuke.loc)
+ qdel(nuke)
+
+ for(var/datum/mind/clowns in assigned)
+ clowns.set_assigned_role(SSjob.GetJobType(/datum/job/clown_operative))
+ clowns.special_role = ROLE_CLOWN_OPERATIVE
//////////////////////////////////////////////
// //
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 6819805c0c6..ff11c15c65f 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -8,14 +8,15 @@
*/
/proc/power_failure()
priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", ANNOUNCER_POWEROFF)
- for(var/obj/machinery/power/smes/S in GLOB.machines)
- if(istype(get_area(S), /area/station/ai_monitored/turret_protected) || !is_station_level(S.z))
+ var/list/all_smes = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/smes)
+ for(var/obj/machinery/power/smes/smes as anything in all_smes)
+ if(istype(get_area(smes), /area/station/ai_monitored/turret_protected) || !is_station_level(smes.z))
continue
- S.charge = 0
- S.output_level = 0
- S.output_attempt = FALSE
- S.update_appearance()
- S.power_change()
+ smes.charge = 0
+ smes.output_level = 0
+ smes.output_attempt = FALSE
+ smes.update_appearance()
+ smes.power_change()
for(var/area/station_area as anything in GLOB.areas)
if(!station_area.z || !is_station_level(station_area.z))
@@ -30,7 +31,7 @@
station_area.power_environ = FALSE
station_area.power_change()
- for(var/obj/machinery/power/apc/C in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/C as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
if(C.cell && is_station_level(C.z))
var/area/A = C.area
if(GLOB.typecache_powerfailure_safe_areas[A.type])
@@ -45,18 +46,20 @@
*/
/proc/power_restore()
priority_announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", ANNOUNCER_POWERON)
- for(var/obj/machinery/power/apc/C in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/C as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
if(C.cell && is_station_level(C.z))
C.cell.charge = C.cell.maxcharge
COOLDOWN_RESET(C, failure_timer)
- for(var/obj/machinery/power/smes/S in GLOB.machines)
- if(!is_station_level(S.z))
+ var/list/all_smes = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/smes)
+ for(var/obj/machinery/power/smes/smes as anything in all_smes)
+ if(!is_station_level(smes.z))
continue
- S.charge = S.capacity
- S.output_level = S.output_level_max
- S.output_attempt = TRUE
- S.update_appearance()
- S.power_change()
+ smes.charge = smes.capacity
+ smes.output_level = smes.output_level_max
+ smes.output_attempt = TRUE
+ smes.update_appearance()
+ smes.power_change()
+
for(var/area/station_area as anything in GLOB.areas)
if(!station_area.z || !is_station_level(station_area.z))
continue
@@ -79,11 +82,12 @@
*/
/proc/power_restore_quick()
priority_announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", ANNOUNCER_POWERON)
- for(var/obj/machinery/power/smes/S in GLOB.machines)
- if(!is_station_level(S.z))
+ var/list/all_smes = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/smes)
+ for(var/obj/machinery/power/smes/smes as anything in all_smes)
+ if(!is_station_level(smes.z))
continue
- S.charge = S.capacity
- S.output_level = S.output_level_max
- S.output_attempt = TRUE
- S.update_appearance()
- S.power_change()
+ smes.charge = smes.capacity
+ smes.output_level = smes.output_level_max
+ smes.output_attempt = TRUE
+ smes.update_appearance()
+ smes.power_change()
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 41b6d144559..aa3ca9050c6 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -163,7 +163,7 @@
/obj/machinery/Initialize(mapload)
. = ..()
- GLOB.machines += src
+ SSmachines.register_machine(src)
if(ispath(circuit, /obj/item/circuitboard))
circuit = new circuit(src)
@@ -194,7 +194,7 @@
setup_area_power_relationship()
/obj/machinery/Destroy()
- GLOB.machines.Remove(src)
+ SSmachines.unregister_machine(src)
end_processing()
dump_inventory_contents()
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index a00a1c8bf85..f73a786865c 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -86,7 +86,7 @@
return
localMotionTargets |= WEAKREF(AM)
if (!detectTime)
- for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines)
+ for(var/obj/machinery/computer/security/telescreen/entertainment/TV as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/security/telescreen/entertainment))
TV.notify(TRUE)
detectTime = world.time + 30 SECONDS
@@ -103,5 +103,5 @@
detectTime = world.time + 30 SECONDS
else if (world.time > detectTime)
detectTime = 0
- for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines)
+ for(var/obj/machinery/computer/security/telescreen/entertainment/TV as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/security/telescreen/entertainment))
TV.notify(FALSE)
diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm
index e29d86f8d9c..56ced21c1d5 100644
--- a/code/game/machinery/civilian_bounties.dm
+++ b/code/game/machinery/civilian_bounties.dm
@@ -38,7 +38,7 @@
/obj/machinery/computer/piratepad_control/civilian/LateInitialize()
. = ..()
if(cargo_hold_id)
- for(var/obj/machinery/piratepad/civilian/C in GLOB.machines)
+ for(var/obj/machinery/piratepad/civilian/C as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/piratepad/civilian))
if(C.cargo_hold_id == cargo_hold_id)
pad_ref = WEAKREF(C)
return
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 6cecd17e811..eb4975eb073 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -94,22 +94,21 @@
for(var/entry in logs)
data["logs"] += list(list("entry" = entry))
- for(var/apc in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
if(check_apc(apc))
- var/obj/machinery/power/apc/A = apc
- var/has_cell = (A.cell) ? TRUE : FALSE
+ var/has_cell = (apc.cell) ? TRUE : FALSE
data["apcs"] += list(list(
- "name" = A.area.name,
- "operating" = A.operating,
- "charge" = (has_cell) ? A.cell.percent() : "NOCELL",
- "load" = display_power(A.lastused_total),
- "charging" = A.charging,
- "chargeMode" = A.chargemode,
- "eqp" = A.equipment,
- "lgt" = A.lighting,
- "env" = A.environ,
- "responds" = A.aidisabled || A.panel_open,
- "ref" = REF(A)
+ "name" = apc.area.name,
+ "operating" = apc.operating,
+ "charge" = (has_cell) ? apc.cell.percent() : "NOCELL",
+ "load" = display_power(apc.lastused_total),
+ "charging" = apc.charging,
+ "chargeMode" = apc.chargemode,
+ "eqp" = apc.equipment,
+ "lgt" = apc.lighting,
+ "env" = apc.environ,
+ "responds" = apc.aidisabled || apc.panel_open,
+ "ref" = REF(apc)
)
)
return data
@@ -158,7 +157,7 @@
if("access-apc")
var/ref = params["ref"]
playsound(src, SFX_TERMINAL_TYPE, 50, FALSE)
- var/obj/machinery/power/apc/APC = locate(ref) in GLOB.apcs_list
+ var/obj/machinery/power/apc/APC = locate(ref) in SSmachines.get_machines_by_type(/obj/machinery/power/apc)
connect_apc(APC, usr)
if("check-logs")
log_activity("Checked Logs")
@@ -168,7 +167,7 @@
var/ref = params["ref"]
var/type = params["type"]
var/value = params["value"]
- var/obj/machinery/power/apc/target = locate(ref) in GLOB.apcs_list
+ var/obj/machinery/power/apc/target = locate(ref) in SSmachines.get_machines_by_type(/obj/machinery/power/apc)
if(!target)
return
@@ -197,7 +196,7 @@
usr.log_message("set APC [target.area.name] [type] to [setTo]]", LOG_GAME)
if("breaker")
var/ref = params["ref"]
- var/obj/machinery/power/apc/target = locate(ref) in GLOB.apcs_list
+ var/obj/machinery/power/apc/target = locate(ref) in SSmachines.get_machines_by_type(/obj/machinery/power/apc)
target.toggle_breaker(usr)
var/setTo = target.operating ? "On" : "Off"
log_activity("Turned APC [target.area.name]'s breaker [setTo]")
diff --git a/code/game/machinery/computer/arena.dm b/code/game/machinery/computer/arena.dm
index 154b91a3aba..39b39af197b 100644
--- a/code/game/machinery/computer/arena.dm
+++ b/code/game/machinery/computer/arena.dm
@@ -210,7 +210,7 @@
set_doors(closed = TRUE)
/obj/machinery/computer/arena/proc/get_spawn(team)
- for(var/obj/machinery/arena_spawn/A in GLOB.machines)
+ for(var/obj/machinery/arena_spawn/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/arena_spawn))
if(A.arena_id == arena_id && A.team == team)
return A
@@ -244,7 +244,7 @@
/obj/machinery/computer/arena/proc/set_doors(closed = FALSE)
- for(var/obj/machinery/door/poddoor/D in GLOB.machines) //I really dislike pathing of these
+ for(var/obj/machinery/door/poddoor/D as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor))
if(D.id != arena_id)
continue
if(closed)
@@ -385,7 +385,7 @@
/obj/machinery/arena_spawn/proc/get_controller()
if(_controller && !QDELETED(_controller) && _controller.arena_id == arena_id)
return _controller
- for(var/obj/machinery/computer/arena/A in GLOB.machines)
+ for(var/obj/machinery/computer/arena/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/arena))
if(A.arena_id == arena_id)
_controller = A
return _controller
diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm
index 5eeeb86f3f8..c89bbab7fa0 100644
--- a/code/game/machinery/computer/mechlaunchpad.dm
+++ b/code/game/machinery/computer/mechlaunchpad.dm
@@ -35,7 +35,7 @@
connected_mechpad = null
/obj/machinery/computer/mechpad/LateInitialize()
- for(var/obj/machinery/mechpad/pad in GLOB.mechpad_list)
+ for(var/obj/machinery/mechpad/pad as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/mechpad))
if(pad == connected_mechpad)
continue
if(pad.id != id)
diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm
index ff7cf184fff..b03ed092269 100644
--- a/code/game/machinery/computer/telescreen.dm
+++ b/code/game/machinery/computer/telescreen.dm
@@ -271,5 +271,5 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
is_show_active = !is_show_active
say("The [tv_show_name] show has [is_show_active ? "begun" : "ended"]")
var/announcement = is_show_active ? pick(tv_starters) : pick(tv_enders)
- for(var/obj/machinery/computer/security/telescreen/entertainment/tv in GLOB.machines)
+ for(var/obj/machinery/computer/security/telescreen/entertainment/tv as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/security/telescreen/entertainment))
tv.update_shows(is_show_active, tv_network_id, announcement)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index f421a0416b5..9e69e1e3e17 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -193,7 +193,7 @@
id_tag = "[port.shuttle_id]_[id_tag]"
/obj/machinery/door/airlock/proc/update_other_id()
- for(var/obj/machinery/door/airlock/Airlock in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/Airlock as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock))
if(Airlock.closeOtherId == closeOtherId && Airlock != src)
if(!(Airlock in close_others))
close_others += Airlock
@@ -292,7 +292,7 @@
otherlock.close_others -= src
close_others.Cut()
if(id_tag)
- for(var/obj/machinery/door_buttons/D in GLOB.machines)
+ for(var/obj/machinery/door_buttons/D as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door_buttons))
D.removeMe(src)
QDEL_NULL(note)
QDEL_NULL(seal)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index bb8dd36df47..98f830cebb8 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -69,7 +69,6 @@
update_freelook_sight()
air_update_turf(TRUE, TRUE)
register_context()
- GLOB.airlocks += src
if(elevator_mode)
if(elevator_linked_id)
elevator_status = LIFT_PLATFORM_LOCKED
@@ -129,7 +128,6 @@
/obj/machinery/door/Destroy()
update_freelook_sight()
- GLOB.airlocks -= src
if(elevator_mode)
GLOB.elevator_doors -= src
if(spark_system)
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index 5c3c34d3fad..7a92b1bbfaa 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -50,11 +50,11 @@
var/busy
/obj/machinery/door_buttons/access_button/findObjsByTag()
- for(var/obj/machinery/door_buttons/airlock_controller/A in GLOB.machines)
+ for(var/obj/machinery/door_buttons/airlock_controller/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door_buttons/airlock_controller))
if(A.idSelf == idSelf)
controller = A
break
- for(var/obj/machinery/door/airlock/I in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/I as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock))
if(I.id_tag == idDoor)
door = I
break
@@ -120,7 +120,7 @@
exteriorAirlock = null
/obj/machinery/door_buttons/airlock_controller/Destroy()
- for(var/obj/machinery/door_buttons/access_button/A in GLOB.machines)
+ for(var/obj/machinery/door_buttons/access_button/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door_buttons/access_button))
if(A.controller == src)
A.controller = null
return ..()
@@ -241,7 +241,7 @@
lostPower = FALSE
/obj/machinery/door_buttons/airlock_controller/findObjsByTag()
- for(var/obj/machinery/door/door as anything in GLOB.airlocks)
+ for(var/obj/machinery/door/door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door))
if(door.id_tag == idInterior)
interiorAirlock = door
else if(door.id_tag == idExterior)
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 7614abb28a9..f925dfdbdc3 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -22,7 +22,7 @@
id = MASSDRIVER_SHACK
/obj/machinery/mass_driver/Destroy()
- for(var/obj/machinery/computer/pod/control in GLOB.machines)
+ for(var/obj/machinery/computer/pod/control as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/pod))
if(control.id == id)
control.connected = null
return ..()
diff --git a/code/game/machinery/mechlaunchpad.dm b/code/game/machinery/mechlaunchpad.dm
index 306ee2be9ed..10f5ab66903 100644
--- a/code/game/machinery/mechlaunchpad.dm
+++ b/code/game/machinery/mechlaunchpad.dm
@@ -14,11 +14,6 @@
/obj/machinery/mechpad/Initialize(mapload)
. = ..()
display_name = "Orbital Pad - [get_area_name(src)]"
- GLOB.mechpad_list += src
-
-/obj/machinery/mechpad/Destroy()
- GLOB.mechpad_list -= src
- return ..()
/obj/machinery/mechpad/examine(mob/user)
. = ..()
diff --git a/code/game/machinery/satellite/satellite_control.dm b/code/game/machinery/satellite/satellite_control.dm
index 459382da7ed..e8482fe91df 100644
--- a/code/game/machinery/satellite/satellite_control.dm
+++ b/code/game/machinery/satellite/satellite_control.dm
@@ -23,7 +23,7 @@
/obj/machinery/computer/sat_control/proc/toggle(toggled_id)
var/turf/current_turf = get_turf(src)
- for(var/obj/machinery/satellite/satellite in GLOB.machines)
+ for(var/obj/machinery/satellite/satellite as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/satellite))
if(satellite.id != toggled_id)
continue
if(satellite.obj_flags & EMAGGED)
@@ -36,7 +36,7 @@
var/list/data = list()
data["satellites"] = list()
- for(var/obj/machinery/satellite/sat in GLOB.machines)
+ for(var/obj/machinery/satellite/sat as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/satellite))
data["satellites"] += list(list(
"id" = sat.id,
"active" = sat.active,
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 9e2407f2daa..fa99095012f 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -442,14 +442,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/evac, 32)
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32)
-/obj/machinery/status_display/ai/Initialize(mapload)
- . = ..()
- GLOB.ai_status_displays.Add(src)
-
-/obj/machinery/status_display/ai/Destroy()
- GLOB.ai_status_displays.Remove(src)
- . = ..()
-
/obj/machinery/status_display/ai/attack_ai(mob/living/silicon/ai/user)
if(!isAI(user))
return
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 3e59f0a455e..402185e0928 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -595,7 +595,7 @@
/obj/item/syndicatedetonator/attack_self(mob/user)
if(timer < world.time)
- for(var/obj/machinery/syndicatebomb/B in GLOB.machines)
+ for(var/obj/machinery/syndicatebomb/B as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/syndicatebomb))
if(B.active)
B.detonation_timer = world.time + BUTTON_DELAY
detonated++
diff --git a/code/game/objects/effects/anomalies/anomalies_gravity.dm b/code/game/objects/effects/anomalies/anomalies_gravity.dm
index 5fcbafce856..efd49ef502f 100644
--- a/code/game/objects/effects/anomalies/anomalies_gravity.dm
+++ b/code/game/objects/effects/anomalies/anomalies_gravity.dm
@@ -92,7 +92,7 @@
grav_field = new(src, 7, TRUE, rand(0, 3))
/obj/effect/anomaly/grav/high/detonate()
- for(var/obj/machinery/gravity_generator/main/the_generator in GLOB.machines)
+ for(var/obj/machinery/gravity_generator/main/the_generator as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/gravity_generator/main))
if(is_station_level(the_generator.z))
the_generator.blackout()
diff --git a/code/game/objects/items/implants/implant_abductor.dm b/code/game/objects/items/implants/implant_abductor.dm
index 7c71c7c92d4..18255da9b69 100644
--- a/code/game/objects/items/implants/implant_abductor.dm
+++ b/code/game/objects/items/implants/implant_abductor.dm
@@ -53,7 +53,7 @@
else //If we still cannot find a home associated with our team, we just pick a random pad and make it our own.
var/list/consoles = list()
- for(var/obj/machinery/abductor/console/found_console in GLOB.machines)
+ for(var/obj/machinery/abductor/console/found_console as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/console))
consoles += found_console
console = pick(consoles)
if(console)
diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm
index 67e0668f415..9c82720a8e8 100644
--- a/code/game/objects/items/mail.dm
+++ b/code/game/objects/items/mail.dm
@@ -338,7 +338,7 @@
var/nuclear_option_odds = 0.1
/obj/item/paper/fluff/junkmail_redpill/Initialize(mapload)
- var/obj/machinery/nuclearbomb/selfdestruct/self_destruct = locate() in GLOB.nuke_list
+ var/obj/machinery/nuclearbomb/selfdestruct/self_destruct = locate() in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/selfdestruct)
if(!self_destruct || !prob(nuclear_option_odds)) // 1 in 1000 chance of getting 2 random nuke code characters.
add_raw_text("You need to escape the simulation. Don't forget the numbers, they help you remember: '[rand(0,9)][rand(0,9)][rand(0,9)]...'")
return ..()
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index 5abe8facbc3..0cef37ae205 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -170,7 +170,7 @@
return
var/list/locations = list()
- for(var/obj/machinery/computer/teleporter/computer in GLOB.machines)
+ for(var/obj/machinery/computer/teleporter/computer as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter))
var/atom/target = computer.target_ref?.resolve()
if(!target)
computer.target_ref = null
diff --git a/code/game/objects/structures/construction_console/construction_console_aux.dm b/code/game/objects/structures/construction_console/construction_console_aux.dm
index 552d7735d43..0b03a79ce52 100644
--- a/code/game/objects/structures/construction_console/construction_console_aux.dm
+++ b/code/game/objects/structures/construction_console/construction_console_aux.dm
@@ -23,7 +23,7 @@
/obj/machinery/computer/camera_advanced/base_construction/aux/find_spawn_spot()
//Aux base controller. Where the eyeobj will spawn.
var/obj/machinery/computer/auxiliary_base/aux_controller
- for(var/obj/machinery/computer/auxiliary_base/potential_aux_console in GLOB.machines)
+ for(var/obj/machinery/computer/auxiliary_base/potential_aux_console as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/auxiliary_base))
if(istype(get_area(potential_aux_console), allowed_area))
aux_controller = potential_aux_console
break
diff --git a/code/modules/admin/admin_fax_panel.dm b/code/modules/admin/admin_fax_panel.dm
index e4126d89c5d..fe1f03d7d7e 100644
--- a/code/modules/admin/admin_fax_panel.dm
+++ b/code/modules/admin/admin_fax_panel.dm
@@ -28,7 +28,7 @@
/datum/fax_panel_interface/New()
//Get all faxes, and save them to our list.
- for(var/obj/machinery/fax/fax in GLOB.machines)
+ for(var/obj/machinery/fax/fax as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax))
available_faxes += WEAKREF(fax)
//Get all stamps
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index ca811b0f81d..fad407ebed9 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1307,7 +1307,7 @@
if(!check_rights(R_ADMIN))
return
var/code = random_nukecode()
- for(var/obj/machinery/nuclearbomb/selfdestruct/SD in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/selfdestruct/SD as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/selfdestruct))
SD.r_code = code
message_admins("[key_name_admin(usr)] has set the self-destruct \
code to \"[code]\".")
diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm
index 51091a5b4a4..e321dd8b8d9 100644
--- a/code/modules/admin/verbs/adminevents.dm
+++ b/code/modules/admin/verbs/adminevents.dm
@@ -277,7 +277,7 @@
SSshuttle.hostile_environments.Cut()
SSshuttle.checkHostileEnvironment()
-/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list)
+/client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb))
set category = "Admin.Events"
set name = "Toggle Nuke"
set popup_menu = FALSE
diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm
index 81e92a52716..202672e805d 100644
--- a/code/modules/admin/verbs/atmosdebug.dm
+++ b/code/modules/admin/verbs/atmosdebug.dm
@@ -7,19 +7,19 @@
SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Plumbing") // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc!
//all plumbing - yes, some things might get stated twice, doesn't matter.
- for(var/obj/machinery/atmospherics/components/pipe in GLOB.machines)
+ for(var/obj/machinery/atmospherics/components/pipe as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components))
if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes)))
to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE)
//Pipes
- for(var/obj/machinery/atmospherics/pipe/pipe in GLOB.machines)
+ for(var/obj/machinery/atmospherics/pipe/pipe as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/pipe))
if(istype(pipe, /obj/machinery/atmospherics/pipe/smart) || istype(pipe, /obj/machinery/atmospherics/pipe/layer_manifold))
continue
if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes)))
to_chat(usr, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE)
//Nodes
- for(var/obj/machinery/atmospherics/node1 in GLOB.machines)
+ for(var/obj/machinery/atmospherics/node1 as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics))
for(var/obj/machinery/atmospherics/node2 in node1.nodes)
if(!(node1 in node2.nodes))
to_chat(usr, "One-way connection in [node1.name] located at [ADMIN_VERBOSEJMP(node1)]", confidential = TRUE)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index e7cbf88725f..4f22ec71b4a 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -299,7 +299,7 @@
areas_all.Add(A.type)
CHECK_TICK
- for(var/obj/machinery/power/apc/APC in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/APC as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
var/area/A = APC.area
if(!A)
dat += "Skipped over [APC] in invalid location, [APC.loc]."
@@ -328,7 +328,7 @@
areas_with_RC.Add(A.type)
CHECK_TICK
- for(var/obj/machinery/light/L in GLOB.machines)
+ for(var/obj/machinery/light/L as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light))
var/area/A = get_area(L)
if(!A)
dat += "Skipped over [L] in invalid location, [L.loc].
"
@@ -337,7 +337,7 @@
areas_with_light.Add(A.type)
CHECK_TICK
- for(var/obj/machinery/light_switch/LS in GLOB.machines)
+ for(var/obj/machinery/light_switch/LS as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light_switch))
var/area/A = get_area(LS)
if(!A)
dat += "Skipped over [LS] in invalid location, [LS.loc].
"
diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm
index f87eec87675..5a5d86875c5 100644
--- a/code/modules/admin/verbs/ert.dm
+++ b/code/modules/admin/verbs/ert.dm
@@ -254,7 +254,7 @@
//Open the Armory doors
if(ertemplate.opendoors)
- for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
+ for(var/obj/machinery/door/poddoor/ert/door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor/ert))
door.open()
CHECK_TICK
return TRUE
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 746aefe29fa..eb6186f212e 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -71,7 +71,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
if("maint_access_engiebrig")
if(!is_debugger)
return
- for(var/obj/machinery/door/airlock/maintenance/doors in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/maintenance/doors as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock/maintenance))
if ((ACCESS_MAINT_TUNNELS in doors.req_access) || (ACCESS_MAINT_TUNNELS in doors.req_one_access))
doors.req_access = list()
doors.req_one_access = list(ACCESS_BRIG, ACCESS_ENGINEERING)
@@ -79,7 +79,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
if("maint_access_brig")
if(!is_debugger)
return
- for(var/obj/machinery/door/airlock/maintenance/doors in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/maintenance/doors as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock/maintenance))
if ((ACCESS_MAINT_TUNNELS in doors.req_access) || (ACCESS_MAINT_TUNNELS in doors.req_one_access))
doors.req_access = list(ACCESS_BRIG)
doors.req_one_access = list()
@@ -328,7 +328,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
if(!is_funmin)
return
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Egalitarian Station"))
- for(var/obj/machinery/door/airlock/W in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/W as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock))
if(is_station_level(W.z) && !istype(get_area(W), /area/station/command) && !istype(get_area(W), /area/station/commons) && !istype(get_area(W), /area/station/service) && !istype(get_area(W), /area/station/command/heads_quarters) && !istype(get_area(W), /area/station/security/prison))
W.req_access = list()
message_admins("[key_name_admin(holder)] activated Egalitarian Station mode")
@@ -348,7 +348,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
return
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Break All Lights"))
message_admins("[key_name_admin(holder)] broke all lights")
- for(var/obj/machinery/light/L in GLOB.machines)
+ for(var/obj/machinery/light/L as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light))
L.break_light_tube()
stoplag()
if("whiteout")
@@ -356,7 +356,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
return
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Fix All Lights"))
message_admins("[key_name_admin(holder)] fixed all lights")
- for(var/obj/machinery/light/L in GLOB.machines)
+ for(var/obj/machinery/light/L as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light))
L.fix()
stoplag()
if("customportal")
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index 32d8d1e7b91..2cfc10d180d 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -199,7 +199,7 @@
explanation_text = "Experiment on [target_amount] humans."
/datum/objective/experiment/check_completion()
- for(var/obj/machinery/abductor/experiment/E in GLOB.machines)
+ for(var/obj/machinery/abductor/experiment/E as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/experiment))
if(!istype(team, /datum/team/abductor_team))
return FALSE
var/datum/team/abductor_team/T = team
diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_clothing.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_clothing.dm
index dae6e282db8..c54ce6937d8 100644
--- a/code/modules/antagonists/abductor/equipment/gear/abductor_clothing.dm
+++ b/code/modules/antagonists/abductor/equipment/gear/abductor_clothing.dm
@@ -155,7 +155,7 @@
/obj/item/clothing/suit/armor/abductor/Destroy()
STOP_PROCESSING(SSobj, src)
- for(var/obj/machinery/abductor/console/mothership_console in GLOB.machines)
+ for(var/obj/machinery/abductor/console/mothership_console as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/console))
if(mothership_console.vest == src)
mothership_console.vest = null
break
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index 60bf949f8d2..b76a25ca720 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -1,5 +1,5 @@
/proc/get_abductor_console(team_number)
- for(var/obj/machinery/abductor/console/C in GLOB.machines)
+ for(var/obj/machinery/abductor/console/C as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/console))
if(C.team_number == team_number)
return C
@@ -206,18 +206,18 @@
if(!team_number)
return
- for(var/obj/machinery/abductor/pad/p in GLOB.machines)
+ for(var/obj/machinery/abductor/pad/p as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/pad))
if(p.team_number == team_number)
pad = p
pad.console = src
break
- for(var/obj/machinery/abductor/experiment/e in GLOB.machines)
+ for(var/obj/machinery/abductor/experiment/e as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/experiment))
if(e.team_number == team_number)
experiment = e
e.console = src
- for(var/obj/machinery/computer/camera_advanced/abductor/c in GLOB.machines)
+ for(var/obj/machinery/computer/camera_advanced/abductor/c as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/camera_advanced/abductor))
if(c.team_number == team_number)
camera = c
c.console = src
@@ -252,7 +252,7 @@
if(vest == V)
return FALSE
- for(var/obj/machinery/abductor/console/C in GLOB.machines)
+ for(var/obj/machinery/abductor/console/C as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/abductor/console))
if(C.vest == V)
C.vest = null
break
diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm
index 466857240b9..21dd503af14 100644
--- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm
+++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm
@@ -385,7 +385,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
/datum/action/innate/ai/lockdown/Activate()
hack_in_progress = TRUE
- for(var/obj/machinery/door/locked_down as anything in GLOB.airlocks)
+ for(var/obj/machinery/door/locked_down as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door))
if(QDELETED(locked_down) || !is_station_level(locked_down.z))
continue
INVOKE_ASYNC(locked_down, TYPE_PROC_REF(/obj/machinery/door, hostile_lockdown), owner)
@@ -405,7 +405,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
/// For Lockdown malf AI ability. Opens all doors on the station.
/proc/_malf_ai_undo_lockdown()
- for(var/obj/machinery/door/locked_down as anything in GLOB.airlocks)
+ for(var/obj/machinery/door/locked_down as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door))
if(QDELETED(locked_down) || !is_station_level(locked_down.z))
continue
INVOKE_ASYNC(locked_down, TYPE_PROC_REF(/obj/machinery/door, disable_lockdown))
@@ -565,7 +565,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
desc = "[desc] It has [uses] use\s remaining."
/datum/action/innate/ai/blackout/Activate()
- for(var/obj/machinery/power/apc/apc in GLOB.apcs_list)
+ for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
if(prob(30 * apc.overload))
apc.overload_lighting()
else
@@ -726,12 +726,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
uses = 1
/datum/action/innate/ai/break_fire_alarms/Activate()
- for(var/obj/machinery/firealarm/bellman in GLOB.machines)
+ for(var/obj/machinery/firealarm/bellman as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/firealarm))
if(!is_station_level(bellman.z))
continue
bellman.obj_flags |= EMAGGED
bellman.update_appearance()
- for(var/obj/machinery/door/firedoor/firelock in GLOB.machines)
+ for(var/obj/machinery/door/firedoor/firelock as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/firedoor))
if(!is_station_level(firelock.z))
continue
firelock.emag_act(owner_AI, src)
@@ -756,7 +756,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
uses = 1
/datum/action/innate/ai/emergency_lights/Activate()
- for(var/obj/machinery/light/L in GLOB.machines)
+ for(var/obj/machinery/light/L as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light))
if(is_station_level(L.z))
L.no_low_power = TRUE
INVOKE_ASYNC(L, TYPE_PROC_REF(/obj/machinery/light/, update), FALSE)
@@ -857,7 +857,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
unlock_sound = 'sound/items/rped.ogg'
/datum/ai_module/upgrade/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
- for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines)
+ for(var/obj/machinery/porta_turret/ai/turret as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/porta_turret/ai))
turret.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES | EMP_PROTECT_CONTENTS)
turret.max_integrity = 200
turret.repair_damage(200)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
index a16414e0f6c..bf5e4f1e164 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
@@ -57,7 +57,6 @@ GLOBAL_VAR(station_nuke_source)
/obj/machinery/nuclearbomb/Initialize(mapload)
. = ..()
countdown = new(src)
- GLOB.nuke_list += src
core = new /obj/item/nuke_core(src)
STOP_PROCESSING(SSobj, core)
update_appearance()
@@ -69,7 +68,6 @@ GLOBAL_VAR(station_nuke_source)
if(!exploding)
// If we're not exploding, set the alert level back to normal
toggle_nuke_safety()
- GLOB.nuke_list -= src
QDEL_NULL(countdown)
QDEL_NULL(core)
return ..()
diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
index 3e9b1511a23..1225021327a 100644
--- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm
+++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
@@ -15,7 +15,7 @@
else
msg = "Its tracking indicator is blank."
. += msg
- for(var/obj/machinery/nuclearbomb/bomb as anything in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/bomb as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb))
if(bomb.timing)
. += "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]."
@@ -23,7 +23,7 @@
..()
if(!active || alert)
return
- for(var/obj/machinery/nuclearbomb/bomb as anything in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/bomb as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb))
if(!bomb.timing)
continue
alert = TRUE
@@ -44,10 +44,9 @@
var/mob/living/silicon/ai/A = V
if(A.nuking)
target = A
- for(var/V in GLOB.apcs_list)
- var/obj/machinery/power/apc/A = V
- if(A.malfhack && A.occupier)
- target = A
+ for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
+ if(apc.malfhack && apc.occupier)
+ target = apc
if(TRACK_INFILTRATOR)
target = SSshuttle.getShuttle("syndicate")
..()
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index fc8f089c606..7f0863debf5 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -82,14 +82,14 @@
/datum/antagonist/nukeop/proc/assign_nuke()
if(nuke_team && !nuke_team.tracked_nuke)
nuke_team.memorized_code = random_nukecode()
- var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in GLOB.nuke_list
+ var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in SSmachines.get_machines_by_type(/obj/machinery/nuclearbomb/syndicate)
if(nuke)
nuke_team.tracked_nuke = nuke
if(nuke.r_code == NUKE_CODE_UNSET)
nuke.r_code = nuke_team.memorized_code
else //Already set by admins/something else?
nuke_team.memorized_code = nuke.r_code
- for(var/obj/machinery/nuclearbomb/beer/beernuke in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/beer/beernuke as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/beer))
beernuke.r_code = nuke_team.memorized_code
else
stack_trace("Syndicate nuke not found during nuke team creation.")
@@ -173,7 +173,7 @@
/datum/antagonist/nukeop/proc/admin_tell_code(mob/admin)
var/code
- for (var/obj/machinery/nuclearbomb/bombue as anything in GLOB.nuke_list)
+ for (var/obj/machinery/nuclearbomb/bombue as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb))
if (length(bombue.r_code) <= 5 && bombue.r_code != initial(bombue.r_code))
code = bombue.r_code
break
@@ -314,7 +314,7 @@
/datum/antagonist/nukeop/lone/assign_nuke()
if(nuke_team && !nuke_team.tracked_nuke)
nuke_team.memorized_code = random_nukecode()
- var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list
+ var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in SSmachines.get_machines_by_type(/obj/machinery/nuclearbomb/selfdestruct)
if(nuke)
nuke_team.tracked_nuke = nuke
if(nuke.r_code == NUKE_CODE_UNSET)
diff --git a/code/modules/antagonists/pirate/pirate.dm b/code/modules/antagonists/pirate/pirate.dm
index c88c49873af..15a028b24d7 100644
--- a/code/modules/antagonists/pirate/pirate.dm
+++ b/code/modules/antagonists/pirate/pirate.dm
@@ -57,7 +57,7 @@
/datum/team/pirate/proc/forge_objectives()
var/datum/objective/loot/getbooty = new()
getbooty.team = src
- for(var/obj/machinery/computer/piratepad_control/P in GLOB.machines)
+ for(var/obj/machinery/computer/piratepad_control/P as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/piratepad_control))
var/area/A = get_area(P)
if(istype(A,/area/shuttle/pirate))
getbooty.cargo_hold = P
diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
index 105570e9e4b..49a87d05461 100644
--- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
+++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
@@ -230,7 +230,7 @@
/obj/machinery/computer/piratepad_control/LateInitialize()
. = ..()
if(cargo_hold_id)
- for(var/obj/machinery/piratepad/P in GLOB.machines)
+ for(var/obj/machinery/piratepad/P as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/piratepad))
if(P.cargo_hold_id == cargo_hold_id)
pad_ref = WEAKREF(P)
return
diff --git a/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm b/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm
index 2e3b9c791bf..b136a6f695c 100644
--- a/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm
+++ b/code/modules/antagonists/traitor/objectives/final_objective/battlecruiser.dm
@@ -19,7 +19,7 @@
/datum/traitor_objective/ultimate/battlecruiser/on_objective_taken(mob/user)
. = ..()
team = new()
- var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list
+ var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in SSmachines.get_machines_by_type(/obj/machinery/nuclearbomb/selfdestruct)
if(nuke.r_code == NUKE_CODE_UNSET)
nuke.r_code = random_nukecode()
team.nuke = nuke
diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_ritual_finale.dm b/code/modules/antagonists/wizard/grand_ritual/grand_ritual_finale.dm
index 962fa24450b..4b090b220d0 100644
--- a/code/modules/antagonists/wizard/grand_ritual/grand_ritual_finale.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/grand_ritual_finale.dm
@@ -290,7 +290,7 @@
/datum/grand_finale/all_access/trigger(mob/living/carbon/human/invoker)
message_admins("[key_name(invoker)] removed all door access requirements")
- for(var/obj/machinery/door/target_door as anything in GLOB.airlocks)
+ for(var/obj/machinery/door/target_door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door))
if(is_station_level(target_door.z))
target_door.unlock()
target_door.req_access = list()
diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm
index ad264876286..552b995aab4 100644
--- a/code/modules/assembly/doorcontrol.dm
+++ b/code/modules/assembly/doorcontrol.dm
@@ -27,7 +27,7 @@
if(cooldown)
return
cooldown = TRUE
- for(var/obj/machinery/door/poddoor/M in GLOB.airlocks)
+ for(var/obj/machinery/door/poddoor/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor))
if(M.id == src.id)
if(openclose == null || !sync_doors)
openclose = M.density
@@ -75,7 +75,7 @@
cooldown = TRUE
var/doors_need_closing = FALSE
var/list/obj/machinery/door/airlock/open_or_close = list()
- for(var/obj/machinery/door/airlock/D in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/D as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock))
if(D.id_tag == src.id)
if(specialfunctions & OPEN)
open_or_close += D
@@ -112,21 +112,21 @@
if(cooldown)
return
cooldown = TRUE
- for(var/obj/machinery/door/poddoor/M in GLOB.airlocks)
+ for(var/obj/machinery/door/poddoor/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor))
if (M.id == src.id)
INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/door/poddoor, open))
addtimer(CALLBACK(src, PROC_REF(activate_stage2)), 1 SECONDS)
/obj/item/assembly/control/massdriver/proc/activate_stage2()
- for(var/obj/machinery/mass_driver/M in GLOB.machines)
+ for(var/obj/machinery/mass_driver/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/mass_driver))
if(M.id == src.id)
M.drive()
addtimer(CALLBACK(src, PROC_REF(activate_stage3)), 6 SECONDS)
/obj/item/assembly/control/massdriver/proc/activate_stage3()
- for(var/obj/machinery/door/poddoor/M in GLOB.airlocks)
+ for(var/obj/machinery/door/poddoor/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor))
if (M.id == src.id)
INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/door/poddoor, close))
@@ -141,11 +141,11 @@
if(cooldown)
return
cooldown = TRUE
- for(var/obj/machinery/sparker/M in GLOB.machines)
+ for(var/obj/machinery/sparker/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/sparker))
if (M.id == src.id)
INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/sparker, ignite))
- for(var/obj/machinery/igniter/M in GLOB.machines)
+ for(var/obj/machinery/igniter/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/igniter))
if(M.id == src.id)
INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/igniter, toggle))
@@ -159,7 +159,7 @@
if(cooldown)
return
cooldown = TRUE
- for(var/obj/machinery/flasher/M in GLOB.machines)
+ for(var/obj/machinery/flasher/M as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/flasher))
if(M.id == src.id)
INVOKE_ASYNC(M, TYPE_PROC_REF(/obj/machinery/flasher, flash))
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index b1d6e055506..bbd4e5ee788 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -34,7 +34,7 @@
/datum/round_event/brand_intelligence/setup()
//select our origin machine (which will also be the type of vending machine affected.)
- for(var/obj/machinery/vending/vendor in GLOB.machines)
+ for(var/obj/machinery/vending/vendor as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/vending))
if(!vendor.onstation)
continue
if(!vendor.density)
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 1309887d4b7..269bc5f11e3 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -30,7 +30,6 @@
return
for(var/centre in epicentreList)
- for(var/a in GLOB.apcs_list)
- var/obj/machinery/power/apc/A = a
- if(get_dist(centre, A) <= lightsoutRange)
- A.overload_lighting()
+ for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machines_by_type(/obj/machinery/power/apc))
+ if(get_dist(centre, apc) <= lightsoutRange)
+ apc.overload_lighting()
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index afcb31fe5a8..8c3741ccef2 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -46,7 +46,7 @@
/datum/round_event/ghost_role/alien_infestation/spawn_role()
var/list/vents = list()
- for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines)
+ for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump))
if(QDELETED(temp_vent))
continue
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
diff --git a/code/modules/events/gravity_generator_blackout.dm b/code/modules/events/gravity_generator_blackout.dm
index 89cc5a43367..84d67753dce 100644
--- a/code/modules/events/gravity_generator_blackout.dm
+++ b/code/modules/events/gravity_generator_blackout.dm
@@ -13,7 +13,7 @@
return .
var/station_generator_exists = FALSE
- for(var/obj/machinery/gravity_generator/main/the_generator in GLOB.machines)
+ for(var/obj/machinery/gravity_generator/main/the_generator as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/gravity_generator/main))
if(is_station_level(the_generator.z))
station_generator_exists = TRUE
@@ -29,6 +29,6 @@
priority_announce("Gravnospheric anomalies detected near [station_name()]. Manual reset of generators is required.", "Anomaly Alert", ANNOUNCER_GRANOMALIES)
/datum/round_event/gravity_generator_blackout/start()
- for(var/obj/machinery/gravity_generator/main/the_generator in GLOB.machines)
+ for(var/obj/machinery/gravity_generator/main/the_generator as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/gravity_generator/main))
if(is_station_level(the_generator.z))
the_generator.blackout()
diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm
index e9bf0c8b582..6aad17f00fa 100644
--- a/code/modules/events/scrubber_overflow.dm
+++ b/code/modules/events/scrubber_overflow.dm
@@ -70,7 +70,7 @@
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
/datum/round_event/scrubber_overflow/setup()
- for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
+ for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_scrubber))
var/turf/scrubber_turf = get_turf(temp_vent)
if(!scrubber_turf)
continue
@@ -89,7 +89,7 @@
. = ..()
if(!.)
return
- for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
+ for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_scrubber))
var/turf/scrubber_turf = get_turf(temp_vent)
if(!scrubber_turf)
continue
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index 93645db8f96..4a504aa5a2a 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -12,7 +12,7 @@
. = ..()
if(!.)
return
- for(var/obj/machinery/atmospherics/components/unary/vent_pump/vent in GLOB.machines)
+ for(var/obj/machinery/atmospherics/components/unary/vent_pump/vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump))
var/turf/vent_turf = get_turf(vent)
if(vent_turf && is_station_level(vent_turf.z) && !vent.welded)
return TRUE //make sure we have a valid vent to spawn from.
@@ -89,7 +89,7 @@
/datum/round_event/vent_clog/proc/get_vent()
var/list/vent_list = list()
- for(var/obj/machinery/atmospherics/components/unary/vent_pump/vent in GLOB.machines)
+ for(var/obj/machinery/atmospherics/components/unary/vent_pump/vent as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump))
var/turf/vent_turf = get_turf(vent)
if(vent_turf && is_station_level(vent_turf.z) && !vent.welded && !vent_turf.is_blocked_turf_ignore_climbable())
vent_list += vent
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index ec07f89ea52..1565bf74ba4 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -797,7 +797,7 @@
)
/datum/holiday/xmas/proc/roundstart_celebrate()
- for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
+ for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/security/telescreen/entertainment))
Monitor.icon_state_on = "entertainment_xmas"
for(var/mob/living/basic/pet/dog/corgi/ian/Ian in GLOB.mob_living_list)
diff --git a/code/modules/industrial_lift/tram/tram_lift_master.dm b/code/modules/industrial_lift/tram/tram_lift_master.dm
index c21ed7b7af1..ed031d3dd24 100644
--- a/code/modules/industrial_lift/tram/tram_lift_master.dm
+++ b/code/modules/industrial_lift/tram/tram_lift_master.dm
@@ -204,7 +204,7 @@
* The tram doors are in a list of airlocks and we apply the proc on that list.
*/
/datum/lift_master/tram/proc/update_tram_doors(action)
- for(var/obj/machinery/door/window/tram/tram_door in GLOB.airlocks)
+ for(var/obj/machinery/door/window/tram/tram_door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/window/tram))
if(tram_door.associated_lift != specific_lift_id)
continue
set_door_state(tram_door, action)
diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm
index 629e9453d7d..a0e5b26b5d9 100644
--- a/code/modules/mafia/controller.dm
+++ b/code/modules/mafia/controller.dm
@@ -414,7 +414,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment())
* * close: boolean, the state you want the curtains in.
*/
/datum/mafia_controller/proc/toggle_night_curtains(close)
- for(var/obj/machinery/door/poddoor/D in GLOB.airlocks) //I really dislike pathing of these
+ for(var/obj/machinery/door/poddoor/D as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor))
if(D.id != "mafia") //so as to not trigger shutters on station, lol
continue
if(close)
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm
index 642877e480b..3507cb7d947 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm
@@ -75,7 +75,7 @@
///Initializes airlock links.
/obj/machinery/computer/vaultcontroller/proc/find_airlocks()
- for(var/obj/machinery/door/airlock/A in GLOB.airlocks)
+ for(var/obj/machinery/door/airlock/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock))
if(A.id_tag == "derelictvault")
if(!door1)
door1 = A
diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm
index 4e46626a432..9d97ec53663 100644
--- a/code/modules/mining/aux_base.dm
+++ b/code/modules/mining/aux_base.dm
@@ -280,7 +280,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32)
var/turf/T = get_turf(user)
var/obj/machinery/computer/auxiliary_base/AB
- for (var/obj/machinery/computer/auxiliary_base/A in GLOB.machines)
+ for (var/obj/machinery/computer/auxiliary_base/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/auxiliary_base))
if(is_station_level(A.z))
AB = A
break
@@ -362,7 +362,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/auxiliary_base, 32)
to_chat(user, span_warning("This device is only to be used in a mining zone."))
return
var/obj/machinery/computer/auxiliary_base/aux_base_console
- for(var/obj/machinery/computer/auxiliary_base/ABC in GLOB.machines)
+ for(var/obj/machinery/computer/auxiliary_base/ABC as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/auxiliary_base))
if(get_dist(landing_spot, ABC) <= console_range)
aux_base_console = ABC
break
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 5f8faa339d5..eb1044166bd 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -284,7 +284,7 @@
/// Apply an emote to all AI status displays on the station
/mob/living/silicon/ai/proc/apply_emote_display(emote)
- for(var/obj/machinery/status_display/ai/ai_display as anything in GLOB.ai_status_displays)
+ for(var/obj/machinery/status_display/ai/ai_display as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/status_display/ai))
ai_display.emotion = emote
ai_display.update()
@@ -489,14 +489,14 @@
src << browse(last_tablet_note_seen, "window=show_tablet")
//Carn: holopad requests
if(href_list["jump_to_holopad"])
- var/obj/machinery/holopad/Holopad = locate(href_list["jump_to_holopad"]) in GLOB.machines
+ var/obj/machinery/holopad/Holopad = locate(href_list["jump_to_holopad"]) in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/holopad)
if(Holopad)
cam_prev = get_turf(eyeobj)
eyeobj.setLoc(Holopad)
else
to_chat(src, span_notice("Unable to locate the holopad."))
if(href_list["project_to_holopad"])
- var/obj/machinery/holopad/Holopad = locate(href_list["project_to_holopad"]) in GLOB.machines
+ var/obj/machinery/holopad/Holopad = locate(href_list["project_to_holopad"]) in SSmachines.get_machines_by_type(/obj/machinery/holopad)
if(Holopad)
lastloc = get_turf(eyeobj)
Holopad.attack_ai_secondary(src) //may as well recycle
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 31e7724e6ad..063d8640d32 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -119,7 +119,6 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
/obj/item/modular_computer/Initialize(mapload)
. = ..()
-
START_PROCESSING(SSobj, src)
if(!physical)
physical = src
diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm
index 69d4f445ed0..00af9975e24 100644
--- a/code/modules/modular_computers/computers/machinery/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console_presets.dm
@@ -123,7 +123,7 @@
chatprogram.username = "cargo_requests_operator"
var/datum/ntnet_conversation/cargochat = chatprogram.create_new_channel("#cargobus", strong = TRUE)
- for(var/obj/machinery/modular_computer/preset/cargochat/cargochat_console in GLOB.machines)
+ for(var/obj/machinery/modular_computer/preset/cargochat/cargochat_console as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/modular_computer/preset/cargochat))
if(cargochat_console == src)
continue
var/datum/computer_file/program/chatclient/other_chatprograms = cargochat_console.cpu.find_file_by_name("ntnrc_client")
diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm
index e1205f92c6a..c1aedb9d5d9 100644
--- a/code/modules/modular_computers/file_system/programs/alarm.dm
+++ b/code/modules/modular_computers/file_system/programs/alarm.dm
@@ -46,11 +46,3 @@
program_icon_state = "alert-red"
ui_header = "alarm_red.gif"
update_computer_icon() // Always update the icon after we check our conditional because we might've changed it
-
-/datum/computer_file/program/alarm_monitor/on_start(mob/user)
- . = ..(user)
- GLOB.alarmdisplay += src
-
-/datum/computer_file/program/alarm_monitor/kill_program()
- GLOB.alarmdisplay -= src
- return ..()
diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm
index e24de13947a..cb7f6c288bb 100644
--- a/code/modules/modular_computers/file_system/programs/bounty_board.dm
+++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm
@@ -127,7 +127,3 @@
if("bountyText")
bounty_text = (params["bountytext"])
return TRUE
-
-/datum/computer_file/program/bounty_board/Destroy()
- GLOB.allbountyboards -= computer
- . = ..()
diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm
index 2298daa8d37..06aefba487f 100644
--- a/code/modules/modular_computers/file_system/programs/radar.dm
+++ b/code/modules/modular_computers/file_system/programs/radar.dm
@@ -335,7 +335,7 @@
objects = list()
// All the nukes
- for(var/obj/machinery/nuclearbomb/nuke as anything in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/nuke as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb))
var/list/nuke_info = list(
ref = REF(nuke),
name = nuke.name,
@@ -362,7 +362,7 @@
/datum/computer_file/program/radar/fission360/on_examine(obj/item/modular_computer/source, mob/user)
var/list/examine_list = list()
- for(var/obj/machinery/nuclearbomb/bomb as anything in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/bomb as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb))
if(bomb.timing)
examine_list += span_danger("Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()].")
return examine_list
diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm
index 814ae748e12..b95927417cd 100644
--- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm
@@ -34,7 +34,7 @@
var/turf/user_turf = get_turf(computer.ui_host())
if(!user_turf)
return
- for(var/obj/machinery/power/supermatter_crystal/sm in GLOB.machines)
+ for(var/obj/machinery/power/supermatter_crystal/sm as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/supermatter_crystal))
//Exclude Syndicate owned, Delaminating, not within coverage, not on a tile.
if (!sm.include_in_cims || !isturf(sm.loc) || !(is_station_level(sm.z) || is_mining_level(sm.z) || sm.z == user_turf.z))
continue
diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm
index 081f9aca473..e5149ecde7e 100644
--- a/code/modules/paperwork/fax.dm
+++ b/code/modules/paperwork/fax.dm
@@ -221,7 +221,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department
/obj/machinery/fax/ui_data(mob/user)
var/list/data = list()
//Record a list of all existing faxes.
- for(var/obj/machinery/fax/FAX in GLOB.machines)
+ for(var/obj/machinery/fax/FAX as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax))
if(FAX.fax_id == fax_id) //skip yourself
continue
var/list/fax_data = list()
@@ -327,7 +327,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department
* * id - The network ID of the fax machine you want to send the item to.
*/
/obj/machinery/fax/proc/send(obj/item/loaded, id)
- for(var/obj/machinery/fax/FAX in GLOB.machines)
+ for(var/obj/machinery/fax/FAX as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax))
if (FAX.fax_id != id)
continue
if (FAX.jammed)
@@ -447,7 +447,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department
* * new_fax_name - The text of the name to be checked for a match.
*/
/obj/machinery/fax/proc/fax_name_exist(new_fax_name)
- for(var/obj/machinery/fax/FAX in GLOB.machines)
+ for(var/obj/machinery/fax/FAX as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/fax))
if (FAX.fax_name == new_fax_name)
return TRUE
return FALSE
diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm
index b17d25ece2a..befa61d24ec 100644
--- a/code/modules/paperwork/ticketmachine.dm
+++ b/code/modules/paperwork/ticketmachine.dm
@@ -137,7 +137,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32)
/// Locate the ticket machine to which we're linked by our ID
/obj/item/assembly/control/ticket_machine/proc/find_machine()
- for(var/obj/machinery/ticket_machine/ticketsplease in GLOB.machines)
+ for(var/obj/machinery/ticket_machine/ticketsplease as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/ticket_machine))
if(ticketsplease.id == id)
ticket_machine_ref = WEAKREF(ticketsplease)
if(ticket_machine_ref)
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index e7ea0e1497a..48a5fdaa48e 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -213,11 +213,7 @@
AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Toggle interface lock")
AddElement(/datum/element/contextual_screentip_mob_typechecks, hovering_mob_typechecks)
- GLOB.apcs_list += src
-
/obj/machinery/power/apc/Destroy()
- GLOB.apcs_list -= src
-
if(malfai && operating)
malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000)
disconnect_from_area()
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index d0d9e1c5b0f..23e886e6adc 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -69,7 +69,7 @@
expand(current_size)
- for (var/obj/machinery/power/singularity_beacon/singu_beacon in GLOB.machines)
+ for (var/obj/machinery/power/singularity_beacon/singu_beacon as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/singularity_beacon))
if (singu_beacon.active)
new_component.target = singu_beacon
break
diff --git a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm
index d22f97578f9..16074128b51 100644
--- a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm
+++ b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm
@@ -120,7 +120,7 @@
// set supermatter cascade to true, to prevent auto evacuation due to no way of calling the shuttle
SSshuttle.supermatter_cascade = TRUE
// set hijack completion timer to infinity, so that you cant prematurely end the round with a hijack
- for(var/obj/machinery/computer/emergency_shuttle/console in GLOB.machines)
+ for(var/obj/machinery/computer/emergency_shuttle/console as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/emergency_shuttle))
console.hijack_completion_flight_time_set = INFINITY
/* This logic is to keep uncalled shuttles uncalled
@@ -164,7 +164,7 @@
if(SSsecurity_level.get_current_level_as_number() != SEC_LEVEL_DELTA)
SSsecurity_level.set_level(SEC_LEVEL_DELTA) // skip the announcement and shuttle timer adjustment in set_security_level()
make_maint_all_access()
- for(var/obj/machinery/light/light_to_break in GLOB.machines)
+ for(var/obj/machinery/light/light_to_break as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light))
if(prob(35))
light_to_break.set_major_emergency_light()
continue
diff --git a/code/modules/power/turbine/turbine_computer.dm b/code/modules/power/turbine/turbine_computer.dm
index 791bca97397..8e8ba8deb4c 100644
--- a/code/modules/power/turbine/turbine_computer.dm
+++ b/code/modules/power/turbine/turbine_computer.dm
@@ -20,7 +20,7 @@
/obj/machinery/computer/turbine_computer/locate_machinery(multitool_connection)
if(!mapping_id)
return
- for(var/obj/machinery/power/turbine/core_rotor/main in GLOB.machines)
+ for(var/obj/machinery/power/turbine/core_rotor/main as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/turbine/core_rotor))
if(main.mapping_id != mapping_id)
continue
register_machine(main)
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
index be1f4b7a303..440ab9438e2 100644
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ b/code/modules/projectiles/projectile/energy/net_snare.dm
@@ -32,7 +32,7 @@
/obj/effect/nettingportal/Initialize(mapload)
. = ..()
var/obj/item/beacon/teletarget = null
- for(var/obj/machinery/computer/teleporter/com in GLOB.machines)
+ for(var/obj/machinery/computer/teleporter/com as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter))
var/atom/target = com.target_ref?.resolve()
if(target)
if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
diff --git a/code/modules/requests/request_manager.dm b/code/modules/requests/request_manager.dm
index 19a94a61dad..771cb4262a0 100644
--- a/code/modules/requests/request_manager.dm
+++ b/code/modules/requests/request_manager.dm
@@ -223,7 +223,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new)
to_chat(usr, "You cannot set the nuke code for a non-nuke-code-request request!", confidential = TRUE)
return TRUE
var/code = random_nukecode()
- for(var/obj/machinery/nuclearbomb/selfdestruct/SD in GLOB.nuke_list)
+ for(var/obj/machinery/nuclearbomb/selfdestruct/SD in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/selfdestruct))
SD.r_code = code
message_admins("[key_name_admin(usr)] has set the self-destruct code to \"[code]\".")
return TRUE
diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm
index a40ba379323..609ef685a3f 100644
--- a/code/modules/shuttle/assault_pod.dm
+++ b/code/modules/shuttle/assault_pod.dm
@@ -54,7 +54,7 @@
landing_zone.height = height
landing_zone.setDir(lz_dir)
- for(var/obj/machinery/computer/shuttle/S in GLOB.machines)
+ for(var/obj/machinery/computer/shuttle/S in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/shuttle))
if(S.shuttleId == shuttle_id)
S.possible_destinations = "[landing_zone.shuttle_id]"
diff --git a/code/modules/shuttle/battlecruiser_starfury.dm b/code/modules/shuttle/battlecruiser_starfury.dm
index ce520aa1fca..ab1f6802d43 100644
--- a/code/modules/shuttle/battlecruiser_starfury.dm
+++ b/code/modules/shuttle/battlecruiser_starfury.dm
@@ -154,7 +154,7 @@
if(!team)
team = new()
- var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list
+ var/obj/machinery/nuclearbomb/selfdestruct/nuke = SSmachines.get_machines_by_type(/obj/machinery/nuclearbomb/selfdestruct)[1]
if(nuke.r_code == NUKE_CODE_UNSET)
nuke.r_code = random_nukecode()
team.nuke = nuke
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index bc1164f56b2..03777cd2d5b 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -30,7 +30,6 @@
/obj/machinery/computer/camera_advanced/shuttle_docker/Initialize(mapload)
. = ..()
- GLOB.navigation_computers += src
actions += new /datum/action/innate/shuttledocker_rotate(src)
actions += new /datum/action/innate/shuttledocker_place(src)
@@ -50,8 +49,6 @@
/obj/machinery/computer/camera_advanced/shuttle_docker/Destroy()
. = ..()
- GLOB.navigation_computers -= src
-
if(my_port?.get_docked())
my_port.delete_after = TRUE
my_port.shuttle_id = null
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index cebeb38cb0e..7183326cdef 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -820,7 +820,7 @@
return ripple_turfs
/obj/docking_port/mobile/proc/check_poddoors()
- for(var/obj/machinery/door/poddoor/shuttledock/pod in GLOB.airlocks)
+ for(var/obj/machinery/door/poddoor/shuttledock/pod as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor/shuttledock))
pod.check()
/obj/docking_port/mobile/proc/dock_id(id)
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index e8e9a2ed404..03f69c2664c 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -55,12 +55,11 @@
/datum/station_goal/dna_vault/check_completion()
if(..())
return TRUE
- for(var/obj/machinery/dna_vault/V in GLOB.machines)
+ for(var/obj/machinery/dna_vault/V as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/dna_vault))
if(V.animal_dna.len >= animal_count && V.plant_dna.len >= plant_count && V.human_dna.len >= human_count)
return TRUE
return FALSE
-
/obj/machinery/dna_vault
name = "DNA Vault"
desc = "Break glass in case of apocalypse."
diff --git a/code/modules/station_goals/meteor_shield.dm b/code/modules/station_goals/meteor_shield.dm
index e856a4e2748..7b16606013b 100644
--- a/code/modules/station_goals/meteor_shield.dm
+++ b/code/modules/station_goals/meteor_shield.dm
@@ -43,10 +43,10 @@
/datum/station_goal/proc/get_coverage()
var/list/coverage = list()
- for(var/obj/machinery/satellite/meteor_shield/A in GLOB.machines)
- if(!A.active || !is_station_level(A.z))
+ for(var/obj/machinery/satellite/meteor_shield/shield_satt as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/satellite/meteor_shield))
+ if(!shield_satt.active || !is_station_level(shield_satt.z))
continue
- coverage |= view(A.kill_range,A)
+ coverage |= view(shield_satt.kill_range, shield_satt)
return coverage.len
/obj/machinery/satellite/meteor_shield