From 16dc3418eab1de147b09ca3838d90710b2b791c3 Mon Sep 17 00:00:00 2001 From: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Date: Sun, 30 Jun 2024 21:06:48 +0530 Subject: [PATCH] Redoing Sprite Accessory (#28497) * [MIRROR] Moves "sprite accessories" (e.g. Hair, Undergarments, Mutant Bits) from `GLOB` to a datasystem (#2278) * Moves "sprite accessories" (e.g. Hair, Undergarments, Mutant Bits) from `GLOB` to a datasystem * Ugh * . * Continuing merging 82847 to Novas codebase (#3136) done, i hope?? * Taur update * lowercase a in accessories --------- Co-authored-by: san7890 Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com> * fix * Let's see if this cuts it. * Guess we missed a thing long ago. --------- Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com> Co-authored-by: san7890 Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> --- code/__DEFINES/DNA.dm | 2 +- code/__HELPERS/dna.dm | 2 +- code/__HELPERS/global_lists.dm | 7 +- .../subsystem/sprite_accessories.dm | 87 ++++++++++--------- code/modules/client/preferences/clothing.dm | 2 +- .../restaurant/customers/_customer.dm | 2 +- code/modules/hydroponics/grown/replicapod.dm | 6 +- code/modules/mining/lavaland/tendril_loot.dm | 2 +- code/modules/mob/living/carbon/human/dummy.dm | 8 +- .../organs/external/_external_organ.dm | 2 +- .../organs/external/wings/functional_wings.dm | 6 +- .../items/stacks/sheets/sheet_types.dm | 2 +- .../code/modules/client/preferences/scream.dm | 4 +- .../code/buildings/gutluncher_foodtrough.dm | 2 +- .../modules/customization/__DEFINES/lists.dm | 4 - .../customization/__HELPERS/global_lists.dm | 76 ++++++++++------ .../modules/customization/__HELPERS/mobs.dm | 3 - .../customization/_globalvars/lists.dm | 2 - .../modules/customization/datums/dna.dm | 20 ++--- .../mob/dead/new_player/sprite_accessories.dm | 25 +++--- .../sprite_accessories/moth_antennae.dm | 4 + .../carbon/human/species/roundstartslime.dm | 2 +- .../modules/surgery/organs/genitals.dm | 6 +- .../subsytem/sprite_accessories.dm | 24 +++++ tgstation.dme | 1 + 25 files changed, 168 insertions(+), 133 deletions(-) create mode 100644 modular_skyrat/modules/customization/subsytem/sprite_accessories.dm diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index ab714018fc6..6c0b918345f 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -65,7 +65,7 @@ #define DNA_MONKEY_TAIL_BLOCK 16 */ //SKYRAT EDIT REMOVAL END -#define DNA_FEATURE_BLOCKS GLOB.dna_total_feature_blocks // SKYRAT EDIT CHANGE - ORIGINAL: #define DNA_FEATURE_BLOCKS 16 +#define DNA_FEATURE_BLOCKS SSaccessories.dna_total_feature_blocks // SKYRAT EDIT CHANGE - ORIGINAL: #define DNA_FEATURE_BLOCKS 16 // SKYRAT EDIT ADDITION START #define DNA_MANDATORY_COLOR_BLOCKS 5 #define DNA_MUTANT_COLOR_BLOCK 1 diff --git a/code/__HELPERS/dna.dm b/code/__HELPERS/dna.dm index 0ec3e7ee8d4..17fd7e21b8e 100644 --- a/code/__HELPERS/dna.dm +++ b/code/__HELPERS/dna.dm @@ -15,4 +15,4 @@ ///Getter macro used to get the length of a identity block #define GET_UI_BLOCK_LEN(blocknum) (GLOB.identity_block_lengths["[blocknum]"] || DNA_BLOCK_SIZE) ///Ditto, but for a feature. -#define GET_UF_BLOCK_LEN(blocknum) (GLOB.features_block_lengths["[blocknum]"] || DNA_BLOCK_SIZE) +#define GET_UF_BLOCK_LEN(blocknum) (SSaccessories.features_block_lengths["[blocknum]"] || DNA_BLOCK_SIZE) //SKYRAT CHANGE EDIT - Customization ORIGINAL: #define GET_UF_BLOCK_LEN(blocknum) (GLOB.features_block_lengths["[blocknum]"] || DNA_BLOCK_SIZE) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 32a4460536d..e9bd9291047 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -1,7 +1,3 @@ -////////////////////////// -/////Initial Building///// -////////////////////////// - /// Inits GLOB.surgeries /proc/init_surgeries() var/surgeries = list() @@ -14,8 +10,9 @@ /proc/make_datum_reference_lists() // I tried to eliminate this proc but I couldn't untangle their init-order interdependencies -Dominion/Cyberboss init_keybindings() - GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS make_skyrat_datum_references() //SKYRAT EDIT ADDITION - CUSTOMIZATION + GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS + init_skyrat_stack_recipes() //SKYRAT EDIT ADDITION - More sheet recipes init_crafting_recipes() init_crafting_recipes_atoms() diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm index 5499ab68d4a..ac83cc01828 100644 --- a/code/controllers/subsystem/sprite_accessories.dm +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -31,11 +31,16 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity var/list/undershirt_m //! stores only undershirt name var/list/undershirt_f //! stores only undershirt name + // SKYRAT EDIT ADDITION START - Underwear/bra split + var/list/bra_list + var/list/bra_m + var/list/bra_f + // SKYRAT EDIT ADDITION END + //Socks var/list/socks_list //! stores /datum/sprite_accessory/socks indexed by name - //SKYRAT EDIT REMOVAL - CUSTOMIZATION - /* + /* SKYRAT EDIT REMOVAL START - Customization - Moved to sprite_accessories var //Lizard Bits (all datum lists indexed by name) var/list/lizard_markings_list var/list/snouts_list @@ -54,37 +59,32 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity var/list/wings_open_list var/list/moth_wings_list var/list/moth_antennae_list - var/list/moth_markings_list - var/list/caps_list - */ + */ //SKYRAT EDIT REMOVAL END var/list/moth_markings_list var/list/pod_hair_list // SKYRAT EDIT ADDITION START - Customization - var/list/sprite_accessories - - /// Stores all /datum/sprite_accessory/bra indexed by name. - var/list/bra_list - /// Stores only the bra names for male-compatible bras. - var/list/bra_m - /// Stores only the bra names for female-compatible bras. - var/list/bra_f - - /// Shroom caps. - var/list/caps_list - /// Stores moth wings, both open and closed - var/list/moth_wings_list - /// Monkey tail list - var/list/tails_list_monkey - /// Lizard Marking list var/list/lizard_markings_list - /// All the different scream types - var/list/scream_types - //SKYRAT EDIT END + var/list/tails_list_monkey + var/list/caps_list + var/list/moth_wings_list + + var/list/sprite_accessories = list() + var/list/genetic_accessories = list() + var/list/generic_accessories = list() + + var/list/cached_mutant_icon_files = list() + + // we are loading them along with sprite_accessories, so they can't be GLOB :( + var/dna_total_feature_blocks = DNA_MANDATORY_COLOR_BLOCKS + var/list/dna_mutant_bodypart_blocks = list() + var/list/features_block_lengths = list() + // SKYRAT EDIT ADDITION END /datum/controller/subsystem/accessories/PreInit() // this stuff NEEDS to be set up before GLOB for preferences and stuff to work so this must go here. sorry setup_lists() init_hair_gradients() + make_sprite_accessory_references() // SKYRAT EDIT ADDITION - Customization /// Sets up all of the lists for later utilization in the round and building sprites. /// In an ideal world we could tack everything that just needed `DEFAULT_SPRITE_LIST` into static variables on the top, but due to the initialization order @@ -111,6 +111,13 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity undershirt_m = undershirt_lists[MALE_SPRITE_LIST] undershirt_f = undershirt_lists[FEMALE_SPRITE_LIST] + // SKYRAT EDIT ADDITION START - Underwear/bra split + var/bra_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/bra) + bra_list = bra_lists[DEFAULT_SPRITE_LIST] + bra_m = bra_lists[MALE_SPRITE_LIST] + bra_f = bra_lists[FEMALE_SPRITE_LIST] + // SKYRAT EDIT ADDITION END + socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST] /* //SKYRAT EDIT REMOVAL - CUSTOMIZATION @@ -131,27 +138,21 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity moth_wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings)[DEFAULT_SPRITE_LIST] moth_antennae_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae)[DEFAULT_SPRITE_LIST] moth_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings)[DEFAULT_SPRITE_LIST] + */ // SKYRAT EDIT REMOVAL END pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair)[DEFAULT_SPRITE_LIST] - */ + // SKYRAT EDIT ADDITION START - Customization + tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, add_blank = TRUE)[DEFAULT_SPRITE_LIST] + caps_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/caps, add_blank = TRUE)[DEFAULT_SPRITE_LIST] + moth_wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings)[DEFAULT_SPRITE_LIST] - var/bra_lists = init_sprite_accessory_subtypes(/datum/sprite_accessory/bra) // SKYRAT EDIT ADDITION - bra_list = bra_lists[DEFAULT_SPRITE_LIST] - bra_m = bra_lists[MALE_SPRITE_LIST] - bra_f = bra_lists[FEMALE_SPRITE_LIST] - - moth_wings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/wings/moth)[DEFAULT_SPRITE_LIST] // SKYRAT EDIT ADDITION - Customization - tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, add_blank = TRUE)[DEFAULT_SPRITE_LIST] // SKYRAT EDIT ADDITION - We don't want monkeys getting randomized non-monkey tails - pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, add_blank = TRUE)[DEFAULT_SPRITE_LIST] // SKYRAT EDIT - Customization - ORIGINAL: init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list) - - caps_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/caps)[DEFAULT_SPRITE_LIST] - //SKYRAT EDIT ADDITION BEGIN - //Scream types - SSaccessories.scream_types = list() - for(var/spath in subtypesof(/datum/scream_type)) - var/datum/scream_type/S = new spath() - SSaccessories.scream_types[S.name] = spath - sort_list(SSaccessories.scream_types, GLOBAL_PROC_REF(cmp_typepaths_asc)) - //SKYRAT EDIT END + features_block_lengths = list( + "[DNA_MUTANT_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + "[DNA_MUTANT_COLOR_2_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + "[DNA_MUTANT_COLOR_3_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + "[DNA_ETHEREAL_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + "[DNA_SKIN_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, + ) + // SKYRAT EDIT ADDITION END /// This proc just intializes all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name /datum/controller/subsystem/accessories/proc/init_hair_gradients() diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index 983d8827a25..36161c15d1e 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -165,7 +165,7 @@ lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY) lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY) - return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK) + return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK, icon_offset = 5) // SKYRAT EDIT CHANGE : ICON_OFFSET // SKYRAT EDIT CHANGE - ORIGINAL: return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK) /datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value) target.underwear = value diff --git a/code/modules/food_and_drinks/restaurant/customers/_customer.dm b/code/modules/food_and_drinks/restaurant/customers/_customer.dm index 15e4659338d..9c99a5811a3 100644 --- a/code/modules/food_and_drinks/restaurant/customers/_customer.dm +++ b/code/modules/food_and_drinks/restaurant/customers/_customer.dm @@ -306,7 +306,7 @@ /datum/customer_data/moth/proc/get_wings(mob/living/basic/robot_customer/customer) var/customer_ref = WEAKREF(customer) if (!LAZYACCESS(wings_chosen, customer_ref)) - LAZYSET(wings_chosen, customer_ref, SSaccessories.moth_wings_list[pick(SSaccessories.moth_wings_list)]) + LAZYSET(wings_chosen, customer_ref, pick(SSaccessories.sprite_accessories["wings"])) // SKYRAT EDIT CHANGE - ORIGINAL: LAZYSET(wings_chosen, customer_ref, SSaccessories.moth_wings_list[pick(SSaccessories.moth_wings_list)]) return wings_chosen[customer_ref] /datum/customer_data/moth/get_underlays(mob/living/basic/robot_customer/customer) diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 6bbe433ce1f..a90397687a6 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -196,8 +196,10 @@ podman.faction |= factions if(!features["mcolor"]) features["mcolor"] = "#59CE00" - /*if(!features["pod_hair"]) - features["pod_hair"] = pick(SSaccessories.pod_hair_list)*/ //SKYRAT EDIT - Tricolor Pod Hair + /* SKYRAT EDIT REMOVAL START + if(!features["pod_hair"]) + features["pod_hair"] = pick(SSaccessories.pod_hair_list) + */ //SKYRAT EDIT REMOVAL END - Tricolor Pod Hair for(var/V in quirks) new V(podman) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index d2233602c06..27748135cbb 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -566,7 +566,7 @@ var/list/name2type = list() for(var/obj/item/organ/external/wings/functional/possible_type as anything in wing_types) var/datum/sprite_accessory/accessory = initial(possible_type.sprite_accessory_override) //get the type - accessory = SSaccessories.sprite_accessories["wings"][initial(accessory.name)] //get the singleton instance // SKYRAT EDIT - Original SSaccessories.wings_list[initial(accessory.name)] + accessory = SSaccessories.sprite_accessories[initial(accessory.key)][initial(accessory.name)] //SKYRAT EDIT CHANGE - ORIGINAL: accessory = SSaccessories.wings_list[initial(accessory.name)] //get the singleton instance var/image/img = image(icon = accessory.icon, icon_state = "m_wingsopen_[accessory.icon_state]_BEHIND") //Process the HUD elements img.transform *= 0.5 img.pixel_x = -32 diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 01867694ab6..73d4a39ae9b 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -101,9 +101,9 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) return consistent_entry /proc/create_consistent_human_dna(mob/living/carbon/human/target) - /* SKYRAT EDIT START - Customization - ORIGINAL: target.dna.features["mcolor"] = COLOR_VIBRANT_LIME target.dna.features["ethcolor"] = COLOR_WHITE + /* SKYRAT EDIT START REMOVAL START - Customization target.dna.features["lizard_markings"] = get_consistent_feature_entry(SSaccessories.lizard_markings_list) target.dna.features["ears"] = get_consistent_feature_entry(SSaccessories.ears_list) target.dna.features["frills"] = get_consistent_feature_entry(SSaccessories.frills_list) @@ -115,11 +115,9 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["spines"] = get_consistent_feature_entry(SSaccessories.spines_list) target.dna.features["tail_cat"] = get_consistent_feature_entry(SSaccessories.tails_list_human) // it's a lie target.dna.features["tail_lizard"] = get_consistent_feature_entry(SSaccessories.tails_list_lizard) + target.dna.features["tail_monkey"] = get_consistent_feature_entry(SSaccessories.tails_list_monkey) target.dna.features["pod_hair"] = get_consistent_feature_entry(SSaccessories.pod_hair_list) - */ // ORIGINAL END - SKYRAT EDIT START - target.dna.features["mcolor"] = COLOR_VIBRANT_LIME - target.dna.features["ethcolor"] = COLOR_WHITE - // SKYRAT EDIT END + */ // SKYRAT EDIT REMOVAL END target.dna.initialize_dna(create_mutation_blocks = FALSE, randomize_features = FALSE) // UF and UI are nondeterministic, even though the features are the same some blocks will randomize slightly // In practice this doesn't matter, but this is for the sake of 100%(ish) consistency diff --git a/code/modules/surgery/organs/external/_external_organ.dm b/code/modules/surgery/organs/external/_external_organ.dm index b81942a380c..129be7d241a 100644 --- a/code/modules/surgery/organs/external/_external_organ.dm +++ b/code/modules/surgery/organs/external/_external_organ.dm @@ -41,7 +41,7 @@ // cache_key = jointext(generate_icon_cache(), "_") // SKYRAT EDIT - Species stuff that Goofball ported from /tg/, apparently. Commented for now, to see if I can make it work without it. // SKYRAT EDIT: we have like 145+ fucking dna blocks lmao - dna_block = GLOB.dna_mutant_bodypart_blocks[preference] + dna_block = SSaccessories.dna_mutant_bodypart_blocks[preference] accessory_type = accessory_type ? accessory_type : sprite_accessory_override var/update_overlays = TRUE diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index c2310ba8e5a..2a6757596c4 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -149,13 +149,13 @@ return SSaccessories.wings_open_list else return SSaccessories.wings_list - */ // ORIGINAL END - SKYRAT EDIT START - CUSTOMIZATION - TODO: Add support for wings_open + */ // SKYRAT EDIT REMOVAL END + // SKYRAT EDIT ADDITION START if(wings_open) return SSaccessories.sprite_accessories["wings_open"] return SSaccessories.sprite_accessories["wings"] - // SKYRAT EDIT END - + // SKYRAT EDIT ADDITION END ///Update our wingsprite to the open wings variant /datum/bodypart_overlay/mutant/wings/functional/proc/open_wings() wings_open = TRUE diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 42bfed06eaf..90a4a475d18 100644 --- a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( new/datum/stack_recipe("ration shelf", /obj/machinery/smartfridge/wooden/ration_shelf, 10, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("storage barrel", /obj/structure/closet/crate/wooden/storage_barrel, 4, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("worm barrel", /obj/structure/wormfarm, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_TOOLS), - new/datum/stack_recipe("gutlunch trough", /obj/structure/ore_container/gutlunch_trough, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), + new/datum/stack_recipe("gutlunch trough", /obj/structure/ore_container/food_trough/gutlunch_trough, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("sturdy wooden fence", /obj/structure/railing/wooden_fencing, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("sturdy wooden fence gate", /obj/structure/railing/wooden_fencing/gate, 5, time = 2 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), new/datum/stack_recipe("large wooden gate", /obj/structure/mineral_door/wood/large_gate, 10, time = 5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_STRUCTURE), diff --git a/modular_skyrat/master_files/code/modules/client/preferences/scream.dm b/modular_skyrat/master_files/code/modules/client/preferences/scream.dm index 93d7361a168..1c1413318aa 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/scream.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/scream.dm @@ -4,10 +4,10 @@ savefile_key = "character_scream" /datum/preference/choiced/scream/init_possible_values() - return assoc_to_keys(SSaccessories.scream_types) + return assoc_to_keys(GLOB.scream_types) /datum/preference/choiced/scream/apply_to_human(mob/living/carbon/human/target, value) - var/scream_id = SSaccessories.scream_types[value] + var/scream_id = GLOB.scream_types[value] if(scream_id) var/datum/scream_type/scream_type = new scream_id target.selected_scream = scream_type diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm b/modular_skyrat/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm index fec1b4c1715..62d15fc5b44 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm @@ -1,4 +1,4 @@ -/obj/structure/ore_container/gutlunch_trough/attackby(obj/item/attacking_item, mob/living/carbon/human/user, list/modifiers) +/obj/structure/ore_container/food_trough/gutlunch_trough/attackby(obj/item/attacking_item, mob/living/carbon/human/user, list/modifiers) if(!istype(attacking_item, /obj/item/storage/bag/ore)) return ..() diff --git a/modular_skyrat/modules/customization/__DEFINES/lists.dm b/modular_skyrat/modules/customization/__DEFINES/lists.dm index 7f101acb08a..8e15c8a3f9b 100644 --- a/modular_skyrat/modules/customization/__DEFINES/lists.dm +++ b/modular_skyrat/modules/customization/__DEFINES/lists.dm @@ -1,6 +1,3 @@ -GLOBAL_LIST_EMPTY(generic_accessories) -GLOBAL_LIST_EMPTY(genetic_accessories) - /// What accessories can a species have as well as their default accessory of such type e.g. "frills" = "Aquatic". Default accessory colors is dictated by the accessory properties and mutcolors of the specie GLOBAL_LIST_EMPTY(default_mutant_bodyparts) GLOBAL_LIST_INIT(possible_genitals, list( @@ -23,7 +20,6 @@ GLOBAL_LIST_EMPTY(augment_items) GLOBAL_LIST_EMPTY(augment_categories_to_slots) GLOBAL_LIST_EMPTY(augment_slot_to_items) -GLOBAL_LIST_EMPTY(dna_mutant_bodypart_blocks) GLOBAL_LIST_EMPTY(dna_body_marking_blocks) GLOBAL_LIST_EMPTY(species_clothing_fallback_cache) diff --git a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm b/modular_skyrat/modules/customization/__HELPERS/global_lists.dm index 4af8c2871c2..385ea10c0dd 100644 --- a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm +++ b/modular_skyrat/modules/customization/__HELPERS/global_lists.dm @@ -1,6 +1,5 @@ /proc/make_skyrat_datum_references() - make_sprite_accessory_references() - make_laugh_datum_references() + init_prefs_emotes() make_default_mutant_bodypart_references() make_body_marking_references() make_body_marking_set_references() @@ -9,30 +8,18 @@ populate_total_uf_len_by_block() make_augment_references() -/proc/make_sprite_accessory_references() - if(isnull(SSaccessories.sprite_accessories)) - SSaccessories.sprite_accessories = list() - // Here we build the global list for all accessories - for(var/path in subtypesof(/datum/sprite_accessory)) - var/datum/sprite_accessory/P = path - if(initial(P.key) && initial(P.name)) - P = new path() - if(isnull(SSaccessories.sprite_accessories[P.key])) - SSaccessories.sprite_accessories[P.key] = list() - SSaccessories.sprite_accessories[P.key][P.name] = P - if(P.genetic) - if(!GLOB.dna_mutant_bodypart_blocks[P.key]) - GLOB.dna_mutant_bodypart_blocks[P.key] = GLOB.dna_total_feature_blocks+1 - if(!GLOB.genetic_accessories[P.key]) - GLOB.genetic_accessories[P.key] = list() - for(var/color_block in 1 to DNA_FEATURE_COLOR_BLOCKS_PER_FEATURE) - GLOB.features_block_lengths["[GLOB.dna_mutant_bodypart_blocks[P.key] + color_block]"] = DNA_BLOCK_SIZE_COLOR - GLOB.dna_total_feature_blocks += DNA_BLOCKS_PER_FEATURE +/proc/init_prefs_emotes() + //Scream types + for(var/spath in subtypesof(/datum/scream_type)) + var/datum/scream_type/S = new spath() + GLOB.scream_types[S.name] = spath + sort_list(GLOB.scream_types, GLOBAL_PROC_REF(cmp_typepaths_asc)) - GLOB.genetic_accessories[P.key] += P.name - //TODO: Replace "generic" definitions with something better - if(P.generic && !GLOB.generic_accessories[P.key]) - GLOB.generic_accessories[P.key] = P.generic + //Laugh types + for(var/spath in subtypesof(/datum/laugh_type)) + var/datum/laugh_type/L = new spath() + GLOB.laugh_types[L.name] = spath + sort_list(GLOB.laugh_types, GLOBAL_PROC_REF(cmp_typepaths_asc)) /proc/make_laugh_datum_references() //Laugh types @@ -80,11 +67,44 @@ /proc/make_body_marking_dna_block_references() for(var/marking_zone in GLOB.marking_zones) - GLOB.dna_body_marking_blocks[marking_zone] = GLOB.dna_total_feature_blocks+1 + GLOB.dna_body_marking_blocks[marking_zone] = SSaccessories.dna_total_feature_blocks+1 for(var/feature_block_set in 1 to MAXIMUM_MARKINGS_PER_LIMB) for(var/color_block in 1 to DNA_MARKING_COLOR_BLOCKS_PER_MARKING) - GLOB.features_block_lengths["[GLOB.dna_body_marking_blocks[marking_zone] + (feature_block_set - 1) * DNA_BLOCKS_PER_MARKING + color_block]"] = DNA_BLOCK_SIZE_COLOR - GLOB.dna_total_feature_blocks += DNA_BLOCKS_PER_MARKING_ZONE + SSaccessories.features_block_lengths["[GLOB.dna_body_marking_blocks[marking_zone] + (feature_block_set - 1) * DNA_BLOCKS_PER_MARKING + color_block]"] = DNA_BLOCK_SIZE_COLOR + SSaccessories.dna_total_feature_blocks += DNA_BLOCKS_PER_MARKING_ZONE + +/proc/init_skyrat_stack_recipes() + var/list/additional_stack_recipes = list( + /obj/item/stack/sheet/leather = list(GLOB.skyrat_leather_recipes, GLOB.skyrat_leather_belt_recipes), + /obj/item/stack/sheet/mineral/titanium = list(GLOB.skyrat_titanium_recipes), + /obj/item/stack/sheet/mineral/snow = list(GLOB.skyrat_snow_recipes), + /obj/item/stack/sheet/iron = list(GLOB.skyrat_metal_recipes, GLOB.skyrat_metal_airlock_recipes), + /obj/item/stack/sheet/plasteel = list(GLOB.skyrat_plasteel_recipes), + /obj/item/stack/sheet/mineral/wood = list(GLOB.skyrat_wood_recipes), + /obj/item/stack/sheet/cloth = list(GLOB.skyrat_cloth_recipes), + /obj/item/stack/ore/glass = list(GLOB.skyrat_sand_recipes), + /obj/item/stack/rods = list(GLOB.skyrat_rod_recipes), + /obj/item/stack/sheet/mineral/stone = list(GLOB.stone_recipes), + /obj/item/stack/sheet/plastic_wall_panel = list(GLOB.plastic_wall_panel_recipes), + /obj/item/stack/sheet/spaceshipglass = list(GLOB.spaceshipglass_recipes), + ) + for(var/stack in additional_stack_recipes) + for(var/material_list in additional_stack_recipes[stack]) + for(var/stack_recipe in material_list) + if(istype(stack_recipe, /datum/stack_recipe_list)) + var/datum/stack_recipe_list/stack_recipe_list = stack_recipe + for(var/nested_recipe in stack_recipe_list.recipes) + if(!nested_recipe) + continue + var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(stack, nested_recipe) + if(recipe.name != "" && recipe.result) + GLOB.crafting_recipes += recipe + else + if(!stack_recipe) + continue + var/datum/crafting_recipe/stack/recipe = new/datum/crafting_recipe/stack(stack, stack_recipe) + if(recipe.name != "" && recipe.result) + GLOB.crafting_recipes += recipe /proc/make_augment_references() // Here we build the global loadout lists diff --git a/modular_skyrat/modules/customization/__HELPERS/mobs.dm b/modular_skyrat/modules/customization/__HELPERS/mobs.dm index 3c6e993f9b6..4f3c2008a4f 100644 --- a/modular_skyrat/modules/customization/__HELPERS/mobs.dm +++ b/modular_skyrat/modules/customization/__HELPERS/mobs.dm @@ -30,9 +30,6 @@ return body_markings /proc/random_bra(gender) - if(!length(SSaccessories.bra_list)) - SSaccessories.init_sprite_accessory_subtypes(/datum/sprite_accessory/bra, SSaccessories.bra_list, SSaccessories.bra_m, SSaccessories.bra_f) - switch(gender) if(MALE) return pick(SSaccessories.bra_m) diff --git a/modular_skyrat/modules/customization/_globalvars/lists.dm b/modular_skyrat/modules/customization/_globalvars/lists.dm index 2eb4e0e6bda..b684abf4e1c 100644 --- a/modular_skyrat/modules/customization/_globalvars/lists.dm +++ b/modular_skyrat/modules/customization/_globalvars/lists.dm @@ -103,5 +103,3 @@ GLOBAL_LIST_INIT(color_list_ghoul, list( \ "Plutonium Blue" = "a5cfcc", \ "Marked Red" = "f05b68" \ )) - -//Bras diff --git a/modular_skyrat/modules/customization/datums/dna.dm b/modular_skyrat/modules/customization/datums/dna.dm index 180ddf33cf1..f504fa1ced6 100644 --- a/modular_skyrat/modules/customization/datums/dna.dm +++ b/modular_skyrat/modules/customization/datums/dna.dm @@ -18,13 +18,13 @@ GLOBAL_LIST_INIT(identity_block_lengths, list( * The same rules of the above also apply here, with the exception that this is for the unique_features string variable * (commonly abbreviated with uf) and its blocks. Both ui and uf have a standard block length of 3 ASCII characters. */ -GLOBAL_LIST_INIT(features_block_lengths, list( +/* GLOBAL_LIST_INIT(features_block_lengths, list( "[DNA_MUTANT_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, "[DNA_MUTANT_COLOR_2_BLOCK]" = DNA_BLOCK_SIZE_COLOR, "[DNA_MUTANT_COLOR_3_BLOCK]" = DNA_BLOCK_SIZE_COLOR, "[DNA_ETHEREAL_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, "[DNA_SKIN_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - )) + )) */ /** * A list of numbers that keeps track of where ui blocks start in the unique_identity string variable of the dna datum. @@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(total_uf_len_by_block) /proc/populate_total_uf_len_by_block() GLOB.total_uf_len_by_block = list() var/total_block_len = 1 - for(var/blocknumber in 1 to GLOB.dna_total_feature_blocks) + for(var/blocknumber in 1 to SSaccessories.dna_total_feature_blocks) GLOB.total_uf_len_by_block += total_block_len total_block_len += GET_UF_BLOCK_LEN(blocknumber) @@ -80,9 +80,9 @@ GLOBAL_LIST_EMPTY(total_uf_len_by_block) data += sanitize_hexcolor(features["skin_color"], include_crunch = FALSE) else data += random_string(DNA_BLOCK_SIZE_COLOR, GLOB.hex_characters) - for(var/key in GLOB.genetic_accessories) - if(mutant_bodyparts[key] && (mutant_bodyparts[key][MUTANT_INDEX_NAME] in GLOB.genetic_accessories[key])) - var/list/accessories_for_key = GLOB.genetic_accessories[key] + for(var/key in SSaccessories.genetic_accessories) + if(mutant_bodyparts[key] && (mutant_bodyparts[key][MUTANT_INDEX_NAME] in SSaccessories.genetic_accessories[key])) + var/list/accessories_for_key = SSaccessories.genetic_accessories[key] data += construct_block(accessories_for_key.Find(mutant_bodyparts[key][MUTANT_INDEX_NAME]), accessories_for_key.len) var/colors_to_randomize = DNA_BLOCKS_PER_FEATURE-1 for(var/color in mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST]) @@ -127,22 +127,22 @@ GLOBAL_LIST_EMPTY(total_uf_len_by_block) set_uni_feature_block(blocknumber, sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE)) if(DNA_SKIN_COLOR_BLOCK) set_uni_feature_block(blocknumber, sanitize_hexcolor(features["skin_color"], include_crunch = FALSE)) - else if(blocknumber <= DNA_MANDATORY_COLOR_BLOCKS+(GLOB.genetic_accessories.len*DNA_BLOCKS_PER_FEATURE)) + else if(blocknumber <= DNA_MANDATORY_COLOR_BLOCKS+(SSaccessories.genetic_accessories.len*DNA_BLOCKS_PER_FEATURE)) var/block_index = blocknumber - DNA_MANDATORY_COLOR_BLOCKS var/block_zero_index = block_index-1 var/bodypart_index = (block_zero_index/DNA_BLOCKS_PER_FEATURE)+1 var/color_index = block_zero_index%DNA_BLOCKS_PER_FEATURE - var/key = GLOB.genetic_accessories[bodypart_index] + var/key = SSaccessories.genetic_accessories[bodypart_index] if(mutant_bodyparts[key]) var/list/color_list = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] if(color_index && color_index <= color_list.len) set_uni_feature_block(blocknumber, sanitize_hexcolor(color_list[color_index], include_crunch = FALSE)) else - var/list/accessories_for_key = GLOB.genetic_accessories[key] + var/list/accessories_for_key = SSaccessories.genetic_accessories[key] if(mutant_bodyparts[key][MUTANT_INDEX_NAME] in accessories_for_key) set_uni_feature_block(blocknumber, construct_block(mutant_bodyparts.Find(mutant_bodyparts[key][MUTANT_INDEX_NAME]), accessories_for_key.len)) else - var/block_index = blocknumber - (DNA_MANDATORY_COLOR_BLOCKS+(GLOB.genetic_accessories.len*DNA_BLOCKS_PER_FEATURE)) + var/block_index = blocknumber - (DNA_MANDATORY_COLOR_BLOCKS+(SSaccessories.genetic_accessories.len*DNA_BLOCKS_PER_FEATURE)) var/block_zero_index = block_index-1 var/zone_index = (block_zero_index/DNA_BLOCKS_PER_MARKING_ZONE)+1 var/zone = GLOB.marking_zones[zone_index] diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm index 6550c9ae755..754d3adad0b 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm @@ -1,4 +1,4 @@ -GLOBAL_LIST_EMPTY(cached_mutant_icon_files) +// GLOBAL_LIST_EMPTY(cached_mutant_icon_files) /// The flag to show that snouts should use the muzzled sprite. #define SPRITE_ACCESSORY_USE_MUZZLED_SPRITE (1<<0) @@ -67,15 +67,15 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) default_color = DEFAULT_MATRIXED if (color_src == USE_MATRIXED_COLORS) color_layer_names = list() - if (!GLOB.cached_mutant_icon_files[icon]) - GLOB.cached_mutant_icon_files[icon] = icon_states(new /icon(icon)) + if (!SSaccessories.cached_mutant_icon_files[icon]) + SSaccessories.cached_mutant_icon_files[icon] = icon_states(new /icon(icon)) for (var/layer in relevent_layers) var/layertext = layer == BODY_BEHIND_LAYER ? "BEHIND" : (layer == BODY_ADJ_LAYER ? "ADJ" : "FRONT") - if ("m_[key]_[icon_state]_[layertext]_primary" in GLOB.cached_mutant_icon_files[icon]) + if ("m_[key]_[icon_state]_[layertext]_primary" in SSaccessories.cached_mutant_icon_files[icon]) color_layer_names["1"] = "primary" - if ("m_[key]_[icon_state]_[layertext]_secondary" in GLOB.cached_mutant_icon_files[icon]) + if ("m_[key]_[icon_state]_[layertext]_secondary" in SSaccessories.cached_mutant_icon_files[icon]) color_layer_names["2"] = "secondary" - if ("m_[key]_[icon_state]_[layertext]_tertiary" in GLOB.cached_mutant_icon_files[icon]) + if ("m_[key]_[icon_state]_[layertext]_tertiary" in SSaccessories.cached_mutant_icon_files[icon]) color_layer_names["3"] = "tertiary" /datum/sprite_accessory/proc/is_hidden(mob/living/carbon/human/owner) @@ -120,20 +120,17 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) /datum/sprite_accessory/moth_markings/is_hidden(mob/living/carbon/human/owner) return FALSE - -/datum/sprite_accessory/moth_antennae/none - name = "None" - icon_state = "none" - - /datum/sprite_accessory/pod_hair - name = "None" icon = 'modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi' - icon_state = "None" key = "pod_hair" recommended_species = list(SPECIES_PODPERSON, SPECIES_PODPERSON_WEAK) organ_type = /obj/item/organ/external/pod_hair +/datum/sprite_accessory/pod_hair/none + name = "None" + icon_state = "none" + factual = FALSE + /datum/sprite_accessory/caps key = "caps" generic = "Caps" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm index c8183f2c242..6ebbda008df 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm @@ -22,3 +22,7 @@ // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS)))) return TRUE + +/datum/sprite_accessory/moth_antennae/none + name = "None" + icon_state = "none" diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm index d80f1cf9cf9..78627bf7ff6 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm @@ -399,7 +399,7 @@ new_acc_list[MUTANT_INDEX_COLOR_LIST] = selected_sprite_accessory.get_default_color(alterer.dna.features, alterer.dna.species) alterer.dna.species.mutant_bodyparts[chosen_key] = new_acc_list alterer.dna.mutant_bodyparts[chosen_key] = new_acc_list.Copy() - alterer.dna.update_uf_block(GLOB.dna_mutant_bodypart_blocks[chosen_key]) + alterer.dna.update_uf_block(SSaccessories.dna_mutant_bodypart_blocks[chosen_key]) alterer.update_mutant_bodyparts() alterer.update_clothing(ALL) // for any clothing that has alternate versions (e.g. muzzled masks) diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm index 2ee87aa4064..1c9131e5698 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm +++ b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm @@ -114,10 +114,10 @@ return sprite_datum.color_layer_names sprite_datum.color_layer_names = list() - if (!GLOB.cached_mutant_icon_files[sprite_datum.icon]) - GLOB.cached_mutant_icon_files[sprite_datum.icon] = icon_states(new /icon(sprite_datum.icon)) + if (!SSaccessories.cached_mutant_icon_files[sprite_datum.icon]) + SSaccessories.cached_mutant_icon_files[sprite_datum.icon] = icon_states(new /icon(sprite_datum.icon)) - var/list/cached_mutant_icon_states = GLOB.cached_mutant_icon_files[sprite_datum.icon] + var/list/cached_mutant_icon_states = SSaccessories.cached_mutant_icon_files[sprite_datum.icon] for (var/layer in all_layers) if(!(layer & layers)) diff --git a/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm b/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm new file mode 100644 index 00000000000..e6f56dd42bc --- /dev/null +++ b/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm @@ -0,0 +1,24 @@ +/** + * Called from subsystem's PreInit and builds sprite_accessories list with (almost) all existing sprite accessories + */ +/datum/controller/subsystem/accessories/proc/make_sprite_accessory_references() + for(var/path in subtypesof(/datum/sprite_accessory)) + var/datum/sprite_accessory/P = path + if(initial(P.key) && initial(P.name)) + P = new path() + if(!sprite_accessories[P.key]) + sprite_accessories[P.key] = list() + sprite_accessories[P.key][P.name] = P + if(P.genetic) + if(!dna_mutant_bodypart_blocks[P.key]) + dna_mutant_bodypart_blocks[P.key] = dna_total_feature_blocks+1 + if(!genetic_accessories[P.key]) + genetic_accessories[P.key] = list() + for(var/color_block in 1 to DNA_FEATURE_COLOR_BLOCKS_PER_FEATURE) + features_block_lengths["[dna_mutant_bodypart_blocks[P.key] + color_block]"] = DNA_BLOCK_SIZE_COLOR + dna_total_feature_blocks += DNA_BLOCKS_PER_FEATURE + + genetic_accessories[P.key] += P.name + //TODO: Replace "generic" definitions with something better + if(P.generic && !generic_accessories[P.key]) + generic_accessories[P.key] = P.generic diff --git a/tgstation.dme b/tgstation.dme index 40fd0a3f26b..8f9fbdb4d76 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7462,6 +7462,7 @@ #include "modular_skyrat\modules\customization\modules\surgery\organs\wings.dm" #include "modular_skyrat\modules\customization\modules\surgery\organs\xenodorsal.dm" #include "modular_skyrat\modules\customization\modules\surgery\organs\xenohead.dm" +#include "modular_skyrat\modules\customization\subsytem\sprite_accessories.dm" #include "modular_skyrat\modules\death_consequences_perk\death_consequences.dm" #include "modular_skyrat\modules\death_consequences_perk\death_consequences_trauma.dm" #include "modular_skyrat\modules\decay_subsystem\code\decay_turf_handling.dm"