Files
CHOMPStation2/code/_helpers/global_lists.dm
2025-09-14 20:05:26 +02:00

1676 lines
70 KiB
Plaintext

//Since it didn't really belong in any other category, I'm putting this here
//This is for procs to replace all the goddamn 'in world's that are chilling around the code
GLOBAL_LIST_EMPTY(player_list) //List of all mobs **with clients attached**. Excludes /mob/new_player
GLOBAL_LIST_EMPTY(mob_list) //List of all mobs, including clientless
GLOBAL_LIST_EMPTY(human_mob_list) //List of all human mobs and sub-types, including clientless
GLOBAL_LIST_EMPTY(silicon_mob_list) //List of all silicon mobs, including clientless
GLOBAL_LIST_EMPTY(ai_list) //List of all AIs, including clientless
GLOBAL_LIST_EMPTY(living_mob_list) //List of all alive mobs, including clientless. Excludes /mob/new_player
GLOBAL_LIST_EMPTY(dead_mob_list) //List of all dead mobs, including clientless. Excludes /mob/new_player
GLOBAL_LIST_EMPTY(observer_mob_list) //List of all /mob/observer/dead, including clientless.
GLOBAL_LIST_EMPTY(listening_objects) //List of all objects which care about receiving messages (communicators, radios, etc)
GLOBAL_LIST_EMPTY(cleanbot_reserved_turfs) //List of all turfs currently targeted by some cleanbot
GLOBAL_LIST_EMPTY(cable_list) //Index for all cables, so that powernets don't have to look through the entire world all the time
GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created
GLOBAL_LIST_EMPTY(event_triggers) //Associative list of creator_ckey:list(landmark references) for event triggers
GLOBAL_LIST_EMPTY(surgery_steps) //list of all surgery steps |BS12
GLOBAL_LIST_EMPTY(joblist) //list of all jobstypes, minus borg and AI
GLOBAL_LIST_EMPTY(mechas_list) //list of all mechs. Used by hostile mobs target tracking.
var/global/list/obj/item/pda/PDAs = list()
var/global/list/obj/item/communicator/all_communicators = list()
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER,HERM)
#define all_genders_text_list list("Male","Female","Plural","Neuter","Herm")
#define pronoun_set_to_genders list(\
"He/Him" = MALE,\
"She/Her" = FEMALE,\
"It/Its" = NEUTER,\
"They/Them" = PLURAL,\
"Shi/Hir" = HERM\
)
#define genders_to_pronoun_set list(\
MALE = "He/Him",\
FEMALE = "She/Her",\
NEUTER = "It/Its",\
PLURAL = "They/Them",\
HERM = "Shi/Hir"\
)
// Times that players are allowed to respawn ("ckey" = world.time)
GLOBAL_LIST_EMPTY(respawn_timers)
// Holomaps
GLOBAL_LIST_EMPTY(holomap_markers)
GLOBAL_LIST_EMPTY(mapping_units)
GLOBAL_LIST_EMPTY(mapping_beacons)
//Preferences stuff
//Hairstyles
GLOBAL_LIST_EMPTY(hair_styles_list) //stores /datum/sprite_accessory/hair indexed by name
GLOBAL_LIST_EMPTY(hair_styles_male_list)
GLOBAL_LIST_EMPTY(hair_styles_female_list)
GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/facial_hair indexed by name
GLOBAL_LIST_EMPTY(facial_hair_styles_male_list)
GLOBAL_LIST_EMPTY(facial_hair_styles_female_list)
GLOBAL_LIST_EMPTY(body_marking_styles_list) //stores /datum/sprite_accessory/marking indexed by name
GLOBAL_LIST_EMPTY(body_marking_nopersist_list) // Body marking styles, minus non-genetic markings and augments
GLOBAL_LIST_EMPTY(ear_styles_list) // Stores /datum/sprite_accessory/ears indexed by type
GLOBAL_LIST_EMPTY(tail_styles_list) // Stores /datum/sprite_accessory/tail indexed by type
GLOBAL_LIST_EMPTY(wing_styles_list) // Stores /datum/sprite_accessory/wing indexed by type
GLOBAL_LIST_INIT(custom_species_bases, new) // Species that can be used for a Custom Species icon base
//Underwear
var/datum/category_collection/underwear/global_underwear = new()
//Customizables
GLOBAL_LIST_INIT(headsetlist, list("Standard","Bowman","Earbud"))
GLOBAL_LIST_INIT(backbaglist, list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag", "Strapless Satchel"))
GLOBAL_LIST_INIT(pdachoicelist, list("Default", "Slim", "Old", "Rugged", "Holographic", "Wrist-Bound","Slider", "Vintage"))
GLOBAL_LIST_INIT(exclude_jobs, list(/datum/job/ai,/datum/job/cyborg))
// Visual nets
var/list/datum/visualnet/visual_nets = list()
var/datum/visualnet/camera/cameranet = new()
var/datum/visualnet/cult/cultnet = new()
var/datum/visualnet/ghost/ghostnet = new()
var/global/list/obj/machinery/message_server/message_servers = list()
var/global/list/datum/supply_drop_loot/supply_drop
// Runes
GLOBAL_LIST_EMPTY(rune_list)
GLOBAL_LIST_EMPTY(escape_list)
GLOBAL_LIST_EMPTY(endgame_exits)
GLOBAL_LIST_EMPTY(endgame_safespawns)
GLOBAL_LIST_INIT(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.
GLOBAL_LIST_INIT(string_part_flags, list(
"head" = HEAD,
"face" = FACE,
"eyes" = EYES,
"upper body" = UPPER_TORSO,
"lower body" = LOWER_TORSO,
"legs" = LEGS,
"feet" = FEET,
"arms" = ARMS,
"hands" = HANDS
))
// Strings which corraspond to slot flags, useful for outputting what slot something is.
GLOBAL_LIST_INIT(string_slot_flags, list(
"back" = SLOT_BACK,
"face" = SLOT_MASK,
"waist" = SLOT_BELT,
"ID slot" = SLOT_ID,
"ears" = SLOT_EARS,
"eyes" = SLOT_EYES,
"hands" = SLOT_GLOVES,
"head" = SLOT_HEAD,
"feet" = SLOT_FEET,
"exo slot" = SLOT_OCLOTHING,
"body" = SLOT_ICLOTHING,
"uniform" = SLOT_TIE,
"holster" = SLOT_HOLSTER
))
GLOBAL_LIST_EMPTY(mannequins)
/proc/get_mannequin(var/ckey = "NULL")
var/mob/living/carbon/human/dummy/mannequin/M = GLOB.mannequins[ckey]
if(!istype(M))
GLOB.mannequins[ckey] = new /mob/living/carbon/human/dummy/mannequin(null)
M = GLOB.mannequins[ckey]
return M
/proc/del_mannequin(var/ckey = "NULL")
GLOB.mannequins-= ckey
//////////////////////////
/////Initial Building/////
//////////////////////////
/proc/makeDatumRefLists()
var/list/paths
//Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name
paths = subtypesof(/datum/sprite_accessory/hair)
for(var/path in paths)
var/datum/sprite_accessory/hair/H = new path()
GLOB.hair_styles_list[H.name] = H
switch(H.gender)
if(MALE) GLOB.hair_styles_male_list += H.name
if(FEMALE) GLOB.hair_styles_female_list += H.name
else
GLOB.hair_styles_male_list += H.name
GLOB.hair_styles_female_list += H.name
//Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name
paths = subtypesof(/datum/sprite_accessory/facial_hair)
for(var/path in paths)
var/datum/sprite_accessory/facial_hair/H = new path()
GLOB.facial_hair_styles_list[H.name] = H
switch(H.gender)
if(MALE) GLOB.facial_hair_styles_male_list += H.name
if(FEMALE) GLOB.facial_hair_styles_female_list += H.name
else
GLOB.facial_hair_styles_male_list += H.name
GLOB.facial_hair_styles_female_list += H.name
//Body markings - Initialise all /datum/sprite_accessory/marking into an list indexed by marking name
paths = subtypesof(/datum/sprite_accessory/marking)
for(var/path in paths)
var/datum/sprite_accessory/marking/M = new path()
GLOB.body_marking_styles_list[M.name] = M
if(!M.genetic)
GLOB.body_marking_nopersist_list[M.name] = M
//Surgery Steps - Initialize all /datum/surgery_step into a list
paths = subtypesof(/datum/surgery_step)
for(var/T in paths)
var/datum/surgery_step/S = new T
GLOB.surgery_steps += S
sort_surgeries()
//List of job. I can't believe this was calculated multiple times per tick!
paths = subtypesof(/datum/job)
paths -= GLOB.exclude_jobs
for(var/T in paths)
var/datum/job/J = new T
GLOB.joblist[J.title] = J
//Languages
paths = subtypesof(/datum/language)
for(var/T in paths)
var/datum/language/L = new T
if (isnull(GLOB.all_languages[L.name]))
GLOB.all_languages[L.name] = L
else
if(isnull(GLOB.language_name_conflicts[L.name]))
GLOB.language_name_conflicts[L.name] = list(GLOB.all_languages[L.name])
GLOB.language_name_conflicts[L.name] += L
for (var/language_name in GLOB.all_languages)
var/datum/language/L = GLOB.all_languages[language_name]
if(!(L.flags & NONGLOBAL))
if(isnull(GLOB.language_keys[L.key]))
GLOB.language_keys[L.key] = L
else
if(isnull(GLOB.language_key_conflicts[L.key]))
GLOB.language_key_conflicts[L.key] = list(GLOB.language_keys[L.key])
GLOB.language_key_conflicts[L.key] += L
//Species
var/rkey = 0
paths = subtypesof(/datum/species)
for(var/T in paths)
rkey++
var/datum/species/S = T
if(!initial(S.name))
continue
S = new T
S.race_key = rkey //Used in mob icon caching.
GLOB.all_species[S.name] = S
//Shakey shakey shake
sortTim(GLOB.all_species, GLOBAL_PROC_REF(cmp_species), associative = TRUE)
//Split up the rest
for(var/speciesname in GLOB.all_species)
var/datum/species/S = GLOB.all_species[speciesname]
if(!(S.spawn_flags & SPECIES_IS_RESTRICTED))
GLOB.playable_species += S.name
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
GLOB.whitelisted_species += S.name
// Suit cyclers
paths = subtypesof(/datum/suit_cycler_choice/department)
for(var/datum/suit_cycler_choice/SCC as anything in paths)
if(!initial(SCC.name))
continue
GLOB.suit_cycler_departments += new SCC()
paths = subtypesof(/datum/suit_cycler_choice/species)
for(var/datum/suit_cycler_choice/SCC as anything in paths)
if(!initial(SCC.name))
continue
GLOB.suit_cycler_species += new SCC()
paths = subtypesof(/datum/suit_cycler_choice/department/emag)
for(var/datum/suit_cycler_choice/SCC as anything in paths)
if(!initial(SCC.name))
continue
GLOB.suit_cycler_emagged += new SCC()
//Ores
paths = subtypesof(/ore)
for(var/oretype in paths)
var/ore/OD = new oretype()
GLOB.ore_data[OD.name] = OD
paths = subtypesof(/datum/alloy)
for(var/alloytype in paths)
GLOB.alloy_data += new alloytype()
//Closet appearances
GLOB.closet_appearances = decls_repository.get_decls_of_type(/decl/closet_appearance)
paths = subtypesof(/datum/sprite_accessory/ears)
for(var/path in paths)
var/obj/item/clothing/head/instance = new path()
GLOB.ear_styles_list[path] = instance
// Custom Tails
paths = subtypesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail/taur
for(var/path in paths)
var/datum/sprite_accessory/tail/instance = new path()
GLOB.tail_styles_list[path] = instance
// Custom Wings
paths = subtypesof(/datum/sprite_accessory/wing)
for(var/path in paths)
var/datum/sprite_accessory/wing/instance = new path()
GLOB.wing_styles_list[path] = instance
paths = typesof(/datum/digest_mode)
for(var/T in paths)
var/datum/digest_mode/DM = new T
GLOB.digest_modes[DM.id] = DM
init_crafting_recipes(GLOB.crafting_recipes)
/*
// Custom species traits
paths = subtypesof(/datum/trait)
for(var/path in paths)
var/datum/trait/instance = new path()
if(!instance.name)
continue //A prototype or something
var/cost = instance.cost
traits_costs[path] = cost
all_traits[path] = instance
switch(cost)
if(-INFINITY to -0.1)
negative_traits[path] = instance
if(0)
neutral_traits[path] = instance
if(0.1 to INFINITY)
positive_traits[path] = instance
*/
// Custom species icon bases
///These are icons that you DO NOT want to be selectable!
var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN)
///These are icons that you WANT to be selectable, even if they're a whitelist species!
var/list/whitelisted_icons = list(SPECIES_FENNEC,SPECIES_XENOHYBRID,SPECIES_VOX,SPECIES_ZORREN_DARK,SPECIES_SHADEKIN) //CHOMEdit
for(var/species_name in GLOB.playable_species)
if(species_name in blacklisted_icons)
continue
var/datum/species/S = GLOB.all_species[species_name]
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
continue
GLOB.custom_species_bases += species_name
for(var/species_name in whitelisted_icons)
GLOB.custom_species_bases += species_name
return 1 // Hooks must return 1
/// Inits the crafting recipe list, sorting crafting recipe requirements in the process.
/proc/init_crafting_recipes(list/crafting_recipes)
for(var/path in subtypesof(/datum/crafting_recipe))
var/datum/crafting_recipe/recipe = new path()
recipe.reqs = sortList(recipe.reqs, GLOBAL_PROC_REF(cmp_crafting_req_priority))
crafting_recipes += recipe
return crafting_recipes
/* // Uncomment to debug chemical reaction list.
/client/verb/debug_chemical_list()
for (var/reaction in chemical_reactions_list)
. += "chemical_reactions_list\[\"[reaction]\"\] = \"[chemical_reactions_list[reaction]]\"\n"
if(islist(chemical_reactions_list[reaction]))
var/list/L = chemical_reactions_list[reaction]
for(var/t in L)
. += " has: [t]\n"
to_world(.)
*/
//Hexidecimal numbers
GLOBAL_LIST_INIT(hexNums, list("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"))
/*
// Many global vars aren't GLOB type. This puts them there to be more easily inspected.
GLOBAL_LIST_EMPTY(legacy_globals)
/proc/populate_legacy_globals()
//Note: these lists cannot be changed to a new list anywhere in code! //Lies. TG doesn't use any var/global/list so neither will we!
//If they are, these will cause the old list to stay around!
//Check by searching for "<GLOBAL_NAME> =" in the entire codebase
//visual nets
GLOB.legacy_globals["visual_nets"] = visual_nets
GLOB.legacy_globals["cameranet"] = cameranet
GLOB.legacy_globals["cultnet"] = cultnet
*/
GLOBAL_LIST_INIT(selectable_footstep, list(
"Default" = FOOTSTEP_MOB_HUMAN,
"Claw" = FOOTSTEP_MOB_CLAW,
"Light Claw" = FOOTSTEP_MOB_TESHARI,
"Slither" = FOOTSTEP_MOB_SLITHER,
))
// Put any artifact effects that are duplicates, unique, or otherwise unwated in here! This prevents them from spawning via RNG.
GLOBAL_LIST_INIT(blacklisted_artifact_effects, list(
/datum/artifact_effect/gas/sleeping,
/datum/artifact_effect/gas/oxy,
/datum/artifact_effect/gas/carbondiox,
/datum/artifact_effect/gas/fuel,
/datum/artifact_effect/gas/nitro,
/datum/artifact_effect/gas/phoron,
/datum/artifact_effect/extreme
))
//stuff that only synths can eat
GLOBAL_LIST_INIT(edible_tech, list(/obj/item/cell,
/obj/item/circuitboard,
/obj/item/integrated_circuit,
/obj/item/broken_device,
/obj/item/brokenbug,
))
GLOBAL_LIST_INIT(item_digestion_blacklist, list(
/obj/item/hand_tele,
/obj/item/card/id,
/obj/item/gun,
/obj/item/pinpointer,
/obj/item/clothing/shoes/magboots,
/obj/item/areaeditor/blueprints,
/obj/item/disk/nuclear,
/obj/item/perfect_tele_beacon,
/obj/item/organ/internal/brain/slime,
/obj/item/mmi/digital/posibrain,
/obj/item/mmi/digital/robot,
/obj/item/rig/protean))
///A list of chemicals that are banned from being obtainable through means that generate chemicals. These chemicals are either lame, annoying, pref-breaking, or OP (This list does NOT include reactions)
GLOBAL_LIST_INIT(obtainable_chemical_blacklist, list(
REAGENT_ID_ADMINORDRAZINE,
REAGENT_ID_NUTRIMENT,
REAGENT_ID_MACROCILLIN,
REAGENT_ID_MICROCILLIN,
REAGENT_ID_NORMALCILLIN,
REAGENT_ID_MAGICDUST,
REAGENT_ID_SUPERMATTER
))
GLOBAL_LIST_EMPTY(item_tf_spawnpoints) // Global variable tracking which items are item tf spawnpoints
// Options for transforming into a different mob in virtual reality.
GLOBAL_LIST_INIT(vr_mob_tf_options, list(
"Borg" = /mob/living/silicon/robot,
"Cortical borer" = /mob/living/simple_mob/animal/borer/non_antag,
"Hyena" = /mob/living/simple_mob/animal/hyena, //TODO: Port from Downstream //CHOMPStation Enable
"Giant spider" = /mob/living/simple_mob/animal/giant_spider/thermic,
"Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, //TODO: Port from Downstream //CHOMPStation Enable
"Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot,
"Cat" = /mob/living/simple_mob/animal/passive/cat,
"Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
"Squirrel" = /mob/living/simple_mob/vore/squirrel,
"Frog" = /mob/living/simple_mob/vore/aggressive/frog,
"Seagull" =/mob/living/simple_mob/vore/seagull,
"Fox" = /mob/living/simple_mob/animal/passive/fox,
"Racoon" = /mob/living/simple_mob/animal/passive/raccoon,
"Shantak" = /mob/living/simple_mob/animal/sif/shantak,
"Goose" = /mob/living/simple_mob/animal/space/goose,
"Space shark" = /mob/living/simple_mob/animal/space/shark,
"Synx" = /mob/living/simple_mob/animal/synx, //TODO: Port from Downstream //CHOMPStation Enable
"Dire wolf" = /mob/living/simple_mob/vore/wolf/direwolf,
"Construct Artificer" = /mob/living/simple_mob/construct/artificer,
"Tech golem" = /mob/living/simple_mob/mechanical/technomancer_golem,
"Metroid" = /mob/living/simple_mob/metroid/juvenile/baby, //TODO: Port from Downstream //CHOMPStation Enable
"Otie" = /mob/living/simple_mob/vore/otie/cotie/chubby,
"Red-eyed Shadekin" = /mob/living/simple_mob/shadekin/red,
"Blue-eyed Shadekin" = /mob/living/simple_mob/shadekin/blue,
"Purple-eyed Shadekin" = /mob/living/simple_mob/shadekin/purple,
"Green-eyed Shadekin" = /mob/living/simple_mob/shadekin/green,
"Yellow-eyed Shadekin" = /mob/living/simple_mob/shadekin/yellow,
"Slime" = /mob/living/simple_mob/slime/xenobio/metal,
"Corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound,
"Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw/den, //Downstream uses /den variant here. //CHOMPStation Enable
"Weretiger" = /mob/living/simple_mob/vore/weretiger,
"Mimic" = /mob/living/simple_mob/vore/aggressive/mimic/floor/plating, //Downstream uses /floor/plating variant here //CHOMPStation Enable
"Giant rat" = /mob/living/simple_mob/vore/aggressive/rat,
"Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug,
"Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper,
"Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost,
"Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi,
"Bee" = /mob/living/simple_mob/vore/bee,
"Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly,
"Riftwalker" = /mob/living/simple_mob/vore/demon/wendigo, //Downstream uses /wendigo variant here //CHOMPStation Enable
"Horse" = /mob/living/simple_mob/vore/horse/big,
"Morph" = /mob/living/simple_mob/vore/morph,
"Leopardmander" = /mob/living/simple_mob/vore/leopardmander,
"Rabbit" = /mob/living/simple_mob/vore/rabbit,
"Red panda" = /mob/living/simple_mob/vore/redpanda,
"Sect drone" = /mob/living/simple_mob/vore/sect_drone,
"Armalis vox" = /mob/living/simple_mob/vox/armalis, //TODO: Port from Downstream //CHOMPStation Enable
"Xeno hunter" = /mob/living/simple_mob/xeno_ch/hunter, //TODO: Port from Downstream //CHOMPStation Enable
"Xeno queen" = /mob/living/simple_mob/xeno_ch/queen/maid, //TODO: Port from Downstream //CHOMPStation Enable
"Xeno sentinel" = /mob/living/simple_mob/xeno_ch/sentinel, //TODO: Port from Downstream //CHOMPStation Enable
"Space carp" = /mob/living/simple_mob/animal/space/carp,
"Jelly blob" = /mob/living/simple_mob/vore/jelly,
"SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, //TODO: Port from Downstream //CHOMPStation Enable
"Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker,
"Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper,
"Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube,
"Gryphon" = /mob/living/simple_mob/vore/gryphon //TODO: Port from Downstream //CHOMPStation Enable
))
GLOBAL_LIST_INIT(vr_mob_spawner_options, list(
"Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot,
"Rabbit" = /mob/living/simple_mob/vore/rabbit,
"Cat" = /mob/living/simple_mob/animal/passive/cat,
"Fox" = /mob/living/simple_mob/animal/passive/fox,
"Cow" = /mob/living/simple_mob/animal/passive/cow,
"Dog" = /mob/living/simple_mob/vore/woof,
"Horse" = /mob/living/simple_mob/vore/horse/big,
"Hippo" = /mob/living/simple_mob/vore/hippo,
"Sheep" = /mob/living/simple_mob/vore/sheep,
"Squirrel" = /mob/living/simple_mob/vore/squirrel,
"Red panda" = /mob/living/simple_mob/vore/redpanda,
"Fennec" = /mob/living/simple_mob/vore/fennec,
"Seagull" =/mob/living/simple_mob/vore/seagull,
"Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
"Armadillo" = /mob/living/simple_mob/animal/passive/armadillo, //TODO: Port from Downstream //CHOMPStation Enable
"Racoon" = /mob/living/simple_mob/animal/passive/raccoon,
"Goose" = /mob/living/simple_mob/animal/space/goose,
"Frog" = /mob/living/simple_mob/vore/aggressive/frog,
"Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper,
"Dire wolf" = /mob/living/simple_mob/vore/wolf/direwolf,
"Space bumblebee" = /mob/living/simple_mob/vore/bee,
"Space bear" = /mob/living/simple_mob/animal/space/bear,
"Otie" = /mob/living/simple_mob/vore/otie,
"Mutated otie" =/mob/living/simple_mob/vore/otie/feral,
"Red otie" = /mob/living/simple_mob/vore/otie/red,
"Giant rat" = /mob/living/simple_mob/vore/aggressive/rat,
"Giant snake" = /mob/living/simple_mob/vore/aggressive/giant_snake,
"Hyena" = /mob/living/simple_mob/animal/hyena, //TODO: Port from Downstream //CHOMPStation Enable
"Space shark" = /mob/living/simple_mob/animal/space/shark,
"Shantak" = /mob/living/simple_mob/animal/sif/shantak,
"Kururak" = /mob/living/simple_mob/animal/sif/kururak,
"Teppi" = /mob/living/simple_mob/vore/alienanimals/teppi,
"Slug" = /mob/living/simple_mob/vore/slug, //TODO: Port from Downstream //CHOMPStation Enable
"Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug,
"Weretiger" = /mob/living/simple_mob/vore/weretiger,
"Dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper,
"Star treader" = /mob/living/simple_mob/vore/alienanimals/startreader,
"Space ghost" = /mob/living/simple_mob/vore/alienanimals/spooky_ghost,
"Space carp" = /mob/living/simple_mob/animal/space/carp,
"Space jelly fish" = /mob/living/simple_mob/vore/alienanimals/space_jellyfish,
"Abyss lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker,
"Abyss leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper,
"Gelatinous cube" = /mob/living/simple_mob/vore/vore_hostile/gelatinous_cube,
"Panther" = /mob/living/simple_mob/vore/aggressive/panther,
"Lizard man" = /mob/living/simple_mob/vore/aggressive/lizardman, //TODO: Port from Downstream //CHOMPStation Enable
"Pakkun" = /mob/living/simple_mob/vore/pakkun,
"Synx" = /mob/living/simple_mob/animal/synx, //TODO: Port from Downstream //CHOMPStation Enable
"Jelly blob" = /mob/living/simple_mob/vore/jelly,
"Voracious lizard" = /mob/living/simple_mob/vore/aggressive/dino,
"Baby metroid" = /mob/living/simple_mob/metroid/juvenile/baby, //TODO: Port from Downstream //CHOMPStation Enable
"Super metroid" = /mob/living/simple_mob/metroid/juvenile/super, //TODO: Port from Downstream //CHOMPStation Enable
"Alpha metroid" = /mob/living/simple_mob/metroid/juvenile/alpha, //TODO: Port from Downstream //CHOMPStation Enable
"Gamma metroid" = /mob/living/simple_mob/metroid/juvenile/gamma, //TODO: Port from Downstream //CHOMPStation Enable
"Zeta metroid" = /mob/living/simple_mob/metroid/juvenile/zeta, //TODO: Port from Downstream //CHOMPStation Enable
"Omega metroid" = /mob/living/simple_mob/metroid/juvenile/omega, //TODO: Port from Downstream //CHOMPStation Enable
"Queen metroid" = /mob/living/simple_mob/metroid/juvenile/queen, //TODO: Port from Downstream //CHOMPStation Enable
"Xeno hunter" = /mob/living/simple_mob/animal/space/alien,
"Xeno sentinel" = /mob/living/simple_mob/animal/space/alien/sentinel,
"Xeno Praetorian" = /mob/living/simple_mob/animal/space/alien/sentinel/praetorian,
"Xeno queen" = /mob/living/simple_mob/animal/space/alien/queen,
"Xeno Empress" = /mob/living/simple_mob/animal/space/alien/queen/empress,
"Xeno Queen Mother" = /mob/living/simple_mob/animal/space/alien/queen/empress/mother,
"Defanged xeno" = /mob/living/simple_mob/vore/xeno_defanged,
"Sect drone" = /mob/living/simple_mob/vore/sect_drone,
"Sect queen" = /mob/living/simple_mob/vore/sect_queen,
"Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw,
"Great White Wolf" = /mob/living/simple_mob/vore/greatwolf,
"Great Black Wolf" = /mob/living/simple_mob/vore/greatwolf/black,
"Solar grub" = /mob/living/simple_mob/vore/solargrub,
"Pitcher plant" = /mob/living/simple_mob/vore/pitcher_plant, //TODO: Port from Downstream //CHOMPStation Enable
"Red gummy kobold" = /mob/living/simple_mob/vore/candy/redcabold, //TODO: Port from Downstream //CHOMPStation Enable
"Blue gummy kobold" = /mob/living/simple_mob/vore/candy/bluecabold, //TODO: Port from Downstream //CHOMPStation Enable
"Yellow gummy kobold" = /mob/living/simple_mob/vore/candy/yellowcabold, //TODO: Port from Downstream //CHOMPStation Enable
"Marshmellow serpent" = /mob/living/simple_mob/vore/candy/marshmellowserpent, //TODO: Port from Downstream //CHOMPStation Enable
"Riftwalker" = /mob/living/simple_mob/vore/demon,
"Wendigo" = /mob/living/simple_mob/vore/demon/wendigo, //TODO: Port from Downstream //CHOMPStation Enable
"Shadekin" = /mob/living/simple_mob/shadekin,
"Catgirl" = /mob/living/simple_mob/vore/catgirl,
"Wolfgirl" = /mob/living/simple_mob/vore/wolfgirl,
"Wolftaur" = /mob/living/simple_mob/vore/wolftaur,
"Lamia" = /mob/living/simple_mob/vore/lamia,
"Corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound,
"Corrupt corrupt hound" = /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi,
"SWOOPIE XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie, //TODO: Port from Downstream //CHOMPStation Enable
"Cultist Teshari" = /mob/living/simple_mob/humanoid/cultist/tesh, //TODO: Port from Downstream //CHOMPStation Enable
"Burning Mage" = /mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball, //TODO: Port from Downstream //CHOMPStation Enable
"Converted" = /mob/living/simple_mob/humanoid/cultist/noodle, //TODO: Port from Downstream //CHOMPStation Enable
"Cultist Teshari Mage" = /mob/living/simple_mob/humanoid/cultist/castertesh, //TODO: Port from Downstream //CHOMPStation Enable
"Monkey" = /mob/living/carbon/human/monkey,
"Wolpin" = /mob/living/carbon/human/wolpin,
"Sparra" = /mob/living/carbon/human/sparram,
"Saru" = /mob/living/carbon/human/sergallingm,
"Sobaka" = /mob/living/carbon/human/sharkm,
"Farwa" = /mob/living/carbon/human/farwa,
"Neaera" = /mob/living/carbon/human/neaera,
"Stok" = /mob/living/carbon/human/stok,
//"Gryphon" = /mob/living/simple_mob/vore/gryphon // Disabled until tested
))
//global lists I found in various files and moved here for housekeeping
GLOBAL_LIST_EMPTY(stool_cache) //haha stool
GLOBAL_LIST_EMPTY(emotes_by_key)
GLOBAL_LIST_EMPTY(random_maps)
GLOBAL_LIST_EMPTY(map_count)
GLOBAL_LIST_EMPTY(narsie_list)
GLOBAL_LIST_EMPTY(id_card_states)
GLOBAL_LIST_EMPTY(allocated_gamma_loot)
GLOBAL_LIST_EMPTY(semirandom_mob_spawner_decisions)
GLOBAL_LIST_INIT(unique_gamma_loot, list(
/obj/item/perfect_tele,
/obj/item/bluespace_harpoon,
/obj/item/clothing/glasses/thermal/syndi,
/obj/item/gun/energy/netgun,
/obj/item/gun/projectile/pirate, // CHOMPAdd
/obj/item/gun/projectile/dartgun,
/obj/item/clothing/gloves/black/bloodletter,
/obj/item/gun/energy/mouseray/metamorphosis
))
GLOBAL_LIST_INIT(newscaster_standard_feeds, list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots))
GLOBAL_LIST_INIT(changeling_fabricated_clothing, list(
"w_uniform" = /obj/item/clothing/under/chameleon/changeling,
"head" = /obj/item/clothing/head/chameleon/changeling,
"wear_suit" = /obj/item/clothing/suit/chameleon/changeling,
"shoes" = /obj/item/clothing/shoes/chameleon/changeling,
"gloves" = /obj/item/clothing/gloves/chameleon/changeling,
"wear_mask" = /obj/item/clothing/mask/chameleon/changeling,
"glasses" = /obj/item/clothing/glasses/chameleon/changeling,
"back" = /obj/item/storage/backpack/chameleon/changeling,
"belt" = /obj/item/storage/belt/chameleon/changeling,
"wear_id" = /obj/item/card/id/syndicate/changeling
))
// Defines which values mean "on" or "off".
// This is to make some of the more OP superpowers a larger PITA to activate,
// and to tell our new DNA datum which values to set in order to turn something
// on or off.
var/global/list/dna_activity_bounds[DNA_SE_LENGTH]
// Used to determine what each block means (admin hax and species stuff on /vg/, mostly)
var/global/list/assigned_blocks[DNA_SE_LENGTH]
GLOBAL_LIST_EMPTY(gear_distributed_to)
GLOBAL_LIST_EMPTY(overlay_cache) //cache recent overlays
var/global/list/all_technomancer_gambit_spells = typesof(/obj/item/spell) - list(
/obj/item/spell,
/obj/item/spell/gambit,
/obj/item/spell/projectile,
/obj/item/spell/aura,
// /obj/item/spell/insert,
/obj/item/spell/spawner,
/obj/item/spell/summon,
/obj/item/spell/modifier)
var/global/list/image/splatter_cache=list()
var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime.
var/global/list/obj/machinery/telecomms/telecomms_list = list()
// color-dir-dry
var/global/list/image/fluidtrack_cache=list()
var/global/list/datum/stack_recipe/sandbag_recipes = list( \
new/datum/stack_recipe("barricade", /obj/structure/barricade/sandbag, 3, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE))
var/global/list/datum/stack_recipe/wax_recipes = list( \
new/datum/stack_recipe("candle", /obj/item/flame/candle) \
)
var/global/list/datum/stack_recipe/rods_recipes = list( \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 0),
new/datum/stack_recipe("catwalk", /obj/structure/catwalk, 2, time = 80, one_per_turf = 1, on_floor = 1))
GLOBAL_LIST_INIT(possible_plants, list(
"plant-1",
"plant-10",
"plant-09",
"plant-15",
"plant-13"
))
GLOBAL_LIST_INIT(radio_channels_by_freq, list(
num2text(PUB_FREQ) = CHANNEL_COMMON,
num2text(AI_FREQ) = CHANNEL_AI_PRIVATE,
num2text(ENT_FREQ) = CHANNEL_ENTERTAINMENT,
num2text(ERT_FREQ) = CHANNEL_RESPONSE_TEAM,
num2text(COMM_FREQ)= CHANNEL_COMMAND,
num2text(ENG_FREQ) = CHANNEL_ENGINEERING,
num2text(MED_FREQ) = CHANNEL_MEDICAL,
num2text(MED_I_FREQ)=CHANNEL_MEDICAL_1,
num2text(BDCM_FREQ) =CHANNEL_BODYCAM, // CHOMPEdit
num2text(SEC_FREQ) = CHANNEL_SECURITY,
num2text(SEC_I_FREQ)=CHANNEL_SECURITY_1,
num2text(SCI_FREQ) = CHANNEL_SCIENCE,
num2text(SUP_FREQ) = CHANNEL_SUPPLY,
num2text(SRV_FREQ) = CHANNEL_SERVICE,
num2text(EXP_FREQ) = CHANNEL_EXPLORATION
))
GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/paicard)
// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't
GLOBAL_LIST_INIT(default_internal_channels, list(
num2text(PUB_FREQ) = list(),
num2text(AI_FREQ) = list(ACCESS_SYNTH),
num2text(ENT_FREQ) = list(),
num2text(ERT_FREQ) = list(ACCESS_CENT_SPECOPS),
num2text(COMM_FREQ)= list(ACCESS_HEADS),
num2text(ENG_FREQ) = list(ACCESS_ENGINE_EQUIP, ACCESS_ATMOSPHERICS),
num2text(MED_FREQ) = list(ACCESS_MEDICAL_EQUIP),
num2text(MED_I_FREQ)=list(ACCESS_MEDICAL_EQUIP),
num2text(BDCM_FREQ) =list(ACCESS_SECURITY), // CHOMPAdd
num2text(SEC_FREQ) = list(ACCESS_SECURITY),
num2text(SEC_I_FREQ)=list(ACCESS_SECURITY),
num2text(SCI_FREQ) = list(ACCESS_TOX, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY),
num2text(SUP_FREQ) = list(ACCESS_CARGO, ACCESS_MINING_STATION),
num2text(SRV_FREQ) = list(ACCESS_JANITOR, ACCESS_LIBRARY, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN),
num2text(EXP_FREQ) = list(ACCESS_EXPLORER, ACCESS_PILOT) // CHOMPEdit
))
GLOBAL_LIST_INIT(default_medbay_channels, list(
num2text(PUB_FREQ) = list(),
num2text(MED_FREQ) = list(),
num2text(MED_I_FREQ) = list()
))
GLOBAL_LIST_INIT(device_ringtones, list("beep" = 'sound/machines/twobeep.ogg',
"boom" = 'sound/effects/explosionfar.ogg',
"slip" = 'sound/misc/slip.ogg',
"honk" = 'sound/items/bikehorn.ogg',
"SKREE" = 'sound/voice/shriek1.ogg',
// "holy" = 'sound/items/PDA/ambicha4-short.ogg',
"xeno" = 'sound/voice/hiss1.ogg',
"dust" = 'sound/effects/supermatter.ogg', // CHOMPEdit
"spark" = 'sound/effects/sparks4.ogg',
"rad" = 'sound/items/geiger/high1.ogg',
"servo" = 'sound/machines/rig/rigservo.ogg',
// "buh-boop" = 'sound/misc/buh-boop.ogg', // CHOMPRemove
"trombone" = 'sound/misc/sadtrombone.ogg',
"whistle" = 'sound/misc/boatswain.ogg',
"chirp" = 'sound/misc/nymphchirp.ogg',
"slurp" = 'sound/items/drink.ogg',
"pwing" = 'sound/items/nif_tone_good.ogg',
"clack" = 'sound/items/storage/toolbox.ogg',
"bzzt" = 'sound/misc/null.ogg', //vibrate mode
"chimes" = 'sound/misc/notice3.ogg',
"prbt" = 'sound/voice/prbt.ogg',
"bark" = 'sound/voice/bark2.ogg',
"bork" = 'sound/voice/bork.ogg',
"roark" = 'sound/voice/roarbark.ogg',
"chitter" = 'sound/voice/moth/moth_chitter.ogg',
"squish" = 'sound/effects/slime_squish.ogg',
"bubble"= 'sound/effects/bubbles.ogg',
"silly" = 'sound/effects/whistle.ogg',
// "frog" = 'sound/voice/Croak.ogg',
"peep" = 'sound/voice/peep.ogg',
"quack" = 'sound/voice/quack.ogg',
// "ough" = 'sound/misc/ough.ogg',
"stamp" = 'sound/bureaucracy/stamp.ogg',
"gnome" = 'sound/items/hooh.ogg',
"ratchet" = 'sound/items/Ratchet.ogg',
"tether" = 'sound/items/tinytether.ogg'
))
GLOBAL_LIST_EMPTY(seen_citizenships)
GLOBAL_LIST_EMPTY(seen_systems)
GLOBAL_LIST_EMPTY(seen_factions)
GLOBAL_LIST_EMPTY(seen_religions)
GLOBAL_LIST_INIT(citizenship_choices, list(
"Earth",
"Mars",
"Sif",
"Binma",
"Moghes",
"Meralar",
"Qerr'balak"
))
GLOBAL_LIST_INIT(home_system_choices, list(
"Virgo-Erigone",
"Sol",
"Earth, Sol",
"Luna, Sol",
"Mars, Sol",
"Venus, Sol",
"Titan, Sol",
"Toledo, New Ohio",
"The Pact, Myria",
"Kishar, Alpha Centauri",
"Anshar, Alpha Centauri",
"Heaven Complex, Alpha Centauri",
"Procyon",
"Altair",
"Kara, Vir",
"Sif, Vir",
"Brinkburn, Nyx",
"Binma, Tau Ceti",
"Qerr'balak, Qerr'valis",
"Epsilon Ursae Minoris",
"Meralar, Rarkajar",
"Tal, Vilous",
"Menhir, Alat-Hahr",
"Altam, Vazzend",
"Uh'Zata, Kelezakata",
"Moghes, Uuoea-Esa",
"Xohok, Uuoea-Esa",
"Varilak, Antares",
"Sanctorum, Sanctum",
"Infernum, Sanctum",
"Abundance in All Things Serene, Beta-Carnelium Ventrum",
"Jorhul, Barkalis",
"Shelf Flotilla",
"Ue-Orsi Flotilla",
"AH-CV Prosperity",
"AH-CV Migrant",
"Altevian Colony Ship"
))
GLOBAL_LIST_INIT(faction_choices, list(
"Sol Central", // CHOMPAdd
"NanoTrasen Incorporated",
"Hephaestus Industries",
"Vey-Medical",
"Zeng-Hu Pharmaceuticals",
"Ward-Takahashi GMC",
"Bishop Cybernetics",
"Morpheus Cyberkinetics",
"Xion Manufacturing Group",
"Free Trade Union",
"Major Bill's Transportation",
"Ironcrest Transport Group",
"Grayson Manufactories Ltd.",
"Aether Atmospherics",
"Focal Point Energistics",
"StarFlight Inc.",
"Oculum Broadcasting Network",
"Periphery Post",
"Free Anur Tribune",
"Centauri Provisions",
"Einstein Engines",
"Wulf Aeronautics",
"Gilthari Exports",
"Coyote Salvage Corp.",
"Chimera Genetics Corp.",
"Independent Pilots Association",
"Local System Defense Force",
"United Solar Defense Force",
"Proxima Centauri Risk Control",
"HIVE Security",
"Stealth Assault Enterprises",
"Teshari Union"
))
GLOBAL_LIST_EMPTY(antag_faction_choices) //Should be populated after brainstorming. Leaving as blank in case brainstorming does not occur.
GLOBAL_LIST_INIT(antag_visiblity_choices, list(
"Hidden",
"Shared",
"Known"
))
GLOBAL_LIST_INIT(religion_choices, list(
"Unitarianism",
"Neopaganism",
"Islam",
"Christianity",
"Judaism",
"Hinduism",
"Buddhism",
"Pleromanism",
"Spectralism",
"Phact Shintoism",
"Kishari Faith",
"Hauler Faith",
"Nock",
"Singulitarian Worship",
"Xilar Qall",
"Tajr-kii Rarkajar",
"Agnosticism",
"Deism",
"Neo-Moreauism",
"Orthodox Moreauism"
))
GLOBAL_LIST_INIT(xenoChemList, list(REAGENT_ID_MUTATIONTOXIN,
REAGENT_ID_PSILOCYBIN,
REAGENT_ID_MINDBREAKER,
REAGENT_ID_IMPEDREZENE,
REAGENT_ID_CRYPTOBIOLIN,
REAGENT_ID_BLISS,
REAGENT_ID_CHLORALHYDRATE,
REAGENT_ID_STOXIN,
REAGENT_ID_MUTAGEN,
REAGENT_ID_LEXORIN,
REAGENT_ID_PACID,
REAGENT_ID_CYANIDE,
REAGENT_ID_PHORON,
REAGENT_ID_PLASTICIDE,
REAGENT_ID_AMATOXIN,
REAGENT_ID_CARBON,
REAGENT_ID_RADIUM,
REAGENT_ID_SACID,
REAGENT_ID_SUGAR,
REAGENT_ID_KELOTANE,
REAGENT_ID_DERMALINE,
REAGENT_ID_ANTITOXIN,
REAGENT_ID_DEXALIN,
REAGENT_ID_SYNAPTIZINE,
REAGENT_ID_ALKYSINE,
REAGENT_ID_IMIDAZOLINE,
REAGENT_ID_PERIDAXON,
REAGENT_ID_REZADONE))
//Chemlist of what was banned in xenobio2. Kept for legacy purposes.
GLOBAL_LIST_INIT(xeno2ChemList, list(REAGENT_ID_INAPROVALINE,
REAGENT_ID_BICARIDINE,
REAGENT_ID_DEXALINP,
REAGENT_ID_TRICORDRAZINE,
REAGENT_ID_CRYOXADONE,
REAGENT_ID_CLONEXADONE,
REAGENT_ID_PARACETAMOL,
REAGENT_ID_TRAMADOL,
REAGENT_ID_OXYCODONE,
REAGENT_ID_RYETALYN,
REAGENT_ID_HYPERZINE,
REAGENT_ID_ETHYLREDOXRAZINE,
REAGENT_ID_HYRONALIN,
REAGENT_ID_ARITHRAZINE,
REAGENT_ID_SPACEACILLIN,
REAGENT_ID_STERILIZINE,
REAGENT_ID_LEPORAZINE,
REAGENT_ID_METHYLPHENIDATE,
REAGENT_ID_CITALOPRAM,
REAGENT_ID_PAROXETINE,
REAGENT_ID_MACROCILLIN,
REAGENT_ID_MICROCILLIN,
REAGENT_ID_NORMALCILLIN,
REAGENT_ID_SIZEOXADONE,
REAGENT_ID_ICKYPAK,
REAGENT_ID_UNSORBITOL,
REAGENT_ID_TOXIN,
REAGENT_ID_CARPOTOXIN,
REAGENT_ID_POTASSIUMCHLORIDE,
REAGENT_ID_POTASSIUMCHLOROPHORIDE,
REAGENT_ID_ZOMBIEPOWDER,
REAGENT_ID_FERTILIZER,
REAGENT_ID_EZNUTRIENT,
REAGENT_ID_LEFT4ZED,
REAGENT_ID_ROBUSTHARVEST,
REAGENT_ID_PLANTBGONE,
REAGENT_ID_SEROTROTIUM,
REAGENT_ID_NICOTINE,
REAGENT_ID_URANIUM,
REAGENT_ID_SILVER,
REAGENT_ID_GOLD,
REAGENT_ID_ADRENALINE,
REAGENT_ID_HOLYWATER,
REAGENT_ID_AMMONIA,
REAGENT_ID_DIETHYLAMINE,
REAGENT_ID_FLUOROSURFACTANT,
REAGENT_ID_FOAMINGAGENT,
REAGENT_ID_THERMITE,
REAGENT_ID_CLEANER,
REAGENT_ID_LUBE,
REAGENT_ID_SILICATE,
REAGENT_ID_GLYCEROL,
REAGENT_ID_COOLANT,
REAGENT_ID_LUMINOL,
REAGENT_ID_NUTRIMENT,
REAGENT_ID_CORNOIL,
REAGENT_ID_LIPOZINE,
REAGENT_ID_SODIUMCHLORIDE,
REAGENT_ID_FROSTOIL,
REAGENT_ID_CAPSAICIN,
REAGENT_ID_CONDENSEDCAPSAICIN,
REAGENT_ID_NEUROTOXIN))
//keep synced with the defines BE_* in setup.dm --rastaf
//some autodetection here.
//Change these to 0 if the equivalent mode is disabled for whatever reason!
GLOBAL_LIST_INIT(special_roles, list(
"traitor" = 0, // 0
"operative" = 0, // 1
"changeling" = 0, // 2
"wizard" = 0, // 3
"malf AI" = 0, // 4
"revolutionary" = 0, // 5
"alien candidate" = 0, // 6
"positronic brain" = 1, // 7
"cultist" = 0, // 8
"renegade" = 0, // 9
"ninja" = 0, // 10
"raider" = 0, // 11
"diona" = 0, // 12
"mutineer" = 0, // 13
"loyalist" = 0, // 14
"pAI candidate" = 1, // 15
"lost drone" = 1, // 16
"maint pred" = 1, // 17
"stowaway" = 1, // 18 // CHOMPEdit
"morph" = 1, // 19
"corgi" = 1, // 20
"cursed sword" = 1, // 21
"Ship Survivor" = 1, // 22
))
GLOBAL_LIST_INIT(maint_mob_pred_options, list(
"Rabbit" = /mob/living/simple_mob/vore/rabbit,
"Red Panda" = /mob/living/simple_mob/vore/redpanda,
"Fennec" = /mob/living/simple_mob/vore/fennec,
"Fennix" = /mob/living/simple_mob/vore/fennix,
"Fox" = /mob/living/simple_mob/animal/passive/fox,
"Syndi-Fox" = /mob/living/simple_mob/animal/passive/fox/syndicate,
"Raccoon" = /mob/living/simple_mob/animal/passive/raccoon,
"Cat" = /mob/living/simple_mob/animal/passive/cat,
"Space Bumblebee" = /mob/living/simple_mob/vore/bee,
"Space Bear" = /mob/living/simple_mob/animal/space/bear,
"Voracious Lizard" = /mob/living/simple_mob/vore/aggressive/dino,
"Giant Frog" = /mob/living/simple_mob/vore/aggressive/frog,
"Giant Rat" = /mob/living/simple_mob/vore/aggressive/rat,
"Jelly Blob" = /mob/living/simple_mob/vore/jelly,
"Wolf" = /mob/living/simple_mob/vore/wolf,
"Dire Wolf" = /mob/living/simple_mob/vore/wolf/direwolf,
"Large Dog" = /mob/living/simple_mob/vore/wolf/direwolf/dog,
"Juvenile Solargrub" = /mob/living/simple_mob/vore/solargrub,
"Sect Queen" = /mob/living/simple_mob/vore/sect_queen,
"Sect Drone" = /mob/living/simple_mob/vore/sect_drone,
"Defanged Xenomorph" = /mob/living/simple_mob/vore/xeno_defanged,
"Panther" = /mob/living/simple_mob/vore/aggressive/panther,
"Giant Snake" = /mob/living/simple_mob/vore/aggressive/giant_snake,
"Deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw,
"Otie" = /mob/living/simple_mob/vore/otie,
"Chubby Otie" = /mob/living/simple_mob/vore/otie/friendly/chubby,
"Mutated Otie" = /mob/living/simple_mob/vore/otie/feral,
"Chubby Mutated Otie" = /mob/living/simple_mob/vore/otie/feral/chubby,
"Red Otie" = /mob/living/simple_mob/vore/otie/red,
"Chubby Red Otie" = /mob/living/simple_mob/vore/otie/red/chubby,
"Corrupt Hound" = /mob/living/simple_mob/vore/aggressive/corrupthound,
"Corrupt Corrupt Hound" = /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi,
"Hunter Giant Spider" = /mob/living/simple_mob/animal/giant_spider/hunter,
"Lurker Giant Spider" = /mob/living/simple_mob/animal/giant_spider/lurker,
"Pepper Giant Spider" = /mob/living/simple_mob/animal/giant_spider/pepper,
"Thermic Giant Spider" = /mob/living/simple_mob/animal/giant_spider/thermic,
"Webslinger Giant Spider" = /mob/living/simple_mob/animal/giant_spider/webslinger,
"Frost Giant Spider" = /mob/living/simple_mob/animal/giant_spider/frost,
"Nurse Giant Spider" = /mob/living/simple_mob/animal/giant_spider/nurse/eggless,
"Giant Spider Queen" = /mob/living/simple_mob/animal/giant_spider/nurse/queen/eggless,
"Red Dragon" = /mob/living/simple_mob/vore/aggressive/dragon,
"Phoron Dragon" = /mob/living/simple_mob/vore/aggressive/dragon/virgo3b,
"Space Dragon" = /mob/living/simple_mob/vore/aggressive/dragon/space,
"Crypt Drake" = /mob/living/simple_mob/vore/cryptdrake,
"Weretiger" = /mob/living/simple_mob/vore/weretiger,
"Catslug" = /mob/living/simple_mob/vore/alienanimals/catslug,
"Squirrel" = /mob/living/simple_mob/vore/squirrel/big,
"Pakkun" =/mob/living/simple_mob/vore/pakkun,
"Snapdragon" =/mob/living/simple_mob/vore/pakkun/snapdragon,
"Sand pakkun" = /mob/living/simple_mob/vore/pakkun/sand,
"Fire pakkun" = /mob/living/simple_mob/vore/pakkun/fire,
"Amethyst pakkun" = /mob/living/simple_mob/vore/pakkun/purple,
"Raptor" = /mob/living/simple_mob/vore/raptor,
"Giant Bat" = /mob/living/simple_mob/vore/bat,
"Scel (Orange)" = /mob/living/simple_mob/vore/scel/orange,
"Scel (Blue)" = /mob/living/simple_mob/vore/scel/blue,
"Scel (Purple)" = /mob/living/simple_mob/vore/scel/purple,
"Scel (Red)" = /mob/living/simple_mob/vore/scel/red,
"Scel (Green)" = /mob/living/simple_mob/vore/scel/green,
"Cave Stalker" = /mob/living/simple_mob/vore/stalker,
"Kelpie" = /mob/living/simple_mob/vore/horse/kelpie,
"Scrubble" = /mob/living/simple_mob/vore/scrubble,
"Sonadile" = /mob/living/simple_mob/vore/sonadile,
"kururak" = /mob/living/simple_mob/animal/sif/kururak,
"Statue of Temptation" = /mob/living/simple_mob/vore/devil,
"Meowl" = /mob/living/simple_mob/vore/meowl,
"Abyss Leaper" = /mob/living/simple_mob/vore/vore_hostile/leaper,
"Abyss Lurker" = /mob/living/simple_mob/vore/vore_hostile/abyss_lurker,
// CHOMPAdd Start
"Horse" = /mob/living/simple_mob/vore/horse/big,
"Lizardman" = /mob/living/simple_mob/vore/aggressive/lizardman,
"Giant Lab Rat" = /mob/living/simple_mob/vore/aggressive/rat/labrat,
"Hyena" = /mob/living/simple_mob/animal/hyena,
"Xenomorph Hunter" = /mob/living/simple_mob/xeno_ch/hunter,
"Xenomorph Sentinel" = /mob/living/simple_mob/xeno_ch/sentinel,
"Xenomorph Queen" = /mob/living/simple_mob/xeno_ch/queen,
"Xenomorph Maid Queen" = /mob/living/simple_mob/xeno_ch/queen/maid,
"Corrupt JaniHound" = /mob/living/simple_mob/vore/retaliate/corrupthound/janihound,
"Corrupt Old JaniHound" = /mob/living/simple_mob/vore/retaliate/corrupthound/janihound/old,
"Corrupt MediHound" = /mob/living/simple_mob/vore/retaliate/corrupthound/janihound/medihound,
"Lesser Large Dragon" = /mob/living/simple_mob/vore/bigdragon/friendly/maintpred,
"Zorgoia" = /mob/living/simple_mob/vore/zorgoia,
"Gryphon" = /mob/living/simple_mob/vore/gryphon,
"Synx" = /mob/living/simple_mob/animal/synx,
"Reindeer" = /mob/living/simple_mob/vore/reindeer,
"Lion/Lioness" = /mob/living/simple_mob/vore/retaliate/lion,
"Swoopie XL" = /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie,
"Teppie" = /mob/living/simple_mob/vore/alienanimals/teppi,
"Frostlit Lamp" = /mob/living/simple_mob/animal/passive/gaslamp/snow,
"Voidwalker" = /mob/living/simple_mob/vore/demon,
"Super Metroid" = /mob/living/simple_mob/metroid/juvenile/super,
"Space Carp" = /mob/living/simple_mob/animal/space/carp,
"Great White Carp" = /mob/living/simple_mob/animal/space/carp/large/huge/vorny,
"Giant Bat" = /mob/living/simple_mob/vore/bat
// CHOMPAdd End
))
// GLOB.alldirs in global.dm is the same list of directions, but since
// the specific order matters to get a usable icon_state, it is
// copied here so that, in the unlikely case that GLOB.alldirs is changed, transit_tube.dm
// continues to work.
GLOBAL_LIST_INIT(tube_dir_list, list(
NORTH,
SOUTH,
EAST,
WEST,
NORTHEAST,
NORTHWEST,
SOUTHEAST,
SOUTHWEST))
GLOBAL_LIST_EMPTY(direction_table)
GLOBAL_LIST_INIT(valid_bloodreagents, list("default",REAGENT_ID_IRON,REAGENT_ID_COPPER,REAGENT_ID_PHORON,REAGENT_ID_SILVER,REAGENT_ID_GOLD,REAGENT_ID_SLIMEJELLY)) //allowlist-based so people don't make their blood restored by alcohol or something really silly. use reagent IDs!
GLOBAL_LIST_EMPTY(monitor_states)
GLOBAL_LIST_EMPTY(random_junk)
GLOBAL_LIST_EMPTY(random_junk_)
GLOBAL_LIST_EMPTY(random_useful_)
GLOBAL_LIST_INIT(valid_bloodtypes, list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"))
//Some simple descriptors for breaches. Global because lazy, TODO: work out a better way to do this.
GLOBAL_LIST_INIT(breach_brute_descriptors, list(
"tiny puncture",
"ragged tear",
"large split",
"huge tear",
"gaping wound"
))
GLOBAL_LIST_INIT(breach_burn_descriptors, list(
"small burn",
"melted patch",
"sizable burn",
"large scorched area",
"huge scorched area"
))
GLOBAL_LIST_INIT(wide_chassis, list(
"rat",
"panther",
"teppi",
"pai-diredog",
"pai-horse_lune",
"pai-horse_soleil",
"pai-pdragon",
"pai-protodog"
))
GLOBAL_LIST_INIT(flying_chassis, list(
"pai-parrot",
"pai-bat",
"pai-butterfly",
"pai-hawk",
"cyberelf"
))
//Sure I could spend all day making wacky overlays for all of the different forms
//but quite simply most of these sprites aren't made for that, and I'd rather just make new ones
//the birds especially! Just naw. If someone else wants to mess with 12x4 frames of animation where
//most of the pixels are different kinds of green and tastefully translate that to whitescale
//they can have fun with that! I not doing it!
GLOBAL_LIST_INIT(allows_eye_color, list(
"pai-repairbot",
"pai-typezero",
"pai-bat",
"pai-butterfly",
"pai-mouse",
"pai-monkey",
"pai-raccoon",
"pai-cat",
"rat",
"panther",
"pai-bear",
"pai-fen",
"cyberelf",
"teppi",
"catslug",
"car",
"typeone",
"13",
"pai-raptor",
"pai-diredog",
"pai-horse_lune",
"pai-horse_soleil",
"pai-pdragon",
"pai-protodog"
))
GLOBAL_LIST_EMPTY(entopic_images)
GLOBAL_LIST_EMPTY(entopic_users)
GLOBAL_LIST_EMPTY(alt_farmanimals)
GLOBAL_LIST_EMPTY(acceptable_items) // List of the items you can put in
GLOBAL_LIST_EMPTY(available_recipes) // List of the recipes you can use
GLOBAL_LIST_EMPTY(acceptable_reagents) // List of the reagents you can put in
/var/all_ui_styles = list(
"Midnight" = 'icons/mob/screen/midnight.dmi',
"Orange" = 'icons/mob/screen/orange.dmi',
"old" = 'icons/mob/screen/old.dmi',
"White" = 'icons/mob/screen/white.dmi',
"old-noborder" = 'icons/mob/screen/old-noborder.dmi',
"minimalist" = 'icons/mob/screen/minimalist.dmi',
"Hologram" = 'icons/mob/screen/holo.dmi'
)
/var/all_ui_styles_robot = list(
"Midnight" = 'icons/mob/screen1_robot.dmi',
"Orange" = 'icons/mob/screen1_robot.dmi',
"old" = 'icons/mob/screen1_robot.dmi',
"White" = 'icons/mob/screen1_robot.dmi',
"old-noborder" = 'icons/mob/screen1_robot.dmi',
"minimalist" = 'icons/mob/screen1_robot_minimalist.dmi',
"Hologram" = 'icons/mob/screen1_robot_minimalist.dmi'
)
GLOBAL_LIST_INIT(all_tooltip_styles, list(
"Midnight", //Default for everyone is the first one,
"Plasmafire",
"Retro",
"Slimecore",
"Operative",
"Clockwork"
))
//Global Datums
var/global/datum/pipe_icon_manager/icon_manager
var/global/datum/emergency_shuttle_controller/emergency_shuttle = new
// We manually initialize the alarm handlers instead of looping over all existing types
// to make it possible to write: camera_alarm.triggerAlarm() rather than SSalarm.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof.
/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new()
/var/global/datum/alarm_handler/camera/camera_alarm = new()
/var/global/datum/alarm_handler/fire/fire_alarm = new()
/var/global/datum/alarm_handler/motion/motion_alarm = new()
/var/global/datum/alarm_handler/power/power_alarm = new()
GLOBAL_LIST_EMPTY(gun_choices)
GLOBAL_LIST_INIT(severity_to_string, list(
EVENT_LEVEL_MUNDANE = "Mundane",
EVENT_LEVEL_MODERATE = "Moderate",
EVENT_LEVEL_MAJOR = "Major"
))
//Some global icons for the examine tab to use to display some item properties.
GLOBAL_LIST_INIT(description_icons, list(
"melee_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="melee_protection"),
"bullet_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="bullet_protection"),
"laser_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="laser_protection"),
"energy_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="energy_protection"),
"bomb_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="bomb_protection"),
"radiation_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="radiation_protection"),
"biohazard_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="biohazard_protection"),
"offhand" = image(icon='icons/mob/screen1_stats.dmi',icon_state="offhand"),
"welder" = image(icon='icons/obj/tools.dmi',icon_state="welder"),
"wirecutters" = image(icon='icons/obj/tools.dmi',icon_state="cutters"),
"screwdriver" = image(icon='icons/obj/tools.dmi',icon_state="screwdriver"),
"wrench" = image(icon='icons/obj/tools.dmi',icon_state="wrench"),
"crowbar" = image(icon='icons/obj/tools.dmi',icon_state="crowbar"),
"multitool" = image(icon='icons/obj/device.dmi',icon_state="multitool"),
"cable coil" = image(icon='icons/obj/power.dmi',icon_state="coil"), // VOREStation Edit
"metal sheet" = image(icon='icons/obj/items.dmi',icon_state="sheet-metal"),
"plasteel sheet" = image(icon='icons/obj/items.dmi',icon_state="sheet-plasteel"),
"air tank" = image(icon='icons/obj/tank.dmi',icon_state="oxygen"),
"connector" = image(icon='icons/obj/pipes.dmi',icon_state="connector"),
"stunbaton" = image(icon='icons/obj/weapons.dmi',icon_state="stunbaton_active"),
"slimebaton" = image(icon='icons/obj/weapons.dmi',icon_state="slimebaton_active"),
"power cell" = image(icon='icons/obj/power.dmi',icon_state="hcell"),
"device cell" = image(icon='icons/obj/power.dmi',icon_state="dcell"),
"weapon cell" = image(icon='icons/obj/power.dmi',icon_state="wcell"),
"hatchet" = image(icon='icons/obj/weapons.dmi',icon_state="hatchet"),
))
// TODO - Optimize this into numerics if this ends up working out
GLOBAL_LIST_INIT(MOVE_KEY_MAPPINGS, list(
"North" = NORTH_KEY,
"South" = SOUTH_KEY,
"East" = EAST_KEY,
"West" = WEST_KEY,
"W" = W_KEY,
"A" = A_KEY,
"S" = S_KEY,
"D" = D_KEY,
"Shift" = SHIFT_KEY,
"Ctrl" = CTRL_KEY,
"Alt" = ALT_KEY,
))
GLOBAL_LIST_EMPTY(total_extraction_beacons)
GLOBAL_LIST_INIT(possible_ghost_sprites, list(
"Clear" = "blank",
"Green Blob" = "otherthing",
"Bland" = "ghost",
"Robed-B" = "ghost1",
"Robed-BAlt" = "ghost2",
"King" = "ghostking",
"Shade" = "shade",
"Hecate" = "ghost-narsie",
"Glowing Statue" = "armour",
"Artificer" = "artificer",
"Behemoth" = "behemoth",
"Harvester" = "harvester",
"Wraith" = "wraith",
"Viscerator" = "viscerator",
"Corgi" = "corgi",
"Tamaskan" = "tamaskan",
"Black Cat" = "blackcat",
"Lizard" = "lizard",
"Goat" = "goat",
"Space Bear" = "bear",
"Bats" = "bat",
"Chicken" = "chicken_white",
"Parrot"= "parrot_fly",
"Goose" = "goose",
"Penguin" = "penguin",
"Brown Crab" = "crab",
"Gray Crab" = "evilcrab",
"Trout" = "trout-swim",
"Salmon" = "salmon-swim",
"Pike" = "pike-swim",
"Koi" = "koi-swim",
"Carp" = "carp",
"Red Robes" = "robe_red",
"Faithless" = "faithless",
"Shadowform" = "forgotten",
"Dark Ethereal" = "bloodguardian",
"Holy Ethereal" = "lightguardian",
"Red Elemental" = "magicRed",
"Blue Elemental" = "magicBlue",
"Pink Elemental" = "magicPink",
"Orange Elemental" = "magicOrange",
"Green Elemental" = "magicGreen",
"Daemon" = "daemon",
"Guard Spider" = "guard",
"Hunter Spider" = "hunter",
"Nurse Spider" = "nurse",
"Rogue Drone" = "drone",
"ED-209" = "ed209",
"Beepsky" = "secbot"
))
GLOBAL_LIST_EMPTY(sparring_attack_cache)
GLOBAL_LIST_EMPTY(protean_abilities)
//PAI stuff
GLOBAL_LIST_INIT(possible_chassis, list(
"Drone" = "pai-repairbot",
"Cat" = "pai-cat",
"Mouse" = "pai-mouse",
"Monkey" = "pai-monkey",
"Borgi" = "pai-borgi",
"Fox" = "pai-fox",
"Parrot" = "pai-parrot",
"Rabbit" = "pai-rabbit",
"Dire wolf" = "pai-diredog",
"Horse (Lune)" = "pai-horse_lune",
"Horse (Soleil)" = "pai-horse_soleil",
"Dragon" = "pai-pdragon",
"Bear" = "pai-bear",
"Fennec" = "pai-fen",
"Type Zero" = "pai-typezero",
"Raccoon" = "pai-raccoon",
"Raptor" = "pai-raptor",
"Corgi" = "pai-corgi",
"Bat" = "pai-bat",
"Butterfly" = "pai-butterfly",
"Hawk" = "pai-hawk",
"Duffel" = "pai-duffel",
"Rat" = "rat",
"Panther" = "panther",
"Cyber Elf" = "cyberelf",
"Teppi" = "teppi",
"Catslug" = "catslug",
"Car" = "car",
"Type One" = "typeone",
"Type Thirteen" = "13",
"Protogen Dog" = "pai-protodog"
))
//PAI stuff
GLOBAL_LIST_INIT(possible_say_verbs, list(
"Robotic" = list("states","declares","queries"),
"Natural" = list("says","yells","asks"),
"Beep" = list("beeps","beeps loudly","boops"),
"Chirp" = list("chirps","chirrups","cheeps"),
"Feline" = list("purrs","yowls","meows"),
"Canine" = list("yaps","barks","woofs"),
"Rodent" = list("squeaks", "SQUEAKS", "sqiks")
))
//Borg modules
GLOBAL_LIST_INIT(robot_modules, list(
"Standard" = /obj/item/robot_module/robot/standard,
"Service" = /obj/item/robot_module/robot/clerical/butler,
"Clerical" = /obj/item/robot_module/robot/clerical/general,
"Clown" = /obj/item/robot_module/robot/clerical/honkborg,
"Command" = /obj/item/robot_module/robot/chound,
"Research" = /obj/item/robot_module/robot/research,
"Miner" = /obj/item/robot_module/robot/miner,
"Crisis" = /obj/item/robot_module/robot/medical/crisis,
"Surgeon" = /obj/item/robot_module/robot/medical/surgeon,
"Security" = /obj/item/robot_module/robot/security/general,
"Combat" = /obj/item/robot_module/robot/security/combat,
"Exploration" = /obj/item/robot_module/robot/exploration,
"Engineering" = /obj/item/robot_module/robot/engineering,
"Janitor" = /obj/item/robot_module/robot/janitor,
"Gravekeeper" = /obj/item/robot_module/robot/gravekeeper,
"Lost" = /obj/item/robot_module/robot/lost,
"Protector" = /obj/item/robot_module/robot/syndicate/protector,
"Mechanist" = /obj/item/robot_module/robot/syndicate/mechanist,
"Combat Medic" = /obj/item/robot_module/robot/syndicate/combat_medic,
"Ninja" = /obj/item/robot_module/robot/syndicate/ninja,
))
//Xenoarch stuff
/// <summary>
/// This is a list of what the depth_scanner can show, depending on what get_responsive_reagent returns below.
/// </summary>
GLOBAL_LIST_INIT(responsive_carriers, list(
REAGENT_ID_CARBON,
REAGENT_ID_POTASSIUM,
REAGENT_ID_HYDROGEN,
REAGENT_ID_NITROGEN,
REAGENT_BLOOD,
REAGENT_ID_MERCURY,
REAGENT_ID_IRON,
REAGENT_ID_PHORON))
/// <summary>
/// This is a list of what the depth_scanner shows the user. In order with the above list.
/// </summary>
/// <example>
/// If the get_responsive_reagent returns 'REAGENT_ID_CARBON' it will show up to the user as "Trace organic cells"
/// If the get_responsive_reagent returns "REAGENT_ID_CHLORINE" it will show up to the user as "Metamorphic/igneous rock composite"
/// </example>
GLOBAL_LIST_INIT(finds_as_strings, list(
"Trace organic cells", //Carbon
"Long exposure particles", //Potassium
"Trace water particles", //Hydrogen
"Crystalline structures", //Nitrogen
"Abnormal energy signatures", //Occult
"Metallic derivative", //Mercury
"Metallic composite", //Iron
"Anomalous material")) //Phoron
//tgui law manager
var/global/list/datum/ai_laws/admin_laws
var/global/list/datum/ai_laws/player_laws
//shield_gen/external
GLOBAL_LIST_INIT(external_shield_gen_blockedturfs, list(
/turf/space,
/turf/simulated/floor/outdoors,
))
//machinery/shieldgen
GLOBAL_LIST_INIT(shieldgen_blockedturfs, list(
/turf/space,
/turf/simulated/floor/outdoors,
))
//Reagent Grinders
// Don't need a new list for every grinder in the game
GLOBAL_LIST_INIT(sheet_reagents, list( //have a number of reagents divisible by REAGENTS_PER_SHEET (default 20) unless you like decimals.
/obj/item/stack/material/plastic = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_OXYGEN,REAGENT_ID_CHLORINE,REAGENT_ID_SULFUR),
/obj/item/stack/material/copper = list(REAGENT_ID_COPPER),
/obj/item/stack/material/graphite = list(REAGENT_ID_CARBON),
/obj/item/stack/material/aluminium = list(REAGENT_ID_ALUMINIUM),
/obj/item/stack/material/diamond = list(REAGENT_ID_CARBON),
/obj/item/stack/material/durasteel = list(REAGENT_ID_IRON,REAGENT_ID_IRON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PLATINUM),
/obj/item/stack/material/wax = list(REAGENT_ID_ETHANOL,REAGENT_ID_TRIGLYCERIDE),
/obj/item/stack/material/iron = list(REAGENT_ID_IRON),
/obj/item/stack/material/phoron = list(REAGENT_ID_PHORON),
/obj/item/stack/material/gold = list(REAGENT_ID_GOLD),
/obj/item/stack/material/silver = list(REAGENT_ID_SILVER),
/obj/item/stack/material/platinum = list(REAGENT_ID_PLATINUM),
/obj/item/stack/material/osmium = list(REAGENT_ID_PLATINUM), // This should be fixed someday
/obj/item/stack/material/steel = list(REAGENT_ID_IRON, REAGENT_ID_CARBON),
/obj/item/stack/material/plasteel = list(REAGENT_ID_IRON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM), //8 iron, 8 carbon, 4 platinum,
/obj/item/stack/material/sandstone = list(REAGENT_ID_SILICON, REAGENT_ID_OXYGEN),
/obj/item/stack/material/marble = list(REAGENT_ID_CALCIUM),
/obj/item/stack/material/titanium = list(REAGENT_ID_ALUMINIUM),
// Nuclear
/obj/item/stack/material/mhydrogen = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/deuterium = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/tritium = list(REAGENT_ID_HYDROGEN),
/obj/item/stack/material/uranium = list(REAGENT_ID_URANIUM),
/obj/item/stack/material/supermatter = list(REAGENT_ID_SUPERMATTER),
// Misc
/obj/item/stack/material/snow = list(REAGENT_ID_WATER,REAGENT_ID_ICE),
/obj/item/stack/tile/grass = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS),
/obj/item/stack/material/leather = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_PROTEIN,REAGENT_ID_TRIGLYCERIDE),
/obj/item/stack/material/cloth = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_SODIUM),
/obj/item/stack/material/fiber = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PROTEIN,REAGENT_ID_SODIUM),
/obj/item/stack/material/fur = list(REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_SULFUR,REAGENT_ID_SODIUM),
/obj/item/stack/material/algae = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS),
/obj/item/stack/material/algae/ten = list(REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_PHOSPHORUS), // Just spawns with 10, is the same as normal one
/obj/item/stack/material/concrete = list(REAGENT_ID_SILICATE, REAGENT_ID_CALCIUM),
/obj/item/stack/material/cardboard = list(REAGENT_ID_WOODPULP),
// Woods
/obj/item/stack/material/wood = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/wood/sif = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/wood/hard = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
// Hull
/obj/item/stack/material/steel/hull = list(REAGENT_ID_IRON, REAGENT_ID_CARBON),
/obj/item/stack/material/plasteel/hull = list(REAGENT_ID_IRON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM),
/obj/item/stack/material/plastitanium/hull = list(REAGENT_ID_TITANIUM, REAGENT_ID_SILICON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM),
/obj/item/stack/material/durasteel/hull = list(REAGENT_ID_IRON,REAGENT_ID_IRON,REAGENT_ID_CARBON,REAGENT_ID_CARBON,REAGENT_ID_PLATINUM),
// Glass
/obj/item/stack/material/glass = list(REAGENT_ID_SILICON),
/obj/item/stack/material/glass/reinforced = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_IRON,REAGENT_ID_CARBON),
/obj/item/stack/material/glass/phoronglass = list(REAGENT_ID_PLATINUM, REAGENT_ID_SILICON, REAGENT_ID_SILICON, REAGENT_ID_SILICON), //5 platinum, 15 silicon,
/obj/item/stack/material/glass/phoronrglass = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_PHORON,REAGENT_ID_PHORON),
/obj/item/stack/material/glass/titanium = list(REAGENT_ID_TITANIUM, REAGENT_ID_SILICON),
/obj/item/stack/material/glass/plastitanium = list(REAGENT_ID_TITANIUM, REAGENT_ID_SILICON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM),
// Rods
/obj/item/stack/rods = list(REAGENT_ID_IRON, REAGENT_ID_CARBON), // 2 per sheet of steel
/obj/item/stack/material/plasteel/rebar = list(REAGENT_ID_IRON, REAGENT_ID_IRON, REAGENT_ID_CARBON, REAGENT_ID_CARBON, REAGENT_ID_PLATINUM), // Only makes 1 per sheet of plasteel!
// Logs
/obj/item/stack/material/stick = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/stick/fivestack = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM), // Just spawns with 5, same as normal one
/obj/item/stack/material/log = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/log/hard = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
/obj/item/stack/material/log/sif = list(REAGENT_ID_CARBON,REAGENT_ID_WOODPULP,REAGENT_ID_NITROGEN,REAGENT_ID_POTASSIUM,REAGENT_ID_SODIUM),
))
GLOBAL_LIST_INIT(ore_reagents, list( //have a number of reageents divisible by REAGENTS_PER_ORE (default 20) unless you like decimals.
/obj/item/ore/glass = list(REAGENT_ID_SILICON),
/obj/item/ore/iron = list(REAGENT_ID_IRON),
/obj/item/ore/coal = list(REAGENT_ID_CARBON),
/obj/item/ore/phoron = list(REAGENT_ID_PHORON),
/obj/item/ore/silver = list(REAGENT_ID_SILVER),
/obj/item/ore/gold = list(REAGENT_ID_GOLD),
/obj/item/ore/marble = list(REAGENT_ID_SILICON,REAGENT_ID_ALUMINIUM,REAGENT_ID_ALUMINIUM,REAGENT_ID_SODIUM,REAGENT_ID_CALCIUM), // Some nice variety here
/obj/item/ore/uranium = list(REAGENT_ID_URANIUM),
/obj/item/ore/diamond = list(REAGENT_ID_CARBON),
/obj/item/ore/osmium = list(REAGENT_ID_PLATINUM), // should contain osmium
/obj/item/ore/lead = list(REAGENT_ID_LEAD),
/obj/item/ore/hydrogen = list(REAGENT_ID_HYDROGEN),
/obj/item/ore/verdantium = list(REAGENT_ID_RADIUM,REAGENT_ID_PHORON,REAGENT_ID_NITROGEN,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SODIUM), // Some fun stuff to be useful with
/obj/item/ore/rutile = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_OXYGEN),
/obj/item/ore/copper = list(REAGENT_ID_COPPER),
/obj/item/ore/tin = list(REAGENT_ID_TIN),
/obj/item/ore/void_opal = list(REAGENT_ID_SILICON,REAGENT_ID_SILICON,REAGENT_ID_OXYGEN,REAGENT_ID_WATER),
/obj/item/ore/painite = list(REAGENT_ID_CALCIUM,REAGENT_ID_ALUMINIUM,REAGENT_ID_OXYGEN,REAGENT_ID_OXYGEN),
/obj/item/ore/quartz = list(REAGENT_ID_SILICON,REAGENT_ID_OXYGEN),
/obj/item/ore/bauxite = list(REAGENT_ID_ALUMINIUM,REAGENT_ID_ALUMINIUM),
))
// Don't need a new list for every grinder in the game
GLOBAL_LIST_INIT(reagent_sheets,list( // Recompressing reagents back into sheets
REAGENT_ID_COPPER = MAT_COPPER,
REAGENT_ID_TIN = MAT_TIN,
REAGENT_ID_WOODPULP = MAT_CARDBOARD,
REAGENT_ID_CARBON = MAT_GRAPHITE,
REAGENT_ID_ALUMINIUM = MAT_ALUMINIUM,
REAGENT_ID_TITANIUM = MAT_TITANIUM,
REAGENT_ID_IRON = MAT_IRON,
REAGENT_ID_LEAD = MAT_LEAD,
REAGENT_ID_URANIUM = MAT_URANIUM,
REAGENT_ID_GOLD = MAT_GOLD,
REAGENT_ID_SILVER = MAT_SILVER,
REAGENT_ID_PLATINUM = MAT_PLATINUM,
REAGENT_ID_SILICON = MAT_GLASS,
// Mostly harmless
REAGENT_ID_PROTEIN = REFINERY_SINTERING_SMOKE,
REAGENT_ID_TRIGLYCERIDE = REFINERY_SINTERING_SMOKE,
REAGENT_ID_SODIUM = REFINERY_SINTERING_SMOKE,
REAGENT_ID_PHOSPHORUS = REFINERY_SINTERING_SMOKE,
REAGENT_ID_ETHANOL = REFINERY_SINTERING_SMOKE,
// Extremely stupid ones
REAGENT_ID_OXYGEN = REFINERY_SINTERING_EXPLODE,
REAGENT_ID_HYDROGEN = REFINERY_SINTERING_EXPLODE,
REAGENT_ID_PHORON = REFINERY_SINTERING_EXPLODE,
REAGENT_ID_SUPERMATTER = REFINERY_SINTERING_EXPLODE,
// Nothing is funnier to me
REAGENT_ID_SPIDEREGG = REFINERY_SINTERING_SPIDERS,
))
GLOBAL_LIST_INIT(deepore_fracking_reagents,list( // Fracking results for fluid pump
ORE_HEMATITE = list(REAGENT_ID_SILICATE,REAGENT_ID_IRON,REAGENT_ID_CARBON),
ORE_URANIUM = list(REAGENT_ID_RADIUM,REAGENT_ID_RADIUM,REAGENT_ID_CALCIUM,REAGENT_ID_PHOSPHORUS), // Doesn't produce uranium due to low use in reagents, and emp reaction
ORE_COPPER = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Commonly
ORE_GOLD = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Found
ORE_TIN = list(REAGENT_ID_GOLD,REAGENT_ID_COPPER,REAGENT_ID_LEAD), // Together
ORE_SILVER = list(REAGENT_ID_SILVER,REAGENT_ID_LEAD,REAGENT_ID_COPPER), // lead loves this one too
ORE_DIAMOND = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR,REAGENT_ID_CARBON), // Ignius process
ORE_PHORON = list(REAGENT_ID_PHORON,REAGENT_ID_RADIUM,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR), // Ignius heavymetals?
ORE_PLATINUM = list(REAGENT_ID_PLATINUM,REAGENT_ID_COPPER), // Don't have much to group it with
ORE_MHYDROGEN = list(REAGENT_ID_SILICATE,REAGENT_ID_HYDROGEN),
ORE_SAND = list(REAGENT_ID_SILICATE,REAGENT_ID_SILICON,REAGENT_ID_LITHIUM,REAGENT_ID_PHOSPHORUS,REAGENT_ID_CALCIUM,REAGENT_ID_SODIUMCHLORIDE,REAGENT_ID_CARBON), // Catch all sedimentry
ORE_CARBON = list(REAGENT_ID_SILICATE,REAGENT_ID_CARBON,REAGENT_ID_SODIUMCHLORIDE), // Salty coal
ORE_BAUXITE = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_ALUMINIUM,REAGENT_ID_SODIUMCHLORIDE), // ore's general components and neighbours
ORE_RUTILE = list(REAGENT_ID_TITANIUMDIOX,REAGENT_ID_SILICATE,REAGENT_ID_SILICON,REAGENT_ID_SODIUMCHLORIDE) // ore's general components and neighbours
))
//List of the ammo types that can be used in game.
GLOBAL_LIST_INIT(global_ammo_types, list(
/obj/item/ammo_casing/a357 = ".357",
/obj/item/ammo_casing/a9mm = "9mm",
/obj/item/ammo_casing/a45 = ".45",
/obj/item/ammo_casing/a10mm = "10mm",
/obj/item/ammo_casing/a12g = "12g",
/obj/item/ammo_casing/a12g = "12g",
/obj/item/ammo_casing/a12g/pellet = "12g",
/obj/item/ammo_casing/a12g/pellet = "12g",
/obj/item/ammo_casing/a12g/pellet = "12g",
/obj/item/ammo_casing/a12g/beanbag = "12g",
/obj/item/ammo_casing/a12g/stunshell = "12g",
/obj/item/ammo_casing/a12g/flash = "12g",
/obj/item/ammo_casing/a762 = "7.62mm",
/obj/item/ammo_casing/a545 = "5.45mm"
))
//Rad collectors in the world
GLOBAL_LIST_EMPTY(rad_collectors)
//NIF
GLOBAL_LIST_INIT(nif_look_messages, list(
"flicks their eyes around",
"looks at something unseen",
"reads some invisible text",
"seems to be daydreaming",
"focuses elsewhere for a moment"))
GLOBAL_LIST(starting_legal_nifsoft)
GLOBAL_LIST(starting_illegal_nifsoft)
// By default they can be in any water turf. Subtypes might restrict to deep/shallow etc
GLOBAL_LIST_INIT(suitable_fish_turf_types, list(
/turf/simulated/floor/beach/water,
/turf/simulated/floor/beach/coastline,
/turf/simulated/floor/holofloor/beach/water,
/turf/simulated/floor/holofloor/beach/coastline,
/turf/simulated/floor/water
))
//Chamelion clothing was all stupid so it's done here instead.
//Jumpsuit
GLOBAL_LIST(chamelion_jumpsuit_choices)
//Hat
GLOBAL_LIST(chamelion_head_choices)
//Suit
GLOBAL_LIST(chamelion_suit_choices)
//Shoes
GLOBAL_LIST(chamelion_shoe_choices)
//Backpack
GLOBAL_LIST(chamelion_back_choices)
//Gloves
GLOBAL_LIST(chamelion_glove_choices)
//Mask
GLOBAL_LIST(chamelion_mask_choices)
//Belt
GLOBAL_LIST(chamelion_belt_choices)
//Accessory
GLOBAL_LIST(chamelion_accessory_choices)
GLOBAL_LIST_INIT(tail_layer_options, list("Lower layer" = TAIL_UPPER_LAYER_LOW , "Default layer" = TAIL_UPPER_LAYER , "Upper layer" = TAIL_UPPER_LAYER_HIGH ))
//Spritesheet stuff. Used by /obj/item/clothing/proc/refit_for_species(var/target_species)
#define SPECIES_HUMANOID_CAN_WEAR list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_RAPALA, SPECIES_VASILISSAN, SPECIES_ALRAUNE, SPECIES_PROMETHEAN)
#define SPECIES_UNATHI_CAN_WEAR list(SPECIES_UNATHI, SPECIES_XENOHYBRID)
#define SPECIES_TAJARAN_CAN_WEAR list(SPECIES_TAJARAN, SPECIES_XENOCHIMERA)
#define SPECIES_VULPKANIN_CAN_WEAR list(SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_FENNEC)
#define SPECIES_SERGAL_CAN_WEAR list(SPECIES_SERGAL, SPECIES_NEVREAN)
#define SPECIES_TESHARI_CAN_WEAR list(SPECIES_TESHARI)
#define SPECIES_VOX_CAN_WEAR list(SPECIES_VOX)
#define SPECIES_ALL_BUT_TESHARI_CAN_WEAR list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_RAPALA, SPECIES_VASILISSAN, SPECIES_ALRAUNE, SPECIES_PROMETHEAN, SPECIES_UNATHI, SPECIES_XENOHYBRID, SPECIES_TAJARAN, SPECIES_XENOCHIMERA, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_FENNEC, SPECIES_SERGAL, SPECIES_NEVREAN, SPECIES_VOX, SPECIES_SHADEKIN)
#define SPECIES_ALL_BUT_TESHARI_AND_VOX_CAN_WEAR list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_RAPALA, SPECIES_VASILISSAN, SPECIES_ALRAUNE, SPECIES_PROMETHEAN, SPECIES_UNATHI, SPECIES_XENOHYBRID, SPECIES_TAJARAN, SPECIES_XENOCHIMERA, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_FENNEC, SPECIES_SERGAL, SPECIES_NEVREAN, SPECIES_SHADEKIN)
#define SPECIES_ALL_CAN_WEAR list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_RAPALA, SPECIES_VASILISSAN, SPECIES_ALRAUNE, SPECIES_PROMETHEAN, SPECIES_UNATHI, SPECIES_XENOHYBRID, SPECIES_TAJARAN, SPECIES_XENOCHIMERA, SPECIES_VULPKANIN, SPECIES_ZORREN_HIGH, SPECIES_FENNEC, SPECIES_SERGAL, SPECIES_NEVREAN, SPECIES_TESHARI, SPECIES_VOX, SPECIES_SHADEKIN)