diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index de9ffa6cf9..d43faaf4a5 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -325,6 +325,8 @@
#define SPECIES_SKELETON "Skeleton"
#define SPECIES_GOLEM "Golem"
#define SPECIES_EVENT1 "X Occursus"
+#define SPECIES_EVENT2 "X Anomalous"
+#define SPECIES_EVENT3 "X Unowas"
// Replicant types. Currently only used for alien pods and events.
#define SPECIES_REPLICANT "Replicant"
diff --git a/code/_global_vars/lists/species.dm b/code/_global_vars/lists/species.dm
new file mode 100644
index 0000000000..fec8e4a069
--- /dev/null
+++ b/code/_global_vars/lists/species.dm
@@ -0,0 +1,6 @@
+//Languages/species/whitelist.
+GLOBAL_LIST_INIT(all_species, list())
+GLOBAL_LIST_INIT(all_languages, list())
+GLOBAL_LIST_INIT(language_keys, list()) // Table of say codes for all languages
+GLOBAL_LIST_INIT(whitelisted_species, list(SPECIES_HUMAN)) // Species that require a whitelist check.
+GLOBAL_LIST_INIT(playable_species, list(SPECIES_HUMAN)) // A list of ALL playable species, whitelisted, latejoin or otherwise.
diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
index b0edcf37c0..2063385b02 100644
--- a/code/_helpers/global_lists.dm
+++ b/code/_helpers/global_lists.dm
@@ -24,13 +24,6 @@ var/global/list/turfs = list() //list of all turfs
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER)
#define all_genders_text_list list("Male","Female","Plural","Neuter")
-//Languages/species/whitelist.
-var/global/list/all_species[0]
-var/global/list/all_languages[0]
-var/global/list/language_keys[0] // Table of say codes for all languages
-var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check.
-var/global/list/playable_species = list(SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise.
-
var/list/mannequins_
// Posters
@@ -164,12 +157,12 @@ var/global/list/string_slot_flags = list(
paths = typesof(/datum/language)-/datum/language
for(var/T in paths)
var/datum/language/L = new T
- all_languages[L.name] = L
+ GLOB.all_languages[L.name] = L
- for (var/language_name in all_languages)
- var/datum/language/L = all_languages[language_name]
+ for (var/language_name in GLOB.all_languages)
+ var/datum/language/L = GLOB.all_languages[language_name]
if(!(L.flags & NONGLOBAL))
- language_keys[lowertext(L.key)] = L
+ GLOB.language_keys[lowertext(L.key)] = L
var/rkey = 0
paths = typesof(/datum/species)
@@ -183,12 +176,12 @@ var/global/list/string_slot_flags = list(
S = new T
S.race_key = rkey //Used in mob icon caching.
- all_species[S.name] = S
+ GLOB.all_species[S.name] = S
if(!(S.spawn_flags & SPECIES_IS_RESTRICTED))
- playable_species += S.name
+ GLOB.playable_species += S.name
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
- whitelisted_species += S.name
+ GLOB.whitelisted_species += S.name
//Posters
paths = typesof(/datum/poster) - /datum/poster
diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm
index 220f896436..9320c29272 100644
--- a/code/_helpers/mobs.dm
+++ b/code/_helpers/mobs.dm
@@ -75,7 +75,7 @@ proc/random_facial_hair_style(gender, species = SPECIES_HUMAN)
proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0)
var/datum/species/current_species
if(species)
- current_species = all_species[species]
+ current_species = GLOB.all_species[species]
return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot)
@@ -83,7 +83,7 @@ proc/random_name(gender, species = SPECIES_HUMAN)
var/datum/species/current_species
if(species)
- current_species = all_species[species]
+ current_species = GLOB.all_species[species]
if(!current_species || current_species.name_language == null)
if(gender==FEMALE)
diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm
index 4f60792810..a7bed0a2af 100644
--- a/code/game/antagonist/station/changeling.dm
+++ b/code/game/antagonist/station/changeling.dm
@@ -68,7 +68,7 @@
return 1
else if(isnewplayer(player.current))
if(player.current.client && player.current.client.prefs)
- var/datum/species/S = all_species[player.current.client.prefs.species]
+ var/datum/species/S = GLOB.all_species[player.current.client.prefs.species]
if(S && (S.flags & NO_SCAN))
return 0
if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic.
diff --git a/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm b/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm
index 2cbfad4ecc..2dd471b09b 100644
--- a/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm
+++ b/code/game/gamemodes/technomancer/spells/aura/fire_aura.dm
@@ -23,7 +23,7 @@
var/list/nearby_things = range(round(calculate_spell_power(4)),owner)
var/temp_change = calculate_spell_power(25)
- var/datum/species/baseline = all_species["Human"]
+ var/datum/species/baseline = GLOB.all_species["Human"]
var/temp_cap = baseline.heat_level_3 * 1.5
var/fire_power = calculate_spell_power(2)
diff --git a/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm b/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm
index 7e788de96e..e04ded8353 100644
--- a/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm
+++ b/code/game/gamemodes/technomancer/spells/aura/frost_aura.dm
@@ -23,7 +23,7 @@
var/list/nearby_mobs = range(round(calculate_spell_power(4)),owner)
var/temp_change = calculate_spell_power(40)
- var/datum/species/baseline = all_species["Human"]
+ var/datum/species/baseline = GLOB.all_species["Human"]
var/temp_cap = baseline.cold_level_2 - 5
if(check_for_scepter())
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 3063453145..c52ea8dc33 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -367,7 +367,7 @@ var/global/datum/controller/occupations/job_master
else
permitted = 1
- if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
+ if(G.whitelisted && !is_alien_whitelisted(H, GLOB.all_species[G.whitelisted]))
//if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted)))
permitted = 0
diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm
index 6c630b3827..60143fadd3 100644
--- a/code/game/machinery/bioprinter.dm
+++ b/code/game/machinery/bioprinter.dm
@@ -236,9 +236,9 @@
malfunctioned = TRUE
var/possible_species = list(SPECIES_HUMAN, SPECIES_VOX, SPECIES_SKRELL, SPECIES_ZADDAT, SPECIES_UNATHI, SPECIES_GOLEM, SPECIES_SHADOW)
var/new_species = pick(possible_species)
- if(!all_species[new_species])
+ if(!GLOB.all_species[new_species])
new_species = SPECIES_HUMAN
- O.species = all_species[new_species]
+ O.species = GLOB.all_species[new_species]
if(istype(O, /obj/item/organ/external) && !malfunctioned)
var/obj/item/organ/external/E = O
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 51d7e0a4b6..67ad07567f 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -46,10 +46,10 @@
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
if (channel == "special")
if (translate_binary)
- var/datum/language/binary = all_languages["Robot Talk"]
+ var/datum/language/binary = GLOB.all_languages["Robot Talk"]
binary.broadcast(M, message)
if (translate_hive)
- var/datum/language/hivemind = all_languages["Hivemind"]
+ var/datum/language/hivemind = GLOB.all_languages["Hivemind"]
hivemind.broadcast(M, message)
return null
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 3011d2c61d..07cc774fb0 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -134,7 +134,7 @@
spawn(1)
var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
if(!newname || newname == "")
- var/datum/language/L = all_languages[vox.species.default_language]
+ var/datum/language/L = GLOB.all_languages[vox.species.default_language]
newname = L.get_random_name()
vox.real_name = newname
vox.name = vox.real_name
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 8ea7c2c9d4..12dba02bf0 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -192,8 +192,8 @@ proc/admin_notice(var/message, var/rights)
// language toggles
body += "
Languages:
"
var/f = 1
- for(var/k in all_languages)
- var/datum/language/L = all_languages[k]
+ for(var/k in GLOB.all_languages)
+ var/datum/language/L = GLOB.all_languages[k]
if(!(L.flags & INNATE))
if(!f) body += " | "
else f = 0
diff --git a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm
index 8225b96b29..16438ad195 100644
--- a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm
+++ b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm
@@ -6,8 +6,8 @@
if(!.)
return
- for(var/species in all_species)
- var/datum/species/S = all_species[species]
+ for(var/species in GLOB.all_species)
+ var/datum/species/S = GLOB.all_species[species]
S.blood_color = "rainbow"
for(var/obj/effect/decal/cleanable/blood/B in world)
B.basecolor = "rainbow"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 163a1ba4d5..0794f309b8 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1844,7 +1844,7 @@
usr << "[M] is illegal type, must be /mob!"
return
var/lang2toggle = href_list["lang"]
- var/datum/language/L = all_languages[lang2toggle]
+ var/datum/language/L = GLOB.all_languages[lang2toggle]
if(L in M.languages)
if(!M.remove_language(lang2toggle))
diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm
index 569355672a..34df77af6a 100644
--- a/code/modules/admin/view_variables/topic.dm
+++ b/code/modules/admin/view_variables/topic.dm
@@ -289,7 +289,7 @@
usr << "This can only be done to instances of type /mob/living/carbon/human"
return
- var/new_species = input("Please choose a new species.","Species",null) as null|anything in all_species
+ var/new_species = input("Please choose a new species.","Species",null) as null|anything in GLOB.all_species
if(!H)
usr << "Mob doesn't exist anymore"
@@ -308,7 +308,7 @@
usr << "This can only be done to instances of type /mob"
return
- var/new_language = input("Please choose a language to add.","Language",null) as null|anything in all_languages
+ var/new_language = input("Please choose a language to add.","Language",null) as null|anything in GLOB.all_languages
if(!new_language)
return
diff --git a/code/modules/blob2/overmind/types.dm b/code/modules/blob2/overmind/types.dm
index 49b968cfcc..24ffbd6b1b 100644
--- a/code/modules/blob2/overmind/types.dm
+++ b/code/modules/blob2/overmind/types.dm
@@ -423,7 +423,7 @@
var/protection = H.get_cold_protection(50)
if(protection < 1)
var/temp_change = 80 // Each hit can reduce temperature by up to 80 kelvin.
- var/datum/species/baseline = all_species["Human"]
+ var/datum/species/baseline = GLOB.all_species["Human"]
var/temp_cap = baseline.cold_level_3 - 5 // Can't go lower than this.
var/cold_factor = abs(protection - 1)
diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm
index f044322cab..33f0b3e336 100644
--- a/code/modules/client/preference_setup/general/01_basic.dm
+++ b/code/modules/client/preference_setup/general/01_basic.dm
@@ -150,9 +150,9 @@ datum/preferences/proc/set_biological_gender(var/gender)
/datum/category_item/player_setup_item/general/basic/proc/get_genders()
var/datum/species/S
if(pref.species)
- S = all_species[pref.species]
+ S = GLOB.all_species[pref.species]
else
- S = all_species[SPECIES_HUMAN]
+ S = GLOB.all_species[SPECIES_HUMAN]
var/list/possible_genders = S.genders
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
return possible_genders
diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm
index 22c8fd1267..0481affd17 100644
--- a/code/modules/client/preference_setup/general/02_language.dm
+++ b/code/modules/client/preference_setup/general/02_language.dm
@@ -13,7 +13,7 @@
/datum/category_item/player_setup_item/general/language/sanitize_character()
if(!islist(pref.alternate_languages)) pref.alternate_languages = list()
if(pref.species)
- var/datum/species/S = all_species[pref.species]
+ var/datum/species/S = GLOB.all_species[pref.species]
if(S && pref.alternate_languages.len > S.num_alternate_languages)
pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
@@ -21,7 +21,7 @@
/datum/category_item/player_setup_item/general/language/content()
. += "Languages
"
- var/datum/species/S = all_species[pref.species]
+ var/datum/species/S = GLOB.all_species[pref.species]
if(S.language)
. += "- [S.language]
"
if(S.default_language && S.default_language != S.language)
@@ -46,13 +46,13 @@
pref.alternate_languages.Cut(index, index+1)
return TOPIC_REFRESH
else if(href_list["add_language"])
- var/datum/species/S = all_species[pref.species]
+ var/datum/species/S = GLOB.all_species[pref.species]
if(pref.alternate_languages.len >= S.num_alternate_languages)
alert(user, "You have already selected the maximum number of alternate languages for this species!")
else
var/list/available_languages = S.secondary_langs.Copy()
- for(var/L in all_languages)
- var/datum/language/lang = all_languages[L]
+ for(var/L in GLOB.all_languages)
+ var/datum/language/lang = GLOB.all_languages[L]
if(!(lang.flags & RESTRICTED) && (is_lang_whitelisted(user, lang)))
available_languages |= L
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index f637536d14..8f8ee23b94 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -72,7 +72,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["body_descriptors"] << pref.body_descriptors
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
- if(!pref.species || !(pref.species in playable_species))
+ if(!pref.species || !(pref.species in GLOB.playable_species))
pref.species = SPECIES_HUMAN
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
@@ -174,7 +174,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
last_descriptors = pref.body_descriptors.Copy()
pref.body_descriptors = list()
- var/datum/species/mob_species = all_species[pref.species]
+ var/datum/species/mob_species = GLOB.all_species[pref.species]
if(LAZYLEN(mob_species.descriptors))
for(var/entry in mob_species.descriptors)
var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry]
@@ -192,7 +192,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.update_preview_icon()
user << browse_rsc(pref.preview_icon, "previewicon.png")
- var/datum/species/mob_species = all_species[pref.species]
+ var/datum/species/mob_species = GLOB.all_species[pref.species]
. += "
| Body "
. += "(®)"
. += " " @@ -355,7 +355,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return mob_species && (mob_species.appearance_flags & flag) /datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user) - var/datum/species/mob_species = all_species[pref.species] + var/datum/species/mob_species = GLOB.all_species[pref.species] if(href_list["random"]) pref.randomize_appearance_and_body_for() @@ -379,7 +379,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["show_species"]) // Actual whitelist checks are handled elsewhere, this is just for accessing the preview window. - var/choice = input("Which species would you like to look at?") as null|anything in playable_species + var/choice = input("Which species would you like to look at?") as null|anything in GLOB.playable_species if(!choice) return pref.species_preview = choice SetSpecies(preference_mob()) @@ -388,13 +388,13 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else if(href_list["set_species"]) user << browse(null, "window=species") - if(!pref.species_preview || !(pref.species_preview in all_species)) + if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) return TOPIC_NOACTION var/datum/species/setting_species - if(all_species[href_list["set_species"]]) - setting_species = all_species[href_list["set_species"]] + if(GLOB.all_species[href_list["set_species"]]) + setting_species = GLOB.all_species[href_list["set_species"]] else return TOPIC_NOACTION @@ -592,7 +592,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body") // Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy. - var/datum/species/current_species = all_species[pref.species] + var/datum/species/current_species = GLOB.all_species[pref.species] if(!current_species.has_organ["brain"]) limb_selection_list -= "Full Body" else if(pref.organ_data[BP_TORSO] == "cyborg") @@ -820,9 +820,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.real_name = random_name(pref.identifying_gender, pref.species) /datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user) - if(!pref.species_preview || !(pref.species_preview in all_species)) + if(!pref.species_preview || !(pref.species_preview in GLOB.all_species)) pref.species_preview = SPECIES_HUMAN - var/datum/species/current_species = all_species[pref.species_preview] + var/datum/species/current_species = GLOB.all_species[pref.species_preview] var/dat = "" dat += " [current_species.name] \[change\]" dat += " |