diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
index d6ce4723e5..f293a54444 100644
--- a/code/_helpers/global_lists.dm
+++ b/code/_helpers/global_lists.dm
@@ -71,6 +71,10 @@ var/global/list/endgame_safespawns = list()
var/global/list/syndicate_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
+// Ores (for mining)
+GLOBAL_LIST_EMPTY(ore_data)
+GLOBAL_LIST_EMPTY(alloy_data)
+
// Strings which corraspond to bodypart covering flags, useful for outputting what something covers.
var/global/list/string_part_flags = list(
"head" = HEAD,
@@ -215,6 +219,16 @@ var/global/list/string_slot_flags = list(
var/datum/poster/P = new T
NT_poster_designs += P
+ //Ores
+ paths = typesof(/ore)-/ore
+ for(var/oretype in paths)
+ var/ore/OD = new oretype()
+ GLOB.ore_data[OD.name] = OD
+
+ paths = typesof(/datum/alloy)-/datum/alloy
+ for(var/alloytype in paths)
+ GLOB.alloy_data += new alloytype()
+
//Closet appearances
paths = typesof(/decl/closet_appearance)
for(var/T in paths)
diff --git a/code/modules/mining/machinery/machine_processing.dm b/code/modules/mining/machinery/machine_processing.dm
index 08e9decb3d..d9502882ef 100644
--- a/code/modules/mining/machinery/machine_processing.dm
+++ b/code/modules/mining/machinery/machine_processing.dm
@@ -71,7 +71,7 @@
for(var/ore in machine.ores_processing)
if(!machine.ores_stored[ore] && !show_all_ores) continue
- var/ore/O = ore_data[ore]
+ var/ore/O = GLOB.ore_data[ore]
if(!O) continue
dat += "
| [capitalize(O.display_name)] | [machine.ores_stored[ore]] | "
if(machine.ores_processing[ore])
@@ -165,7 +165,6 @@
var/sheets_per_tick = 10
var/list/ores_processing[0]
var/list/ores_stored[0]
- var/static/list/alloy_data
var/active = FALSE
var/tick = 0
@@ -192,24 +191,13 @@
"mhydrogen" = 40,
"verdantium" = 60)
-/obj/machinery/mineral/processing_unit/New()
- ..()
- // initialize static alloy_data list
- if(!alloy_data)
- alloy_data = list()
- for(var/alloytype in typesof(/datum/alloy)-/datum/alloy)
- alloy_data += new alloytype()
-
- // TODO - Initializing this here is insane. Put it in global lists init or something. ~Leshana
- if(!ore_data || !ore_data.len)
- for(var/oretype in typesof(/ore)-/ore)
- var/ore/OD = new oretype()
- ore_data[OD.name] = OD
- ores_processing[OD.name] = 0
- ores_stored[OD.name] = 0
-
/obj/machinery/mineral/processing_unit/Initialize()
. = ..()
+ for(var/ore in GLOB.ore_data)
+ var/ore/OD = GLOB.ore_data[ore]
+ ores_processing[OD.name] = 0
+ ores_stored[OD.name] = 0
+
// TODO - Eschew input/output machinery and just use dirs ~Leshana
//Locate our output and input machinery.
for (var/dir in cardinal)
@@ -269,13 +257,13 @@
if(ores_stored[metal] > 0 && ores_processing[metal] != 0)
- var/ore/O = ore_data[metal]
+ var/ore/O = GLOB.ore_data[metal]
if(!O) continue
if(ores_processing[metal] == PROCESS_ALLOY && O.alloy) //Alloying.
- for(var/datum/alloy/A in alloy_data)
+ for(var/datum/alloy/A in GLOB.alloy_data)
if(A.metaltag in tick_alloys)
continue
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index d9fd4fd5ae..17b5887725 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -655,7 +655,7 @@ turf/simulated/mineral/floor/light_corner
else
mineral_name = pickweight(list("marble" = 3,/* "quartz" = 10,*/ "copper" = 20, "tin" = 15, "bauxite" = 15, "uranium" = 10, "platinum" = 10, "hematite" = 70, "rutile" = 15, "carbon" = 70, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 3,/* "void opal" = 1,*/ "verdantium" = 1/*, "painite" = 1*/))
- if(mineral_name && (mineral_name in ore_data))
- mineral = ore_data[mineral_name]
+ if(mineral_name && (mineral_name in GLOB.ore_data))
+ mineral = GLOB.ore_data[mineral_name]
UpdateMineral()
update_icon()
diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm
index 12781a7ea4..f8bc4a03d6 100644
--- a/code/modules/mining/mineral_effect.dm
+++ b/code/modules/mining/mineral_effect.dm
@@ -21,7 +21,7 @@
/obj/effect/mineral/proc/get_scan_overlay()
if(!scanner_image)
- var/ore/O = ore_data[ore_key]
+ var/ore/O = GLOB.ore_data[ore_key]
if(O)
scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state))
else
diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm
index 0e125bee74..5a26dcf0fd 100644
--- a/code/modules/mining/ore_datum.dm
+++ b/code/modules/mining/ore_datum.dm
@@ -1,5 +1,3 @@
-var/global/list/ore_data = list()
-
/ore
var/name
var/display_name
|