From 4c62a21b1a9c3ee0e344ea2a2f963b97bb414777 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Tue, 5 Aug 2025 20:10:13 -0400 Subject: [PATCH] Fixes for #92061 --- .../DNA.dm | 34 +-- code/__DEFINES/~~bubber_defines/dna.dm | 4 - code/__HELPERS/dna.dm | 2 +- code/_globalvars/lists/mobs.dm | 4 + .../subsystem/sprite_accessories.dm | 17 -- code/datums/dna/blocks/dna_features_block.dm | 6 +- code/datums/dna/dna.dm | 41 +-- .../antagonists/changeling/changeling.dm | 4 +- code/modules/client/preferences.dm | 2 +- code/modules/clothing/masks/gasmask.dm | 4 +- .../mining_loot/megafauna/ash_drake.dm | 2 +- .../carbon/human/species_types/felinid.dm | 6 +- .../surgery/organs/external/_visual_organs.dm | 6 +- code/modules/surgery/organs/external/tails.dm | 15 +- code/modules/unit_tests/changeling.dm | 6 +- code/modules/unit_tests/dna_infusion.dm | 10 +- .../unit_tests/screenshot_humanoids.dm | 2 +- .../transformation_sting_appearances.png | Bin 1284 -> 1274 bytes .../code/game/objects/items/hhmirror.dm | 30 +-- .../client/preferences/mutant_parts.dm | 6 +- .../species_features/digitigrade_legs.dm | 4 +- .../code/modules/clothing/head/hardhat.dm | 2 +- .../code/modules/clothing/suits/skinsuits.dm | 2 +- .../code/modules/clothing/under/akula_jobs.dm | 4 +- .../mob/living/carbon/human/_species.dm | 2 +- .../living/carbon/human/species_type/snail.dm | 2 +- .../modules/customization/__DEFINES/lists.dm | 2 - .../modules/customization/__HELPERS/DNA.dm | 1 - .../customization/__HELPERS/global_lists.dm | 9 - .../modules/customization/datums/dna.dm | 242 ------------------ .../modules/clothing/masks/gasmask.dm | 4 +- .../new_player/body_markings/body_markings.dm | 10 +- .../mob/dead/new_player/sprite_accessories.dm | 22 +- .../new_player/sprite_accessories/ears.dm | 2 - .../new_player/sprite_accessories/fluff.dm | 2 - .../new_player/sprite_accessories/frills.dm | 2 - .../new_player/sprite_accessories/genitals.dm | 6 - .../sprite_accessories/head_accessory.dm | 2 - .../new_player/sprite_accessories/horns.dm | 2 - .../dead/new_player/sprite_accessories/ipc.dm | 5 - .../sprite_accessories/moth_antennae.dm | 2 - .../sprite_accessories/neck_accessory.dm | 2 - .../sprite_accessories/skrell_hair.dm | 2 - .../new_player/sprite_accessories/snout.dm | 2 - .../new_player/sprite_accessories/spines.dm | 2 - .../new_player/sprite_accessories/tails.dm | 2 - .../new_player/sprite_accessories/wings.dm | 3 - .../new_player/sprite_accessories/xeno.dm | 4 - .../mob/living/carbon/human/species.dm | 2 +- .../mob/living/carbon/human/species/akula.dm | 16 +- .../living/carbon/human/species/aquatic.dm | 6 +- .../living/carbon/human/species/humanoid.dm | 8 +- .../mob/living/carbon/human/species/insect.dm | 6 +- .../mob/living/carbon/human/species/lizard.dm | 18 +- .../mob/living/carbon/human/species/mammal.dm | 18 +- .../mob/living/carbon/human/species/monkey.dm | 4 +- .../mob/living/carbon/human/species/moth.dm | 10 +- .../living/carbon/human/species/mushpeople.dm | 4 +- .../living/carbon/human/species/podweak.dm | 4 +- .../carbon/human/species/roundstartslime.dm | 56 ++-- .../mob/living/carbon/human/species/skrell.dm | 14 +- .../living/carbon/human/species/tajaran.dm | 18 +- .../mob/living/carbon/human/species/unathi.dm | 6 +- .../mob/living/carbon/human/species/vox.dm | 14 +- .../living/carbon/human/species/vulpkanin.dm | 18 +- .../mob/living/carbon/human/species/xeno.dm | 8 +- .../subsytem/sprite_accessories.dm | 13 - .../code/additionalemotes/turf_emote.dm | 16 +- .../lewd_items/code/lewd_items/buttplug.dm | 2 +- .../code/lewd_structures/shibari_stand.dm | 2 +- .../primitive_catgirls/code/species.dm | 4 +- modular_skyrat/modules/salon/code/fur_dyer.dm | 6 +- .../modules/teshari/code/_teshari.dm | 6 +- .../datums/dna/blocks/dna_features_block.dm | 132 ++++++++++ modular_zubbers/code/datums/dna/dna.dm | 34 +++ modular_zubbers/code/datums/dna/dna_block.dm | 3 + .../sprite_accessories/ipc_screens.dm | 1 - .../sprite_accessories/synthetic.dm | 3 - .../sprite_accessories/taur_types.dm | 6 +- .../human/species_types/roundstartslime.dm | 2 - .../carbon/human/species_types/shadekin.dm | 18 +- .../modules/taur_mechanics/constrict.dm | 4 +- tgstation.dme | 9 +- 83 files changed, 423 insertions(+), 615 deletions(-) rename code/__DEFINES/{~skyrat_defines => ~~bubber_defines}/DNA.dm (88%) delete mode 100644 code/__DEFINES/~~bubber_defines/dna.dm delete mode 100644 modular_skyrat/modules/customization/__HELPERS/DNA.dm delete mode 100644 modular_skyrat/modules/customization/datums/dna.dm create mode 100644 modular_zubbers/code/datums/dna/blocks/dna_features_block.dm create mode 100644 modular_zubbers/code/datums/dna/dna.dm create mode 100644 modular_zubbers/code/datums/dna/dna_block.dm delete mode 100644 modular_zubbers/code/modules/mob/living/carbon/human/species_types/roundstartslime.dm diff --git a/code/__DEFINES/~skyrat_defines/DNA.dm b/code/__DEFINES/~~bubber_defines/DNA.dm similarity index 88% rename from code/__DEFINES/~skyrat_defines/DNA.dm rename to code/__DEFINES/~~bubber_defines/DNA.dm index a0da77d5291..2b9ccbf8f4f 100644 --- a/code/__DEFINES/~skyrat_defines/DNA.dm +++ b/code/__DEFINES/~~bubber_defines/DNA.dm @@ -137,6 +137,7 @@ #define SPECIES_TESHARI "teshari" #define SPECIES_HEMOPHAGE "hemophage" #define SPECIES_FELINE_PRIMITIVE "primitive_felinid" +#define SPECIES_PROTEAN "protean" #define SPECIES_MUTANT "mutant" #define SPECIES_MUTANT_INFECTIOUS "infectious_mutant" @@ -146,21 +147,24 @@ // Leaving this here because it's used for bodyparts, like SPECIES_X are, but since taurs aren't a species... Named it LIMBS instead. #define LIMBS_TAUR "taur" -#define DNA_BLOCKS_PER_FEATURE 4 #define DNA_FEATURE_COLOR_BLOCKS_PER_FEATURE 3 #define DNA_FEATURE_BLOCKS_TOTAL_SIZE_PER_FEATURE (DNA_BLOCK_SIZE + DNA_BLOCK_SIZE_COLOR * DNA_FEATURE_COLOR_BLOCKS_PER_FEATURE) -#define DNA_BLOCKS_PER_MARKING 2 -#define DNA_MARKING_COLOR_BLOCKS_PER_MARKING 1 -#define DNA_BLOCKS_PER_MARKING_ZONE (MAXIMUM_MARKINGS_PER_LIMB * DNA_BLOCKS_PER_MARKING + 1) -#define DNA_MARKING_BLOCKS_TOTAL_SIZE_PER_MARKING (DNA_BLOCK_SIZE + DNA_BLOCK_SIZE_COLOR * DNA_MARKING_COLOR_BLOCKS_PER_MARKING) -/// Total amount of DNA blocks, must be equal to the highest DNA block number -#define DNA_FEATURE_BLOCKS SSaccessories.dna_total_feature_blocks -#define DNA_MANDATORY_COLOR_BLOCKS 5 -#define DNA_MUTANT_COLOR_BLOCK 1 -#define DNA_MUTANT_COLOR_2_BLOCK 2 -#define DNA_MUTANT_COLOR_3_BLOCK 3 -#define DNA_ETHEREAL_COLOR_BLOCK 4 -#define DNA_SKIN_COLOR_BLOCK 5 -#define DNA_POD_HAIR_BLOCK 15 -#define DNA_FISH_TAIL_BLOCK 16 +#define FEATURE_MUTANT_COLOR_TWO "mcolor2" +#define FEATURE_MUTANT_COLOR_THREE "mcolor3" +#define FEATURE_SKIN_COLOR "skin_color" +#define FEATURE_TAIL_GENERIC "tail" +#define FEATURE_FLUFF "fluff" +#define FEATURE_PENIS "penis" +#define FEATURE_TESTICLES "testicles" +#define FEATURE_VAGINA "vagina" +#define FEATURE_WOMB "womb" +#define FEATURE_ANUS "anus" +#define FEATURE_BREASTS "breasts" +#define FEATURE_SKRELL_HAIR "skrell_hair" +#define FEATURE_XENODORSAL "xenodorsal" +#define FEATURE_XENOHEAD "xenohead" +#define FEATURE_TAUR "taur" + +#define MUTATION_SOURCE_SPECIES "species" +#define MUTATION_SOURCE_QUIRK "quirk" diff --git a/code/__DEFINES/~~bubber_defines/dna.dm b/code/__DEFINES/~~bubber_defines/dna.dm deleted file mode 100644 index 9a1d9c10af9..00000000000 --- a/code/__DEFINES/~~bubber_defines/dna.dm +++ /dev/null @@ -1,4 +0,0 @@ -#define SPECIES_PROTEAN "protean" - -#define MUTATION_SOURCE_SPECIES "species" -#define MUTATION_SOURCE_QUIRK "quirk" diff --git a/code/__HELPERS/dna.dm b/code/__HELPERS/dna.dm index ffa3c3a8768..0df8ff086c8 100644 --- a/code/__HELPERS/dna.dm +++ b/code/__HELPERS/dna.dm @@ -13,4 +13,4 @@ #define GET_MUTATION_ENERGY(A) ((A.energy_coeff < 0) ? 1 : A.energy_coeff) ///Ditto, but for a feature. -#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) +#define GET_UF_BLOCK_LEN(blocknum) (GLOB.features_block_lengths["[blocknum]"] || DNA_BLOCK_SIZE) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 0113a2c8db5..4400b6fac26 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -214,5 +214,9 @@ GLOBAL_LIST_INIT(dna_feature_blocks, init_feature_block_types()) /proc/init_feature_block_types() . = list() for(var/datum/dna_block/feature/block_path as anything in subtypesof(/datum/dna_block/feature)) + // BUBBER EDIT ADDITION BEGIN - Prevent abstract types from being instantiated + if(block_path == block_path::abstract_type) + continue + // BUBBER EDIT ADDITION END var/datum/dna_block/feature/new_block = new block_path() .[block_path] = new_block diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm index 052a1e9163e..a3f4419f0c1 100644 --- a/code/controllers/subsystem/sprite_accessories.dm +++ b/code/controllers/subsystem/sprite_accessories.dm @@ -67,15 +67,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity // SKYRAT EDIT ADDITION START - Customization 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 @@ -137,15 +129,6 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity 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, add_blank = TRUE)[DEFAULT_SPRITE_LIST] pod_hair_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair)[DEFAULT_SPRITE_LIST] - // SKYRAT EDIT ADDITION START - Customization - 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/datums/dna/blocks/dna_features_block.dm b/code/datums/dna/blocks/dna_features_block.dm index ce66061e8de..e37f6f78c93 100644 --- a/code/datums/dna/blocks/dna_features_block.dm +++ b/code/datums/dna/blocks/dna_features_block.dm @@ -18,6 +18,7 @@ /datum/dna_block/feature/ethereal_color/apply_to_mob(mob/living/carbon/human/target, dna_hash) target.dna.features[feature_key] = sanitize_hexcolor(get_block(dna_hash)) +/* BUBBER EDIT REMOVAL BEGIN - We use the mutant parts system, not features, see modular_zubbers/code/datums/dna/blocks/dna_features_block.dm /datum/dna_block/feature/ears feature_key = FEATURE_EARS @@ -46,7 +47,7 @@ /datum/dna_block/feature/tail_lizard/apply_to_mob(mob/living/carbon/human/target, dna_hash) target.dna.features[feature_key] = SSaccessories.tails_list_lizard[deconstruct_block(get_block(dna_hash), length(SSaccessories.tails_list_lizard))] - +*/ /datum/dna_block/feature/tail_fish feature_key = FEATURE_TAIL_FISH @@ -55,7 +56,7 @@ /datum/dna_block/feature/tail_fish/apply_to_mob(mob/living/carbon/human/target, dna_hash) target.dna.features[feature_key] = SSaccessories.tails_list_fish[deconstruct_block(get_block(dna_hash), length(SSaccessories.tails_list_fish))] - +/* /datum/dna_block/feature/snout feature_key = FEATURE_SNOUT @@ -149,3 +150,4 @@ /datum/dna_block/feature/pod_hair/apply_to_mob(mob/living/carbon/human/target, dna_hash) target.dna.features[feature_key] = SSaccessories.pod_hair_list[deconstruct_block(get_block(dna_hash), length(SSaccessories.pod_hair_list))] +*/// BUBBER EDIT REMOVAL END diff --git a/code/datums/dna/dna.dm b/code/datums/dna/dna.dm index 1724b84db46..ef4b94c2a17 100644 --- a/code/datums/dna/dna.dm +++ b/code/datums/dna/dna.dm @@ -14,7 +14,6 @@ GLOBAL_LIST_INIT(standard_mutation_sources, list(MUTATION_SOURCE_ACTIVATED, MUTA .[block_path] += total_block_len total_block_len += block.block_length -/* ///Ditto but for unique features. Used by the datum/dna/set_uni_feature_block and datum/dna/get_uni_feature_block procs. GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) @@ -25,8 +24,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) var/datum/dna_block/feature/block = GLOB.dna_feature_blocks[block_path] .[block_path] += total_block_len total_block_len += block.block_length -*/ -//SKYRAT EDIT REMOVAL END /////////////////////////// DNA DATUM /datum/dna @@ -95,11 +92,11 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) new_dna.temporary_mutations = temporary_mutations.Copy() new_dna.mutation_index = mutation_index new_dna.default_mutation_genes = default_mutation_genes - //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION + // BUBBER EDIT ADDITION BEGIN - CUSTOMIZATION new_dna.mutant_bodyparts = mutant_bodyparts.Copy() new_dna.body_markings = body_markings.Copy() new_dna.update_body_size() - //SKYRAT EDIT ADDITION END + // BUBBER EDIT ADDITION END //if the new DNA has a holder, transform them immediately, otherwise save it if(new_dna.holder) if (iscarbon(new_dna.holder)) @@ -197,18 +194,14 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) var/datum/dna_block/identity/block = GLOB.dna_identity_blocks[block_type] . += block.unique_block(holder) -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) -/* /datum/dna/proc/generate_unique_features() . = "" for(var/block_type in GLOB.dna_feature_blocks) var/datum/dna_block/feature/block = GLOB.dna_feature_blocks[block_type] - if(isnull(features[block.feature_key])) + if(isnull(block.mutant_part ? mutant_bodyparts[block.feature_key] : features[block.feature_key])) // BUBBER EDIT CHANGE - Customization - ORIGINAL: if(isnull(features[block.feature_key])) . += random_string(block.block_length, GLOB.hex_characters) continue . += block.unique_block(holder) -*/ -//SKYRAT EDIT REMOVAL END /** * Picks what mutations this DNA has innate and generates DNA blocks for them @@ -282,8 +275,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) var/datum/dna_block/identity/block = GLOB.dna_identity_blocks[blocktype] unique_identity = block.modified_hash(unique_identity, block.unique_block(holder)) -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) -/* /datum/dna/proc/update_uf_block(blocktype) if(!blocktype) CRASH("UF block type is null") @@ -291,8 +282,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) CRASH("Non-human mobs shouldn't have DNA") var/datum/dna_block/feature/block = GLOB.dna_feature_blocks[blocktype] unique_features = block.modified_hash(unique_features, block.unique_block(holder)) -*/ -//SKYRAT EDIT REMOVAL END /** * Checks if two DNAs are practically the same by comparing their most defining features @@ -361,19 +350,19 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(create_mutation_blocks) //I hate this generate_dna_blocks(mutation_blacklist = list(/datum/mutation/headless)) if(randomize_features) - /* SKYRAT EDIT REMOVAL START - We don't really want this. We instead let get_mutant_bodyparts() handle the bodypart randomization on our end, to prevent getting any crazy cross-species features. + /* BUBBER EDIT REMOVAL BEGIN - We don't really want this. We instead let get_mutant_bodyparts() handle the bodypart randomization on our end, to prevent getting any crazy cross-species features. for(var/species_type in GLOB.species_prototypes) var/list/new_features = GLOB.species_prototypes[species_type].randomize_features() for(var/feature in new_features) features[feature] = new_features[feature] - SKYRAT REMOVAL END */ + BUBBER REMOVAL END */ - features = species.randomize_features() | features // SKYRAT EDIT CHANGE - Where applicable, replace features with the features generated by species/randomize_features() - Original: features["mcolor"] = "#[random_color()]" - body_markings = species.get_random_body_markings(features) // SKYRAT EDIT ADDITION + features = species.randomize_features() | features // BUBBER EDIT ADDITION + body_markings = species.get_random_body_markings(features) // BUBBER EDIT ADDITION features[FEATURE_MUTANT_COLOR] = "#[random_color()]" - mutant_bodyparts = species.get_mutant_bodyparts(features, existing_mutant_bodyparts = randomize_features ? list() : mutant_bodyparts) // SKYRAT EDIT ADDITION + mutant_bodyparts = species.get_mutant_bodyparts(features, existing_mutant_bodyparts = randomize_features ? list() : mutant_bodyparts) // BUBBER EDIT ADDITION update_dna_identity() /datum/dna/stored //subtype used by brain mob's stored_dna and the crew manifest @@ -407,7 +396,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) stored_dna.species = mrace //not calling any species update procs since we're a brain, not a monkey/human -/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE, list/override_features, list/override_mutantparts, list/override_markings) // SKYRAT EDIT CHANGE - ORIGINAL: /mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE) +/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE, list/override_features, list/override_mutantparts, list/override_markings) // BUBBER EDIT CHANGE - ORIGINAL: /mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE) if(QDELETED(src)) CRASH("You're trying to change your species post deletion, this is a recipe for madness") if(isnull(mrace)) @@ -433,7 +422,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if (old_species.properly_gained) old_species.on_species_loss(src, new_race, pref_load) - // SKYRAT EDIT ADDITION START - BODYPARTS AND FEATURES + // BUBBER EDIT ADDITION BEGIN - BODYPARTS AND FEATURES // We need to instantiate the list with compatible mutant parts so we don't break things if(override_mutantparts && override_mutantparts.len) @@ -455,11 +444,11 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) dna.unique_features = dna.generate_unique_features() dna.update_body_size() - // SKYRAT EDIT ADDITION END + // BUBBER EDIT ADDITION END dna.species.on_species_gain(src, old_species, pref_load, icon_update, replace_missing) log_mob_tag("TAG: [tag] SPECIES: [key_name(src)] \[[mrace]\]") -/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE, list/override_features, list/override_mutantparts, list/override_markings) // SKYRAT EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE) +/mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE, list/override_features, list/override_mutantparts, list/override_markings) // BUBBER EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, replace_missing = TRUE) ..() if(icon_update) update_body(is_creating = TRUE) @@ -535,8 +524,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(!has_dna()) return -//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm) -/* /mob/living/carbon/human/updateappearance(icon_update = TRUE, mutcolor_update = FALSE, mutations_overlay_update = FALSE) . = ..() for(var/block_type in GLOB.dna_identity_blocks) @@ -545,7 +532,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) for(var/block_type in GLOB.dna_feature_blocks) var/datum/dna_block/feature/block_to_apply = GLOB.dna_feature_blocks[block_type] - if(dna.features[block_to_apply.feature_key]) + if(block_to_apply.mutant_part ? dna.mutant_bodyparts[block_to_apply.feature_key] : dna.features[block_to_apply.feature_key]) // BUBBER EDIT CHANGE - Customization - ORIGINAL: if(dna.features[block_to_apply.feature_key]) block_to_apply.apply_to_mob(src, dna.unique_features) for(var/obj/item/organ/organ in organs) @@ -555,8 +542,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) update_body(is_creating = mutcolor_update) if(mutations_overlay_update) update_mutations_overlay() -*/ -//SKYRAT EDIT REMOVAL END /mob/proc/domutcheck() return diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 3c63bcb4cf3..c07457381ac 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -858,7 +858,7 @@ for(var/obj/item/bodypart/limb as anything in user.bodyparts) limb.update_limb(is_creating = TRUE) - user.updateappearance(mutcolor_update = TRUE, eyeorgancolor_update = TRUE) // SKYRAT EDIT + user.updateappearance(mutcolor_update = TRUE) user.domutcheck() // Get rid of any scars from previous Changeling-ing @@ -960,7 +960,7 @@ user.visual_only_organs = TRUE chosen_dna.copy_dna(user.dna, COPY_DNA_SE|COPY_DNA_SPECIES) user.visual_only_organs = initial(user.visual_only_organs) - user.updateappearance(mutcolor_update = TRUE, eyeorgancolor_update = TRUE) + user.updateappearance(mutcolor_update = TRUE) user.regenerate_icons() user.name = user.get_visible_name() current_profile = chosen_profile diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 135dd8a0297..f3d9c8cdf5a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -479,7 +479,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/canvas_state = preferences.read_preference(/datum/preference/choiced/background_state) // Being a taur, or over 1.1 scales it up - if (body.dna.mutant_bodyparts["taur"] && body.dna.mutant_bodyparts["taur"]["name"] != "None") + if (body.dna.mutant_bodyparts[FEATURE_TAUR] && body.dna.mutant_bodyparts[FEATURE_TAUR][MUTANT_INDEX_NAME] != "None") canvas_size = 1 else if (!isnull(body.dna.features["body_size"]) && body.dna.features["body_size"] > 1.1) canvas_size = 1 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index afa0024e8c5..bbc41e8ba8c 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -391,11 +391,11 @@ GLOBAL_LIST_INIT(clown_mask_options, list( if(src && choice && !user.incapacitated && in_range(user,src)) // SKYRAT EDIT ADDITION START - More mask variations var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.mutant_bodyparts["snout"]) + if(human_user.dna.species.mutant_bodyparts[FEATURE_SNOUT]) icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak") - if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts) + if(human_user.dna.species.mutant_bodyparts[FEATURE_SNOUT][MUTANT_INDEX_NAME] in avian_snouts) icon_state = "[options[choice]]_b" else icon = 'icons/obj/clothing/masks.dmi' diff --git a/code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm b/code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm index 3276ba3a128..5d02ebde6f1 100644 --- a/code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm +++ b/code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm @@ -185,7 +185,7 @@ // FEATURE_LIZARD_MARKINGS = "Dark Tiger Body", // FEATURE_LEGS = DIGITIGRADE_LEGS, consumer.dna.features[FEATURE_MUTANT_COLOR] = "#A02720" - consumer.dna.mutant_bodyparts["tail"] = list( + consumer.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list( MUTANT_INDEX_NAME = "Dark Tiger", MUTANT_INDEX_COLOR_LIST = list("#A02720", "#A02720", "#A02720") ) diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index f270801bce7..8602a2748b2 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -40,7 +40,7 @@ var/obj/item/organ/ears/cat/ears = new(FALSE, target_human.dna.features[FEATURE_EARS]) ears.Insert(target_human, movement_flags = DELETE_IF_REPLACED) */ - if(target_human.dna.features["ears"] == "Cat") + if(target_human.dna.features[FEATURE_EARS] == "Cat") var/obj/item/organ/ears/cat/ears = new ears.Insert(target_human, movement_flags = DELETE_IF_REPLACED) else @@ -210,8 +210,8 @@ cat_ears.color = human_for_preview.hair_color human_for_preview.update_body() */ // START - human_for_preview.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) - human_for_preview.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) + human_for_preview.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) + human_for_preview.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) regenerate_organs(human_for_preview, src, visual_only = TRUE) human_for_preview.update_body(TRUE) // SKYRAT EDIT END diff --git a/code/modules/surgery/organs/external/_visual_organs.dm b/code/modules/surgery/organs/external/_visual_organs.dm index 6c92ba96646..fe1d4f5ead8 100644 --- a/code/modules/surgery/organs/external/_visual_organs.dm +++ b/code/modules/surgery/organs/external/_visual_organs.dm @@ -34,10 +34,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times /obj/item/organ/proc/setup_bodypart_overlay(accessory_type) bodypart_overlay = new bodypart_overlay(src) - // 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 = SSaccessories.dna_mutant_bodypart_blocks[preference] - accessory_type = accessory_type ? accessory_type : sprite_accessory_override var/update_overlays = TRUE if(accessory_type) @@ -309,7 +305,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times preference = "feature_pod_hair" use_mob_sprite_as_obj_sprite = TRUE - dna_block = /datum/dna_block/feature/pod_hair + //dna_block = /datum/dna_block/feature/pod_hair // BUBBER EDIT REMOVAL - We have our own system for handling DNA restyle_flags = EXTERNAL_RESTYLE_PLANT bodypart_overlay = /datum/bodypart_overlay/mutant/pod_hair diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 4a9426bff22..3512fb5a721 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -68,6 +68,7 @@ // SKYRAT EDIT ADDITION START if(!bodypart.owner.dna.mutant_bodyparts[FEATURE_SPINES]) bodypart.owner.dna.mutant_bodyparts[FEATURE_SPINES] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) + bodypart.owner.dna.update_uf_block(/datum/dna_block/feature/mutant/spines) // SKYRAT EDIT ADDITION END var/feature_name = bodypart.owner.dna.mutant_bodyparts[FEATURE_SPINES][MUTANT_INDEX_NAME] // SKYRAT EDIT CHANGE - ORIGINAL: var/feature_name = bodypart.owner.dna.features[FEATURE_SPINES] //tail spines don't live in DNA, but share feature names with regular spines tail_spines_overlay.set_appearance_from_dna(bodypart.owner.dna, feature_name, feature_key = FEATURE_SPINES) // SKYRAT EDIT CHANGE - ORIGINAL: tail_spines_overlay.set_appearance_from_name(feature_name) @@ -153,7 +154,7 @@ // SKYRAT EDIT ADDITION - CUSTOMIZATION /datum/bodypart_overlay/mutant/tail/get_global_feature_list() - return SSaccessories.sprite_accessories["tail"] + return SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC] // SKYRAT EDIT ADDITION END /datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner) @@ -174,18 +175,18 @@ wag_flags = WAG_ABLE /datum/bodypart_overlay/mutant/tail/get_global_feature_list() - return SSaccessories.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.tails_list_human + return SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.tails_list_human /obj/item/organ/tail/cat/get_butt_sprite() return icon('icons/mob/butts.dmi', BUTT_SPRITE_CAT) ///Cat tail bodypart overlay /datum/bodypart_overlay/mutant/tail/cat - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = FEATURE_TAIL + feature_key = FEATURE_TAIL_GENERIC // SKYRAT EDIT - Customization - ORIGINAL: feature_key = FEATURE_TAIL // color_source = ORGAN_COLOR_HAIR // SKYRAT EDIT REMOVAL /datum/bodypart_overlay/mutant/tail/cat/get_global_feature_list() - return SSaccessories.sprite_accessories["tail"] // BUBBER EDIT ORIGINAL: return SSaccessories.tails_list_felinid + return SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC] // BUBBER EDIT ORIGINAL: return SSaccessories.tails_list_felinid /obj/item/organ/tail/monkey name = "monkey tail" @@ -197,7 +198,7 @@ ///Monkey tail bodypart overlay /datum/bodypart_overlay/mutant/tail/monkey color_source = NONE - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = FEATURE_TAIL_MONKEY + feature_key = FEATURE_TAIL_GENERIC // SKYRAT EDIT - Customization - ORIGINAL: feature_key = FEATURE_TAIL_MONKEY /datum/bodypart_overlay/mutant/tail/monkey/get_global_feature_list() return SSaccessories.tails_list_monkey @@ -270,10 +271,10 @@ ///Lizard tail bodypart overlay datum /datum/bodypart_overlay/mutant/tail/lizard - feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = FEATURE_TAIL_LIZARD + feature_key = FEATURE_TAIL_GENERIC // SKYRAT EDIT - Customization - ORIGINAL: feature_key = FEATURE_TAIL_LIZARD /datum/bodypart_overlay/mutant/tail/lizard/get_global_feature_list() - return SSaccessories.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.tails_list_lizard + return SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.tails_list_lizard /obj/item/organ/tail/lizard/fake name = "fabricated lizard tail" diff --git a/code/modules/unit_tests/changeling.dm b/code/modules/unit_tests/changeling.dm index dfc97a4492b..0a9609ab321 100644 --- a/code/modules/unit_tests/changeling.dm +++ b/code/modules/unit_tests/changeling.dm @@ -75,12 +75,12 @@ // The more DNA features and random things we change, the more likely we are to catch something not updating correctly. // Yeah guess who/what this is, I dare you. ling.dna.features[FEATURE_MUTANT_COLOR] = "#886600" - ling.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_TAIL_LIZARD] = "Smooth" + ling.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_TAIL_LIZARD] = "Smooth" ling.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_SNOUT] = "Sharp + Light" - ling.dna.mutant_bodyparts[FEATURE_HORNS] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list("#292826", "#292826", "#8292826")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_HORNS] = "Curled" + ling.dna.mutant_bodyparts[FEATURE_HORNS] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list("#292826", "#292826", "#292826")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_HORNS] = "Curled" ling.dna.mutant_bodyparts[FEATURE_FRILLS] = list(MUTANT_INDEX_NAME = "Short", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_FRILLS] = "Short" ling.dna.mutant_bodyparts[FEATURE_SPINES] = list(MUTANT_INDEX_NAME = "Long + Membrane", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features[FEATURE_SPINES] = "Long + Membrane" - ling.dna.body_markings["chest"] = list("Light Belly" = list("#886600", 0)) // SKYRAT EDIT CHANGE - ORIGINAL : ling.dna.features[FEATURE_LIZARD_MARKINGS] = "Light Belly" + ling.dna.body_markings[BODY_ZONE_CHEST] = list("Light Belly" = list("#886600", 0)) // SKYRAT EDIT CHANGE - ORIGINAL : ling.dna.features[FEATURE_LIZARD_MARKINGS] = "Light Belly" ling.dna.features[FEATURE_LEGS] = DIGITIGRADE_LEGS ling.set_eye_color(COLOR_WHITE) ling.dna.update_ui_block(/datum/dna_block/identity/eye_colors) diff --git a/code/modules/unit_tests/dna_infusion.dm b/code/modules/unit_tests/dna_infusion.dm index 191b92501aa..587e39891e0 100644 --- a/code/modules/unit_tests/dna_infusion.dm +++ b/code/modules/unit_tests/dna_infusion.dm @@ -39,11 +39,11 @@ var/output_organs = infuser_entry.output_organs var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent) // SKYRAT EDIT ADDITION START - Customization - lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) - lab_rat.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) - lab_rat.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) - lab_rat.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) - lab_rat.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + lab_rat.dna.mutant_bodyparts[FEATURE_MOTH_ANTENNAE] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) + lab_rat.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + lab_rat.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + lab_rat.dna.mutant_bodyparts[FEATURE_HORNS] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + lab_rat.dna.mutant_bodyparts[FEATURE_FRILLS] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT END var/list/obj/item/organ/inserted_organs = list() diff --git a/code/modules/unit_tests/screenshot_humanoids.dm b/code/modules/unit_tests/screenshot_humanoids.dm index d7c1de26128..cf49687e619 100644 --- a/code/modules/unit_tests/screenshot_humanoids.dm +++ b/code/modules/unit_tests/screenshot_humanoids.dm @@ -7,7 +7,7 @@ // Test lizards as their own thing so we can get more coverage on their features var/mob/living/carbon/human/lizard = allocate(/mob/living/carbon/human/dummy/consistent) lizard.dna.features[FEATURE_MUTANT_COLOR] = "#099" - lizard.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features[FEATURE_TAIL_LIZARD] = "Light Tiger" + lizard.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features[FEATURE_TAIL_LIZARD] = "Light Tiger" lizard.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features[FEATURE_SNOUT] = "Sharp + Light" lizard.dna.mutant_bodyparts[FEATURE_HORNS] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features[FEATURE_HORNS] = "Simple" lizard.dna.mutant_bodyparts[FEATURE_FRILLS] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features[FEATURE_FRILLS] = "Aquatic" diff --git a/code/modules/unit_tests/screenshots/transformation_sting_appearances.png b/code/modules/unit_tests/screenshots/transformation_sting_appearances.png index 03d9464eb4b6c64df93cf110aee1ca5e39ad403b..ce0545d1b568cb767f1495f255fc69581b34cc9b 100644 GIT binary patch delta 990 zcmZqS`o+0Ho3VbEr;B4qM&sLAiN&)Gc-nTVZR1wFa4T0s;PSe=|Nh6{$!>pIbaY$C z**y8QLe8C?v*l7eFMN*?xtaIo;j`cJH`d*-H#jEu?Z;E&bCnOx$ zk#<#&<@wqL8dtown)Tpg#hp;zzPle^C>nfpW?7V1ctq&Usn}3k+j{#@(K^fZ6TJ4x z#C>?%8^8ZShnmH-_2-vge))5&%`W{1UP_EXKZ6u@-HH(B4w#m&UOi>$bFO=jzx_TS zRI*6y;>X^-lH5PoHJ=K6;GTGeEypH%?Rn+TKP=x*4cfb1xb?-YZEqI|&am4*_xz6x zbH?fHn$?~8=8Z28u6w=6dSYltZ@uV&@~28WzC1X1yVLC7pH9UDQHC5gh6f4{KCvB` z$b2OKInS0rmNiM&c?{GU!iy`8&SiLU$eYba-{naDjTO0UUrx+oWqe<`Rov|!lGQp_gfy}+Qc{T|a7=Cn^j2U6CI}@9MnxRocWXuuYWR-;%)9>o!*PHd#Kd`WweB+v9_j1QCzZudV9+670P~XUC zAS@t!kvk!2c2*C2#eAu6a!dg$jxji-Usq&oFy&4D$WSJ6Wn=$i{zxqALPM6`F9#g6u^ES2*ZV$TtU#*Q~nDbsS zA^dme;Xj9K{^iB2WE2*VfBNUN!=FQmT^HuOXE;%oJ;m5=fS16+R<&T7;)T;mVwy~OVESK%s{a|y`Ns9zLV|BKKV20MqJ<_sLKnWxk%Gwerjm>WPcml-)giX9w)`s=w_oa7b0Hm5Lv zDPD%AUkoeda~K4!fNZ@8vGowpK~jGebZY|SBbLjnw0#eI&8+>kIb-pc#;Ly?oqjB^ z+Yn`cVq5Fezs!~Y9q!pr_|E?XH}gRK&iV)DlT?;7*ZJ7qWdH(CS3j3^P6q8rbC zo|CNKfB!d!OXReJEV~aU28URfwKq3A9RDuZvFVtg*M^hku7x(T_1#SS*Mxhhp8svU zZ|=v_#(fD*&i|@*#po@+{wHC7gLWs2$5XGy46j^Y4TpLAW6w-{-ltvBeLLUQ`$9($ z%kk^qmYse4e#w-%$Ms!8q&NJt;yJuEozMRH+MrdXWs3xSW3T%fFiEe=zpic9Jh$QW z-YIL3Y@h4!J>jy+!MP{6jvV8vf3SOl;GL?1_itQ;>wmQfY+zzgV`kVOQ1Fu>;Uwdu z>%nZV6qv#`RI|+xZCI_j=TR6#$wOV{UE)lS!q>?Au(iz#HD6H1%8X|o8yiM zh%7RbG_aqicES8EzZ$di{IkIg|BfqU1vcuk2|hc>iaNA`Avyj0%HiPcX8!~%TLJpU%c(&bM(!IVwrq46y)q-P}6@Jt*Y%WL>B^Q81fJtE(Vayab^LK;>HG`{{K=O zEp`sC*e^1GDQ$*|uZ%(V5sU{`gKS*_v9(qGOQY&9$C!%sb{l*W>^pegUt<@0#eUH3 zB{TQe=8g|>wFw*RCgkvX|7O4RkFo0ifx>zp5VLVhy~10053I}|_rLM~VG}l9&U|r` R%p?XN@O1TaS?83{1OSSe(1id1 diff --git a/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm b/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm index 4fa692677db..7b2eef804c3 100644 --- a/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm +++ b/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm @@ -66,17 +66,17 @@ if(new_s_tone) human_user.skin_tone = new_s_tone - human_user.dna.update_ui_block(DNA_SKIN_TONE_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/skin_tone) #define MIN_MCOLOR_VALUE 50 if(HAS_TRAIT(human_user, TRAIT_MUTANT_COLORS) && !HAS_TRAIT(human_user, TRAIT_FIXED_MUTANT_COLORS)) - var/new_mutantcolor = tgui_color_picker(user, "Choose your skin color:", "Race change", human_user.dna.features["mcolor"]) // BUBBERSTATION EDIT: TGUI COLOR PICKER + var/new_mutantcolor = tgui_color_picker(user, "Choose your skin color:", "Race change", human_user.dna.features[FEATURE_MUTANT_COLOR]) if(new_mutantcolor) var/mutantcolor_hsv = rgb2hsv(new_mutantcolor) if(mutantcolor_hsv[3] >= MIN_MCOLOR_VALUE) // mutantcolors must be bright - human_user.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor) + human_user.dna.features[FEATURE_MUTANT_COLOR] = sanitize_hexcolor(new_mutantcolor) else to_chat(human_user, span_notice("Invalid color. Your color is not bright enough.")) @@ -104,7 +104,7 @@ to_chat(human_user, span_notice("Whoa man, you feel like a man!")) else return - human_user.dna.update_ui_block(DNA_GENDER_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/gender) human_user.update_body() human_user.update_mutations_overlay() // (hulk male/female) @@ -118,12 +118,12 @@ var/new_hair_color = tgui_color_picker(human_user, "Choose your hair color", "Hair Color", human_user.hair_color) // BUBBERSTATION EDIT: TGUI COLOR PICKER if(new_hair_color) human_user.hair_color = sanitize_hexcolor(new_hair_color) - human_user.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/hair_color) if(human_user.gender == "male") var/new_face_color = tgui_color_picker(human_user, "Choose your facial hair color", "Hair Color", human_user.facial_hair_color) // BUBBERSTATION EDIT: TGUI COLOR PICKER if(new_face_color) human_user.facial_hair_color = sanitize_hexcolor(new_face_color) - human_user.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/facial_color) human_user.update_body_parts() if(BODY_ZONE_PRECISE_EYES) @@ -131,10 +131,8 @@ if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE if(new_eye_color) - human_user.eye_color_left = sanitize_hexcolor(new_eye_color) - human_user.eye_color_right = sanitize_hexcolor(new_eye_color) - human_user.dna.update_ui_block(DNA_EYE_COLOR_LEFT_BLOCK) - human_user.dna.update_ui_block(DNA_EYE_COLOR_RIGHT_BLOCK) + human_user.set_eye_color(sanitize_hexcolor(new_eye_color)) + human_user.dna.update_ui_block(/datum/dna_block/identity/eye_colors) human_user.update_body() /obj/item/hhmirror/wracemagic @@ -188,7 +186,7 @@ to_chat(human_user, span_notice("Whoa man, you feel like a man!")) else return - human_user.dna.update_ui_block(DNA_GENDER_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/gender) human_user.update_body() human_user.update_mutations_overlay() // (hulk male/female) @@ -202,12 +200,12 @@ var/new_hair_color = tgui_color_picker(human_user, "Choose your hair color", "Hair Color", human_user.hair_color) // BUBBERSTATION EDIT: TGUI COLOR PICKER if(new_hair_color) human_user.hair_color = sanitize_hexcolor(new_hair_color) - human_user.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/hair_color) if(human_user.gender == "male") var/new_face_color = tgui_color_picker(human_user, "Choose your facial hair color", "Hair Color", human_user.facial_hair_color) // BUBBERSTATION EDIT: TGUI COLOR PICKER if(new_face_color) human_user.facial_hair_color = sanitize_hexcolor(new_face_color) - human_user.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK) + human_user.dna.update_ui_block(/datum/dna_block/identity/facial_color) human_user.update_body_parts() if(BODY_ZONE_PRECISE_EYES) @@ -215,10 +213,8 @@ if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return TRUE if(new_eye_color) - human_user.eye_color_left = sanitize_hexcolor(new_eye_color) - human_user.eye_color_right = sanitize_hexcolor(new_eye_color) - human_user.dna.update_ui_block(DNA_EYE_COLOR_LEFT_BLOCK) - human_user.dna.update_ui_block(DNA_EYE_COLOR_RIGHT_BLOCK) + human_user.set_eye_color(sanitize_hexcolor(new_eye_color)) + human_user.dna.update_ui_block(/datum/dna_block/identity/eye_colors) human_user.update_body() charges-- if(charges == 0) diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm index 3daba9697ac..30ac9d54b2e 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm @@ -51,9 +51,9 @@ check_mode = TRICOLOR_NO_CHECK /datum/preference/tri_color/mutant_colors/apply_to_human(mob/living/carbon/human/target, value) - target.dna.features["mcolor"] = sanitize_hexcolor(value[1]) - target.dna.features["mcolor2"] = sanitize_hexcolor(value[2]) - target.dna.features["mcolor3"] = sanitize_hexcolor(value[3]) + target.dna.features[FEATURE_MUTANT_COLOR] = sanitize_hexcolor(value[1]) + target.dna.features[FEATURE_MUTANT_COLOR_TWO] = sanitize_hexcolor(value[2]) + target.dna.features[FEATURE_MUTANT_COLOR_THREE] = sanitize_hexcolor(value[3]) /datum/preference/toggle/eye_emissives savefile_key = "eye_emissives" diff --git a/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm b/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm index 17189fa4d08..85a08559c80 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm @@ -31,11 +31,11 @@ if(!preferences || !is_usable(preferences)) return FALSE - var/old_value = target.dna.features["legs"] + var/old_value = target.dna.features[FEATURE_LEGS] if(value == old_value) return FALSE - target.dna.features["legs"] = value + target.dna.features[FEATURE_LEGS] = value if(value == DIGITIGRADE_LEGS) target.dna.species.try_make_digitigrade(target) diff --git a/modular_skyrat/master_files/code/modules/clothing/head/hardhat.dm b/modular_skyrat/master_files/code/modules/clothing/head/hardhat.dm index d43fddb414d..9a1c8159015 100644 --- a/modular_skyrat/master_files/code/modules/clothing/head/hardhat.dm +++ b/modular_skyrat/master_files/code/modules/clothing/head/hardhat.dm @@ -6,7 +6,7 @@ /obj/item/clothing/head/utility/hardhat/welding/adjust_visor(mob/living/user) . = ..() var/mob/living/carbon/carbon_user = user - if(carbon_user.dna.species.mutant_bodyparts["snout"]) + if(carbon_user.dna.species.mutant_bodyparts[FEATURE_SNOUT]) visor_sprite_path = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi' else visor_sprite_path = 'icons/mob/clothing/head/utility.dmi' diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm b/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm index 404ba0c5d3b..f461f68022a 100644 --- a/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm +++ b/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm @@ -76,7 +76,7 @@ /// Pick an icon_state that matches nicer with tails if one is found on the wearer /obj/item/clothing/suit/armor/riot/skinsuit_armor/proc/check_tail(mob/living/carbon/human/user) icon_state = base_icon_state - if(!user.dna.species.mutant_bodyparts["tail"]) + if(!user.dna.species.mutant_bodyparts[FEATURE_TAIL_GENERIC]) return icon_state = "skinsuitarmor_cutback" diff --git a/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm b/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm index d8116d398f4..f8c6365d73c 100644 --- a/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm +++ b/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm @@ -62,10 +62,10 @@ /// If the wearer has a compatible tail for the `tail_overlay` variable, render it /obj/item/clothing/under/akula_wetsuit/proc/add_tail_overlay(mob/living/carbon/human/user) - if(!user.dna.species.mutant_bodyparts["tail"]) + if(!user.dna.species.mutant_bodyparts[FEATURE_TAIL_GENERIC]) return - var/tail = user.dna.species.mutant_bodyparts["tail"][MUTANT_INDEX_NAME] + var/tail = user.dna.species.mutant_bodyparts[FEATURE_TAIL_GENERIC][MUTANT_INDEX_NAME] switch(tail) if("Akula") tail_overlay = mutable_appearance(TAIL_OVERLAY_DMI, "overlay_akula", -(TAIL_OVERLAY_LAYER)) diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/_species.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/_species.dm index af5435cf38c..2fa79f5279f 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/_species.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/_species.dm @@ -30,7 +30,7 @@ if(body_choice && !body_choice.is_digi_compatible) ignore_digi = TRUE - if(!ignore_digi && ((digitigrade_customization == DIGITIGRADE_OPTIONAL && human_who_gained_species.dna.features["legs"] == DIGITIGRADE_LEGS) || digitigrade_customization == DIGITIGRADE_FORCED)) + if(!ignore_digi && ((digitigrade_customization == DIGITIGRADE_OPTIONAL && human_who_gained_species.dna.features[FEATURE_LEGS] == DIGITIGRADE_LEGS) || digitigrade_customization == DIGITIGRADE_FORCED)) var/obj/item/bodypart/leg/right/r_leg = bodypart_overrides[BODY_ZONE_R_LEG] if(r_leg) bodypart_overrides[BODY_ZONE_R_LEG] = initial(r_leg.digitigrade_type) diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm index 7ff31c70f2d..267b795529c 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm @@ -124,7 +124,7 @@ return standing /datum/species/snail/prepare_human_for_preview(mob/living/carbon/human/snail) - snail.dna.features["mcolor"] = "#adaba7" + snail.dna.features[FEATURE_MUTANT_COLOR] = "#adaba7" snail.update_body(TRUE) /datum/species/snail/create_pref_unique_perks() diff --git a/modular_skyrat/modules/customization/__DEFINES/lists.dm b/modular_skyrat/modules/customization/__DEFINES/lists.dm index 8e15c8a3f9b..74a3427a7ca 100644 --- a/modular_skyrat/modules/customization/__DEFINES/lists.dm +++ b/modular_skyrat/modules/customization/__DEFINES/lists.dm @@ -20,6 +20,4 @@ GLOBAL_LIST_EMPTY(augment_items) GLOBAL_LIST_EMPTY(augment_categories_to_slots) GLOBAL_LIST_EMPTY(augment_slot_to_items) -GLOBAL_LIST_EMPTY(dna_body_marking_blocks) - GLOBAL_LIST_EMPTY(species_clothing_fallback_cache) diff --git a/modular_skyrat/modules/customization/__HELPERS/DNA.dm b/modular_skyrat/modules/customization/__HELPERS/DNA.dm deleted file mode 100644 index 188f4d821da..00000000000 --- a/modular_skyrat/modules/customization/__HELPERS/DNA.dm +++ /dev/null @@ -1 +0,0 @@ -GLOBAL_VAR_INIT(dna_total_feature_blocks, DNA_MANDATORY_COLOR_BLOCKS) diff --git a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm b/modular_skyrat/modules/customization/__HELPERS/global_lists.dm index 20994949526..20ee3393d57 100644 --- a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm +++ b/modular_skyrat/modules/customization/__HELPERS/global_lists.dm @@ -4,7 +4,6 @@ make_default_mutant_bodypart_references() make_body_marking_references() make_body_marking_set_references() - make_body_marking_dna_block_references() populate_total_ui_len_by_block() populate_total_uf_len_by_block() make_augment_references() @@ -66,14 +65,6 @@ BM = new path() GLOB.body_marking_sets[BM.name] = BM -/proc/make_body_marking_dna_block_references() - for(var/marking_zone in GLOB.marking_zones) - 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) - 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), diff --git a/modular_skyrat/modules/customization/datums/dna.dm b/modular_skyrat/modules/customization/datums/dna.dm deleted file mode 100644 index 7a1e5afc96d..00000000000 --- a/modular_skyrat/modules/customization/datums/dna.dm +++ /dev/null @@ -1,242 +0,0 @@ -/** - * Some identity blocks (basically pieces of the unique_identity string variable of the dna datum, commonly abbreviated with ui) - * may have a length that differ from standard length of 3 ASCII characters. This list is necessary - * for these non-standard blocks to work, as well as the entire unique identity string. - * Should you add a new ui block which size differ from the standard (again, 3 ASCII characters), like for example, a color, - * please do not forget to also include it in this list in the following format: - * "[dna block number]" = dna block size, - * Failure to do that may result in bugs. Thanks. - */ -GLOBAL_LIST_INIT(identity_block_lengths, list( - "[DNA_HAIR_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - "[DNA_FACIAL_HAIR_COLOR_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - "[DNA_EYE_COLOR_LEFT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - "[DNA_EYE_COLOR_RIGHT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - "[DNA_HAIR_COLOR_GRADIENT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - "[DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK]" = DNA_BLOCK_SIZE_COLOR, - )) - -/** - * 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( - "[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. - * Commonly used by the datum/dna/set_uni_identity_block and datum/dna/get_uni_identity_block procs. - */ -GLOBAL_LIST_EMPTY(total_ui_len_by_block) - -/proc/populate_total_ui_len_by_block() - GLOB.total_ui_len_by_block = list() - var/total_block_len = 1 - for(var/blocknumber in 1 to DNA_UNI_IDENTITY_BLOCKS) - GLOB.total_ui_len_by_block += total_block_len - total_block_len += GET_UI_BLOCK_LEN(blocknumber) - -///Ditto but for unique features. Used by the datum/dna/set_uni_feature_block and datum/dna/get_uni_feature_block procs. -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 SSaccessories.dna_total_feature_blocks) - GLOB.total_uf_len_by_block += total_block_len - total_block_len += GET_UF_BLOCK_LEN(blocknumber) - -/datum/dna - var/list/list/mutant_bodyparts = list() - features = MANDATORY_FEATURE_LIST - ///Body markings of the DNA's owner. This is for storing their original state for re-creating the character. They'll get changed on species mutation - var/list/list/body_markings = list() - ///Current body size, used for proper re-sizing and keeping track of that - var/current_body_size = BODY_SIZE_NORMAL - -/datum/dna/proc/generate_unique_features() - var/list/data = list() - - if(features["mcolor"]) - data += sanitize_hexcolor(features["mcolor"], include_crunch = FALSE) - else - data += random_string(DNA_BLOCK_SIZE_COLOR, GLOB.hex_characters) - if(features["mcolor2"]) - data += sanitize_hexcolor(features["mcolor2"], include_crunch = FALSE) - else - data += random_string(DNA_BLOCK_SIZE_COLOR, GLOB.hex_characters) - if(features["mcolor3"]) - data += sanitize_hexcolor(features["mcolor3"], include_crunch = FALSE) - else - data += random_string(DNA_BLOCK_SIZE_COLOR, GLOB.hex_characters) - if(features["ethcolor"]) - data += sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE) - else - data += random_string(DNA_BLOCK_SIZE_COLOR, GLOB.hex_characters) - if(features["skin_color"]) - data += sanitize_hexcolor(features["skin_color"], include_crunch = FALSE) - else - data += random_string(DNA_BLOCK_SIZE_COLOR, GLOB.hex_characters) - 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]) - colors_to_randomize-- - data += sanitize_hexcolor(color, include_crunch = FALSE) - if(colors_to_randomize) - data += random_string(DNA_BLOCK_SIZE_COLOR * colors_to_randomize, GLOB.hex_characters) - else - data += random_string(DNA_FEATURE_BLOCKS_TOTAL_SIZE_PER_FEATURE, GLOB.hex_characters) - for(var/zone in GLOB.marking_zones) - if(body_markings[zone]) - data += construct_block(body_markings[zone].len+1, MAXIMUM_MARKINGS_PER_LIMB+1) - var/list/marking_list = GLOB.body_markings_per_limb[zone] - var/markings_to_randomize = MAXIMUM_MARKINGS_PER_LIMB - for(var/marking in body_markings[zone]) - markings_to_randomize-- - data += construct_block(marking_list.Find(marking), marking_list.len) - data += sanitize_hexcolor(body_markings[zone][marking], include_crunch = FALSE) - if(markings_to_randomize) - data += random_string(markings_to_randomize * DNA_MARKING_BLOCKS_TOTAL_SIZE_PER_MARKING,GLOB.hex_characters) - else - data += construct_block(1, MAXIMUM_MARKINGS_PER_LIMB + 1) - data += random_string(MAXIMUM_MARKINGS_PER_LIMB * DNA_MARKING_BLOCKS_TOTAL_SIZE_PER_MARKING,GLOB.hex_characters) - return data.Join() - -/datum/dna/proc/update_uf_block(blocknumber) - if(!blocknumber) - CRASH("UF block index is null") - if(blocknumber<1 || blocknumber>DNA_FEATURE_BLOCKS) - CRASH("UF block index out of bounds") - if(!ishuman(holder)) - CRASH("Non-human mobs shouldn't have DNA") - if(blocknumber <= DNA_MANDATORY_COLOR_BLOCKS) - switch(blocknumber) - if(DNA_MUTANT_COLOR_BLOCK) - set_uni_feature_block(blocknumber, sanitize_hexcolor(features["mcolor"], include_crunch = FALSE)) - if(DNA_MUTANT_COLOR_2_BLOCK) - set_uni_feature_block(blocknumber, sanitize_hexcolor(features["mcolor2"], include_crunch = FALSE)) - if(DNA_MUTANT_COLOR_3_BLOCK) - set_uni_feature_block(blocknumber, sanitize_hexcolor(features["mcolor3"], include_crunch = FALSE)) - if(DNA_ETHEREAL_COLOR_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+(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 = 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 = 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+(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] - if(blocknumber == GLOB.dna_body_marking_blocks[zone]) - var/markings = 0 - if(body_markings[zone]) - markings = body_markings[zone].len - set_uni_feature_block(blocknumber, construct_block(markings+1, MAXIMUM_MARKINGS_PER_LIMB+1)) - else - var/color_block = ((block_zero_index%DNA_BLOCKS_PER_MARKING_ZONE)+1)%DNA_BLOCKS_PER_MARKING - var/marking_index = (((block_zero_index-1)%DNA_BLOCKS_PER_MARKING_ZONE)/DNA_BLOCKS_PER_MARKING)+1 - if(body_markings[zone] && marking_index <= body_markings[zone].len) - var/marking = body_markings[zone][marking_index] - if(color_block) - set_uni_feature_block(blocknumber, sanitize_hexcolor(body_markings[zone][marking], include_crunch = FALSE)) - else - var/list/marking_list = GLOB.body_markings_per_limb[zone] - set_uni_feature_block(blocknumber, construct_block(marking_list.Find(marking), marking_list.len)) - -/datum/dna/proc/update_body_size() - if(!holder || species.body_size_restricted || current_body_size == features["body_size"]) - return - var/change_multiplier = features["body_size"] / current_body_size - //We update the translation to make sure our character doesn't go out of the southern bounds of the tile - var/translate = ((change_multiplier-1) * 32)/2 - holder.transform = holder.transform.Scale(change_multiplier) - // Splits the updated translation into X and Y based on the user's rotation. - var/translate_x = translate * ( holder.transform.b / features["body_size"] ) - var/translate_y = translate * ( holder.transform.e / features["body_size"] ) - holder.transform = holder.transform.Translate(translate_x, translate_y) - holder.maptext_height = 32 * features["body_size"] // Adjust runechat height - current_body_size = features["body_size"] - -/mob/living/carbon/proc/apply_customizable_dna_features_to_species() - if(!has_dna()) - CRASH("[src] does not have DNA") - dna.species.body_markings = dna.body_markings.Copy() - var/list/bodyparts_to_add = dna.mutant_bodyparts.Copy() - for(var/key in bodyparts_to_add) - if(SSaccessories.sprite_accessories[key] && bodyparts_to_add[key] && bodyparts_to_add[key][MUTANT_INDEX_NAME]) - var/datum/sprite_accessory/SP = SSaccessories.sprite_accessories[key][bodyparts_to_add[key][MUTANT_INDEX_NAME]] - if(!SP?.factual) - bodyparts_to_add -= key - continue - dna.species.mutant_bodyparts = bodyparts_to_add.Copy() - -/mob/living/carbon/human/updateappearance(icon_update = TRUE, mutcolor_update = FALSE, mutations_overlay_update = FALSE, eyeorgancolor_update = FALSE) - ..() - var/structure = dna.unique_identity - - skin_tone = GLOB.skin_tones[deconstruct_block(get_uni_identity_block(structure, DNA_SKIN_TONE_BLOCK), GLOB.skin_tones.len)] - - eye_color_left = sanitize_hexcolor(get_uni_identity_block(structure, DNA_EYE_COLOR_LEFT_BLOCK)) - eye_color_right = sanitize_hexcolor(get_uni_identity_block(structure, DNA_EYE_COLOR_RIGHT_BLOCK)) - set_haircolor(sanitize_hexcolor(get_uni_identity_block(structure, DNA_HAIR_COLOR_BLOCK)), update = FALSE) - set_facial_haircolor(sanitize_hexcolor(get_uni_identity_block(structure, DNA_FACIAL_HAIR_COLOR_BLOCK)), update = FALSE) - set_hair_gradient_color(sanitize_hexcolor(get_uni_identity_block(structure, DNA_HAIR_COLOR_GRADIENT_BLOCK)), update = FALSE) - set_facial_hair_gradient_color(sanitize_hexcolor(get_uni_identity_block(structure, DNA_FACIAL_HAIR_COLOR_GRADIENT_BLOCK)), update = FALSE) - - if(eyeorgancolor_update) - add_eye_color_left(eye_color_left, EYE_COLOR_ORGAN_PRIORITY, update_body = FALSE) - add_eye_color_right(eye_color_right, EYE_COLOR_ORGAN_PRIORITY, update_body = FALSE) - - if(HAS_TRAIT(src, TRAIT_SHAVED)) - set_facial_hairstyle("Shaved", update = FALSE) - else - var/style = SSaccessories.facial_hairstyles_list[deconstruct_block(get_uni_identity_block(structure, DNA_FACIAL_HAIRSTYLE_BLOCK), SSaccessories.facial_hairstyles_list.len)] - var/gradient_style = SSaccessories.facial_hair_gradients_list[deconstruct_block(get_uni_identity_block(structure, DNA_FACIAL_HAIRSTYLE_GRADIENT_BLOCK), length(SSaccessories.facial_hair_gradients_list))] - set_facial_hairstyle(style, update = FALSE) - set_facial_hair_gradient_style(gradient_style, update = FALSE) - - if(HAS_TRAIT(src, TRAIT_BALD)) - set_hairstyle("Bald", update = FALSE) - else - var/style = SSaccessories.hairstyles_list[deconstruct_block(get_uni_identity_block(structure, DNA_HAIRSTYLE_BLOCK), SSaccessories.hairstyles_list.len)] - var/gradient_style = SSaccessories.hair_gradients_list[deconstruct_block(get_uni_identity_block(structure, DNA_HAIRSTYLE_GRADIENT_BLOCK), length(SSaccessories.hair_gradients_list))] - set_hairstyle(style, update = FALSE) - set_hair_gradient_style(gradient_style, update = FALSE) - - var/features = dna.unique_features - if(dna.features["mcolor"]) - dna.features["mcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_BLOCK)) - if(dna.features["mcolor2"]) - dna.features["mcolor2"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_2_BLOCK)) - if(dna.features["mcolor3"]) - dna.features["mcolor3"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_3_BLOCK)) - if(dna.features["ethcolor"]) - dna.features["ethcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_ETHEREAL_COLOR_BLOCK)) - if(dna.features["skin_color"]) - dna.features["skin_color"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_SKIN_COLOR_BLOCK)) - - if(icon_update) - update_body(is_creating = mutcolor_update) - if(mutations_overlay_update) - update_mutations_overlay() diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm index dd762de789e..b348665c8dd 100644 --- a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm +++ b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm @@ -183,11 +183,11 @@ if(src && choice && !user.incapacitated && in_range(user,src)) var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.mutant_bodyparts["snout"]) + if(human_user.dna.species.mutant_bodyparts[FEATURE_SNOUT]) icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi' worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi' var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak") - if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts) + if(human_user.dna.species.mutant_bodyparts[FEATURE_SNOUT][MUTANT_INDEX_NAME] in avian_snouts) icon_state = "[options[choice]]_b" else icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi' diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm index c0e430e6a17..54180cf7e89 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm @@ -27,16 +27,16 @@ var/list/colors switch(default_color) if(DEFAULT_PRIMARY) - colors = sanitize_hexcolor(features["mcolor"]) + colors = sanitize_hexcolor(features[FEATURE_MUTANT_COLOR]) if(DEFAULT_SECONDARY) - colors = sanitize_hexcolor(features["mcolor2"]) + colors = sanitize_hexcolor(features[FEATURE_MUTANT_COLOR_TWO]) if(DEFAULT_TERTIARY) - colors = sanitize_hexcolor(features["mcolor3"]) + colors = sanitize_hexcolor(features[FEATURE_MUTANT_COLOR_THREE]) if(DEFAULT_SKIN_OR_PRIMARY) if(pref_species && !(TRAIT_USES_SKINTONES in pref_species.inherent_traits)) - colors = sanitize_hexcolor(features["skin_color"]) + colors = sanitize_hexcolor(features[FEATURE_SKIN_COLOR]) else - colors = sanitize_hexcolor(features["mcolor"]) + colors = sanitize_hexcolor(features[FEATURE_MUTANT_COLOR]) else colors = default_color 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 51c4447c722..475ce149ba0 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 @@ -9,9 +9,6 @@ ///Which color we default to on acquisition of the accessory (such as switching species, default color for character customization etc) ///You can also put down a a HEX color, to be used instead as the default var/default_color - ///Set this to a name, then the accessory will be shown in preferences, if a species can have it. Most accessories have this - ///Notable things that have it set to FALSE are things that need special setup, such as genitals - var/generic /// Whether or not this sprite accessory has an additional overlay added to /// it as an "inner" part, which is pre-colored. @@ -41,8 +38,6 @@ var/use_custom_mod_icon ///If defined, the accessory will be only available to ckeys inside the list. ITS ASSOCIATIVE, ie. ("ckey" = TRUE). For speed var/list/ckey_whitelist - ///Whether this feature is genetic, and thus modifiable by DNA consoles - var/genetic = FALSE var/uses_emissives = FALSE var/color_layer_names /// If this sprite accessory will be inaccessable if ERP config is disabled @@ -91,18 +86,18 @@ var/list/colors switch(default_color) if(DEFAULT_PRIMARY) - colors = list(features["mcolor"]) + colors = list(features[FEATURE_MUTANT_COLOR]) if(DEFAULT_SECONDARY) - colors = list(features["mcolor2"]) + colors = list(features[FEATURE_MUTANT_COLOR_TWO]) if(DEFAULT_TERTIARY) - colors = list(features["mcolor3"]) + colors = list(features[FEATURE_MUTANT_COLOR_THREE]) if(DEFAULT_MATRIXED) - colors = list(features["mcolor"], features["mcolor2"], features["mcolor3"]) + colors = list(features[FEATURE_MUTANT_COLOR], features[FEATURE_MUTANT_COLOR_TWO], features[FEATURE_MUTANT_COLOR_THREE]) if(DEFAULT_SKIN_OR_PRIMARY) if(pref_species && !(TRAIT_USES_SKINTONES in pref_species.inherent_traits)) - colors = list(features["skin_color"]) + colors = list(features[FEATURE_SKIN_COLOR]) else - colors = list(features["mcolor"]) + colors = list(features[FEATURE_MUTANT_COLOR]) else colors = list(default_color) @@ -110,7 +105,6 @@ /datum/sprite_accessory/moth_markings key = "moth_markings" - generic = "Moth markings" // organ_type = /obj/item/organ/moth_markings // UNCOMMENT THIS IF THEY EVER FIX IT UPSTREAM, CAN'T BE BOTHERED TO FIX IT MYSELF /datum/sprite_accessory/moth_markings/is_hidden(mob/living/carbon/human/owner) @@ -133,12 +127,10 @@ /datum/sprite_accessory/caps key = "caps" - generic = "Caps" icon = 'icons/mob/human/species/mush_cap.dmi' relevent_layers = list(BODY_ADJ_LAYER) color_src = USE_ONE_COLOR organ_type = /obj/item/organ/mushroom_cap - genetic = TRUE /datum/sprite_accessory/caps/is_hidden(mob/living/carbon/human/human) if(((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR)) || (key in human.try_hide_mutant_parts)) @@ -158,7 +150,6 @@ /datum/sprite_accessory/lizard_markings key = "body_markings" - generic = "Body Markings" default_color = DEFAULT_TERTIARY /datum/sprite_accessory/lizard_markings/none @@ -173,7 +164,6 @@ em_block = TRUE key = "legs" color_src = null - genetic = TRUE /datum/sprite_accessory/legs/none name = NORMAL_LEGS diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm index 45968c80e18..c3708ea6941 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -1,10 +1,8 @@ /datum/sprite_accessory/ears key = "ears" - generic = "Ears" organ_type = /obj/item/organ/ears/mutant relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER) color_src = USE_MATRIXED_COLORS - genetic = TRUE /datum/sprite_accessory/ears/is_hidden(mob/living/carbon/human/wearer) if(!wearer.head) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm index 144a41f7102..259aeab5b71 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm @@ -2,10 +2,8 @@ icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi' default_color = "#FFFFFF" key = "fluff" - generic = "Fluff" recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT) relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) - genetic = TRUE organ_type = /obj/item/organ/fluff /datum/sprite_accessory/fluff/moth/none diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm index e5a4fe48b36..42f666b02c7 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm @@ -1,9 +1,7 @@ /datum/sprite_accessory/frills key = "frills" - generic = "Frills" default_color = DEFAULT_SECONDARY relevent_layers = list(BODY_ADJ_LAYER) - genetic = TRUE organ_type = /obj/item/organ/frills /datum/sprite_accessory/frills/is_hidden(mob/living/carbon/human/human) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm index 06988f66759..859aea8e6d2 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm @@ -66,7 +66,6 @@ special_x_dimension = TRUE //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE var/can_have_sheath = TRUE /datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/target_mob) @@ -140,7 +139,6 @@ special_x_dimension = TRUE default_color = DEFAULT_SKIN_OR_PRIMARY relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER) - genetic = TRUE var/has_size = TRUE /datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/target_mob) @@ -184,7 +182,6 @@ always_color_customizable = TRUE default_color = "#FFCCCC" relevent_layers = list(BODY_FRONT_LAYER) - genetic = TRUE var/alt_aroused = TRUE /datum/sprite_accessory/genital/vagina/none @@ -232,7 +229,6 @@ organ_type = /obj/item/organ/genital/womb associated_organ_slot = ORGAN_SLOT_WOMB key = ORGAN_SLOT_WOMB - genetic = TRUE /datum/sprite_accessory/genital/womb/none icon_state = "none" @@ -249,7 +245,6 @@ organ_type = /obj/item/organ/genital/anus associated_organ_slot = ORGAN_SLOT_ANUS key = ORGAN_SLOT_ANUS - genetic = TRUE /datum/sprite_accessory/genital/anus/none icon_state = "none" @@ -272,7 +267,6 @@ relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) has_skintone_shading = TRUE genital_location = CHEST - genetic = TRUE /datum/sprite_accessory/genital/breasts/none icon_state = "none" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm index 4309361c389..79007b5624c 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm @@ -1,9 +1,7 @@ /datum/sprite_accessory/head_accessory icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi' key = "head_acc" - generic = "Head Accessory" relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) - genetic = TRUE organ_type = /obj/item/organ/head_accessory /datum/sprite_accessory/head_accessory/none diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm index 90e9778b06e..ad567dae141 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm @@ -1,10 +1,8 @@ /datum/sprite_accessory/horns key = "horns" - generic = "Horns" relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER, BODY_ADJ_LAYER) icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi' default_color = "#555555" - genetic = TRUE organ_type = /obj/item/organ/horns /datum/sprite_accessory/horns/is_hidden(mob/living/carbon/human/wearer) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm index ec470d3f24c..41273d0aac8 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm @@ -6,7 +6,6 @@ icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi' color_src = null key = MUTANT_SYNTH_SCREEN - generic = "Screen" relevent_layers = list(BODY_FRONT_UNDER_CLOTHES) organ_type = /obj/item/organ/synth_screen @@ -148,9 +147,7 @@ default_color = DEFAULT_SECONDARY recommended_species = list(SPECIES_SYNTH) key = MUTANT_SYNTH_ANTENNA - generic = "Antenna" relevent_layers = list(BODY_ADJ_LAYER) - genetic = FALSE organ_type = /obj/item/organ/synth_antenna /datum/sprite_accessory/antenna/is_hidden(mob/living/carbon/human/wearer) @@ -203,7 +200,6 @@ color_src = null factual = FALSE key = MUTANT_SYNTH_CHASSIS - generic = "Chassis Type" /datum/sprite_accessory/synth_chassis/default name = "Default Chassis" @@ -295,7 +291,6 @@ color_src = null factual = FALSE key = MUTANT_SYNTH_HEAD - generic = "Head Type" /datum/sprite_accessory/synth_head/default name = "Default Head" 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 823be356de3..ae5e61a58d5 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 @@ -1,8 +1,6 @@ /datum/sprite_accessory/moth_antennae - generic = "Moth Antennae" key = "moth_antennae" relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE organ_type = /obj/item/organ/antennae /datum/sprite_accessory/moth_antennae/is_hidden(mob/living/carbon/human/wearer) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm index 4580dec4ab4..8a25f4c47d9 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm @@ -1,9 +1,7 @@ /datum/sprite_accessory/neck_accessory icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi' key = "neck_acc" - generic = "Neck Accessory" relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) - genetic = TRUE organ_type = /obj/item/organ/neck_accessory /datum/sprite_accessory/neck_accessory/none diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm index 7d2c909f3f0..5088ea867da 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm @@ -1,10 +1,8 @@ /datum/sprite_accessory/skrell_hair icon = 'modular_zubbers/master_files/icons/mob/sprite_accessory/skrell_hair.dmi' - generic = "Skrell Headtails" key = "skrell_hair" color_src = USE_MATRIXED_COLORS relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) - genetic = TRUE organ_type = /obj/item/organ/skrell_hair /datum/sprite_accessory/skrell_hair/is_hidden(mob/living/carbon/human/wearer) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm index 78fae956cd0..bc7814404e4 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm @@ -1,12 +1,10 @@ /datum/sprite_accessory/snouts key = "snout" - generic = "Snout" icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi' flags_for_organ = SPRITE_ACCESSORY_USE_MUZZLED_SPRITE organ_type = /obj/item/organ/snout recommended_species = list(SPECIES_MAMMAL, SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER) - genetic = TRUE /datum/sprite_accessory/snouts/is_hidden(mob/living/carbon/human/human) if((human.wear_mask?.flags_inv & HIDESNOUT) || (human.head?.flags_inv & HIDESNOUT)) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm index e78b1e19ffe..14a570a3794 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm @@ -1,10 +1,8 @@ /datum/sprite_accessory/spines key = "spines" - generic = "Spines" default_color = DEFAULT_SECONDARY recommended_species = list(SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER) - genetic = TRUE organ_type = /obj/item/organ/spines /datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm index bf4ae25b581..7dc74b487b5 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -1,10 +1,8 @@ /datum/sprite_accessory/tails key = "tail" - generic = "Tail" organ_type = /obj/item/organ/tail icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi' relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE /// Can we use this tail for the fluffy tail turf emote? var/fluffy = FALSE diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm index bae1bbf1856..8ac0c614642 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -7,13 +7,11 @@ */ /datum/sprite_accessory/wings icon = 'icons/mob/human/species/wings.dmi' - generic = "Wings" key = "wings" color_src = USE_ONE_COLOR recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_LIZARD, SPECIES_MAMMAL) organ_type = /obj/item/organ/wings relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER, BODY_ADJ_LAYER) - genetic = TRUE /datum/sprite_accessory/wings/is_hidden(mob/living/carbon/human/wearer) if(!wearer.w_uniform && !wearer.wear_suit) @@ -160,7 +158,6 @@ /datum/sprite_accessory/wings/mammal/dragon/synth name = "Dragon (Synthetic)" icon_state = "dragonsynth" - genetic = FALSE /datum/sprite_accessory/wings/mammal/dragon/mechanical name = "Dragon (Mechanical)" diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm index 3b9ba173f38..971cc4530df 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm @@ -1,10 +1,8 @@ /datum/sprite_accessory/xenodorsal icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' - generic = "Dorsal Spines" key = "xenodorsal" color_src = USE_ONE_COLOR relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) - genetic = TRUE organ_type = /obj/item/organ/xenodorsal /datum/sprite_accessory/xenodorsal/none @@ -44,10 +42,8 @@ //HEADS /datum/sprite_accessory/xenohead icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi' - generic = "Caste Head" key = "xenohead" relevent_layers = list(BODY_ADJ_LAYER) - genetic = TRUE organ_type = /obj/item/organ/xenohead /datum/sprite_accessory/xenohead/none diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm index 70182233930..74b502195c9 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm @@ -178,7 +178,7 @@ GLOBAL_LIST_EMPTY(customizable_races) undershirt_overlay.color = species_human.undershirt_color standing += undershirt_overlay - if(species_human.socks && species_human.num_legs >= 2 && !(mutant_bodyparts["taur"]) && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SOCKS)) + if(species_human.socks && species_human.num_legs >= 2 && !(mutant_bodyparts[FEATURE_TAUR]) && !(species_human.underwear_visibility & UNDERWEAR_HIDE_SOCKS)) var/datum/sprite_accessory/socks/socks = SSaccessories.socks_list[species_human.socks] if(socks) var/mutable_appearance/socks_overlay diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm index 8c69e0ad3b9..80c7e0f8b05 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm @@ -89,20 +89,20 @@ main_color = "#DB35DE" secondary_color = "#BE3AFE" tertiary_color = "#F5E2EE" - features["mcolor"] = main_color - features["mcolor2"] = secondary_color - features["mcolor3"] = tertiary_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = secondary_color + features[FEATURE_MUTANT_COLOR_THREE] = tertiary_color return features /datum/species/akula/prepare_human_for_preview(mob/living/carbon/human/akula) var/main_color = "#1CD3E5" var/secondary_color = "#6AF1D6" var/tertiary_color = "#CCF6E2" - akula.dna.features["mcolor"] = main_color - akula.dna.features["mcolor2"] = secondary_color - akula.dna.features["mcolor3"] = tertiary_color - akula.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Akula", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) - akula.dna.features["legs"] = "Normal Legs" + akula.dna.features[FEATURE_MUTANT_COLOR] = main_color + akula.dna.features[FEATURE_MUTANT_COLOR_TWO] = secondary_color + akula.dna.features[FEATURE_MUTANT_COLOR_THREE] = tertiary_color + akula.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Akula", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) + akula.dna.features[FEATURE_LEGS] = "Normal Legs" regenerate_organs(akula, src, visual_only = TRUE) akula.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm index 833ea22dbe7..37ca6a84ab5 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm @@ -63,9 +63,9 @@ if(5) main_color = "#444444" second_color = "#DDDDEE" - features["mcolor"] = main_color - features["mcolor2"] = second_color - features["mcolor3"] = second_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = second_color + features[FEATURE_MUTANT_COLOR_THREE] = second_color return features /datum/species/aquatic/prepare_human_for_preview(mob/living/carbon/human/aquatic) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm index 0bdecf35227..e43c188173e 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm @@ -33,10 +33,10 @@ /datum/species/humanoid/prepare_human_for_preview(mob/living/carbon/human/human) var/main_color = "#722011" var/secondary_color = "#161616" - human.dna.features["mcolor"] = main_color - human.dna.features["mcolor2"] = main_color - human.dna.features["mcolor3"] = main_color - human.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list(secondary_color, secondary_color, secondary_color)) + human.dna.features[FEATURE_MUTANT_COLOR] = main_color + human.dna.features[FEATURE_MUTANT_COLOR_TWO] = main_color + human.dna.features[FEATURE_MUTANT_COLOR_THREE] = main_color + human.dna.mutant_bodyparts[FEATURE_HORNS] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list(secondary_color, secondary_color, secondary_color)) human.hairstyle = "Cornrows" human.hair_color = "#2b2b2b" regenerate_organs(human, src, visual_only = TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm index 74d877c38dd..0b8d95f6c35 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm @@ -45,8 +45,8 @@ /datum/species/insect/prepare_human_for_preview(mob/living/carbon/human/human) var/main_color = "#644b07" var/secondary_color = "#9b9b9b" - human.dna.features["mcolor"] = main_color - human.dna.features["mcolor2"] = secondary_color - human.dna.features["mcolor3"] = secondary_color + human.dna.features[FEATURE_MUTANT_COLOR] = main_color + human.dna.features[FEATURE_MUTANT_COLOR_TWO] = secondary_color + human.dna.features[FEATURE_MUTANT_COLOR_THREE] = secondary_color regenerate_organs(human, src, visual_only = TRUE) human.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm index f2b938b7e47..130f4077090 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm @@ -42,18 +42,18 @@ if(3) //Third case, more randomisation second_color = "#[random_color()]" third_color = "#[random_color()]" - features["mcolor"] = main_color - features["mcolor2"] = second_color - features["mcolor3"] = third_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = second_color + features[FEATURE_MUTANT_COLOR_THREE] = third_color return features /datum/species/lizard/prepare_human_for_preview(mob/living/carbon/human/lizard, lizard_color = "#009999") - lizard.dna.features["mcolor"] = lizard_color - lizard.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) - lizard.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) - lizard.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) - lizard.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) - lizard.dna.features["legs"] = "Normal Legs" + lizard.dna.features[FEATURE_MUTANT_COLOR] = lizard_color + lizard.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) + lizard.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) + lizard.dna.mutant_bodyparts[FEATURE_HORNS] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) + lizard.dna.mutant_bodyparts[FEATURE_FRILLS] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list(lizard_color, lizard_color, lizard_color)) + lizard.dna.features[FEATURE_LEGS] = "Normal Legs" regenerate_organs(lizard, src, visual_only = TRUE) lizard.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm index 549a7cbad56..0ce9f1694fe 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm @@ -76,9 +76,9 @@ main_color = "#[random_color()]" second_color = "#[random_color()]" third_color = "#[random_color()]" - features["mcolor"] = main_color - features["mcolor2"] = second_color - features["mcolor3"] = third_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = second_color + features[FEATURE_MUTANT_COLOR_THREE] = third_color return features /datum/species/mammal/get_random_body_markings(list/passed_features) @@ -106,11 +106,11 @@ /datum/species/mammal/prepare_human_for_preview(mob/living/carbon/human/human) var/main_color = "#333333" var/secondary_color = "#b8b8b8" - human.dna.features["mcolor"] = main_color - human.dna.features["mcolor2"] = secondary_color - human.dna.features["mcolor3"] = secondary_color - human.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, "#464646")) - human.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, secondary_color)) - human.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(main_color, "#4D4D4D", secondary_color)) + human.dna.features[FEATURE_MUTANT_COLOR] = main_color + human.dna.features[FEATURE_MUTANT_COLOR_TWO] = secondary_color + human.dna.features[FEATURE_MUTANT_COLOR_THREE] = secondary_color + human.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, "#464646")) + human.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, secondary_color)) + human.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(main_color, "#4D4D4D", secondary_color)) regenerate_organs(human, src, visual_only = TRUE) human.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm index bfffcb09b46..f4ae8494c8e 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm @@ -5,11 +5,11 @@ /datum/species/monkey/randomize_features() var/list/features = ..() - features["tail"] = pick(SSaccessories.tails_list_monkey - list("None")) // No tail-less monkeys. + features[FEATURE_TAIL_GENERIC] = pick(SSaccessories.tails_list_monkey - list("None")) // No tail-less monkeys. return features /datum/species/monkey/prepare_human_for_preview(mob/living/carbon/human/monke) - monke.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Monkey", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) + monke.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Monkey", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF")) regenerate_organs(monke, src, visual_only = TRUE) monke.update_body(is_creating = TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm index be428a6a6f3..882c33ad16c 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm @@ -15,7 +15,7 @@ /datum/species/moth/randomize_features() var/list/features = ..() - features["mcolor"] = "#E5CD99" + features[FEATURE_MUTANT_COLOR] = "#E5CD99" return features /datum/species/moth/get_random_body_markings(list/passed_features) @@ -34,9 +34,9 @@ return markings /datum/species/moth/prepare_human_for_preview(mob/living/carbon/human/moth) - moth.dna.features["mcolor"] = "#E5CD99" - moth.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) - moth.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) - moth.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Plain)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + moth.dna.features[FEATURE_MUTANT_COLOR] = "#E5CD99" + moth.dna.mutant_bodyparts[FEATURE_MOTH_ANTENNAE] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + moth.dna.mutant_bodyparts[FEATURE_MOTH_MARKINGS] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) + moth.dna.mutant_bodyparts[FEATURE_WINGS] = list(MUTANT_INDEX_NAME = "Moth (Plain)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) regenerate_organs(moth, src, visual_only = TRUE) moth.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm index c35edf303a4..8644e74313a 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm @@ -5,10 +5,10 @@ /datum/species/mush/randomize_features() var/list/features = ..() - features["caps"] = pick(SSaccessories.caps_list - list("None")) // No tail-less monkeys. // No cap-less mushpeople. + features[FEATURE_MUSH_CAP] = pick(SSaccessories.caps_list - list("None")) // No tail-less monkeys. // No cap-less mushpeople. return features /datum/species/mush/prepare_human_for_preview(mob/living/carbon/human/shrooman) - shrooman.dna.mutant_bodyparts["caps"] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list("#FF4B19")) + shrooman.dna.mutant_bodyparts[FEATURE_MUSH_CAP] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list("#FF4B19")) regenerate_organs(shrooman, src, visual_only = TRUE) shrooman.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm index b2f84094240..3d7c34a6da6 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm @@ -51,7 +51,7 @@ /datum/species/pod/prepare_human_for_preview(mob/living/carbon/human/human) - human.dna.features["mcolor"] = COLOR_OLIVE_GREEN - human.dna.mutant_bodyparts["pod_hair"] = list(MUTANT_INDEX_NAME = "Ivy", MUTANT_INDEX_COLOR_LIST = list("#9E4141")) + human.dna.features[FEATURE_MUTANT_COLOR] = COLOR_OLIVE_GREEN + human.dna.mutant_bodyparts[FEATURE_POD_HAIR] = list(MUTANT_INDEX_NAME = "Ivy", MUTANT_INDEX_COLOR_LIST = list("#9E4141")) regenerate_organs(human, src, visual_only = TRUE) human.update_body(is_creating = TRUE) 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 9b48c815950..da3d1a488fc 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 @@ -17,7 +17,7 @@ ) /datum/species/jelly/get_species_description() - return placeholder_description + return list(placeholder_description,) /datum/species/jelly/get_species_lore() return list(placeholder_lore) @@ -127,8 +127,6 @@ ), tooltips = TRUE, ) - if(!selected_alteration) - return switch(selected_alteration) if("Body Colours") alter_colours(alterer) @@ -155,24 +153,23 @@ ), tooltips = TRUE, ) - if(!color_choice) - return var/color_target switch(color_choice) if("Primary", "All") - color_target = "mcolor" + color_target = FEATURE_MUTANT_COLOR if("Secondary") - color_target = "mcolor2" + color_target = FEATURE_MUTANT_COLOR_TWO if("Tertiary") - color_target = "mcolor3" + color_target = FEATURE_MUTANT_COLOR_THREE + else + return - // BUBBERSTATION EDIT START: TGUI COLOR PICKER var/new_mutant_colour = tgui_color_picker( alterer, "Choose your character's new [color_choice = "All" ? "" : LOWER_TEXT(color_choice)] color:", "Form Alteration", alterer.dna.features[color_target] - ) // BUBBERSTATION EDIT END: TGUI COLOR PICKER + ) if(!new_mutant_colour) return @@ -196,21 +193,21 @@ ) if(color_choice == "All") - alterer.dna.features["mcolor"] = sanitize_hexcolor(new_mutant_colour) - alterer.dna.features["mcolor2"] = sanitize_hexcolor(new_mutant_colour) - alterer.dna.features["mcolor3"] = sanitize_hexcolor(new_mutant_colour) - alterer.dna.update_uf_block(DNA_MUTANT_COLOR_BLOCK) - alterer.dna.update_uf_block(DNA_MUTANT_COLOR_2_BLOCK) - alterer.dna.update_uf_block(DNA_MUTANT_COLOR_3_BLOCK) + alterer.dna.features[FEATURE_MUTANT_COLOR] = sanitize_hexcolor(new_mutant_colour) + alterer.dna.features[FEATURE_MUTANT_COLOR_TWO] = sanitize_hexcolor(new_mutant_colour) + alterer.dna.features[FEATURE_MUTANT_COLOR_THREE] = sanitize_hexcolor(new_mutant_colour) + alterer.dna.update_uf_block(/datum/dna_block/feature/mutant_color) + alterer.dna.update_uf_block(/datum/dna_block/feature/mutant_color/two) + alterer.dna.update_uf_block(/datum/dna_block/feature/mutant_color/three) else alterer.dna.features[color_target] = sanitize_hexcolor(new_mutant_colour) switch(color_target) - if("mcolor") - alterer.dna.update_uf_block(DNA_MUTANT_COLOR_BLOCK) - if("mcolor2") - alterer.dna.update_uf_block(DNA_MUTANT_COLOR_2_BLOCK) - if("mcolor3") - alterer.dna.update_uf_block(DNA_MUTANT_COLOR_3_BLOCK) + if(FEATURE_MUTANT_COLOR) + alterer.dna.update_uf_block(/datum/dna_block/feature/mutant_color) + if(FEATURE_MUTANT_COLOR_TWO) + alterer.dna.update_uf_block(/datum/dna_block/feature/mutant_color/two) + if(FEATURE_MUTANT_COLOR_THREE) + alterer.dna.update_uf_block(/datum/dna_block/feature/mutant_color/three) if(marking_reset == "Yes") for(var/zone in alterer.dna.species.body_markings) @@ -272,7 +269,7 @@ var/hair_area = tgui_alert(alterer, "Select which color you would like to change", "Hair Color Alterations", list("Hairstyle", "Facial Hair", "Both")) if(!hair_area) return - var/new_hair_color = tgui_color_picker(alterer, "Select your new hair color", "Hair Color Alterations", alterer.dna.features["mcolor"]) // BUBBERSTATION EDIT: TGUI COLOR PICKER + var/new_hair_color = tgui_color_picker(alterer, "Select your new hair color", "Hair Color Alterations", alterer.dna.features[FEATURE_MUTANT_COLOR]) if(!new_hair_color) return @@ -342,15 +339,16 @@ * This can be adding (or removing) things like ears, tails, wings, et cetera. */ /datum/action/innate/alter_form/proc/alter_parts(mob/living/carbon/human/alterer) - var/list/key_list = alterer.dna.mutant_bodyparts - if(CONFIG_GET(flag/disable_erp_preferences)) - for(var/erp_part in ORGAN_ERP_LIST) - key_list -= erp_part + var/list/mutant_part_list = list() + for(var/datum/dna_block/feature/mutant/block as anything in subtypesof(/datum/dna_block/feature/mutant)) + if(CONFIG_GET(flag/disable_erp_preferences) && (block::feature_key in ORGAN_ERP_LIST)) + continue + mutant_part_list[block::feature_key] = block var/chosen_key = tgui_input_list( alterer, "Select the part you want to alter", "Body Part Alterations", - key_list, + mutant_part_list, ) if(!chosen_key) return @@ -407,7 +405,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(SSaccessories.dna_mutant_bodypart_blocks[chosen_key]) + alterer.dna.update_uf_block(mutant_part_list[chosen_key]) alterer.update_body_parts() alterer.update_clothing(ALL) // for any clothing that has alternate versions (e.g. muzzled masks) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm index e4622bde0e0..b727a3269c9 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm @@ -62,17 +62,17 @@ main_color = "#22BBFF" if(6) main_color = "#2266FF" - features["mcolor"] = main_color - features["mcolor2"] = main_color - features["mcolor3"] = main_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = main_color + features[FEATURE_MUTANT_COLOR_THREE] = main_color return features /datum/species/skrell/prepare_human_for_preview(mob/living/carbon/human/skrell) var/skrell_color = "#22BBFF" - skrell.dna.features["mcolor"] = skrell_color - skrell.dna.features["mcolor2"] = skrell_color - skrell.dna.features["mcolor3"] = skrell_color - skrell.dna.mutant_bodyparts["skrell_hair"] = list(MUTANT_INDEX_NAME = "Female (Long)", MUTANT_INDEX_COLOR_LIST = list(skrell_color, skrell_color, skrell_color)) + skrell.dna.features[FEATURE_MUTANT_COLOR] = skrell_color + skrell.dna.features[FEATURE_MUTANT_COLOR_TWO] = skrell_color + skrell.dna.features[FEATURE_MUTANT_COLOR_THREE] = skrell_color + skrell.dna.mutant_bodyparts[FEATURE_SKRELL_HAIR] = list(MUTANT_INDEX_NAME = "Female (Long)", MUTANT_INDEX_COLOR_LIST = list(skrell_color, skrell_color, skrell_color)) regenerate_organs(skrell, src, visual_only = TRUE) skrell.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm index 57301726cad..5c0f43c7aaf 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm @@ -60,9 +60,9 @@ if(5) main_color = "#DDCC99" second_color = "#DDCCAA" - features["mcolor"] = main_color - features["mcolor2"] = second_color - features["mcolor3"] = second_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = second_color + features[FEATURE_MUTANT_COLOR_THREE] = second_color return features /datum/species/tajaran/get_random_body_markings(list/passed_features) @@ -83,11 +83,11 @@ var/main_color = "#AA9988" var/second_color = "#AAAA99" - cat.dna.features["mcolor"] = main_color - cat.dna.features["mcolor2"] = second_color - cat.dna.features["mcolor3"] = second_color - cat.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Mammal, Short", MUTANT_INDEX_COLOR_LIST = list(main_color, main_color, main_color)) - cat.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(second_color, main_color, main_color)) - cat.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat, normal", MUTANT_INDEX_COLOR_LIST = list(main_color, second_color, second_color)) + cat.dna.features[FEATURE_MUTANT_COLOR] = main_color + cat.dna.features[FEATURE_MUTANT_COLOR_TWO] = second_color + cat.dna.features[FEATURE_MUTANT_COLOR_THREE] = second_color + cat.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Mammal, Short", MUTANT_INDEX_COLOR_LIST = list(main_color, main_color, main_color)) + cat.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(second_color, main_color, main_color)) + cat.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Cat, normal", MUTANT_INDEX_COLOR_LIST = list(main_color, second_color, second_color)) regenerate_organs(cat, src, visual_only = TRUE) cat.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm index ff3f78f4d20..2aebc568caa 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm @@ -62,9 +62,9 @@ if(5) main_color = "#33BB11" second_color = "#339911" - features["mcolor"] = main_color - features["mcolor2"] = second_color - features["mcolor3"] = second_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = second_color + features[FEATURE_MUTANT_COLOR_THREE] = second_color return features /datum/species/unathi/get_species_description() diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm index b2ab92bcdf1..c4dedd42890 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm @@ -64,9 +64,9 @@ /datum/species/vox/randomize_features() var/list/features = ..() - features["mcolor"] = pick("#77DD88", "#77DDAA", "#77CCDD", "#77DDCC") - features["mcolor2"] = pick("#EEDD88", "#EECC88") - features["mcolor3"] = pick("#222222", "#44EEFF", "#44FFBB", "#8844FF", "#332233") + features[FEATURE_MUTANT_COLOR] = pick("#77DD88", "#77DDAA", "#77CCDD", "#77DDCC") + features[FEATURE_MUTANT_COLOR_TWO] = pick("#EEDD88", "#EECC88") + features[FEATURE_MUTANT_COLOR_THREE] = pick("#222222", "#44EEFF", "#44FFBB", "#8844FF", "#332233") return features /datum/species/vox/get_random_body_markings(list/passed_features) @@ -97,9 +97,9 @@ return list(placeholder_lore) /datum/species/vox/prepare_human_for_preview(mob/living/carbon/human/vox) - vox.dna.features["mcolor"] = "#77DD88" - vox.dna.features["mcolor2"] = "#EEDD88" - vox.dna.features["mcolor3"] = "#222222" - vox.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Vox Snout", MUTANT_INDEX_COLOR_LIST = list("#EEDD88")) + vox.dna.features[FEATURE_MUTANT_COLOR] = "#77DD88" + vox.dna.features[FEATURE_MUTANT_COLOR_TWO] = "#EEDD88" + vox.dna.features[FEATURE_MUTANT_COLOR_THREE] = "#222222" + vox.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Vox Snout", MUTANT_INDEX_COLOR_LIST = list("#EEDD88")) regenerate_organs(vox, src, visual_only = TRUE) vox.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm index bfde745678b..c93ac12c112 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm @@ -104,9 +104,9 @@ if(5) main_color = "#999999" second_color = "#EEEEEE" - features["mcolor"] = main_color - features["mcolor2"] = second_color - features["mcolor3"] = second_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = second_color + features[FEATURE_MUTANT_COLOR_THREE] = second_color return features /datum/species/vulpkanin/get_random_body_markings(list/passed_features) @@ -127,11 +127,11 @@ var/main_color = "#FF8800" var/second_color = "#FFFFFF" - vulp.dna.features["mcolor"] = main_color - vulp.dna.features["mcolor2"] = second_color - vulp.dna.features["mcolor3"] = second_color - vulp.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Mammal, Long", MUTANT_INDEX_COLOR_LIST = list(main_color, main_color, main_color)) - vulp.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(second_color, main_color, main_color)) - vulp.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Wolf", MUTANT_INDEX_COLOR_LIST = list(main_color, second_color, second_color)) + vulp.dna.features[FEATURE_MUTANT_COLOR] = main_color + vulp.dna.features[FEATURE_MUTANT_COLOR_TWO] = second_color + vulp.dna.features[FEATURE_MUTANT_COLOR_THREE] = second_color + vulp.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "Mammal, Long", MUTANT_INDEX_COLOR_LIST = list(main_color, main_color, main_color)) + vulp.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Husky", MUTANT_INDEX_COLOR_LIST = list(second_color, main_color, main_color)) + vulp.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Wolf", MUTANT_INDEX_COLOR_LIST = list(main_color, second_color, second_color)) regenerate_organs(vulp, src, visual_only = TRUE) vulp.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm index 5cc626eeccb..3abfb85770f 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm @@ -73,12 +73,12 @@ /datum/species/xeno/prepare_human_for_preview(mob/living/carbon/human/xeno) var/xeno_color = "#525288" - xeno.dna.features["mcolor"] = xeno_color + xeno.dna.features[FEATURE_MUTANT_COLOR] = xeno_color xeno.eye_color_left = "#30304F" xeno.eye_color_right = "#30304F" - xeno.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Xenomorph Tail", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) - xeno.dna.mutant_bodyparts["xenodorsal"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color)) - xeno.dna.mutant_bodyparts["xenohead"] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) + xeno.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Xenomorph Tail", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) + xeno.dna.mutant_bodyparts[FEATURE_XENODORSAL] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color)) + xeno.dna.mutant_bodyparts[FEATURE_XENOHEAD] = list(MUTANT_INDEX_NAME = "Standard", MUTANT_INDEX_COLOR_LIST = list(xeno_color, xeno_color, xeno_color)) regenerate_organs(xeno, src, visual_only = TRUE) xeno.update_body(TRUE) diff --git a/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm b/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm index e6f56dd42bc..a3e23695e69 100644 --- a/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm +++ b/modular_skyrat/modules/customization/subsytem/sprite_accessories.dm @@ -9,16 +9,3 @@ 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/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm index c1f99e43d6a..5d74a64471c 100644 --- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm +++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm @@ -14,10 +14,10 @@ if(ishuman(user)) //feet - if(!(human_user.bodyshape & BODYSHAPE_DIGITIGRADE) && !(human_user.dna.species.mutant_bodyparts["taur"])) + if(!(human_user.bodyshape & BODYSHAPE_DIGITIGRADE) && !(human_user.dna.species.mutant_bodyparts[FEATURE_TAUR])) user.allowed_turfs += "footprint" - if((human_user.bodyshape & BODYSHAPE_DIGITIGRADE) || human_user.dna.species.mutant_bodyparts["taur"]) + if((human_user.bodyshape & BODYSHAPE_DIGITIGRADE) || human_user.dna.species.mutant_bodyparts[FEATURE_TAUR]) user.allowed_turfs += list("pawprint", "hoofprint", "clawprint") //species & taurs @@ -45,7 +45,7 @@ user.allowed_turfs += "vines" if(issynthetic(user)) - if(human_user.dna.species.mutant_bodyparts["taur"]) + if(human_user.dna.species.mutant_bodyparts[FEATURE_TAUR]) user.allowed_turfs += "holobed" //taurs get the holobed instead else user.allowed_turfs += "holoseat" @@ -58,8 +58,8 @@ //body parts if(istype(user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail)) - var/name = human_user.dna.species.mutant_bodyparts["tail"][MUTANT_INDEX_NAME] - var/datum/sprite_accessory/tails/tail = SSaccessories.sprite_accessories["tail"][name] + var/name = human_user.dna.species.mutant_bodyparts[FEATURE_TAIL_GENERIC][MUTANT_INDEX_NAME] + var/datum/sprite_accessory/tails/tail = SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC][name] if(tail.fluffy) user.allowed_turfs += "tails" @@ -70,7 +70,7 @@ //clothing var/obj/item/shoes = user.get_item_by_slot(ITEM_SLOT_FEET) if(istype(shoes, /obj/item/clothing/shoes)) - if(!human_user.dna.species.mutant_bodyparts["taur"]) + if(!human_user.dna.species.mutant_bodyparts[FEATURE_TAUR]) user.allowed_turfs += "shoeprint" if(issilicon(user)) @@ -108,9 +108,9 @@ var/list/colorable = list("dust", "slime", "vines", "footprint", "pawprint", "hoofprint", "clawprint") if(current_turf in colorable) //These turfs are simply colored after their owner's primary if(ishumanbasic(user) || ishumanoid(user)) - user.owned_turf.color = human_user.dna.features["skin_color"] + user.owned_turf.color = human_user.dna.features[FEATURE_SKIN_COLOR] else - user.owned_turf.color = human_user.dna.features["mcolor"] + user.owned_turf.color = human_user.dna.features[FEATURE_MUTANT_COLOR] var/list/body_part = list("tails") diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm index f36ae0f6baf..4db1c45cda9 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm @@ -97,7 +97,7 @@ user.cut_overlay(user.overlays_standing[VAGINA_LAYER]) // I did this shit with taur icons on purpose because fuck skyrat's system with taurs, it's dumb and maybe dumber than me I CANT DO THIS ANYMORE WHY THIS OVERLAPPING WITH MY SPRITES AAAAAARGH - if(user.dna.species.mutant_bodyparts["taur"] && src == user.anus) + if(user.dna.species.mutant_bodyparts[FEATURE_TAUR] && src == user.anus) user.cut_overlay(user.overlays_standing[ANUS_LAYER]) /obj/item/clothing/sextoy/buttplug/dropped(mob/user, slot) diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm index f6078d6b80f..5c3191fb674 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm @@ -117,7 +117,7 @@ ropee.set_greyscale(rope.greyscale_colors) rope.use(1) add_overlay(shibari_shadow_overlay) - add_rope_overlays(ropee.greyscale_colors, hooman?.dna?.species?.mutant_bodyparts["taur"]) + add_rope_overlays(ropee.greyscale_colors, hooman?.dna?.species?.mutant_bodyparts[FEATURE_TAUR]) buckled.visible_message(span_warning("[user] tied [buckled] to \the [src]!"),\ span_userdanger("[user] tied you to \the [src]!"),\ span_hear("You hear ropes being completely tightened.")) diff --git a/modular_skyrat/modules/primitive_catgirls/code/species.dm b/modular_skyrat/modules/primitive_catgirls/code/species.dm index 99b73e2ef2c..c317b0febc5 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/species.dm +++ b/modular_skyrat/modules/primitive_catgirls/code/species.dm @@ -60,8 +60,8 @@ human_for_preview.skin_tone = "albino" human_for_preview.set_eye_color("#6ca580") - human_for_preview.dna.species.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) - human_for_preview.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Lynx", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) + human_for_preview.dna.species.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) + human_for_preview.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Lynx", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color)) regenerate_organs(human_for_preview, src, visual_only = TRUE) human_for_preview.update_body_parts() diff --git a/modular_skyrat/modules/salon/code/fur_dyer.dm b/modular_skyrat/modules/salon/code/fur_dyer.dm index 3897c79b13c..666edb3198b 100644 --- a/modular_skyrat/modules/salon/code/fur_dyer.dm +++ b/modular_skyrat/modules/salon/code/fur_dyer.dm @@ -64,11 +64,11 @@ if(do_after(user, 20 SECONDS, target_human)) switch(selected_mutant_color) if("One") - target_human.dna.features["mcolor"] = selected_color + target_human.dna.features[FEATURE_MUTANT_COLOR] = selected_color if("Two") - target_human.dna.features["mcolor1"] = selected_color + target_human.dna.features[FEATURE_MUTANT_COLOR_TWO] = selected_color if("Three") - target_human.dna.features["mcolor2"] = selected_color + target_human.dna.features[FEATURE_MUTANT_COLOR_THREE] = selected_color target_human.regenerate_icons() item_use_power(power_use_amount, user) diff --git a/modular_skyrat/modules/teshari/code/_teshari.dm b/modular_skyrat/modules/teshari/code/_teshari.dm index 248d139dc9b..3b5506bcf0d 100644 --- a/modular_skyrat/modules/teshari/code/_teshari.dm +++ b/modular_skyrat/modules/teshari/code/_teshari.dm @@ -66,9 +66,9 @@ var/base_color = "#c0965f" var/ear_color = "#e4c49b" - tesh.dna.features["mcolor"] = base_color - tesh.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Teshari Feathers Upright", MUTANT_INDEX_COLOR_LIST = list(ear_color, ear_color, ear_color)) - tesh.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Teshari (Default)", MUTANT_INDEX_COLOR_LIST = list(base_color, base_color, ear_color)) + tesh.dna.features[FEATURE_MUTANT_COLOR] = base_color + tesh.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Teshari Feathers Upright", MUTANT_INDEX_COLOR_LIST = list(ear_color, ear_color, ear_color)) + tesh.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Teshari (Default)", MUTANT_INDEX_COLOR_LIST = list(base_color, base_color, ear_color)) regenerate_organs(tesh, src, visual_only = TRUE) tesh.update_body(TRUE) diff --git a/modular_zubbers/code/datums/dna/blocks/dna_features_block.dm b/modular_zubbers/code/datums/dna/blocks/dna_features_block.dm new file mode 100644 index 00000000000..7cdeed9a4ba --- /dev/null +++ b/modular_zubbers/code/datums/dna/blocks/dna_features_block.dm @@ -0,0 +1,132 @@ +#define FEATURE_HASH_PART_START 1 +#define FEATURE_HASH_PART_END DNA_BLOCK_SIZE+1 +#define FEATURE_HASH_COLOR1_START FEATURE_HASH_PART_END +#define FEATURE_HASH_COLOR1_END FEATURE_HASH_COLOR1_START+DNA_BLOCK_SIZE_COLOR +#define FEATURE_HASH_COLOR2_START FEATURE_HASH_COLOR1_END +#define FEATURE_HASH_COLOR2_END FEATURE_HASH_COLOR2_START+DNA_BLOCK_SIZE_COLOR +#define FEATURE_HASH_COLOR3_START FEATURE_HASH_COLOR2_END +#define FEATURE_HASH_COLOR3_END FEATURE_HASH_COLOR3_START+DNA_BLOCK_SIZE_COLOR + +/datum/dna_block/feature + /// Determines whether to check dna.mutant_bodyparts instead of dna.features for an entry + var/mutant_part = FALSE + +/datum/dna_block/feature/mutant_color/two + block_length = DNA_BLOCK_SIZE_COLOR + feature_key = FEATURE_MUTANT_COLOR_TWO + +/datum/dna_block/feature/mutant_color/three + block_length = DNA_BLOCK_SIZE_COLOR + feature_key = FEATURE_MUTANT_COLOR_THREE + +/datum/dna_block/feature/skin_color + block_length = DNA_BLOCK_SIZE_COLOR + feature_key = FEATURE_SKIN_COLOR + +/datum/dna_block/feature/skin_color/create_unique_block(mob/living/carbon/human/target) + return sanitize_hexcolor(target.dna.features[feature_key], include_crunch = FALSE) + +/datum/dna_block/feature/skin_color/apply_to_mob(mob/living/carbon/human/target, dna_hash) + target.dna.features[feature_key] = sanitize_hexcolor(get_block(dna_hash)) + +/datum/dna_block/feature/mutant + block_length = DNA_FEATURE_BLOCKS_TOTAL_SIZE_PER_FEATURE + mutant_part = TRUE + abstract_type = /datum/dna_block/feature/mutant + +/datum/dna_block/feature/mutant/create_unique_block(mob/living/carbon/human/target) + if(isnull(target.dna.mutant_bodyparts[feature_key])) + return random_string(block_length, GLOB.hex_characters) + + var/list/accessories_for_key = SSaccessories.sprite_accessories[feature_key] + . = construct_block(accessories_for_key.Find(target.dna.mutant_bodyparts[feature_key][MUTANT_INDEX_NAME]), accessories_for_key.len) + var/colors_left = DNA_FEATURE_COLOR_BLOCKS_PER_FEATURE + for(var/color in target.dna.mutant_bodyparts[feature_key][MUTANT_INDEX_COLOR_LIST]) + colors_left-- + . += sanitize_hexcolor(color, include_crunch = FALSE) + if(colors_left) + . += random_string(DNA_BLOCK_SIZE_COLOR * colors_left, GLOB.hex_characters) + +/datum/dna_block/feature/mutant/apply_to_mob(mob/living/carbon/human/target, dna_hash) + var/our_block = get_block(dna_hash) + var/feature_portion = copytext(our_block, FEATURE_HASH_PART_START, FEATURE_HASH_PART_END) + var/accessory_index = deconstruct_block(feature_portion, length(SSaccessories.sprite_accessories[feature_key])) + var/list/color_portions = list( + sanitize_hexcolor(copytext(our_block, FEATURE_HASH_COLOR1_START, FEATURE_HASH_COLOR1_END)), + sanitize_hexcolor(copytext(our_block, FEATURE_HASH_COLOR2_START, FEATURE_HASH_COLOR2_END)), + sanitize_hexcolor(copytext(our_block, FEATURE_HASH_COLOR3_START, FEATURE_HASH_COLOR3_END)), + ) + target.dna.mutant_bodyparts[feature_key][MUTANT_INDEX_NAME] = SSaccessories.sprite_accessories[feature_key][accessory_index] + target.dna.mutant_bodyparts[feature_key][MUTANT_INDEX_COLOR_LIST] = color_portions + +/datum/dna_block/feature/mutant/tail_generic // fucking felinid tails being just called tail + feature_key = FEATURE_TAIL_GENERIC + +/datum/dna_block/feature/mutant/snout + feature_key = FEATURE_SNOUT + +/datum/dna_block/feature/mutant/horns + feature_key = FEATURE_HORNS + +/datum/dna_block/feature/mutant/ears + feature_key = FEATURE_EARS + +/datum/dna_block/feature/mutant/wings + feature_key = FEATURE_WINGS + +/datum/dna_block/feature/mutant/frills + feature_key = FEATURE_FRILLS + +/datum/dna_block/feature/mutant/spines + feature_key = FEATURE_SPINES + +/datum/dna_block/feature/mutant/caps + feature_key = FEATURE_MUSH_CAP + +/datum/dna_block/feature/mutant/moth_antennae + feature_key = FEATURE_MOTH_ANTENNAE + +/datum/dna_block/feature/mutant/legs + feature_key = FEATURE_LEGS + +/datum/dna_block/feature/mutant/fluff + feature_key = FEATURE_FLUFF + +/datum/dna_block/feature/mutant/penis + feature_key = FEATURE_PENIS + +/datum/dna_block/feature/mutant/testicles + feature_key = FEATURE_TESTICLES + +/datum/dna_block/feature/mutant/vagina + feature_key = FEATURE_VAGINA + +/datum/dna_block/feature/mutant/womb + feature_key = FEATURE_WOMB + +/datum/dna_block/feature/mutant/anus + feature_key = FEATURE_ANUS + +/datum/dna_block/feature/mutant/breasts + feature_key = FEATURE_BREASTS + +/datum/dna_block/feature/mutant/skrell_hair + feature_key = FEATURE_SKRELL_HAIR + +/datum/dna_block/feature/mutant/xenodorsal + feature_key = FEATURE_XENODORSAL + +/datum/dna_block/feature/mutant/xenohead + feature_key = FEATURE_XENOHEAD + +/datum/dna_block/feature/mutant/taur + feature_key = FEATURE_TAUR + +#undef FEATURE_HASH_PART_START +#undef FEATURE_HASH_PART_END +#undef FEATURE_HASH_COLOR1_START +#undef FEATURE_HASH_COLOR1_END +#undef FEATURE_HASH_COLOR2_START +#undef FEATURE_HASH_COLOR2_END +#undef FEATURE_HASH_COLOR3_START +#undef FEATURE_HASH_COLOR3_END diff --git a/modular_zubbers/code/datums/dna/dna.dm b/modular_zubbers/code/datums/dna/dna.dm new file mode 100644 index 00000000000..7c336fcccc7 --- /dev/null +++ b/modular_zubbers/code/datums/dna/dna.dm @@ -0,0 +1,34 @@ +/datum/dna + var/list/list/mutant_bodyparts = list() + features = MANDATORY_FEATURE_LIST + ///Body markings of the DNA's owner. This is for storing their original state for re-creating the character. They'll get changed on species mutation + var/list/list/body_markings = list() + ///Current body size, used for proper re-sizing and keeping track of that + var/current_body_size = BODY_SIZE_NORMAL + +/datum/dna/proc/update_body_size() + if(!holder || species.body_size_restricted || current_body_size == features["body_size"]) + return + var/change_multiplier = features["body_size"] / current_body_size + //We update the translation to make sure our character doesn't go out of the southern bounds of the tile + var/translate = ((change_multiplier-1) * 32)/2 + holder.transform = holder.transform.Scale(change_multiplier) + // Splits the updated translation into X and Y based on the user's rotation. + var/translate_x = translate * ( holder.transform.b / features["body_size"] ) + var/translate_y = translate * ( holder.transform.e / features["body_size"] ) + holder.transform = holder.transform.Translate(translate_x, translate_y) + holder.maptext_height = 32 * features["body_size"] // Adjust runechat height + current_body_size = features["body_size"] + +/mob/living/carbon/proc/apply_customizable_dna_features_to_species() + if(!has_dna()) + CRASH("[src] does not have DNA") + dna.species.body_markings = dna.body_markings.Copy() + var/list/bodyparts_to_add = dna.mutant_bodyparts.Copy() + for(var/key in bodyparts_to_add) + if(SSaccessories.sprite_accessories[key] && bodyparts_to_add[key] && bodyparts_to_add[key][MUTANT_INDEX_NAME]) + var/datum/sprite_accessory/SP = SSaccessories.sprite_accessories[key][bodyparts_to_add[key][MUTANT_INDEX_NAME]] + if(!SP?.factual) + bodyparts_to_add -= key + continue + dna.species.mutant_bodyparts = bodyparts_to_add.Copy() diff --git a/modular_zubbers/code/datums/dna/dna_block.dm b/modular_zubbers/code/datums/dna/dna_block.dm new file mode 100644 index 00000000000..8bdc0ee86b7 --- /dev/null +++ b/modular_zubbers/code/datums/dna/dna_block.dm @@ -0,0 +1,3 @@ +/datum/dna_block + /// Do not instantiate if type matches this. + var/abstract_type = /datum/dna_block diff --git a/modular_zubbers/code/modules/customization/sprite_accessories/ipc_screens.dm b/modular_zubbers/code/modules/customization/sprite_accessories/ipc_screens.dm index 9ef3f90af9b..f4d595b7888 100644 --- a/modular_zubbers/code/modules/customization/sprite_accessories/ipc_screens.dm +++ b/modular_zubbers/code/modules/customization/sprite_accessories/ipc_screens.dm @@ -2,7 +2,6 @@ icon = 'modular_zubbers/icons/mob/sprite_accesory/ipc_screens.dmi' color_src = null key = MUTANT_SYNTH_SCREEN - generic = "Screen" relevent_layers = list(BODY_FRONT_UNDER_CLOTHES) organ_type = /obj/item/organ/synth_screen diff --git a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/synthetic.dm b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/synthetic.dm index 6ec1267fd34..b874ce720d3 100644 --- a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/synthetic.dm +++ b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/synthetic.dm @@ -6,7 +6,6 @@ default_color = null name = "Synthetic Lizard - Snout" icon_state = "synthliz_basic" - genetic = FALSE /datum/sprite_accessory/snouts/synthliz/synthliz_under color_src = USE_MATRIXED_COLORS @@ -78,7 +77,6 @@ name = "Synthetic Lizard" icon_state = "synthliz" flags_for_organ = SPRITE_ACCESSORY_WAG_ABLE - genetic = FALSE spine_key = SPINE_KEY_LIZARD //Synth Antennae @@ -146,7 +144,6 @@ icon_state = "synthlizard" taur_mode = STYLE_TAUR_PAW recommended_species = list() - genetic = FALSE organ_type = /obj/item/organ/taur_body/horselike/synth can_lay_down = TRUE laydown_offset = -3 diff --git a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/taur_types.dm b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/taur_types.dm index 1339df2ed2a..481e3dad335 100644 --- a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/taur_types.dm +++ b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/taur_types.dm @@ -4,12 +4,12 @@ * Returns STYLE_TAUR_* or NONE. */ /mob/living/carbon/human/proc/get_taur_mode() - var/taur_mutant_bodypart = dna.species.mutant_bodyparts["taur"] + var/taur_mutant_bodypart = dna.species.mutant_bodyparts[FEATURE_TAUR] if(!taur_mutant_bodypart) return NONE var/bodypart_name = taur_mutant_bodypart[MUTANT_INDEX_NAME] - var/datum/sprite_accessory/taur/taur = SSaccessories.sprite_accessories["taur"][bodypart_name] + var/datum/sprite_accessory/taur/taur = SSaccessories.sprite_accessories[FEATURE_TAUR][bodypart_name] if(!taur) return NONE @@ -18,12 +18,10 @@ /datum/sprite_accessory/taur icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi' key = "taur" - generic = "Taur Type" color_src = USE_MATRIXED_COLORS dimension_x = 64 center = TRUE relevent_layers = list(BODY_FRONT_LAYER, BODY_ADJ_LAYER, BODY_FRONT_UNDER_CLOTHES, ABOVE_BODY_FRONT_HEAD_LAYER) - genetic = TRUE organ_type = /obj/item/organ/taur_body/horselike // horselike by default, dont forget to override if you make another bodytype flags_for_organ = SPRITE_ACCESSORY_HIDE_SHOES /// Must be a single specific tauric suit variation bitflag. Don't do FLAG_1|FLAG_2 diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/roundstartslime.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/roundstartslime.dm deleted file mode 100644 index 48b87d73d1a..00000000000 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/roundstartslime.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/species/jelly/get_species_description() - return list(placeholder_description,) diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm index 29f4736ef64..17e123ef98f 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/shadekin.dm @@ -81,21 +81,21 @@ main_color = "#DB35DE" secondary_color = "#BE3AFE" tertiary_color = "#F5E2EE" - features["mcolor"] = main_color - features["mcolor2"] = secondary_color - features["mcolor3"] = tertiary_color + features[FEATURE_MUTANT_COLOR] = main_color + features[FEATURE_MUTANT_COLOR_TWO] = secondary_color + features[FEATURE_MUTANT_COLOR_THREE] = tertiary_color return features /datum/species/shadekin/prepare_human_for_preview(mob/living/carbon/human/shadekin) var/main_color = "#222222" var/secondary_color = "#b8b8b8" var/tertiary_color = "#b8b8b8" - shadekin.dna.features["mcolor"] = main_color - shadekin.dna.features["mcolor2"] = secondary_color - shadekin.dna.features["mcolor3"] = tertiary_color - shadekin.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Shadekin", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) - shadekin.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) - shadekin.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Shadekin", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) + shadekin.dna.features[FEATURE_MUTANT_COLOR] = main_color + shadekin.dna.features[FEATURE_MUTANT_COLOR_TWO] = secondary_color + shadekin.dna.features[FEATURE_MUTANT_COLOR_THREE] = tertiary_color + shadekin.dna.mutant_bodyparts[FEATURE_EARS] = list(MUTANT_INDEX_NAME = "Shadekin", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) + shadekin.dna.mutant_bodyparts[FEATURE_SNOUT] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) + shadekin.dna.mutant_bodyparts[FEATURE_TAIL_GENERIC] = list(MUTANT_INDEX_NAME = "Shadekin", MUTANT_INDEX_COLOR_LIST = list(main_color, secondary_color, tertiary_color)) shadekin.set_eye_color("#5ec7e4") regenerate_organs(shadekin, src, visual_only = TRUE) shadekin.update_body(TRUE) diff --git a/modular_zubbers/modules/taur_mechanics/constrict.dm b/modular_zubbers/modules/taur_mechanics/constrict.dm index 235b275d494..38c7a0690a5 100644 --- a/modular_zubbers/modules/taur_mechanics/constrict.dm +++ b/modular_zubbers/modules/taur_mechanics/constrict.dm @@ -214,8 +214,8 @@ /obj/structure/serpentine_tail/proc/sync_sprite() //coloring var/list/finished_list = list() - var/list/color_list = owner.dna.species.mutant_bodyparts["taur"][MUTANT_INDEX_COLOR_LIST] //identify color - var/datum/sprite_accessory/sprite_type = SSaccessories.sprite_accessories["taur"][owner.dna.species.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]] //identify type + var/list/color_list = owner.dna.species.mutant_bodyparts[FEATURE_TAUR][MUTANT_INDEX_COLOR_LIST] //identify color + var/datum/sprite_accessory/sprite_type = SSaccessories.sprite_accessories["taur"][owner.dna.species.mutant_bodyparts[FEATURE_TAUR][MUTANT_INDEX_NAME]] //identify type switch(sprite_type.color_src) if(USE_MATRIXED_COLORS) diff --git a/tgstation.dme b/tgstation.dme index e0233a4eb80..babbdc27978 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -439,7 +439,6 @@ #include "code\__DEFINES\~skyrat_defines\computers.dm" #include "code\__DEFINES\~skyrat_defines\construction.dm" #include "code\__DEFINES\~skyrat_defines\customization.dm" -#include "code\__DEFINES\~skyrat_defines\DNA.dm" #include "code\__DEFINES\~skyrat_defines\economy.dm" #include "code\__DEFINES\~skyrat_defines\examine_defines.dm" #include "code\__DEFINES\~skyrat_defines\faction.dm" @@ -513,7 +512,7 @@ #include "code\__DEFINES\~~bubber_defines\colors.dm" #include "code\__DEFINES\~~bubber_defines\combat.dm" #include "code\__DEFINES\~~bubber_defines\cooldowns.dm" -#include "code\__DEFINES\~~bubber_defines\dna.dm" +#include "code\__DEFINES\~~bubber_defines\DNA.dm" #include "code\__DEFINES\~~bubber_defines\economy.dm" #include "code\__DEFINES\~~bubber_defines\experisci.dm" #include "code\__DEFINES\~~bubber_defines\footsteps.dm" @@ -7663,13 +7662,11 @@ #include "modular_skyrat\modules\curatorbundle\Mushy.dm" #include "modular_skyrat\modules\curatorbundle\Ronin.dm" #include "modular_skyrat\modules\customization\__DEFINES\lists.dm" -#include "modular_skyrat\modules\customization\__HELPERS\DNA.dm" #include "modular_skyrat\modules\customization\__HELPERS\global_lists.dm" #include "modular_skyrat\modules\customization\__HELPERS\mobs.dm" #include "modular_skyrat\modules\customization\__HELPERS\text.dm" #include "modular_skyrat\modules\customization\_globalvars\lists.dm" #include "modular_skyrat\modules\customization\_globalvars\names.dm" -#include "modular_skyrat\modules\customization\datums\dna.dm" #include "modular_skyrat\modules\customization\datums\components\crafting\clothing.dm" #include "modular_skyrat\modules\customization\datums\components\crafting\hemophage_recipes.dm" #include "modular_skyrat\modules\customization\datums\components\crafting\recipes.dm" @@ -8899,6 +8896,9 @@ #include "modular_zubbers\code\datums\computer_datums\protolathe_modifications.dm" #include "modular_zubbers\code\datums\diseases\advance\presets.dm" #include "modular_zubbers\code\datums\diseases\advance\transformation.dm" +#include "modular_zubbers\code\datums\dna\dna.dm" +#include "modular_zubbers\code\datums\dna\dna_block.dm" +#include "modular_zubbers\code\datums\dna\blocks\dna_features_block.dm" #include "modular_zubbers\code\datums\elements\examine_when_worn.dm" #include "modular_zubbers\code\datums\elements\nanite_organ.dm" #include "modular_zubbers\code\datums\greyscale\config_types\greyscale_configs\greyscale_clothes.dm" @@ -9474,7 +9474,6 @@ #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\mothmen.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\plasmamen.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\podpeople.dm" -#include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\roundstartslime.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\shadekin.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\shadowpeople.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\skeletons.dm"