From 8387a46d8562d3cc8ef20d895fb6a2e2329b742d Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Sat, 7 Sep 2024 23:18:16 +0200 Subject: [PATCH 1/3] fixes those dummie and random mob errors --- code/modules/mob/living/carbon/human/_species.dm | 2 +- .../customization/code/accessory_overrides_lizard.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 661c5fc7abbcd..4b12e8d42287d 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -573,7 +573,7 @@ GLOBAL_LIST_EMPTY(features_by_species) sample_overlay = new overlay_path() organs_to_randomize[overlay_path] = sample_overlay - new_features["[sample_overlay.feature_key]"] = sample_overlay.get_random_appearance().name + new_features["[sample_overlay.feature_key]"] = /datum/sprite_accessory/blank::name // DOPPLER EDIT - no more random features, old code: new_features["[sample_overlay.feature_key]"] = sample_overlay.get_random_appearance().name return new_features diff --git a/modular_doppler/customization/code/accessory_overrides_lizard.dm b/modular_doppler/customization/code/accessory_overrides_lizard.dm index 7ded20b493d71..ee9d5fb9f8a9b 100644 --- a/modular_doppler/customization/code/accessory_overrides_lizard.dm +++ b/modular_doppler/customization/code/accessory_overrides_lizard.dm @@ -393,7 +393,7 @@ //manually adding them now /datum/species/add_body_markings(mob/living/carbon/human/hooman) . = ..() - if(hooman.dna.features["lizard_markings"] && hooman.dna.features["lizard_markings"] != /datum/sprite_accessory/lizard_markings/none::name && hooman.dna.features["snout"] != /datum/sprite_accessory/blank::name) //loop through possible species markings + if((hooman.dna.features["lizard_markings"] && hooman.dna.features["lizard_markings"] != /datum/sprite_accessory/lizard_markings/none::name) && (hooman.client?.prefs.read_preference(/datum/preference/toggle/markings))) var/datum/bodypart_overlay/simple/body_marking/markings = new /datum/bodypart_overlay/simple/body_marking/lizard() // made to die... mostly because we cant use initial on lists but its convenient and organized var/accessory_name = hooman.dna.features[markings.dna_feature_key] //get the accessory name from dna var/datum/sprite_accessory/moth_markings/accessory = markings.get_accessory(accessory_name) //get the actual datum From f05dfd40b7f7eed2146eb333f89b3f5b1ac24125 Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Sat, 7 Sep 2024 23:53:41 +0200 Subject: [PATCH 2/3] CI please spare me --- code/~doppler_earliest_defines.dm | 10 +- .../customization/code/accessory_overrides.dm | 3 - .../code/accessory_overrides_lizard.dm | 418 ------------------ .../code/accessory_overrides_moth.dm | 81 ---- .../customization/code/custom_accessories.dm | 1 - .../customization/code/dropdowns_to_icons.dm | 1 - .../lizards/code/lizard_accessories.dm | 16 - .../species/lizards/code/lizard_species.dm | 1 - .../species/lizards/icons/bodyparts.dmi | Bin 182 -> 0 bytes .../species/lizards/icons/lizard_external.dmi | Bin 3382 -> 0 bytes .../accessories/code/body_markings_lizard.dm | 2 + .../accessories/code/frills.dm | 2 + .../accessories/code/horns.dm | 2 + .../code/overrides/code/overrides.dm | 16 + .../code/overrides}/icons/fallbacks.dmi | Bin .../accessories/code/snout.dm | 2 + .../accessories/code/tail_lizard.dm | 2 + .../accessories/icons/frills.dmi | Bin 0 -> 763 bytes .../accessories/icons/horns.dmi | Bin 0 -> 806 bytes .../accessories}/icons/lizard_markings.dmi | Bin .../accessories}/icons/lizard_tails.dmi | Bin .../accessories/icons/snout.dmi | Bin 0 -> 597 bytes .../bodypart}/bodypart_overrides.dm | 0 .../preferences/body_marking_lizard.dm | 87 ++++ .../preferences/body_marking_moth.dm | 25 ++ .../preferences/frills.dm | 62 +++ .../preferences/horns.dm | 62 +++ .../preferences/moth_antennae.dm | 25 ++ .../preferences/moth_wings.dm | 25 ++ .../preferences/snout.dm | 62 +++ .../modular_customization/preferences/tail.dm | 110 +++++ .../tri_color}/tri_color_prefs.dm | 0 .../tri_color}/tri_color_prefs_bespoke.dm | 0 .../species_types/monkey/monkeys.dm | 4 + .../primitive_demihuman.dm} | 0 .../slugcats}/icons/bodyparts.dmi | Bin .../slugcats}/icons/slugcat_external.dmi | Bin .../slugcats}/icons/slugcat_eyes.dmi | Bin .../slugcats}/icons/slugcat_markings.dmi | Bin .../slugcats}/icons/slugcat_tails.dmi | Bin .../species_types/slugcats/slugcat.dm} | 6 +- .../slugcats}/slugcat_accessories.dm | 10 +- .../slugcats}/slugcat_bodyparts.dm | 14 +- .../slugcats}/sounds/scugdeath.ogg | Bin .../slugcats}/sounds/scuglaugh_1.ogg | Bin .../slugcats}/sounds/scugscream_1.ogg | Bin tgstation.dme | 36 +- 47 files changed, 530 insertions(+), 555 deletions(-) delete mode 100644 modular_doppler/customization/code/accessory_overrides.dm delete mode 100644 modular_doppler/customization/code/accessory_overrides_lizard.dm delete mode 100644 modular_doppler/customization/code/accessory_overrides_moth.dm delete mode 100644 modular_doppler/customization/code/custom_accessories.dm delete mode 100644 modular_doppler/customization/code/dropdowns_to_icons.dm delete mode 100644 modular_doppler/customization/species/lizards/code/lizard_accessories.dm delete mode 100644 modular_doppler/customization/species/lizards/code/lizard_species.dm delete mode 100644 modular_doppler/customization/species/lizards/icons/bodyparts.dmi delete mode 100644 modular_doppler/customization/species/lizards/icons/lizard_external.dmi create mode 100644 modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm create mode 100644 modular_doppler/modular_customization/accessories/code/frills.dm create mode 100644 modular_doppler/modular_customization/accessories/code/horns.dm create mode 100644 modular_doppler/modular_customization/accessories/code/overrides/code/overrides.dm rename modular_doppler/{customization => modular_customization/accessories/code/overrides}/icons/fallbacks.dmi (100%) create mode 100644 modular_doppler/modular_customization/accessories/code/snout.dm create mode 100644 modular_doppler/modular_customization/accessories/code/tail_lizard.dm create mode 100644 modular_doppler/modular_customization/accessories/icons/frills.dmi create mode 100644 modular_doppler/modular_customization/accessories/icons/horns.dmi rename modular_doppler/{customization/species/lizards => modular_customization/accessories}/icons/lizard_markings.dmi (100%) rename modular_doppler/{customization/species/lizards => modular_customization/accessories}/icons/lizard_tails.dmi (100%) create mode 100644 modular_doppler/modular_customization/accessories/icons/snout.dmi rename modular_doppler/{customization/code => modular_customization/bodypart}/bodypart_overrides.dm (100%) create mode 100644 modular_doppler/modular_customization/preferences/body_marking_lizard.dm create mode 100644 modular_doppler/modular_customization/preferences/body_marking_moth.dm create mode 100644 modular_doppler/modular_customization/preferences/frills.dm create mode 100644 modular_doppler/modular_customization/preferences/horns.dm create mode 100644 modular_doppler/modular_customization/preferences/moth_antennae.dm create mode 100644 modular_doppler/modular_customization/preferences/moth_wings.dm create mode 100644 modular_doppler/modular_customization/preferences/snout.dm create mode 100644 modular_doppler/modular_customization/preferences/tail.dm rename modular_doppler/{customization/code => modular_customization/tri_color}/tri_color_prefs.dm (100%) rename modular_doppler/{customization/code => modular_customization/tri_color}/tri_color_prefs_bespoke.dm (100%) create mode 100644 modular_doppler/modular_species/species_types/monkey/monkeys.dm rename modular_doppler/{hearthkin/primitive_catgirls/code/species.dm => modular_species/species_types/primitive_demihuman/primitive_demihuman.dm} (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/icons/bodyparts.dmi (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/icons/slugcat_external.dmi (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/icons/slugcat_eyes.dmi (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/icons/slugcat_markings.dmi (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/icons/slugcat_tails.dmi (100%) rename modular_doppler/{customization/species/scugs/code/slugcat_species.dm => modular_species/species_types/slugcats/slugcat.dm} (96%) rename modular_doppler/{customization/species/scugs/code => modular_species/species_types/slugcats}/slugcat_accessories.dm (78%) rename modular_doppler/{customization/species/scugs/code => modular_species/species_types/slugcats}/slugcat_bodyparts.dm (58%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/sounds/scugdeath.ogg (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/sounds/scuglaugh_1.ogg (100%) rename modular_doppler/{customization/species/scugs => modular_species/species_types/slugcats}/sounds/scugscream_1.ogg (100%) diff --git a/code/~doppler_earliest_defines.dm b/code/~doppler_earliest_defines.dm index 4e8042c51c12d..de6c70013f424 100644 --- a/code/~doppler_earliest_defines.dm +++ b/code/~doppler_earliest_defines.dm @@ -1,26 +1,26 @@ /// Hi! This file is here to work around some order-of-operations issues consistent humans & a couple other things have. /// If our overrides aren't loaded in early enough default TG stuff will end up in the critical [1] slot and break things. /datum/sprite_accessory/lizard_markings/none - icon = 'modular_doppler/customization/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' name = "No Markings" icon_state = "none" /datum/sprite_accessory/snouts/none - icon = 'modular_doppler/customization/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' name = "No Snout" icon_state = "none" /datum/sprite_accessory/frills/none - icon = 'modular_doppler/customization/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' name = "No Frills" icon_state = "none" /datum/sprite_accessory/horns/none - icon = 'modular_doppler/customization/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' name = "No Horns" icon_state = "none" /datum/sprite_accessory/tails/lizard/none - icon = 'modular_doppler/customization/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' name = "No Tail" icon_state = "none" diff --git a/modular_doppler/customization/code/accessory_overrides.dm b/modular_doppler/customization/code/accessory_overrides.dm deleted file mode 100644 index d29dfe667f433..0000000000000 --- a/modular_doppler/customization/code/accessory_overrides.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/bodypart_overlay/mutant - /// Annoying annoying annoyed annoyance - this is to avoid a massive headache trying to work around tails - var/feature_key_sprite = null diff --git a/modular_doppler/customization/code/accessory_overrides_lizard.dm b/modular_doppler/customization/code/accessory_overrides_lizard.dm deleted file mode 100644 index ee9d5fb9f8a9b..0000000000000 --- a/modular_doppler/customization/code/accessory_overrides_lizard.dm +++ /dev/null @@ -1,418 +0,0 @@ -/datum/species/get_features() - var/list/features = ..() - - features += /datum/preference/choiced/lizard_snout - features += /datum/preference/choiced/lizard_frills - features += /datum/preference/choiced/lizard_horns - features += /datum/preference/choiced/lizard_tail - features += /datum/preference/choiced/lizard_body_markings - - GLOB.features_by_species[type] = features - - return features - - - - - -/// Snout fixing -/obj/item/organ/external/snout - name = "snout" - -/datum/bodypart_overlay/mutant/snout - layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 - -/datum/bodypart_overlay/mutant/snout/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) - overlay.color = limb.owner.dna.features["snout_color_1"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) - overlay.color = limb.owner.dna.features["snout_color_2"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) - overlay.color = limb.owner.dna.features["snout_color_3"] - return overlay - return ..() - -//core toggle -/datum/preference/toggle/snout - savefile_key = "has_snout" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES - priority = PREFERENCE_PRIORITY_DEFAULT - -/datum/preference/toggle/snout/apply_to_human(mob/living/carbon/human/target, value) - if(value == FALSE) - target.dna.features["snout"] = /datum/sprite_accessory/snouts/none::name - -/datum/preference/toggle/snout/create_default_value() - return FALSE - -/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) - . = ..() - if(target.dna.features["snout"]) - if(target.dna.features["snout"] != /datum/sprite_accessory/snouts/none::name && target.dna.features["snout"] != /datum/sprite_accessory/blank::name) - var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/snout) - replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - return . - var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_SNOUT) - if(old_part) - old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - old_part.moveToNullspace() - -//sprite selection -/datum/preference/choiced/lizard_snout - category = PREFERENCE_CATEGORY_CLOTHING - -/datum/preference/choiced/lizard_snout/is_accessible(datum/preferences/preferences) - . = ..() - var/has_snout = preferences.read_preference(/datum/preference/toggle/snout) - if(has_snout == TRUE) - return TRUE - return FALSE - -/datum/preference/choiced/lizard_snout/create_default_value() - return /datum/sprite_accessory/snouts/none::name - - - - - -/// Horns fixing -/obj/item/organ/external/horns - name = "horns" - -/datum/bodypart_overlay/mutant/horns - layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 - -/datum/bodypart_overlay/mutant/horns/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) - overlay.color = limb.owner.dna.features["horns_color_1"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) - overlay.color = limb.owner.dna.features["horns_color_2"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) - overlay.color = limb.owner.dna.features["horns_color_3"] - return overlay - return ..() - -//core toggle -/datum/preference/toggle/horns - savefile_key = "has_horns" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES - priority = PREFERENCE_PRIORITY_DEFAULT - -/datum/preference/toggle/horns/apply_to_human(mob/living/carbon/human/target, value) - if(value == FALSE) - target.dna.features["horns"] = /datum/sprite_accessory/horns/none::name - -/datum/preference/toggle/horns/create_default_value() - return FALSE - -/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) - . = ..() - if(target.dna.features["horns"]) - if(target.dna.features["horns"] != /datum/sprite_accessory/horns/none::name && target.dna.features["horns"] != /datum/sprite_accessory/blank::name) - var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/horns) - replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - return . - var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_HORNS) - if(old_part) - old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - old_part.moveToNullspace() - -//sprite selection -/datum/preference/choiced/lizard_horns - category = PREFERENCE_CATEGORY_CLOTHING - -/datum/preference/choiced/lizard_horns/is_accessible(datum/preferences/preferences) - . = ..() - var/has_horns = preferences.read_preference(/datum/preference/toggle/horns) - if(has_horns == TRUE) - return TRUE - return FALSE - -/datum/preference/choiced/lizard_horns/create_default_value() - return /datum/sprite_accessory/horns/none::name - - - - - -/// Frills fixing -/obj/item/organ/external/frills - name = "frills" - -/datum/bodypart_overlay/mutant/frills - layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 - -/datum/bodypart_overlay/mutant/frills/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) - overlay.color = limb.owner.dna.features["frills_color_1"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) - overlay.color = limb.owner.dna.features["frills_color_2"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) - overlay.color = limb.owner.dna.features["frills_color_3"] - return overlay - return ..() - -//core toggle -/datum/preference/toggle/frills - savefile_key = "has_frills" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES - priority = PREFERENCE_PRIORITY_DEFAULT - -/datum/preference/toggle/frills/apply_to_human(mob/living/carbon/human/target, value) - if(value == FALSE) - target.dna.features["frills"] = /datum/sprite_accessory/frills/none::name - -/datum/preference/toggle/frills/create_default_value() - return FALSE - -/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) - . = ..() - if(target.dna.features["frills"]) - if(target.dna.features["frills"] != /datum/sprite_accessory/frills/none::name && target.dna.features["frills"] != /datum/sprite_accessory/blank::name) - var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/frills) - replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - return . - var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_FRILLS) - if(old_part) - old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - old_part.moveToNullspace() - -//sprite selection -/datum/preference/choiced/lizard_frills - category = PREFERENCE_CATEGORY_CLOTHING - -/datum/preference/choiced/lizard_frills/is_accessible(datum/preferences/preferences) - . = ..() - var/has_frills = preferences.read_preference(/datum/preference/toggle/frills) - if(has_frills == TRUE) - return TRUE - return FALSE - -/datum/preference/choiced/lizard_frills/create_default_value() - return /datum/sprite_accessory/frills/none::name - - - - - -/// Tails fixing -/obj/item/organ/external/tail/lizard - name = "tail" - -/datum/bodypart_overlay/mutant/tail/lizard - layers = EXTERNAL_FRONT | EXTERNAL_FRONT_2 | EXTERNAL_FRONT_3 | EXTERNAL_BEHIND | EXTERNAL_BEHIND_2 | EXTERNAL_BEHIND_3 - feature_key_sprite = "tail" - -/datum/bodypart_overlay/mutant/tail/lizard/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - if(draw_layer == bitflag_to_layer(EXTERNAL_FRONT)) - overlay.color = limb.owner.dna.features["tail_color_1"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_BEHIND)) - overlay.color = limb.owner.dna.features["tail_color_1"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_FRONT_2)) - overlay.color = limb.owner.dna.features["tail_color_2"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_BEHIND_2)) - overlay.color = limb.owner.dna.features["tail_color_2"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_FRONT_3)) - overlay.color = limb.owner.dna.features["tail_color_3"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_BEHIND_3)) - overlay.color = limb.owner.dna.features["tail_color_3"] - return overlay - return ..() - -//core toggle -/datum/preference/toggle/tail - savefile_key = "has_tail" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES - priority = PREFERENCE_PRIORITY_DEFAULT - -/datum/preference/toggle/tail/apply_to_human(mob/living/carbon/human/target, value) - if(value == FALSE) - target.dna.features["tail_lizard"] = /datum/sprite_accessory/tails/lizard/none::name - -/datum/preference/toggle/tail/create_default_value() - return FALSE - -/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) - . = ..() - if(target == null) - return - if(target.dna.features["tail_lizard"]) - if(target.dna.features["tail_lizard"] != /datum/sprite_accessory/tails/lizard/none::name && target.dna.features["tail_lizard"] != /datum/sprite_accessory/blank::name) - var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/tail/lizard) - replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - return . - var/obj/item/organ/external/tail/lizard/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(istype(old_part)) - old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) - old_part.moveToNullspace() - -//sprite selection -/datum/preference/choiced/lizard_tail - category = PREFERENCE_CATEGORY_CLOTHING - relevant_external_organ = null - should_generate_icons = TRUE - main_feature_name = "Tail" - -/datum/preference/choiced/lizard_tail/is_accessible(datum/preferences/preferences) - . = ..() - var/has_tail = preferences.read_preference(/datum/preference/toggle/tail) - if(has_tail == TRUE) - return TRUE - return FALSE - -/datum/preference/choiced/lizard_tail/create_default_value() - return /datum/sprite_accessory/tails/lizard/none::name - -/datum/preference/choiced/lizard_tail/icon_for(value) - var/datum/sprite_accessory/sprite_accessory = SSaccessories.tails_list_lizard[value] - - var/icon/final_icon = icon('icons/mob/human/species/lizard/bodyparts.dmi', "lizard_chest_m", NORTH) - - if (sprite_accessory.icon_state != "none") - var/icon/markings_icon_1 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND", NORTH) - markings_icon_1.Blend(COLOR_RED, ICON_MULTIPLY) - var/icon/markings_icon_2 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND_2", NORTH) - markings_icon_2.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) - var/icon/markings_icon_3 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND_3", NORTH) - markings_icon_3.Blend(COLOR_BLUE, ICON_MULTIPLY) - final_icon.Blend(markings_icon_1, ICON_OVERLAY) - final_icon.Blend(markings_icon_2, ICON_OVERLAY) - final_icon.Blend(markings_icon_3, ICON_OVERLAY) - // front breaker - var/icon/markings_icon_1_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT", NORTH) - markings_icon_1_f.Blend(COLOR_RED, ICON_MULTIPLY) - var/icon/markings_icon_2_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT_2", NORTH) - markings_icon_2_f.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) - var/icon/markings_icon_3_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT_3", NORTH) - markings_icon_3_f.Blend(COLOR_BLUE, ICON_MULTIPLY) - final_icon.Blend(markings_icon_1_f, ICON_OVERLAY) - final_icon.Blend(markings_icon_2_f, ICON_OVERLAY) - final_icon.Blend(markings_icon_3_f, ICON_OVERLAY) - - //final_icon.Crop(4, 12, 28, 32) - //final_icon.Scale(32, 26) - //final_icon.Crop(-2, 1, 29, 32) - - return final_icon - - - - - -/// Standard bodymark fixing -/datum/bodypart_overlay/simple/body_marking/lizard - layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 - -/datum/bodypart_overlay/simple/body_marking/lizard/get_image(layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - var/gender_string = (use_gender && limb.is_dimorphic) ? (limb.gender == MALE ? MALE : FEMALE + "_") : "" //we only got male and female sprites - if(layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) - return image(icon, gender_string + icon_state + "_" + limb.body_zone + "_2", layer = layer) - if(layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) - return image(icon, gender_string + icon_state + "_" + limb.body_zone + "_3", layer = layer) - return image(icon, gender_string + icon_state + "_" + limb.body_zone, layer = layer) - -/datum/bodypart_overlay/simple/body_marking/lizard/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) - overlay.color = limb.owner.dna.features["body_markings_color_1"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) - overlay.color = limb.owner.dna.features["body_markings_color_2"] - return overlay - else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) - overlay.color = limb.owner.dna.features["body_markings_color_3"] - return overlay - return ..() - -/datum/preference/choiced/lizard_body_markings/create_default_value() - return /datum/sprite_accessory/lizard_markings/none::name - -//toggle prefs -/datum/preference/toggle/markings - savefile_key = "has_markings" - savefile_identifier = PREFERENCE_CHARACTER - category = PREFERENCE_CATEGORY_SECONDARY_FEATURES - priority = PREFERENCE_PRIORITY_DEFAULT - -/datum/preference/toggle/markings/apply_to_human(mob/living/carbon/human/target, value) - if(value == FALSE) - target.dna.features["lizard_markings"] = /datum/sprite_accessory/lizard_markings/none::name - -/datum/preference/toggle/markings/create_default_value() - return FALSE - -//toggle pref integration -/datum/preference/choiced/lizard_body_markings - category = PREFERENCE_CATEGORY_CLOTHING - -/datum/preference/choiced/lizard_body_markings/is_accessible(datum/preferences/preferences) - . = ..() - var/has_markings = preferences.read_preference(/datum/preference/toggle/markings) - if(has_markings == TRUE) - return TRUE - return FALSE - -//manually adding them now -/datum/species/add_body_markings(mob/living/carbon/human/hooman) - . = ..() - if((hooman.dna.features["lizard_markings"] && hooman.dna.features["lizard_markings"] != /datum/sprite_accessory/lizard_markings/none::name) && (hooman.client?.prefs.read_preference(/datum/preference/toggle/markings))) - var/datum/bodypart_overlay/simple/body_marking/markings = new /datum/bodypart_overlay/simple/body_marking/lizard() // made to die... mostly because we cant use initial on lists but its convenient and organized - var/accessory_name = hooman.dna.features[markings.dna_feature_key] //get the accessory name from dna - var/datum/sprite_accessory/moth_markings/accessory = markings.get_accessory(accessory_name) //get the actual datum - - if(isnull(accessory)) - CRASH("Value: [accessory_name] did not have a corresponding sprite accessory!") - - for(var/obj/item/bodypart/part as anything in markings.applies_to) //check through our limbs - var/obj/item/bodypart/people_part = hooman.get_bodypart(initial(part.body_zone)) // and see if we have a compatible marking for that limb - - if(!people_part) - continue - - var/datum/bodypart_overlay/simple/body_marking/overlay = new /datum/bodypart_overlay/simple/body_marking/lizard() - - // Tell the overlay what it should look like - overlay.icon = accessory.icon - overlay.icon_state = accessory.icon_state - overlay.use_gender = accessory.gender_specific - overlay.draw_color = accessory.color_src ? hooman.dna.features["mcolor"] : null - - people_part.add_bodypart_overlay(overlay) diff --git a/modular_doppler/customization/code/accessory_overrides_moth.dm b/modular_doppler/customization/code/accessory_overrides_moth.dm deleted file mode 100644 index b71ab3f2e69f4..0000000000000 --- a/modular_doppler/customization/code/accessory_overrides_moth.dm +++ /dev/null @@ -1,81 +0,0 @@ -/// Moth bodymark fixing -/datum/bodypart_overlay/simple/body_marking/moth/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - var/color_intended = COLOR_WHITE - - var/tcol_1 = limb.owner.dna.features["moth_markings_color_1"] - var/tcol_2 = limb.owner.dna.features["moth_markings_color_2"] - var/tcol_3 = limb.owner.dna.features["moth_markings_color_3"] - if(tcol_1 && tcol_2 && tcol_3) - //this is beyond ugly but it works - var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 - var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 - var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 - var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 - var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 - var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 - var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 - var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 - var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 - color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) - overlay.color = color_intended - return overlay - - - -/// Moth wings recolorening -/datum/bodypart_overlay/mutant/wings/moth/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - var/color_intended = COLOR_WHITE - - var/tcol_1 = limb.owner.dna.features["moth_wings_color_1"] - var/tcol_2 = limb.owner.dna.features["moth_wings_color_2"] - var/tcol_3 = limb.owner.dna.features["moth_wings_color_3"] - if(tcol_1 && tcol_2 && tcol_3) - //this is beyond ugly but it works - var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 - var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 - var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 - var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 - var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 - var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 - var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 - var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 - var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 - color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) - overlay.color = color_intended - return overlay - - - -/// Moth antennae recolorening -/datum/bodypart_overlay/mutant/antennae/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - var/color_intended = COLOR_WHITE - - var/tcol_1 = limb.owner.dna.features["moth_antennae_color_1"] - var/tcol_2 = limb.owner.dna.features["moth_antennae_color_2"] - var/tcol_3 = limb.owner.dna.features["moth_antennae_color_3"] - if(tcol_1 && tcol_2 && tcol_3) - //this is beyond ugly but it works - var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 - var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 - var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 - var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 - var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 - var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 - var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 - var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 - var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 - color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) - overlay.color = color_intended - return overlay diff --git a/modular_doppler/customization/code/custom_accessories.dm b/modular_doppler/customization/code/custom_accessories.dm deleted file mode 100644 index 0fc28fc9c3b36..0000000000000 --- a/modular_doppler/customization/code/custom_accessories.dm +++ /dev/null @@ -1 +0,0 @@ -// This is where our bespoke fluff, IPC antennae, etc accessories should go. diff --git a/modular_doppler/customization/code/dropdowns_to_icons.dm b/modular_doppler/customization/code/dropdowns_to_icons.dm deleted file mode 100644 index a553e496c9df0..0000000000000 --- a/modular_doppler/customization/code/dropdowns_to_icons.dm +++ /dev/null @@ -1 +0,0 @@ -//wawa diff --git a/modular_doppler/customization/species/lizards/code/lizard_accessories.dm b/modular_doppler/customization/species/lizards/code/lizard_accessories.dm deleted file mode 100644 index 90a0771ffc063..0000000000000 --- a/modular_doppler/customization/species/lizards/code/lizard_accessories.dm +++ /dev/null @@ -1,16 +0,0 @@ -//snouts -/datum/sprite_accessory/lizard_markings - icon = 'modular_doppler/customization/species/lizards/icons/lizard_markings.dmi' - -/datum/sprite_accessory/snouts - icon = 'modular_doppler/customization/species/lizards/icons/lizard_external.dmi' - -/datum/sprite_accessory/frills - icon = 'modular_doppler/customization/species/lizards/icons/lizard_external.dmi' - -/datum/sprite_accessory/horns - icon = 'modular_doppler/customization/species/lizards/icons/lizard_external.dmi' - -/datum/sprite_accessory/tails/lizard - icon = 'modular_doppler/customization/species/lizards/icons/lizard_tails.dmi' - diff --git a/modular_doppler/customization/species/lizards/code/lizard_species.dm b/modular_doppler/customization/species/lizards/code/lizard_species.dm deleted file mode 100644 index 43c9e98275c6f..0000000000000 --- a/modular_doppler/customization/species/lizards/code/lizard_species.dm +++ /dev/null @@ -1 +0,0 @@ -//TODO: we may be able to remove this file diff --git a/modular_doppler/customization/species/lizards/icons/bodyparts.dmi b/modular_doppler/customization/species/lizards/icons/bodyparts.dmi deleted file mode 100644 index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf diff --git a/modular_doppler/customization/species/lizards/icons/lizard_external.dmi b/modular_doppler/customization/species/lizards/icons/lizard_external.dmi deleted file mode 100644 index ca7ad196b22930d371877f580d49f0caba5965db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3382 zcmcJRX;>528pl(m7G<+8U@1%SDvGj*0uqD-L7-p*A|OlI1VKc03~NZJ7Evr>jeupX zm9hi_0)_|yB3mLLn+O3}0)!ADBoU${fsouoZNJ>->Ft+$=b1BSo|!W<@BH82`M>A( zIY&E%9jZGZ5Qu{Pw`a~nAfH)+_KoZ|aHaDS?mg&)Nv;cnsd=*(Dgt<+RG=Uw{x@$v9&bTxx=cmUpkQv-iL406hfP- zVT*dM`CjU`9xG@#c)%TAy|b

k)pm+=O7ZCA$yhI~@PQ76OqI*`GP>noz)*tcm#Ay%93q zeoHB;l5<98*XR5EAAND`{Nx!O;((m)G(|uDGg2%;efxn)u8GXb7MJHn@h(1dpOx-Q zh3M?RmwIh|n{|O6Dl7MAo!bwBO-tt2AzEKT&82WwF`s?U=$IDJ`;QH!)n8`VUlwhu zO2tt%?otdh{XUMqxVeH-?THbQY&>$#%AG*vrPq2>bn{(dDxM~{uZVHfQq^=1X+-u7 zLMsZbZY6y7FHujibPrm%Ty}0xU4ItQ)A^NRk{EGm?7-@Ja}-+g8&;!-f2E+mx}C|i zVYSd;@!PUR!>t4s3Ov+btXj3$?0ypf7FGK z1K&GKN!iTf!DA)$i7#urRAR|jDa=~I1D6*N=n^Yl(h#@Jvzagw*-)vn}mD+d5d^O~h zgE-=Jyhl6Q*mjr^d8EJ0ufw2+DNznik8_jas8hB$DW|xeh9RsX!&4WZZ)$=j&J(OG{A576N)>l)tP+l^EjVWb>(Uco0 z0$mx+TTl5KmKp)|yFL&M+bZLAmAx&27FUOlw7!tdtQ{fBc$$n=Dv@Uf!Y3g>2Li7Z z92aZNECGBrhH@KdgExaRbz!^KH`)3nvgz0TS!?2;$t~ojrV!3$XoaYkMVkqY-aXZv z;@0CWZ^uaZ1mZsVJ}Y7}kQ#hc1AiN{;~W$IgK0zJ<>QUj z8R3}5Tlm_Ek+g(tLB*6&I&Kz8OgZiR$_h*fCbN^Z-Vi)?K)G|NqQU&#%F1tbW+H$# zn8WYlvQ!(0VV?SdV65}2HWYdTN^P7iEGEAzX{#=Z?PiF@HhBKMS-P9Fkx@EE`_JMxxlkGZJVa>h|c32pHRsN7zq(07t1?C zGb>f=b_6wuzaN4wRn~e-@EM|t(1Oc4dOzvrcj)FDy_U(pA6JavS-Ere=cYjEQoo0T zv)dpWx+{poEOdh6>zlK~XnvW;r;!@q_VsdXpq!KwjT!^VW;-n>g%ht?g zyaJq*VhZpVTI3WJ zv}%QWMMryro|xSR*T6m#f{GLa3m>X+qmcD_sW79$Ykf$c1TC=ubrM?Nx8|O*6c~O& zlXNbA!v*Lwk=Uzb$9NcoeLMeql~4&SSHK!FE%rIr$+Cbv1)XP~ zfb6!mLYjN3~_boR;iSxL;ak8PD9VVkwyc4EZzq74bE=J|N2GV2>5ub}RA~!PN zqY!J^nRHFej43+VKf$v3mGi;QXq zh3TsP{qf=8_K)XyR!ebNW?+S)#ECO7FxWhEGe`~38>@;7Mx1Q9V)(C4AM=35GBWga1jZ+bylAb9YD+_TXGP}05^_@5KK(_XA5N6xwGz@7rF%r!q0@nZlhMcQ4#S?rSiGV+OyH?}JGVN6S7+K}Z(?ZY-98 znG$*NHYnu0@w>e9Z`WvJ5TegJx05$Z8T5K561jw1P#d<3k4j>Vze+E{;MS+mhZe&9 z)t9l2{d~i?BA2B8W+m)BN3@EjCHz{8PA+So)KIk4rr)246=C|8-5E>mT=jyKa~iZ3~7x_nt0@p zX#kv8vkz&Ul@i+he#!jVG&@W-r~&nKW=?eN(5bqV5EPLU=xCXiCy|dDh8Y*6bbtO| d!%k%_z;}np9pACH!+LX|y^Z6UDl7l%{{}*5jMD%B diff --git a/modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm b/modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm new file mode 100644 index 0000000000000..842135847f9c9 --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm @@ -0,0 +1,2 @@ +/datum/sprite_accessory/lizard_markings + icon = 'modular_doppler/modular_customization/accessories/icons/lizard_markings.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/frills.dm b/modular_doppler/modular_customization/accessories/code/frills.dm new file mode 100644 index 0000000000000..de2a341d62d0f --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/frills.dm @@ -0,0 +1,2 @@ +/datum/sprite_accessory/frills + icon = 'modular_doppler/modular_customization/accessories/icons/frills.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/horns.dm b/modular_doppler/modular_customization/accessories/code/horns.dm new file mode 100644 index 0000000000000..278554bdad017 --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/horns.dm @@ -0,0 +1,2 @@ +/datum/sprite_accessory/horns + icon = 'modular_doppler/modular_customization/accessories/icons/horns.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/overrides/code/overrides.dm b/modular_doppler/modular_customization/accessories/code/overrides/code/overrides.dm new file mode 100644 index 0000000000000..ac35bea49e94f --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/overrides/code/overrides.dm @@ -0,0 +1,16 @@ +/datum/species/get_features() + var/list/features = ..() + + features += /datum/preference/choiced/lizard_snout + features += /datum/preference/choiced/lizard_frills + features += /datum/preference/choiced/lizard_horns + features += /datum/preference/choiced/lizard_tail + features += /datum/preference/choiced/lizard_body_markings + + GLOB.features_by_species[type] = features + + return features + +/datum/bodypart_overlay/mutant + /// Annoying annoying annoyed annoyance - this is to avoid a massive headache trying to work around tails + var/feature_key_sprite = null diff --git a/modular_doppler/customization/icons/fallbacks.dmi b/modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi similarity index 100% rename from modular_doppler/customization/icons/fallbacks.dmi rename to modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi diff --git a/modular_doppler/modular_customization/accessories/code/snout.dm b/modular_doppler/modular_customization/accessories/code/snout.dm new file mode 100644 index 0000000000000..e709ae9c80a07 --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/snout.dm @@ -0,0 +1,2 @@ +/datum/sprite_accessory/snouts + icon = 'modular_doppler/modular_customization/accessories/icons/snout.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/tail_lizard.dm b/modular_doppler/modular_customization/accessories/code/tail_lizard.dm new file mode 100644 index 0000000000000..0220e45965547 --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/tail_lizard.dm @@ -0,0 +1,2 @@ +/datum/sprite_accessory/tails/lizard + icon = 'modular_doppler/modular_customization/accessories/icons/lizard_tails.dmi' diff --git a/modular_doppler/modular_customization/accessories/icons/frills.dmi b/modular_doppler/modular_customization/accessories/icons/frills.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8ac09aa9f71892b9cb812e2688181130123d2afa GIT binary patch literal 763 zcmVfFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LY zR3KAHiHkEOv#1!zH00t;D@x2wg|OiY3KDZtOG;7+s>_W}E6U8tDUL7B%q_@CjdyhM zLg+CeT2H(Y3A!@!i%Lke2&RP;dlCyv6G^iMrUSPv$_lQ2F5nmg0G*$MGi*u6j{pDx z=}AOERA_83$f-SWReZhw0T;2KN_X|26aCjQ^+$o~^3-RF>c)i^s}jceoGvk4{IYijw8 z^#7VPb4P`4HLClypH^8#AE%56Qm>Eahfyv4zhN`P2QoQuyaVG}?L)W@zhY9~+TS3* zVLku=0001R#~41K6G^ww@PQ91su0qe2}j1H^#2w6Rui}FwTaS2J!{bN1bRTxB&M`j zuOr@*Khs2Xbb%NBzmoM#%N@uy0RR910D${PtJrFCU6@3T@VjT&*a=p|tu7y9@0iu1 zgQofJO+ZHL`zz4xkJmum(m&(4+2r|w_T)RR-F(zu`~M4>ajhEZ|LF7@Vw002ovPDHLkV1n*6U||3N literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_customization/accessories/icons/horns.dmi b/modular_doppler/modular_customization/accessories/icons/horns.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d5381a2cb61325a8c34eec784b8f28c147ca1c1e GIT binary patch literal 806 zcmeAS@N?(olHy`uVBq!ia0vp^2Y`412OE%#(nyX4QcJ2rB1&9Ri<65o3raHc^B5Q^ z=FC0q$aTm-p!H#CQP;w|-PiIq2Lvr~s%{l{bAx5l79Y30`?{OfExB^H`a`|yoY~&D zo8LwKbU9V$wP3-$w@WL2Hp*&PgauiAS^W5E%C?>b3pAEU*rWy&OnBsH_Gpv+!5n6z z$64aNvo%sD-*w6H`}IroYuATDz8#%+r>#hSwY`w)Ev;6$}S>GSue^&A5?w?;j7gxkHFmzt}`9<~hag!&PHa>7RRI7Qn zBLm%qekM+Di`-G28g%Ir|V!{;4b@xT83H~)C?Ymknq{QWXH_CqR=;}`1T{~yb{0Qy6aqHiQO@DVj)PCO5XpUXO@geCy@GGhAx literal 0 HcmV?d00001 diff --git a/modular_doppler/customization/species/lizards/icons/lizard_markings.dmi b/modular_doppler/modular_customization/accessories/icons/lizard_markings.dmi similarity index 100% rename from modular_doppler/customization/species/lizards/icons/lizard_markings.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard_markings.dmi diff --git a/modular_doppler/customization/species/lizards/icons/lizard_tails.dmi b/modular_doppler/modular_customization/accessories/icons/lizard_tails.dmi similarity index 100% rename from modular_doppler/customization/species/lizards/icons/lizard_tails.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard_tails.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/snout.dmi b/modular_doppler/modular_customization/accessories/icons/snout.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5a56352719818a3c1f685efd14c9b30746390bfc GIT binary patch literal 597 zcmV-b0;>IqP)T}`%Z)G2%P%d7FV09TDu{P< z@j~b@AyP-Y5z%^z@=NnlNU{a4g9KZ^F3SOh8tEQ_Ya`WHq}zw84Yz&D3a)-G;8X$t z)jX)|!X7V%0003vNkl{9fSOA z8PQbwKe4cchnU?P#ux)^M|1G&eqUPM8LMjSr(b`aOCKu)4@lJv^~X*~b{0PrLk{e$!Chx3Q@{h^Hh zA)G(N{lkxS{*T_&^MiE%U{wCs^MiD~k@;U5rqzLp>j3}&fEU^SzLMnqp`?ueA0+z+ j=?VG27Wp3l03_W2@L?Wp=H`n$00000NkvXXu0mjfbX*z; literal 0 HcmV?d00001 diff --git a/modular_doppler/customization/code/bodypart_overrides.dm b/modular_doppler/modular_customization/bodypart/bodypart_overrides.dm similarity index 100% rename from modular_doppler/customization/code/bodypart_overrides.dm rename to modular_doppler/modular_customization/bodypart/bodypart_overrides.dm diff --git a/modular_doppler/modular_customization/preferences/body_marking_lizard.dm b/modular_doppler/modular_customization/preferences/body_marking_lizard.dm new file mode 100644 index 0000000000000..bcadc48e0fde7 --- /dev/null +++ b/modular_doppler/modular_customization/preferences/body_marking_lizard.dm @@ -0,0 +1,87 @@ + +/// Standard bodymark fixing +/datum/bodypart_overlay/simple/body_marking/lizard + layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 + +/datum/bodypart_overlay/simple/body_marking/lizard/get_image(layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + var/gender_string = (use_gender && limb.is_dimorphic) ? (limb.gender == MALE ? MALE : FEMALE + "_") : "" //we only got male and female sprites + if(layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) + return image(icon, gender_string + icon_state + "_" + limb.body_zone + "_2", layer = layer) + if(layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) + return image(icon, gender_string + icon_state + "_" + limb.body_zone + "_3", layer = layer) + return image(icon, gender_string + icon_state + "_" + limb.body_zone, layer = layer) + +/datum/bodypart_overlay/simple/body_marking/lizard/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) + overlay.color = limb.owner.dna.features["body_markings_color_1"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) + overlay.color = limb.owner.dna.features["body_markings_color_2"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) + overlay.color = limb.owner.dna.features["body_markings_color_3"] + return overlay + return ..() + +/datum/preference/choiced/lizard_body_markings/create_default_value() + return /datum/sprite_accessory/lizard_markings/none::name + +//toggle prefs +/datum/preference/toggle/markings + savefile_key = "has_markings" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + priority = PREFERENCE_PRIORITY_DEFAULT + +/datum/preference/toggle/markings/apply_to_human(mob/living/carbon/human/target, value) + if(value == FALSE) + target.dna.features["lizard_markings"] = /datum/sprite_accessory/lizard_markings/none::name + +/datum/preference/toggle/markings/create_default_value() + return FALSE + +//toggle pref integration +/datum/preference/choiced/lizard_body_markings + category = PREFERENCE_CATEGORY_CLOTHING + +/datum/preference/choiced/lizard_body_markings/is_accessible(datum/preferences/preferences) + . = ..() + var/has_markings = preferences.read_preference(/datum/preference/toggle/markings) + if(has_markings == TRUE) + return TRUE + return FALSE + +//manually adding them now +/datum/species/add_body_markings(mob/living/carbon/human/hooman) + . = ..() + if((hooman.dna.features["lizard_markings"] && hooman.dna.features["lizard_markings"] != /datum/sprite_accessory/lizard_markings/none::name) && (hooman.client?.prefs.read_preference(/datum/preference/toggle/markings))) + var/datum/bodypart_overlay/simple/body_marking/markings = new /datum/bodypart_overlay/simple/body_marking/lizard() // made to die... mostly because we cant use initial on lists but its convenient and organized + var/accessory_name = hooman.dna.features[markings.dna_feature_key] //get the accessory name from dna + var/datum/sprite_accessory/moth_markings/accessory = markings.get_accessory(accessory_name) //get the actual datum + + if(isnull(accessory)) + CRASH("Value: [accessory_name] did not have a corresponding sprite accessory!") + + for(var/obj/item/bodypart/part as anything in markings.applies_to) //check through our limbs + var/obj/item/bodypart/people_part = hooman.get_bodypart(initial(part.body_zone)) // and see if we have a compatible marking for that limb + + if(!people_part) + continue + + var/datum/bodypart_overlay/simple/body_marking/overlay = new /datum/bodypart_overlay/simple/body_marking/lizard() + + // Tell the overlay what it should look like + overlay.icon = accessory.icon + overlay.icon_state = accessory.icon_state + overlay.use_gender = accessory.gender_specific + overlay.draw_color = accessory.color_src ? hooman.dna.features["mcolor"] : null + + people_part.add_bodypart_overlay(overlay) diff --git a/modular_doppler/modular_customization/preferences/body_marking_moth.dm b/modular_doppler/modular_customization/preferences/body_marking_moth.dm new file mode 100644 index 0000000000000..f7194e1b0023c --- /dev/null +++ b/modular_doppler/modular_customization/preferences/body_marking_moth.dm @@ -0,0 +1,25 @@ +/// Moth bodymark fixing +/datum/bodypart_overlay/simple/body_marking/moth/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + var/color_intended = COLOR_WHITE + + var/tcol_1 = limb.owner.dna.features["moth_markings_color_1"] + var/tcol_2 = limb.owner.dna.features["moth_markings_color_2"] + var/tcol_3 = limb.owner.dna.features["moth_markings_color_3"] + if(tcol_1 && tcol_2 && tcol_3) + //this is beyond ugly but it works + var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 + var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 + var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 + var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 + var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 + var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 + var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 + var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 + var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 + color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) + overlay.color = color_intended + return overlay diff --git a/modular_doppler/modular_customization/preferences/frills.dm b/modular_doppler/modular_customization/preferences/frills.dm new file mode 100644 index 0000000000000..1955ad840eb65 --- /dev/null +++ b/modular_doppler/modular_customization/preferences/frills.dm @@ -0,0 +1,62 @@ +/// Frills fixing +/obj/item/organ/external/frills + name = "frills" + +/datum/bodypart_overlay/mutant/frills + layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 + +/datum/bodypart_overlay/mutant/frills/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) + overlay.color = limb.owner.dna.features["frills_color_1"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) + overlay.color = limb.owner.dna.features["frills_color_2"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) + overlay.color = limb.owner.dna.features["frills_color_3"] + return overlay + return ..() + +//core toggle +/datum/preference/toggle/frills + savefile_key = "has_frills" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + priority = PREFERENCE_PRIORITY_DEFAULT + +/datum/preference/toggle/frills/apply_to_human(mob/living/carbon/human/target, value) + if(value == FALSE) + target.dna.features["frills"] = /datum/sprite_accessory/frills/none::name + +/datum/preference/toggle/frills/create_default_value() + return FALSE + +/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) + . = ..() + if(target.dna.features["frills"]) + if(target.dna.features["frills"] != /datum/sprite_accessory/frills/none::name && target.dna.features["frills"] != /datum/sprite_accessory/blank::name) + var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/frills) + replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + return . + var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_FRILLS) + if(old_part) + old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + old_part.moveToNullspace() + +//sprite selection +/datum/preference/choiced/lizard_frills + category = PREFERENCE_CATEGORY_CLOTHING + +/datum/preference/choiced/lizard_frills/is_accessible(datum/preferences/preferences) + . = ..() + var/has_frills = preferences.read_preference(/datum/preference/toggle/frills) + if(has_frills == TRUE) + return TRUE + return FALSE + +/datum/preference/choiced/lizard_frills/create_default_value() + return /datum/sprite_accessory/frills/none::name diff --git a/modular_doppler/modular_customization/preferences/horns.dm b/modular_doppler/modular_customization/preferences/horns.dm new file mode 100644 index 0000000000000..e47ea8fbc80aa --- /dev/null +++ b/modular_doppler/modular_customization/preferences/horns.dm @@ -0,0 +1,62 @@ +/// Horns fixing +/obj/item/organ/external/horns + name = "horns" + +/datum/bodypart_overlay/mutant/horns + layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 + +/datum/bodypart_overlay/mutant/horns/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) + overlay.color = limb.owner.dna.features["horns_color_1"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) + overlay.color = limb.owner.dna.features["horns_color_2"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) + overlay.color = limb.owner.dna.features["horns_color_3"] + return overlay + return ..() + +//core toggle +/datum/preference/toggle/horns + savefile_key = "has_horns" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + priority = PREFERENCE_PRIORITY_DEFAULT + +/datum/preference/toggle/horns/apply_to_human(mob/living/carbon/human/target, value) + if(value == FALSE) + target.dna.features["horns"] = /datum/sprite_accessory/horns/none::name + +/datum/preference/toggle/horns/create_default_value() + return FALSE + +/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) + . = ..() + if(target.dna.features["horns"]) + if(target.dna.features["horns"] != /datum/sprite_accessory/horns/none::name && target.dna.features["horns"] != /datum/sprite_accessory/blank::name) + var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/horns) + replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + return . + var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_HORNS) + if(old_part) + old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + old_part.moveToNullspace() + +//sprite selection +/datum/preference/choiced/lizard_horns + category = PREFERENCE_CATEGORY_CLOTHING + +/datum/preference/choiced/lizard_horns/is_accessible(datum/preferences/preferences) + . = ..() + var/has_horns = preferences.read_preference(/datum/preference/toggle/horns) + if(has_horns == TRUE) + return TRUE + return FALSE + +/datum/preference/choiced/lizard_horns/create_default_value() + return /datum/sprite_accessory/horns/none::name diff --git a/modular_doppler/modular_customization/preferences/moth_antennae.dm b/modular_doppler/modular_customization/preferences/moth_antennae.dm new file mode 100644 index 0000000000000..ea3e662f3b004 --- /dev/null +++ b/modular_doppler/modular_customization/preferences/moth_antennae.dm @@ -0,0 +1,25 @@ +/// Moth antennae recolorening +/datum/bodypart_overlay/mutant/antennae/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + var/color_intended = COLOR_WHITE + + var/tcol_1 = limb.owner.dna.features["moth_antennae_color_1"] + var/tcol_2 = limb.owner.dna.features["moth_antennae_color_2"] + var/tcol_3 = limb.owner.dna.features["moth_antennae_color_3"] + if(tcol_1 && tcol_2 && tcol_3) + //this is beyond ugly but it works + var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 + var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 + var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 + var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 + var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 + var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 + var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 + var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 + var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 + color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) + overlay.color = color_intended + return overlay diff --git a/modular_doppler/modular_customization/preferences/moth_wings.dm b/modular_doppler/modular_customization/preferences/moth_wings.dm new file mode 100644 index 0000000000000..4cec1e75bbbf5 --- /dev/null +++ b/modular_doppler/modular_customization/preferences/moth_wings.dm @@ -0,0 +1,25 @@ +/// Moth wings recolorening +/datum/bodypart_overlay/mutant/wings/moth/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + var/color_intended = COLOR_WHITE + + var/tcol_1 = limb.owner.dna.features["moth_wings_color_1"] + var/tcol_2 = limb.owner.dna.features["moth_wings_color_2"] + var/tcol_3 = limb.owner.dna.features["moth_wings_color_3"] + if(tcol_1 && tcol_2 && tcol_3) + //this is beyond ugly but it works + var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 + var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 + var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 + var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 + var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 + var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 + var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 + var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 + var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 + color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) + overlay.color = color_intended + return overlay diff --git a/modular_doppler/modular_customization/preferences/snout.dm b/modular_doppler/modular_customization/preferences/snout.dm new file mode 100644 index 0000000000000..6576957e51992 --- /dev/null +++ b/modular_doppler/modular_customization/preferences/snout.dm @@ -0,0 +1,62 @@ +/// Snout fixing +/obj/item/organ/external/snout + name = "snout" + +/datum/bodypart_overlay/mutant/snout + layers = EXTERNAL_ADJACENT | EXTERNAL_ADJACENT_2 | EXTERNAL_ADJACENT_3 + +/datum/bodypart_overlay/mutant/snout/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT)) + overlay.color = limb.owner.dna.features["snout_color_1"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_2)) + overlay.color = limb.owner.dna.features["snout_color_2"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_ADJACENT_3)) + overlay.color = limb.owner.dna.features["snout_color_3"] + return overlay + return ..() + +//core toggle +/datum/preference/toggle/snout + savefile_key = "has_snout" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + priority = PREFERENCE_PRIORITY_DEFAULT + +/datum/preference/toggle/snout/apply_to_human(mob/living/carbon/human/target, value) + if(value == FALSE) + target.dna.features["snout"] = /datum/sprite_accessory/snouts/none::name + +/datum/preference/toggle/snout/create_default_value() + return FALSE + +/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) + . = ..() + if(target.dna.features["snout"]) + if(target.dna.features["snout"] != /datum/sprite_accessory/snouts/none::name && target.dna.features["snout"] != /datum/sprite_accessory/blank::name) + var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/snout) + replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + return . + var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_SNOUT) + if(old_part) + old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + old_part.moveToNullspace() + +//sprite selection +/datum/preference/choiced/lizard_snout + category = PREFERENCE_CATEGORY_CLOTHING + +/datum/preference/choiced/lizard_snout/is_accessible(datum/preferences/preferences) + . = ..() + var/has_snout = preferences.read_preference(/datum/preference/toggle/snout) + if(has_snout == TRUE) + return TRUE + return FALSE + +/datum/preference/choiced/lizard_snout/create_default_value() + return /datum/sprite_accessory/snouts/none::name diff --git a/modular_doppler/modular_customization/preferences/tail.dm b/modular_doppler/modular_customization/preferences/tail.dm new file mode 100644 index 0000000000000..09d2385a5b935 --- /dev/null +++ b/modular_doppler/modular_customization/preferences/tail.dm @@ -0,0 +1,110 @@ + +/// Tails fixing +/obj/item/organ/external/tail/lizard + name = "tail" + +/datum/bodypart_overlay/mutant/tail/lizard + layers = EXTERNAL_FRONT | EXTERNAL_FRONT_2 | EXTERNAL_FRONT_3 | EXTERNAL_BEHIND | EXTERNAL_BEHIND_2 | EXTERNAL_BEHIND_3 + feature_key_sprite = "tail" + +/datum/bodypart_overlay/mutant/tail/lizard/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) + if(limb == null) + return ..() + if(limb.owner == null) + return ..() + if(draw_layer == bitflag_to_layer(EXTERNAL_FRONT)) + overlay.color = limb.owner.dna.features["tail_color_1"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_BEHIND)) + overlay.color = limb.owner.dna.features["tail_color_1"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_FRONT_2)) + overlay.color = limb.owner.dna.features["tail_color_2"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_BEHIND_2)) + overlay.color = limb.owner.dna.features["tail_color_2"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_FRONT_3)) + overlay.color = limb.owner.dna.features["tail_color_3"] + return overlay + else if(draw_layer == bitflag_to_layer(EXTERNAL_BEHIND_3)) + overlay.color = limb.owner.dna.features["tail_color_3"] + return overlay + return ..() + +//core toggle +/datum/preference/toggle/tail + savefile_key = "has_tail" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + priority = PREFERENCE_PRIORITY_DEFAULT + +/datum/preference/toggle/tail/apply_to_human(mob/living/carbon/human/target, value) + if(value == FALSE) + target.dna.features["tail_lizard"] = /datum/sprite_accessory/tails/lizard/none::name + +/datum/preference/toggle/tail/create_default_value() + return FALSE + +/datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) + . = ..() + if(target == null) + return + if(target.dna.features["tail_lizard"]) + if(target.dna.features["tail_lizard"] != /datum/sprite_accessory/tails/lizard/none::name && target.dna.features["tail_lizard"] != /datum/sprite_accessory/blank::name) + var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/tail/lizard) + replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + return . + var/obj/item/organ/external/tail/lizard/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(istype(old_part)) + old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED) + old_part.moveToNullspace() + +//sprite selection +/datum/preference/choiced/lizard_tail + category = PREFERENCE_CATEGORY_CLOTHING + relevant_external_organ = null + should_generate_icons = TRUE + main_feature_name = "Tail" + +/datum/preference/choiced/lizard_tail/is_accessible(datum/preferences/preferences) + . = ..() + var/has_tail = preferences.read_preference(/datum/preference/toggle/tail) + if(has_tail == TRUE) + return TRUE + return FALSE + +/datum/preference/choiced/lizard_tail/create_default_value() + return /datum/sprite_accessory/tails/lizard/none::name + +/datum/preference/choiced/lizard_tail/icon_for(value) + var/datum/sprite_accessory/sprite_accessory = SSaccessories.tails_list_lizard[value] + + var/icon/final_icon = icon('icons/mob/human/species/lizard/bodyparts.dmi', "lizard_chest_m", NORTH) + + if (sprite_accessory.icon_state != "none") + var/icon/markings_icon_1 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND", NORTH) + markings_icon_1.Blend(COLOR_RED, ICON_MULTIPLY) + var/icon/markings_icon_2 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND_2", NORTH) + markings_icon_2.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) + var/icon/markings_icon_3 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND_3", NORTH) + markings_icon_3.Blend(COLOR_BLUE, ICON_MULTIPLY) + final_icon.Blend(markings_icon_1, ICON_OVERLAY) + final_icon.Blend(markings_icon_2, ICON_OVERLAY) + final_icon.Blend(markings_icon_3, ICON_OVERLAY) + // front breaker + var/icon/markings_icon_1_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT", NORTH) + markings_icon_1_f.Blend(COLOR_RED, ICON_MULTIPLY) + var/icon/markings_icon_2_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT_2", NORTH) + markings_icon_2_f.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) + var/icon/markings_icon_3_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT_3", NORTH) + markings_icon_3_f.Blend(COLOR_BLUE, ICON_MULTIPLY) + final_icon.Blend(markings_icon_1_f, ICON_OVERLAY) + final_icon.Blend(markings_icon_2_f, ICON_OVERLAY) + final_icon.Blend(markings_icon_3_f, ICON_OVERLAY) + + //final_icon.Crop(4, 12, 28, 32) + //final_icon.Scale(32, 26) + //final_icon.Crop(-2, 1, 29, 32) + + return final_icon diff --git a/modular_doppler/customization/code/tri_color_prefs.dm b/modular_doppler/modular_customization/tri_color/tri_color_prefs.dm similarity index 100% rename from modular_doppler/customization/code/tri_color_prefs.dm rename to modular_doppler/modular_customization/tri_color/tri_color_prefs.dm diff --git a/modular_doppler/customization/code/tri_color_prefs_bespoke.dm b/modular_doppler/modular_customization/tri_color/tri_color_prefs_bespoke.dm similarity index 100% rename from modular_doppler/customization/code/tri_color_prefs_bespoke.dm rename to modular_doppler/modular_customization/tri_color/tri_color_prefs_bespoke.dm diff --git a/modular_doppler/modular_species/species_types/monkey/monkeys.dm b/modular_doppler/modular_species/species_types/monkey/monkeys.dm new file mode 100644 index 0000000000000..241712e46bd41 --- /dev/null +++ b/modular_doppler/modular_species/species_types/monkey/monkeys.dm @@ -0,0 +1,4 @@ +/datum/species/monkey/randomize_features(mob/living/carbon/human/human_mob) + var/list/features = ..() + features["tail_monkey"] = "Monkey" + return features diff --git a/modular_doppler/hearthkin/primitive_catgirls/code/species.dm b/modular_doppler/modular_species/species_types/primitive_demihuman/primitive_demihuman.dm similarity index 100% rename from modular_doppler/hearthkin/primitive_catgirls/code/species.dm rename to modular_doppler/modular_species/species_types/primitive_demihuman/primitive_demihuman.dm diff --git a/modular_doppler/customization/species/scugs/icons/bodyparts.dmi b/modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi similarity index 100% rename from modular_doppler/customization/species/scugs/icons/bodyparts.dmi rename to modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi diff --git a/modular_doppler/customization/species/scugs/icons/slugcat_external.dmi b/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi similarity index 100% rename from modular_doppler/customization/species/scugs/icons/slugcat_external.dmi rename to modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi diff --git a/modular_doppler/customization/species/scugs/icons/slugcat_eyes.dmi b/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_eyes.dmi similarity index 100% rename from modular_doppler/customization/species/scugs/icons/slugcat_eyes.dmi rename to modular_doppler/modular_species/species_types/slugcats/icons/slugcat_eyes.dmi diff --git a/modular_doppler/customization/species/scugs/icons/slugcat_markings.dmi b/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_markings.dmi similarity index 100% rename from modular_doppler/customization/species/scugs/icons/slugcat_markings.dmi rename to modular_doppler/modular_species/species_types/slugcats/icons/slugcat_markings.dmi diff --git a/modular_doppler/customization/species/scugs/icons/slugcat_tails.dmi b/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_tails.dmi similarity index 100% rename from modular_doppler/customization/species/scugs/icons/slugcat_tails.dmi rename to modular_doppler/modular_species/species_types/slugcats/icons/slugcat_tails.dmi diff --git a/modular_doppler/customization/species/scugs/code/slugcat_species.dm b/modular_doppler/modular_species/species_types/slugcats/slugcat.dm similarity index 96% rename from modular_doppler/customization/species/scugs/code/slugcat_species.dm rename to modular_doppler/modular_species/species_types/slugcats/slugcat.dm index 18680d4f4babb..83fa6be922d3a 100644 --- a/modular_doppler/customization/species/scugs/code/slugcat_species.dm +++ b/modular_doppler/modular_species/species_types/slugcats/slugcat.dm @@ -29,7 +29,7 @@ payday_modifier = 1.0 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT inert_mutation = /datum/mutation/human/mute - death_sound = 'modular_doppler/customization/species/scugs/sounds/scugdeath.ogg' + death_sound = 'modular_doppler/modular_species/species_types/slugcats/sounds/scugdeath.ogg' species_language_holder = /datum/language_holder/slugcat digitigrade_customization = DIGITIGRADE_OPTIONAL @@ -45,7 +45,7 @@ /// SOUNDS BREAKER /datum/species/slugcat/get_scream_sound(mob/living/carbon/human/scug) return pick( - 'modular_doppler/customization/species/scugs/sounds/scugscream_1.ogg', + 'modular_doppler/modular_species/species_types/slugcats/sounds/scugscream_1.ogg', ) /datum/species/slugcat/get_cough_sound(mob/living/carbon/human/scug) @@ -85,7 +85,7 @@ return 'sound/voice/human/male_sneeze1.ogg' /datum/species/lizard/get_laugh_sound(mob/living/carbon/human/scug) - return 'modular_doppler/customization/species/scugs/sounds/scuglaugh_1.ogg' + return 'modular_doppler/modular_species/species_types/slugcats/sounds/scuglaugh_1.ogg' /datum/species/lizard/get_sigh_sound(mob/living/carbon/human/scug) if(scug.physique == FEMALE) diff --git a/modular_doppler/customization/species/scugs/code/slugcat_accessories.dm b/modular_doppler/modular_species/species_types/slugcats/slugcat_accessories.dm similarity index 78% rename from modular_doppler/customization/species/scugs/code/slugcat_accessories.dm rename to modular_doppler/modular_species/species_types/slugcats/slugcat_accessories.dm index b95c1d478d172..5821254e76db5 100644 --- a/modular_doppler/customization/species/scugs/code/slugcat_accessories.dm +++ b/modular_doppler/modular_species/species_types/slugcats/slugcat_accessories.dm @@ -1,6 +1,6 @@ //snouts /datum/sprite_accessory/snouts/slugcat - icon = 'modular_doppler/customization/species/scugs/icons/slugcat_external.dmi' + icon = 'modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi' name = "Slugcat" icon_state = "scug_standard" @@ -14,7 +14,7 @@ //frills /datum/sprite_accessory/frills/slugcat - icon = 'modular_doppler/customization/species/scugs/icons/slugcat_external.dmi' + icon = 'modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi' name = "Slugcat" icon_state = "scug_aquatic" @@ -32,7 +32,7 @@ //horns /datum/sprite_accessory/horns/slugcat - icon = 'modular_doppler/customization/species/scugs/icons/slugcat_external.dmi' + icon = 'modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi' name = "Slugcat" icon_state = "scug_standard" @@ -62,7 +62,7 @@ //tails /datum/sprite_accessory/tails/lizard/slugcat - icon = 'modular_doppler/customization/species/scugs/icons/slugcat_tails.dmi' + icon = 'modular_doppler/modular_species/species_types/slugcats/icons/slugcat_tails.dmi' name = "Slugcat" icon_state = "scug_std" @@ -72,7 +72,7 @@ //body markings /datum/sprite_accessory/lizard_markings/slugcat - icon = 'modular_doppler/customization/species/scugs/icons/slugcat_markings.dmi' + icon = 'modular_doppler/modular_species/species_types/slugcats/icons/slugcat_markings.dmi' name = "Slugcat Underbelly" icon_state = "scug_lbelly" gender_specific = TRUE diff --git a/modular_doppler/customization/species/scugs/code/slugcat_bodyparts.dm b/modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm similarity index 58% rename from modular_doppler/customization/species/scugs/code/slugcat_bodyparts.dm rename to modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm index ebcfcf5c86eaf..34d0760a4aa31 100644 --- a/modular_doppler/customization/species/scugs/code/slugcat_bodyparts.dm +++ b/modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm @@ -1,24 +1,24 @@ /obj/item/bodypart/head/slugcat - icon_greyscale = 'modular_doppler/customization/species/scugs/icons/bodyparts.dmi' + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = SPECIES_SLUGCAT is_dimorphic = FALSE - eyes_icon = 'modular_doppler/customization/species/scugs/icons/slugcat_eyes.dmi' + eyes_icon = 'modular_doppler/modular_species/species_types/slugcats/icons/slugcat_eyes.dmi' /obj/item/bodypart/chest/slugcat - icon_greyscale = 'modular_doppler/customization/species/scugs/icons/bodyparts.dmi' + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = SPECIES_SLUGCAT is_dimorphic = TRUE /obj/item/bodypart/arm/left/lizard/slugcat - icon_greyscale = 'modular_doppler/customization/species/scugs/icons/bodyparts.dmi' + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = SPECIES_SLUGCAT /obj/item/bodypart/arm/right/lizard/slugcat - icon_greyscale = 'modular_doppler/customization/species/scugs/icons/bodyparts.dmi' + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = SPECIES_SLUGCAT /obj/item/bodypart/leg/left/digitigrade/slugcat - icon_greyscale = 'modular_doppler/customization/species/scugs/icons/bodyparts.dmi' + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE @@ -28,7 +28,7 @@ limb_id = SPECIES_SLUGCAT /obj/item/bodypart/leg/right/digitigrade/slugcat - icon_greyscale = 'modular_doppler/customization/species/scugs/icons/bodyparts.dmi' + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE diff --git a/modular_doppler/customization/species/scugs/sounds/scugdeath.ogg b/modular_doppler/modular_species/species_types/slugcats/sounds/scugdeath.ogg similarity index 100% rename from modular_doppler/customization/species/scugs/sounds/scugdeath.ogg rename to modular_doppler/modular_species/species_types/slugcats/sounds/scugdeath.ogg diff --git a/modular_doppler/customization/species/scugs/sounds/scuglaugh_1.ogg b/modular_doppler/modular_species/species_types/slugcats/sounds/scuglaugh_1.ogg similarity index 100% rename from modular_doppler/customization/species/scugs/sounds/scuglaugh_1.ogg rename to modular_doppler/modular_species/species_types/slugcats/sounds/scuglaugh_1.ogg diff --git a/modular_doppler/customization/species/scugs/sounds/scugscream_1.ogg b/modular_doppler/modular_species/species_types/slugcats/sounds/scugscream_1.ogg similarity index 100% rename from modular_doppler/customization/species/scugs/sounds/scugscream_1.ogg rename to modular_doppler/modular_species/species_types/slugcats/sounds/scugscream_1.ogg diff --git a/tgstation.dme b/tgstation.dme index c46bc90a16e7e..037109e2ddd3a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6385,19 +6385,6 @@ #include "modular_doppler\cryosleep\code\jobs.dm" #include "modular_doppler\cryosleep\code\mind.dm" #include "modular_doppler\cryosleep\code\mood.dm" -#include "modular_doppler\customization\code\accessory_overrides.dm" -#include "modular_doppler\customization\code\accessory_overrides_lizard.dm" -#include "modular_doppler\customization\code\accessory_overrides_moth.dm" -#include "modular_doppler\customization\code\bodypart_overrides.dm" -#include "modular_doppler\customization\code\custom_accessories.dm" -#include "modular_doppler\customization\code\dropdowns_to_icons.dm" -#include "modular_doppler\customization\code\tri_color_prefs.dm" -#include "modular_doppler\customization\code\tri_color_prefs_bespoke.dm" -#include "modular_doppler\customization\species\lizards\code\lizard_accessories.dm" -#include "modular_doppler\customization\species\lizards\code\lizard_species.dm" -#include "modular_doppler\customization\species\scugs\code\slugcat_accessories.dm" -#include "modular_doppler\customization\species\scugs\code\slugcat_bodyparts.dm" -#include "modular_doppler\customization\species\scugs\code\slugcat_species.dm" #include "modular_doppler\emotes\code\emotes.dm" #include "modular_doppler\emotes\code\added_emotes\animal_sounds.dm" #include "modular_doppler\emotes\code\added_emotes\human_things.dm" @@ -6416,7 +6403,6 @@ #include "modular_doppler\hearthkin\primitive_catgirls\code\smelling_salts.dm" #include "modular_doppler\hearthkin\primitive_catgirls\code\spawner.dm" #include "modular_doppler\hearthkin\primitive_catgirls\code\special_metals.dm" -#include "modular_doppler\hearthkin\primitive_catgirls\code\species.dm" #include "modular_doppler\hearthkin\primitive_catgirls\code\translator.dm" #include "modular_doppler\hearthkin\primitive_cooking_additions\code\big_mortar.dm" #include "modular_doppler\hearthkin\primitive_cooking_additions\code\cauldron.dm" @@ -6480,6 +6466,23 @@ #include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_neck.dm" #include "modular_doppler\modular_crafting\code\crafting_extended.dm" #include "modular_doppler\modular_crafting\code\sheet_types.dm" +#include "modular_doppler\modular_customization\accessories\code\body_markings_lizard.dm" +#include "modular_doppler\modular_customization\accessories\code\frills.dm" +#include "modular_doppler\modular_customization\accessories\code\horns.dm" +#include "modular_doppler\modular_customization\accessories\code\snout.dm" +#include "modular_doppler\modular_customization\accessories\code\tail_lizard.dm" +#include "modular_doppler\modular_customization\accessories\code\overrides\code\overrides.dm" +#include "modular_doppler\modular_customization\bodypart\bodypart_overrides.dm" +#include "modular_doppler\modular_customization\preferences\body_marking_lizard.dm" +#include "modular_doppler\modular_customization\preferences\body_marking_moth.dm" +#include "modular_doppler\modular_customization\preferences\frills.dm" +#include "modular_doppler\modular_customization\preferences\horns.dm" +#include "modular_doppler\modular_customization\preferences\moth_antennae.dm" +#include "modular_doppler\modular_customization\preferences\moth_wings.dm" +#include "modular_doppler\modular_customization\preferences\snout.dm" +#include "modular_doppler\modular_customization\preferences\tail.dm" +#include "modular_doppler\modular_customization\tri_color\tri_color_prefs.dm" +#include "modular_doppler\modular_customization\tri_color\tri_color_prefs_bespoke.dm" #include "modular_doppler\modular_food_drinks_and_chems\chemistry_reagents.dm" #include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\alcohol reagents.dm" #include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drink_reagents.dm" @@ -6488,6 +6491,11 @@ #include "modular_doppler\modular_items\invisible_gear.dm" #include "modular_doppler\modular_mob_spawn\code\mob_spawn.dm" #include "modular_doppler\modular_sounds\code\sounds.dm" +#include "modular_doppler\modular_species\species_types\monkey\monkeys.dm" +#include "modular_doppler\modular_species\species_types\primitive_demihuman\primitive_demihuman.dm" +#include "modular_doppler\modular_species\species_types\slugcats\slugcat.dm" +#include "modular_doppler\modular_species\species_types\slugcats\slugcat_accessories.dm" +#include "modular_doppler\modular_species\species_types\slugcats\slugcat_bodyparts.dm" #include "modular_doppler\modular_traits\code\neutral.dm" #include "modular_doppler\modular_traits\code\organs.dm" #include "modular_doppler\obj_flags_doppler\code\objs.dm" From 636e32d3278f9910427cd83bfbfc45caa792e919 Mon Sep 17 00:00:00 2001 From: "Lila S." Date: Sun, 8 Sep 2024 00:51:38 +0200 Subject: [PATCH 3/3] review --- code/~doppler_earliest_defines.dm | 10 +-- .../lizard_body_markings.dm} | 2 +- .../lizard_frills.dm} | 2 +- .../lizard_horns.dm} | 2 +- .../lizard_snout.dm} | 2 +- .../lizard_tail.dm} | 2 +- .../slugcat_body_markings.dm | 5 ++ .../slugcat_accessories/slugcat_frills.dm | 16 ++++ .../code/slugcat_accessories/slugcat_horns.dm | 28 +++++++ .../code/slugcat_accessories/slugcat_snout.dm | 12 +++ .../code/slugcat_accessories/slugcat_tail.dm | 8 ++ .../code/overrides.dm | 0 .../icons/fallbacks.dmi | Bin .../{frills.dmi => lizard/lizard_frills.dmi} | Bin .../{horns.dmi => lizard/lizard_horns.dmi} | Bin .../icons/{ => lizard}/lizard_markings.dmi | Bin .../{snout.dmi => lizard/lizard_snout.dmi} | Bin .../lizard_tail.dmi} | Bin .../icons/slugcat/slugcat_frills.dmi | Bin 0 -> 704 bytes .../icons/slugcat/slugcat_horns.dmi | Bin 0 -> 1164 bytes .../icons/slugcat}/slugcat_markings.dmi | Bin .../icons/slugcat/slugcat_snout.dmi | Bin 0 -> 593 bytes .../icons/slugcat/slugcat_tail.dmi} | Bin .../slugcats/icons/slugcat_external.dmi | Bin 1972 -> 0 bytes .../slugcats/slugcat_accessories.dm | 78 ------------------ tgstation.dme | 18 ++-- 26 files changed, 90 insertions(+), 95 deletions(-) rename modular_doppler/modular_customization/accessories/code/{body_markings_lizard.dm => lizard_accessories/lizard_body_markings.dm} (78%) rename modular_doppler/modular_customization/accessories/code/{frills.dm => lizard_accessories/lizard_frills.dm} (77%) rename modular_doppler/modular_customization/accessories/code/{horns.dm => lizard_accessories/lizard_horns.dm} (78%) rename modular_doppler/modular_customization/accessories/code/{snout.dm => lizard_accessories/lizard_snout.dm} (78%) rename modular_doppler/modular_customization/accessories/code/{tail_lizard.dm => lizard_accessories/lizard_tail.dm} (80%) create mode 100644 modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_body_markings.dm create mode 100644 modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_frills.dm create mode 100644 modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_horns.dm create mode 100644 modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_snout.dm create mode 100644 modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_tail.dm rename modular_doppler/modular_customization/accessories/code/{overrides => ~overrides}/code/overrides.dm (100%) rename modular_doppler/modular_customization/accessories/code/{overrides => ~overrides}/icons/fallbacks.dmi (100%) rename modular_doppler/modular_customization/accessories/icons/{frills.dmi => lizard/lizard_frills.dmi} (100%) rename modular_doppler/modular_customization/accessories/icons/{horns.dmi => lizard/lizard_horns.dmi} (100%) rename modular_doppler/modular_customization/accessories/icons/{ => lizard}/lizard_markings.dmi (100%) rename modular_doppler/modular_customization/accessories/icons/{snout.dmi => lizard/lizard_snout.dmi} (100%) rename modular_doppler/modular_customization/accessories/icons/{lizard_tails.dmi => lizard/lizard_tail.dmi} (100%) create mode 100644 modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_frills.dmi create mode 100644 modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_horns.dmi rename modular_doppler/{modular_species/species_types/slugcats/icons => modular_customization/accessories/icons/slugcat}/slugcat_markings.dmi (100%) create mode 100644 modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_snout.dmi rename modular_doppler/{modular_species/species_types/slugcats/icons/slugcat_tails.dmi => modular_customization/accessories/icons/slugcat/slugcat_tail.dmi} (100%) delete mode 100644 modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi delete mode 100644 modular_doppler/modular_species/species_types/slugcats/slugcat_accessories.dm diff --git a/code/~doppler_earliest_defines.dm b/code/~doppler_earliest_defines.dm index de6c70013f424..5082774b03ab3 100644 --- a/code/~doppler_earliest_defines.dm +++ b/code/~doppler_earliest_defines.dm @@ -1,26 +1,26 @@ /// Hi! This file is here to work around some order-of-operations issues consistent humans & a couple other things have. /// If our overrides aren't loaded in early enough default TG stuff will end up in the critical [1] slot and break things. /datum/sprite_accessory/lizard_markings/none - icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi' name = "No Markings" icon_state = "none" /datum/sprite_accessory/snouts/none - icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi' name = "No Snout" icon_state = "none" /datum/sprite_accessory/frills/none - icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi' name = "No Frills" icon_state = "none" /datum/sprite_accessory/horns/none - icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi' name = "No Horns" icon_state = "none" /datum/sprite_accessory/tails/lizard/none - icon = 'modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi' + icon = 'modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi' name = "No Tail" icon_state = "none" diff --git a/modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_body_markings.dm similarity index 78% rename from modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm rename to modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_body_markings.dm index 842135847f9c9..b093e9b7927be 100644 --- a/modular_doppler/modular_customization/accessories/code/body_markings_lizard.dm +++ b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_body_markings.dm @@ -1,2 +1,2 @@ /datum/sprite_accessory/lizard_markings - icon = 'modular_doppler/modular_customization/accessories/icons/lizard_markings.dmi' + icon = 'modular_doppler/modular_customization/accessories/icons/lizard/lizard_markings.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/frills.dm b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_frills.dm similarity index 77% rename from modular_doppler/modular_customization/accessories/code/frills.dm rename to modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_frills.dm index de2a341d62d0f..590c3bf0df484 100644 --- a/modular_doppler/modular_customization/accessories/code/frills.dm +++ b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_frills.dm @@ -1,2 +1,2 @@ /datum/sprite_accessory/frills - icon = 'modular_doppler/modular_customization/accessories/icons/frills.dmi' + icon = 'modular_doppler/modular_customization/accessories/icons/lizard/lizard_frills.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/horns.dm b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_horns.dm similarity index 78% rename from modular_doppler/modular_customization/accessories/code/horns.dm rename to modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_horns.dm index 278554bdad017..da5cd89aab622 100644 --- a/modular_doppler/modular_customization/accessories/code/horns.dm +++ b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_horns.dm @@ -1,2 +1,2 @@ /datum/sprite_accessory/horns - icon = 'modular_doppler/modular_customization/accessories/icons/horns.dmi' + icon = 'modular_doppler/modular_customization/accessories/icons/lizard/lizard_horns.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/snout.dm b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_snout.dm similarity index 78% rename from modular_doppler/modular_customization/accessories/code/snout.dm rename to modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_snout.dm index e709ae9c80a07..00ac67399d324 100644 --- a/modular_doppler/modular_customization/accessories/code/snout.dm +++ b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_snout.dm @@ -1,2 +1,2 @@ /datum/sprite_accessory/snouts - icon = 'modular_doppler/modular_customization/accessories/icons/snout.dmi' + icon = 'modular_doppler/modular_customization/accessories/icons/lizard/lizard_snout.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/tail_lizard.dm b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_tail.dm similarity index 80% rename from modular_doppler/modular_customization/accessories/code/tail_lizard.dm rename to modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_tail.dm index 0220e45965547..41a19aa8ef5d0 100644 --- a/modular_doppler/modular_customization/accessories/code/tail_lizard.dm +++ b/modular_doppler/modular_customization/accessories/code/lizard_accessories/lizard_tail.dm @@ -1,2 +1,2 @@ /datum/sprite_accessory/tails/lizard - icon = 'modular_doppler/modular_customization/accessories/icons/lizard_tails.dmi' + icon = 'modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi' diff --git a/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_body_markings.dm b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_body_markings.dm new file mode 100644 index 0000000000000..eae00dc6aded6 --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_body_markings.dm @@ -0,0 +1,5 @@ +/datum/sprite_accessory/lizard_markings/slugcat + icon = 'modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_markings.dmi' + name = "Slugcat Underbelly" + icon_state = "scug_lbelly" + gender_specific = TRUE diff --git a/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_frills.dm b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_frills.dm new file mode 100644 index 0000000000000..e2ec556318d3a --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_frills.dm @@ -0,0 +1,16 @@ +/datum/sprite_accessory/frills/slugcat + icon = 'modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_frills.dmi' + name = "Slugcat" + icon_state = "scug_aquatic" + +/datum/sprite_accessory/frills/slugcat/sharp + name = "Slugcat Sharp" + icon_state = "scug_sharp" + +/datum/sprite_accessory/frills/slugcat/fluffy + name = "Slugcat Fluffy" + icon_state = "scug_fluffy" + +/datum/sprite_accessory/frills/slugcat/draconic + name = "Slugcat Draconic" + icon_state = "scug_dragon" diff --git a/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_horns.dm b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_horns.dm new file mode 100644 index 0000000000000..6eb862b9482fc --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_horns.dm @@ -0,0 +1,28 @@ +/datum/sprite_accessory/horns/slugcat + icon = 'modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_horns.dmi' + name = "Slugcat" + icon_state = "scug_standard" + +/datum/sprite_accessory/horns/slugcat/tall + name = "Slugcat Tall" + icon_state = "scug_tall" + +/datum/sprite_accessory/horns/slugcat/sharp + name = "Slugcat Sharp" + icon_state = "scug_sharp" + +/datum/sprite_accessory/horns/slugcat/forward + name = "Slugcat Droopy" + icon_state = "scug_forward" + +/datum/sprite_accessory/horns/slugcat/flopped + name = "Slugcat Long Flop" + icon_state = "scug_flopped" + +/datum/sprite_accessory/horns/slugcat/fluffy + name = "Slugcat Fluffy" + icon_state = "scug_fluffy" + +/datum/sprite_accessory/horns/slugcat/short + name = "Slugcat Short" + icon_state = "scug_short" diff --git a/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_snout.dm b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_snout.dm new file mode 100644 index 0000000000000..77a9300697b3c --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_snout.dm @@ -0,0 +1,12 @@ +/datum/sprite_accessory/snouts/slugcat + icon = 'modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_snout.dmi' + name = "Slugcat" + icon_state = "scug_standard" + +/datum/sprite_accessory/snouts/slugcat/sharp + name = "Slugcat Sharp" + icon_state = "scug_sharp" + +/datum/sprite_accessory/snouts/slugcat/round + name = "Slugcat Round" + icon_state = "scug_round" diff --git a/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_tail.dm b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_tail.dm new file mode 100644 index 0000000000000..0f3a6b566bc45 --- /dev/null +++ b/modular_doppler/modular_customization/accessories/code/slugcat_accessories/slugcat_tail.dm @@ -0,0 +1,8 @@ +/datum/sprite_accessory/tails/lizard/slugcat + icon = 'modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_tail.dmi' + name = "Slugcat" + icon_state = "scug_std" + +/datum/sprite_accessory/tails/lizard/slugcat/thick + name = "Slugcat Thick" + icon_state = "scug_thick" diff --git a/modular_doppler/modular_customization/accessories/code/overrides/code/overrides.dm b/modular_doppler/modular_customization/accessories/code/~overrides/code/overrides.dm similarity index 100% rename from modular_doppler/modular_customization/accessories/code/overrides/code/overrides.dm rename to modular_doppler/modular_customization/accessories/code/~overrides/code/overrides.dm diff --git a/modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi b/modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi similarity index 100% rename from modular_doppler/modular_customization/accessories/code/overrides/icons/fallbacks.dmi rename to modular_doppler/modular_customization/accessories/code/~overrides/icons/fallbacks.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/frills.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_frills.dmi similarity index 100% rename from modular_doppler/modular_customization/accessories/icons/frills.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard/lizard_frills.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/horns.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_horns.dmi similarity index 100% rename from modular_doppler/modular_customization/accessories/icons/horns.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard/lizard_horns.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/lizard_markings.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_markings.dmi similarity index 100% rename from modular_doppler/modular_customization/accessories/icons/lizard_markings.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard/lizard_markings.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/snout.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_snout.dmi similarity index 100% rename from modular_doppler/modular_customization/accessories/icons/snout.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard/lizard_snout.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/lizard_tails.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi similarity index 100% rename from modular_doppler/modular_customization/accessories/icons/lizard_tails.dmi rename to modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi diff --git a/modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_frills.dmi b/modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_frills.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b6a78a6564c9002245074a7fd4a128989a17d1b0 GIT binary patch literal 704 zcmV;x0zdtUP)005u_0{{R3dEt5<0000LP)t-sz`(%# z{Qc3<*sZO)ii@3SX??)Jz)FdWb^rhX0d!JMQvg8b*k%9#0H=CXSad{Xb7OL8aCB*J zZU6vyoSl)&3c@fHMAykzgmy1lyLF+oNCo=~;nF-IeVE)R{=LD1?v!?S2Ieq}$=Rts zH!Z8K4ZTYr>^QIkD>qw89#)`9VP8;Uq}2xJ5D-u%%rZ)Z^&#Po66K+nGk*#bIEg6# z_Ij?obuRGGMa_i=Jr4X>UA|(uOytEv6>bsGb}L4M0Y9zql#5C|e~CG(+v^%H zII%203-afkjCl_1bg#|N^;ShcT!}?@eh8knqM8KH96E^A@(+$@; zKD(-^L=iOINy4#ohbsaA0093Fcm4e95`GPPK2|Srcv0JCOyt??7>R-!Vggb9RR{!r zfHs&q(y-skU<$0i%FqXi{1dllm;SEUkuH{yI#@+h3}oqK;8Y9%00000+$J{0tY7B$ z^at~P(r@k$<~xSP{-Cy74a+C@Jt>bP?oFMlrJ2x1MS$G6e-Q|N87H(LFK`r?j-c@cRUynx((wV?Ow%=?SBRc^-tXLd6inXo zMw)pT^v8d&3bdBL5fa}30001ZZfwx8A2=0L^n+WmgPjtBuHIiFxmy(mzgy5~OC3%1 mem(8^Bi8R%1ONa49*{3hyBHRx;g*g70000%0000OP)t-sz`(%# z{Qc3<*sZO)ii@3SX?^DA?ZCjm?=ydF00001bW%=J06^y0W&i*H$a+**bVOxyV{&P5 zbZKvH004NLos-cD!XOleuk|TpyN_DC?V{L-1??3?Qd8KbsB850Nn@?6;&}I;!}<6) zN6g8oJ~u6?t_^+&=d~Hgfs~sqMw8}2#bRGzq=de!Fc&_sAY#lijJS3_#vMk|v0lvi zGhkUKLJ)uFda8^YJoUHnPGfiA%yD|GE-P6ANm{_zz`71@Tqvl`E9Pv%f(r)qN#mxZ zlYW6DawU|zoc>DmoO)FTfM*63y1R!{O*1Un*aanm;$X$;Trjjms+ykD0l9+Nu1H=C^xZ^X#vAjFZ>)jl3W`-|IaFoiWp z>WjMmK~LyZ?lu7c000000Kor&-k)AAf#KEO@zt@_ZC#du0WBCvV^#p$C%pjO6t^B@ z%Zk`C%=mRzOVT};Tq7BRJ1vBSh7PnW! zsV!(jmmd?_2LJ#70001hZ$QR5ExQdec;|;NJ38C)kDo9TppYq< z4+(JYI1%t!7sZ7LILE`6L_iqOh)KKWa$WcDd_ZFPb`awD?oYUU#^c{F{@BJUlt~Fl zqg?)gk9aKiwSW&IV9DhVoc(bSU+9nfi^)}T0%!z;6EJ0f0ssI200000zC1bq{`q8< z@1IXDz>xLtRn)mMeFQAe$u@1Lm%6=9QinE=>);~FHF21)nFh%WhGc+33KyU-?PsFg z{sNLAA%4?*imT0EWW2F&WW1}d#p6W#3r^N1fk_siDFtB$MVOBO0000000000{0l_B zav$e;0v04+!lA^0)UxjRXfpo&&IKrZJ$wKH=jA3NTG$!!C;dIFVBch_?Ae0)hxp_w*<1Gn!jKMa&KnkWXaFuydvIvAifPXBQ75 z-vLF+L0oNZvS&~f4LzE+7|6CQ?h##rl-y?!UIK+QCIA2c0DLLJ{RGke0?lXVSHXG1 zZ;LDAOJ}h3rJI?#E2sV8ZGB&q)@^y6(79?}kkX9PLHa|%z4>Y9s;c%rQ)%lh6VIb! z?tw|ati-*`^cc$J5BQKp;oNiTd1RhXICg_WyuZK(D5l+CV8VtGj?@t1{0?bm6~O#N zXUrmk0KtCc%&Y=l{ws*>nVAK|kx~Ev004k*#hu$9Gn)X(ni}=E{hqK7I2_?l_ogy& zn+jGQsqYf41#V=-0C=3Gl0gc>Fc3x8$tgm+7j3(Bp`=I!dxa28YyvhZ$waSju$ZnyQg{Ck z^WZT|NsjHQ>j}Md_#vIw){s4EHd~CIT7ZhBt}s$k4+`eufrE^(C@>P*`51Q?-5ej~ zoYTU@?-D@%+#8uUHURV2Ft9i^f;+(u^t_NwCdsNl*gBI{+)XQVKUlVF0y9OO4Q9n% z6P7EwfL}#R()RTIeJ{pi$11^`MMVGr0VYXAK~#90?b=Ol!Y~kqVgFR>7Lp#oiNv1B z9Dv@W_di9YZXBC1hX#hljjp>@A8M(rK(E3Lm{>xR>1 z337#BhE@4^&Y#+fE6TXzpj7x_bs{$v8|wX~IVc7B4Y+Y{KL7y0OIuDq&prZxZd_W1 zigG#c8QL;k{wU{zhrgfPfA`Nec|JH98;nTq-^iPN=Yth_v+sPcd)@>9004kms{r(f f@go2L0PsY=$K4Xz@zxNL00000NkvXXu0mjf-|ZG8 literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_tails.dmi b/modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_tail.dmi similarity index 100% rename from modular_doppler/modular_species/species_types/slugcats/icons/slugcat_tails.dmi rename to modular_doppler/modular_customization/accessories/icons/slugcat/slugcat_tail.dmi diff --git a/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi b/modular_doppler/modular_species/species_types/slugcats/icons/slugcat_external.dmi deleted file mode 100644 index 96fe02b359d767c9e77e11976c648a19cf78c451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1972 zcmaJ>c{J3E7ysJTAe9zn>)9GHgI9(!B!jV}XNw}FC}oQwWsR44_TNY~_API0V|^i$ zVJwZMWRx*9_H`Pn$u`X5>Gw{*-|w&AJ?EZ#&*v`ZF6Z9F-)t=;_a55|0Dz<=5@8Pj z0-iruSZEiye~B2gD-?dSaWrdhZ>Labczg?&%Y(yBlaljp`$jD+tn2{5t_jYQB`#*f$8}8yElp;kl(xF9vifNt=%>$ebK?_RsJ?f|qkD z&vX-@0HTj$&z&!xAYOLZ(X`JhB9LabqJ(Zdu=HpOBnaU*&jn+oQ|_;21t=(3hMxK5 zb3mOt#>)D`Qn>5yJtfP1-Eoc`=a>4_?ZH#G9#oSsRA9&qJfBpJsahC3+_j>Eq6#2HMGD+VucVIZEr}0^@qpe-2XuYRB7%x;U*;<{ zjAhqiT$5oNGSq~u>WHIMoS|EC8cMJ@kJ^OSyqBglk(IfvVYea2SA%zHUgwhw+g&)E zXo1%(NJ9z7^Rl%=W{jG`ySnp9Sxhi2CeXSC{?Rz*uRt78IZwPE2mt_5IZK3zV|eaL z-n-xueVNCqr)2|IwD&0yP7S;M`b7-;Al|XUhdR1Otc<`oW6262KU8R_$%2J2VZeEO z?|}ny!YbXY`Kw?6zzXGkx%aIf?Qaf-+2z}UC2_{w?~}NyI{}_M_s5;DOtK}q=j-?>_)RYA*+w$1q1HpE%No}_id@6?;R!{X|wBQdrJ(w8$~$ELTr6(5h6GoOc> zqN0ifp~06Cq{j!5XW@Cwok2U3(grXHG>*D46TtwlC-;k|&4yTTxePpekAM0ZHLS(YO#H(yK>P^z%UhO8PMA+~Yss_ZI?S_9!zo?4wl7l1I0mg&H!_ zI_LDC!pV;?QPjj{tr%KM%i-r|)*F!(eO6=av?^!b2E&t7?l4olhHO_i2ApW&`u^5q zxFI%?UoK!1#0t}@maJj1)vxCyvrt&HWqz0K}rFk8*G0+o=bZ#l6ne zKej!mdnQ^NR{~|0DpqsnVOZ_5iv?A-z6U3GM#Ev?{oGYI8AZgm^zgw1@r8u2zvB6C z=GYC*g?GZJQShfD!9kQVk0^9{0ZWe<&Gue&Vk&e#P?oO^tjv{jczN)qMm5X-NUq8? z^5#QyB5XNg$-jn9O=ZAlgRcJ-92+T}+w zJWaY>irF*waTp*(_J2AUMgFOKP1eUkqEGEWGpwi+GWxG9E8Ztaj@r>|_Dfd?Bav)< z*UU8G$p%C2^#}P1?e;7($U0g}zO8AR$u|@*Z>|$PVgAq{_nPg{AK0-XoWiy%iY#nt zn3A1abN{HD_P)=~oF%^YY0k<}T*-*qFQjSp!y3!^FlI{E_@00{_Fb>CsX4KyAq_Rw z{+|+-Zq!8?{^8b{otZp%o7sOtKBf$(Rqpr6>x7>xYX3#nTX6j?^rgDS0wuwJny3{F zH@qj~;nq94*NR%Rs?$7sFNAA)?bUi|NusGLrL4o@+_m?L9E0!KEJjeM(@SsV!p35* zz>*cMkzv#>uJb5CAJoL^ULk1WkA%C^pR{In{0hAiXf+&q3^H5F?R7V*z(Kqw01x0tL2f9 zB*y+_h3oM+7x(m5YGLUBlrl?4P-rhrE{Y--R=W!hiC7e&&9IX+zY-Mr*><`uT=G(w zV0_K-S+OduWEEx_{h-JyYhYUTY)xwo3vhtJntrK62Htv*eJ(oKEzy}NNHe&wozw62 z>4E|8orsGjtn(mcS^d9P(43bKEI!Tnc6TH}$7rYbY4O?W`$?gy?`kuBy|q;8d#a=i iL