diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 24e14b06fa7c..999d1eac052b 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -137,3 +137,6 @@ #define PLAYTIME_HARDCORE_RANDOM 120 // 2 hours /// The time needed to unlock the gamer cloak in preferences #define PLAYTIME_VETERAN 300000 // 5,000 hours + +/// The key used for sprite accessories that should never actually be applied to the player. +#define SPRITE_ACCESSORY_NONE "None" diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 5762d3d7d1ca..c6c9f76ea4f5 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -47,6 +47,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_appendages, GLOB.arachnid_appendages_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) //Monkestation Addition + init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_nose, GLOB.goblin_nose_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/apid_wings, GLOB.apid_wings_list) //Monkestation Addition init_sprite_accessory_subtypes(/datum/sprite_accessory/satyr_fluff, GLOB.satyr_fluff_list) //Monkestation Addition diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index f931aad35747..ed1a60449712 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -122,6 +122,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list) if(!length(GLOB.goblin_ears_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) + if(!length(GLOB.goblin_nose_list)) + init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_nose, GLOB.goblin_nose_list) if(!length(GLOB.floran_leaves_list)) init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) if(!GLOB.satyr_fluff_list.len) @@ -172,6 +174,7 @@ "arachnid_chelicerae" = pick(GLOB.arachnid_chelicerae_list), //Monkestation Addition "animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]", //Monkestation Addition "goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition + "goblin_nose" = pick(GLOB.goblin_nose_list), //Monkestation Addition "floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition "satyr_fluff" = pick(GLOB.satyr_fluff_list), //Monkestation Addition "satyr_tail" = pick(GLOB.satyr_tail_list), //Monkestation Addition diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index a8e30c317474..6e8572d7049b 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -54,6 +54,7 @@ GLOBAL_LIST_EMPTY(anime_bottom_list) //Monkestation Addition GLOBAL_LIST_EMPTY(arachnid_appendages_list) //Monkestation Addition GLOBAL_LIST_EMPTY(arachnid_chelicerae_list) //Monkestation Addition GLOBAL_LIST_EMPTY(goblin_ears_list) //Monkestation Addition +GLOBAL_LIST_EMPTY(goblin_nose_list) //Monkestation Addition GLOBAL_LIST_EMPTY(floran_leaves_list) //Monkestation Addition GLOBAL_LIST_EMPTY(satyr_fluff_list) //Monkestation Addition GLOBAL_LIST_EMPTY(satyr_tail_list) //Monkestation Addition diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 1fb2839c5314..c804191a588c 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -46,7 +46,7 @@ male += D.name female += D.name if(add_blank) - L["None"] = new /datum/sprite_accessory/blank + L[SPRITE_ACCESSORY_NONE] = new /datum/sprite_accessory/blank return L diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index f673d22cf934..221b80a8e6b2 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -474,6 +474,13 @@ GLOBAL_LIST_EMPTY(features_by_species) var/list/species_organs = mutant_organs + external_organs for(var/organ_path in species_organs) var/obj/item/organ/current_organ = organ_holder.get_organ_by_type(organ_path) + if(ispath(organ_path, /obj/item/organ/external) && !should_external_organ_apply_to(organ_path, organ_holder)) + if(!isnull(current_organ) && replace_current) + // if we have an organ here and we're replacing organs, remove it + current_organ.Remove(organ_holder) + QDEL_NULL(current_organ) + continue + if(!current_organ || replace_current) var/obj/item/organ/replacement = SSwardrobe.provide_type(organ_path) // If there's an existing mutant organ, we're technically replacing it. @@ -542,6 +549,9 @@ GLOBAL_LIST_EMPTY(features_by_species) if(ishuman(C)) var/mob/living/carbon/human/human = C for(var/obj/item/organ/external/organ_path as anything in external_organs) + if(!should_external_organ_apply_to(organ_path, human)) + continue + //Load a persons preferences from DNA var/obj/item/organ/external/new_organ = SSwardrobe.provide_type(organ_path) new_organ.Insert(human, special=TRUE, drop_if_replaced=FALSE) diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 3b09d88c9350..4fd3447fd8ba 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -103,40 +103,51 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/log_mob_tag(text) return +/// Takes in an accessory list and returns the first entry from that list, ensuring that we dont return SPRITE_ACCESSORY_NONE in the process. +/proc/get_consistent_feature_entry(list/accessory_feature_list) + var/consistent_entry = (accessory_feature_list- SPRITE_ACCESSORY_NONE)[1] + ASSERT(!isnull(consistent_entry)) + return consistent_entry + /proc/create_consistent_human_dna(mob/living/carbon/human/target) - target.dna.initialize_dna(/datum/blood_type/crew/human/o_plus, skip_index = TRUE) - target.dna.features["body_markings"] = "None" - target.dna.features["ears"] = "None" - target.dna.features["frills"] = "None" - target.dna.features["horns"] = "None" - target.dna.features["moth_antennae"] = "Plain" - target.dna.features["moth_markings"] = "None" - target.dna.features["moth_wings"] = "Plain" - target.dna.features["snout"] = "Round" - target.dna.features["spines"] = "None" - target.dna.features["tail_cat"] = "None" - target.dna.features["tail_lizard"] = "Smooth" - target.dna.features["tail_monkey"] = "Monkey" - target.dna.features["pod_hair"] = "Ivy" + target.dna.initialize_dna(skip_index = TRUE) + /* monkestation removal + target.dna.features["mcolor"] = COLOR_VIBRANT_LIME + target.dna.features["ethcolor"] = COLOR_WHITE + */ + target.dna.features["body_markings"] = get_consistent_feature_entry(GLOB.body_markings_list) + target.dna.features["ears"] = get_consistent_feature_entry(GLOB.ears_list) + target.dna.features["frills"] = get_consistent_feature_entry(GLOB.frills_list) + target.dna.features["horns"] = get_consistent_feature_entry(GLOB.horns_list) + target.dna.features["moth_antennae"] = get_consistent_feature_entry(GLOB.moth_antennae_list) + target.dna.features["moth_markings"] = get_consistent_feature_entry(GLOB.moth_markings_list) + target.dna.features["moth_wings"] = get_consistent_feature_entry(GLOB.moth_wings_list) + target.dna.features["snout"] = get_consistent_feature_entry(GLOB.snouts_list) + target.dna.features["spines"] = get_consistent_feature_entry(GLOB.spines_list) + target.dna.features["tail_cat"] = get_consistent_feature_entry(GLOB.tails_list_human) // it's a lie + target.dna.features["tail_lizard"] = get_consistent_feature_entry(GLOB.tails_list_lizard) + target.dna.features["tail_monkey"] = get_consistent_feature_entry(GLOB.tails_list_monkey) + target.dna.features["pod_hair"] = get_consistent_feature_entry(GLOB.pod_hair_list) target.dna.features["fur"] = COLOR_MONKEY_BROWN //Monkestation Addition - target.dna.features["ethereal_horns"] = "None" //Monkestation Addition - target.dna.features["ethereal_tail"] = "None" //Monkestation Addition - target.dna.features["ipc_screen"] = "BSOD" //Monkestation Addition - target.dna.features["ipc_chassis"] = "Bishop Cyberkinetics" //Monkestation Addition - target.dna.features["ipc_antenna"] = "None" //Monkestation Addition - target.dna.features["anime_top"] = "None" //Monkestation Addition - target.dna.features["anime_middle"] = "None" //Monkestation Addition - target.dna.features["anime_bottom"] = "None" //Monkestation Addition - target.dna.features["arachnid_appendages"] = "Long" //Monkestation Addition - target.dna.features["arachnid_chelicerae"] = "Basic" //Monkestation Addition - target.dna.features["goblin_ears"] = "Normal" //Monkestation Addition - target.dna.features["floran_leaves"] = "Furnivour" //Monkestation Addition - target.dna.features["satyr_fluff"] = "Normal" //Monkestation Addition - target.dna.features["satyr_tail"] = "Short" //Monkestation Addition - target.dna.features["satyr_horns"] = "Back" //Monkestation Addition - target.dna.features["arm_wings"] = "Monochrome" //Monkestation Addition - target.dna.features["ears_avian"] = "Hermes" //Monkestation Addition - target.dna.features["tail_avian"] = "Eagle" //Monkestation Addition + target.dna.features["ethereal_horns"] = get_consistent_feature_entry(GLOB.ethereal_horns_list) //Monkestation Addition + target.dna.features["ethereal_tail"] = get_consistent_feature_entry(GLOB.ethereal_tail_list) //Monkestation Addition + target.dna.features["ipc_screen"] = get_consistent_feature_entry(GLOB.ipc_screens_list) //Monkestation Addition + target.dna.features["ipc_chassis"] = get_consistent_feature_entry(GLOB.ipc_chassis_list) //Monkestation Addition + target.dna.features["ipc_antenna"] = get_consistent_feature_entry(GLOB.ipc_antennas_list) //Monkestation Addition + target.dna.features["anime_top"] = get_consistent_feature_entry(GLOB.anime_top_list) //Monkestation Addition + target.dna.features["anime_middle"] = get_consistent_feature_entry(GLOB.anime_middle_list) //Monkestation Addition + target.dna.features["anime_bottom"] = get_consistent_feature_entry(GLOB.anime_bottom_list) //Monkestation Addition + target.dna.features["arachnid_appendages"] = get_consistent_feature_entry(GLOB.arachnid_appendages_list) //Monkestation Addition + target.dna.features["arachnid_chelicerae"] = get_consistent_feature_entry(GLOB.arachnid_chelicerae_list) //Monkestation Addition + target.dna.features["goblin_ears"] = get_consistent_feature_entry(GLOB.goblin_ears_list) //Monkestation Addition + target.dna.features["goblin_nose"] = get_consistent_feature_entry(GLOB.goblin_nose_list) //Monkestation Addition + target.dna.features["floran_leaves"] = get_consistent_feature_entry(GLOB.floran_leaves_list) //Monkestation Addition + target.dna.features["satyr_fluff"] = get_consistent_feature_entry(GLOB.satyr_fluff_list) //Monkestation Addition + target.dna.features["satyr_tail"] = get_consistent_feature_entry(GLOB.satyr_tail_list) //Monkestation Addition + target.dna.features["satyr_horns"] = get_consistent_feature_entry(GLOB.satyr_horns_list) //Monkestation Addition + target.dna.features["arm_wings"] = get_consistent_feature_entry(GLOB.arm_wings_list) //Monkestation Addition + target.dna.features["ears_avian"] = get_consistent_feature_entry(GLOB.avian_ears_list) //Monkestation Addition + target.dna.features["tail_avian"] = get_consistent_feature_entry(GLOB.tails_list_avian) //Monkestation Addition var/datum/color_palette/generic_colors/palette = target.dna.color_palettes[/datum/color_palette/generic_colors] palette.mutant_color = COLOR_VIBRANT_LIME diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index a6161aac34ce..1b97c5cc3dee 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -268,6 +268,15 @@ /datum/species/ethereal/lustrous/on_species_gain(mob/living/carbon/new_lustrous, datum/species/old_species, pref_load) ..() + // monkestation edit start + /* original + default_color = new_lustrous.dna.features["ethcolor"] + new_lustrous.dna.features["ethcolor"] = GLOB.color_list_lustrous[pick(GLOB.color_list_lustrous)] //Picks one of 5 lustrous-specific colors. + */ var/datum/color_palette/generic_colors/palette = new_lustrous.dna.color_palettes[/datum/color_palette/generic_colors] default_color = palette.ethereal_color - palette.ethereal_color = GLOB.color_list_lustrous[pick(GLOB.color_list_lustrous)] //Picks one of 5 lustrous-specific colors. + if(istype(new_lustrous, /mob/living/carbon/human/dummy/consistent)) + palette.ethereal_color = GLOB.color_list_lustrous[1] + else + palette.ethereal_color = GLOB.color_list_lustrous[pick(GLOB.color_list_lustrous)] //Picks one of 5 lustrous-specific colors. + // monkestation edit end diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index c290b443febe..869665a42efc 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -498,6 +498,10 @@ //Copied from /datum/species/proc/on_species_gain() for(var/obj/item/organ/external/organ_path as anything in dna.species.external_organs) + // monkestation edit start + if (!should_external_organ_apply_to(organ_path, src)) + continue + // monkestation edit end //Load a persons preferences from DNA var/zone = initial(organ_path.zone) if(zone != limb_zone) diff --git a/code/modules/surgery/organs/external/_external_organs.dm b/code/modules/surgery/organs/external/_external_organs.dm index d3a6e26f87b2..d7bdee9f60ef 100644 --- a/code/modules/surgery/organs/external/_external_organs.dm +++ b/code/modules/surgery/organs/external/_external_organs.dm @@ -57,6 +57,9 @@ return ..() /obj/item/organ/external/Insert(mob/living/carbon/receiver, special, drop_if_replaced) + if(!should_external_organ_apply_to(type, receiver)) + stack_trace("adding a [type] to a [receiver.type] when it shouldn't be!") + var/obj/item/bodypart/limb = receiver.get_bodypart(deprecise_zone(zone)) if(!limb) @@ -124,6 +127,20 @@ ownerlimb = null return ..() +/proc/should_external_organ_apply_to(obj/item/organ/external/organpath, mob/living/carbon/target) + if(isnull(organpath) || isnull(target)) + stack_trace("passed a null path or mob to 'should_external_organ_apply_to'") + return FALSE + + var/datum/bodypart_overlay/mutant/bodypart_overlay = initial(organpath.bodypart_overlay) + var/feature_key = !isnull(bodypart_overlay) && initial(bodypart_overlay.feature_key) + if(isnull(feature_key)) + return TRUE + + if(target.dna.features[feature_key] != SPRITE_ACCESSORY_NONE) + return TRUE + return FALSE + ///Update our features after something changed our appearance /obj/item/organ/external/proc/mutate_feature(features, mob/living/carbon/human/human) if(!dna_block) diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png index 0a7fdd7fb774..32f7056b7355 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_apid.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_apid.png index ad5c7f80a012..b7411f8a3d15 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_apid.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_apid.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png index 1f4079b84a67..4544353720fa 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png index 369bc28ae327..f0b63d0b6b66 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ethereal_lustrous.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ipc.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ipc.png index 4f3af3a14257..26238d82e7bf 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ipc.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_ipc.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png index 2f8bf3f0f2b8..76359a11065e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png index 9b7b8ed9a00d..eafa614989a0 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png index cd451ca27141..21a5839c2acc 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png index dce4b390b828..1ee0983611f6 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_werewolf.png differ diff --git a/monkestation/code/datums/quirks/neutral_quirks/anime.dm b/monkestation/code/datums/quirks/neutral_quirks/anime.dm index 35246e0bb640..8bc582563d3f 100644 --- a/monkestation/code/datums/quirks/neutral_quirks/anime.dm +++ b/monkestation/code/datums/quirks/neutral_quirks/anime.dm @@ -18,6 +18,8 @@ var/datum/species/species = quirk_holder.has_dna()?.species if(species) for(var/obj/item/organ/external/organ_path as anything in anime_list) + if (!should_external_organ_apply_to(organ_path, quirk_holder)) + continue //Load a persons preferences from DNA var/obj/item/organ/external/new_organ = SSwardrobe.provide_type(organ_path) new_organ.Insert(quirk_holder, special = TRUE, drop_if_replaced = FALSE) @@ -32,4 +34,6 @@ /datum/quirk/anime/proc/on_species_gain(datum/source, datum/species/new_species, datum/species/old_species) for(var/obj/item/organ/external/organ_path as anything in anime_list) + if (!should_external_organ_apply_to(organ_path, quirk_holder)) + continue new_species.external_organs |= organ_path diff --git a/monkestation/code/modules/client/preferences/species_features/goblin.dm b/monkestation/code/modules/client/preferences/species_features/goblin.dm index dd6902e933bc..93d4d6c97b98 100644 --- a/monkestation/code/modules/client/preferences/species_features/goblin.dm +++ b/monkestation/code/modules/client/preferences/species_features/goblin.dm @@ -14,3 +14,20 @@ /datum/preference/choiced/goblin_ears/apply_to_human(mob/living/carbon/human/target, value) target.dna.features["goblin_ears"] = value + +/datum/preference/choiced/goblin_nose + savefile_key = "feature_goblin_nose" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_FEATURES + main_feature_name = "Goblin Nose" + should_generate_icons = TRUE + +/datum/preference/choiced/goblin_nose/init_possible_values() + return possible_values_for_sprite_accessory_list_for_body_part( + GLOB.goblin_nose_list, + "goblin_nose", + list("ADJ"), + ) + +/datum/preference/choiced/goblin_nose/apply_to_human(mob/living/carbon/human/target, value) + target.dna.features["goblin_nose"] = value diff --git a/monkestation/code/modules/mob/dead/new_player/sprite_accessories/goblin_accessories.dm b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/goblin_accessories.dm index 1019ce177f89..6f3d9cc46d74 100644 --- a/monkestation/code/modules/mob/dead/new_player/sprite_accessories/goblin_accessories.dm +++ b/monkestation/code/modules/mob/dead/new_player/sprite_accessories/goblin_accessories.dm @@ -18,3 +18,32 @@ /datum/sprite_accessory/goblin_ears/long name = "Long" icon_state = "long" + +/datum/sprite_accessory/goblin_nose + icon = 'monkestation/icons/mob/species/goblin/goblin_nose.dmi' + palette = /datum/color_palette/generic_colors + palette_key = MUTANT_COLOR + +/datum/sprite_accessory/goblin_nose/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/goblin_nose/button + name = "Button" + icon_state = "button" + +/datum/sprite_accessory/goblin_nose/liar + name = "Liar" + icon_state = "liar" + +/datum/sprite_accessory/goblin_nose/sniffer + name = "Sniffer" + icon_state = "sniffer" + +/datum/sprite_accessory/goblin_nose/hook + name = "Hook" + icon_state = "hook" + +/datum/sprite_accessory/goblin_nose/wobble + name = "Wobble" + icon_state = "wobble" diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm index 5d62d11dbbb1..5f8e9598932f 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm @@ -16,6 +16,7 @@ inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID external_organs = list( /obj/item/organ/external/goblin_ears = "long", + /obj/item/organ/external/goblin_nose = "small", ) meat = /obj/item/food/meat/steak mutanttongue = /obj/item/organ/internal/tongue/goblin diff --git a/monkestation/code/modules/pissing/bladder.dm b/monkestation/code/modules/pissing/bladder.dm index 20f6cf99c8e7..3c8eda613390 100644 --- a/monkestation/code/modules/pissing/bladder.dm +++ b/monkestation/code/modules/pissing/bladder.dm @@ -9,7 +9,7 @@ name = "bladder" desc = "This is where the pee is stored" - icon = 'monkestation/icons/obj/organs.dmi' + icon = 'monkestation/icons/obj/medical/organs/organs.dmi' icon_state = "bladder" zone = BODY_ZONE_PRECISE_GROIN diff --git a/monkestation/code/modules/surgery/organs/external/goblin_accessories.dm b/monkestation/code/modules/surgery/organs/external/goblin_accessories.dm index 042b8058d177..569f04725baf 100644 --- a/monkestation/code/modules/surgery/organs/external/goblin_accessories.dm +++ b/monkestation/code/modules/surgery/organs/external/goblin_accessories.dm @@ -23,3 +23,29 @@ /datum/bodypart_overlay/mutant/goblin_ears/can_draw_on_bodypart(mob/living/carbon/human/human) return TRUE + +/obj/item/organ/external/goblin_nose + name = "goblin nose" + desc = "It doesn't actually let you smell better." + icon_state = "goblin_nose" + icon = 'monkestation/icons/obj/medical/organs/organs.dmi' + + preference = "feature_goblin_nose" + zone = BODY_ZONE_HEAD + slot = ORGAN_SLOT_EXTERNAL_SNOUT + + use_mob_sprite_as_obj_sprite = TRUE + bodypart_overlay = /datum/bodypart_overlay/mutant/goblin_nose + +/datum/bodypart_overlay/mutant/goblin_nose + layers = EXTERNAL_ADJACENT | EXTERNAL_FRONT + feature_key = "goblin_nose" + +/datum/bodypart_overlay/mutant/goblin_nose/get_global_feature_list() + return GLOB.goblin_nose_list + +/datum/bodypart_overlay/mutant/goblin_nose/get_base_icon_state() + return sprite_datum.icon_state + +/datum/bodypart_overlay/mutant/goblin_nose/can_draw_on_bodypart(mob/living/carbon/human/human) + return TRUE diff --git a/monkestation/icons/mob/species/goblin/goblin_nose.dmi b/monkestation/icons/mob/species/goblin/goblin_nose.dmi new file mode 100644 index 000000000000..3f188ad61efb Binary files /dev/null and b/monkestation/icons/mob/species/goblin/goblin_nose.dmi differ diff --git a/monkestation/icons/obj/medical/organs/organs.dmi b/monkestation/icons/obj/medical/organs/organs.dmi index 652c707805b9..ce095de79c4f 100644 Binary files a/monkestation/icons/obj/medical/organs/organs.dmi and b/monkestation/icons/obj/medical/organs/organs.dmi differ diff --git a/monkestation/icons/obj/organs.dmi b/monkestation/icons/obj/organs.dmi deleted file mode 100644 index bbec77b14e24..000000000000 Binary files a/monkestation/icons/obj/organs.dmi and /dev/null differ