diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index be0ac101..8d50a151 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -58,8 +58,10 @@ #define BODYPART_DISABLED_DAMAGE 1 #define BODYPART_DISABLED_PARALYSIS 2 +#define DEFAULT_BODYPART_ICON 'icons/mob/human_parts.dmi' #define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/human_parts_greyscale.dmi' #define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi' +#define DEFAULT_BODYPART_ICON_CITADEL 'modular_citadel/icons/mob/mutant_bodyparts.dmi' #define MONKEY_BODYPART "monkey" #define TERATOMA_BODYPART "teratoma" @@ -269,4 +271,4 @@ #define HUMAN_FIRE_STACK_ICON_NUM 3 #define PULL_PRONE_SLOWDOWN 0.6 -#define HUMAN_CARRY_SLOWDOWN 0 \ No newline at end of file +#define HUMAN_CARRY_SLOWDOWN 0 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 43db4347..cce58af7 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -49,7 +49,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) return pick(GLOB.socks_list) -/proc/random_features() +/proc/random_features(intendedspecies) if(!GLOB.tails_list_human.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) if(!GLOB.tails_list_lizard.len) @@ -107,6 +107,8 @@ var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[mtpath] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies)) + continue if(!S.ckeys_allowed) snowflake_mam_tails_list[S.name] = mtpath var/list/snowflake_markings_list = list() @@ -114,6 +116,8 @@ var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[mmpath] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies)) + continue if(!S.ckeys_allowed) snowflake_markings_list[S.name] = mmpath var/list/snowflake_ears_list = list() @@ -121,6 +125,8 @@ var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[mepath] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies)) + continue if(!S.ckeys_allowed) snowflake_ears_list[S.name] = mepath var/list/snowflake_mam_snouts_list = list() @@ -130,6 +136,15 @@ var/datum/sprite_accessory/S = instance if(!S.ckeys_allowed) snowflake_mam_snouts_list[S.name] = mspath + var/list/snowflake_ipc_antenna_list = list() + for(var/mspath in GLOB.ipc_antennas_list) + var/datum/sprite_accessory/mam_snouts/instance = GLOB.ipc_antennas_list[mspath] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies)) + continue + if(!S.ckeys_allowed) + snowflake_ipc_antenna_list[S.name] = mspath var/color1 = random_short_color() var/color2 = random_short_color() var/color3 = random_short_color() @@ -154,10 +169,10 @@ "moth_markings" = pick(GLOB.moth_markings_list), "insect_fluff" = "None", "taur" = "None", - "mam_body_markings" = pick(snowflake_markings_list), - "mam_ears" = pick(snowflake_ears_list), - "mam_snouts" = pick(snowflake_mam_snouts_list), - "mam_tail" = pick(snowflake_mam_tails_list), + "mam_body_markings" = snowflake_markings_list.len ? pick(snowflake_markings_list) : "None", + "mam_ears" = snowflake_ears_list ? pick(snowflake_ears_list) : "None", + "mam_snouts" = snowflake_mam_snouts_list ? pick(snowflake_mam_snouts_list) : "None", + "mam_tail" = snowflake_mam_tails_list ? pick(snowflake_mam_tails_list) : "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", @@ -210,7 +225,7 @@ "womb_cum_mult" = CUM_RATE_MULT, "womb_efficiency" = CUM_EFFICIENCY, "womb_fluid" = "femcum", - "ipc_screen" = "Sunburst", + "ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None", "ipc_antenna" = "None", "flavor_text" = "")) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 43ec9e54..360c2451 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -285,7 +285,7 @@ unique_enzymes = generate_unique_enzymes() uni_identity = generate_uni_identity() generate_dna_blocks() - features = random_features() + features = random_features(species?.id) /datum/dna/stored //subtype used by brain mob's stored_dna diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index a3250fe1..c7ccc18f 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -136,7 +136,8 @@ limb = new buildpath(loc) if(selected_category=="human" || selected_category=="lizard") //Species with greyscale parts should be included here limb.icon = 'icons/mob/human_parts_greyscale.dmi' - limb.should_draw_greyscale = TRUE + limb.base_bp_icon = DEFAULT_BODYPART_ICON_ORGANIC + limb.color_src = MUTCOLORS else limb.icon = 'icons/mob/human_parts.dmi' // Set this limb up using the specias name and body zone diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9c17a9d3..83e1bd00 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -230,6 +230,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/icon/bgstate = "steel" var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced") + var/show_mismatched_markings = FALSE //determines whether or not the markings lists should show markings that don't match the currently selected species. Intentionally left unsaved. /datum/preferences/New(client/C) parent = C @@ -446,6 +447,15 @@ GLOBAL_LIST_EMPTY(preferences_datums) //Mutant stuff var/mutant_category = 0 + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

Show mismatched markings

" + dat += "[show_mismatched_markings ? "Yes" : "No"]" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) //just in case someone sets the max rows to 1 or something dumb like that + dat += "" + mutant_category = 0 + + if("tail_lizard" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -1719,6 +1729,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) else to_chat(user, "Invalid color. Your color is not bright enough.") + if("mismatched_markings") + show_mismatched_markings = !show_mismatched_markings + if("ipc_screen") var/new_ipc_screen new_ipc_screen = input(user, "Choose your character's screen:", "Character Preference") as null|anything in GLOB.ipc_screens_list @@ -1726,8 +1739,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["ipc_screen"] = new_ipc_screen if("ipc_antenna") + var/list/snowflake_antenna_list = list() + //Potential todo: turn all of THIS into a define to reduce copypasta. + for(var/path in GLOB.ipc_antennas_list) + var/datum/sprite_accessory/antenna/instance = GLOB.ipc_antennas_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_antenna_list[S.name] = path var/new_ipc_antenna - new_ipc_antenna = input(user, "Choose your character's antenna:", "Character Preference") as null|anything in GLOB.ipc_antennas_list + new_ipc_antenna = input(user, "Choose your character's antenna:", "Character Preference") as null|anything in snowflake_antenna_list if(new_ipc_antenna) features["ipc_antenna"] = new_ipc_antenna @@ -1747,6 +1770,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/tails/human/instance = GLOB.tails_list_human[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_tails_list[S.name] = path var/new_tail @@ -1764,6 +1789,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_tails_list[S.name] = path var/new_tail @@ -1781,6 +1808,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/mam_snouts/instance = GLOB.snouts_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_snouts_list[S.name] = path var/new_snout @@ -1796,6 +1825,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_mam_snouts_list[S.name] = path var/new_mam_snouts @@ -1887,6 +1918,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_taur_list[S.name] = path var/new_taur @@ -1905,6 +1938,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_ears_list[S.name] = path var/new_ears @@ -1918,6 +1953,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_ears_list[S.name] = path var/new_ears @@ -1931,6 +1968,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] if(istype(instance, /datum/sprite_accessory)) var/datum/sprite_accessory/S = instance + if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id)) + continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_markings_list[S.name] = path var/new_mam_body_markings diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 83eea366..96acb40d 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -21,7 +21,7 @@ if(!pref_species) var/rando_race = pick(GLOB.roundstart_races) pref_species = new rando_race() - features = random_features() + features = random_features(pref_species?.id) age = rand(AGE_MIN,AGE_MAX) /datum/preferences/proc/update_preview_icon() diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm index 5e24d063..52662384 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -61,6 +61,9 @@ var/dimension_y = 32 var/center = FALSE //Should we center the sprite? + //For soft-restricting markings to species IDs + var/list/recommended_species + /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' - var/has_color = FALSE \ No newline at end of file + var/has_color = FALSE diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm index 84c9feaa..feaa9495 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -433,10 +433,12 @@ /datum/sprite_accessory/mam_tails color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' + recommended_species = list("mammal", "slimeperson", "podweak", "felinid", "insect", "avian", "aquatic") //Despite not being mammals, avians and aquatic parts are in the mammal files here. /datum/sprite_accessory/mam_tails/none name = "None" icon_state = "none" + recommended_species = null /datum/sprite_accessory/mam_tails_animated color_src = MATRIXED @@ -707,4 +709,4 @@ datum/sprite_accessory/mam_tails/insect /datum/sprite_accessory/mam_tails_animated/wolf name = "Wolf" - icon_state = "wolf" \ No newline at end of file + icon_state = "wolf" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b1bed62e..f547d0a9 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -82,6 +82,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/whitelisted = 0 //Is this species restricted to certain players? var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both. + var/icon_limbs //Overrides the icon used for the limbs of this species. Mainly for downstream, and also because hardcoded icons disgust me. Implemented and maintained as a favor in return for a downstream's implementation of synths. /////////// // PROCS // diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3df86ce4..e278e7dc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -654,6 +654,8 @@ generate/load female uniform sprites matching all previously decided variables . += "-robotic" if(BP.use_digitigrade) . += "-digitigrade[BP.use_digitigrade]" + if(BP.digitigrade_type) + . += "-[BP.digitigrade_type]" if(BP.dmg_overlay_type) . += "-[BP.dmg_overlay_type]" if(BP.body_markings) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 4a853ff0..e8e8bd7e 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -42,6 +42,8 @@ var/skin_tone = "" var/body_gender = "" var/species_id = "" + var/color_src + var/base_bp_icon //Overrides the icon being used for this limb. This is mainly for downstreams, implemented and maintained as a favor in return for implementing synths. And also because should_draw_* for icon overrides was pretty messy. You're welcome. var/should_draw_gender = FALSE var/should_draw_greyscale = FALSE var/species_color = "" @@ -53,6 +55,8 @@ var/auxmarking = "" var/list/auxmarking_color = list() + var/digitigrade_type + var/animal_origin = null //for nonhuman bodypart (e.g. monkey) var/dismemberable = 1 //whether it can be dismembered with a weapon. @@ -281,9 +285,9 @@ if(change_icon_to_default) if(status == BODYPART_ORGANIC) - icon = DEFAULT_BODYPART_ICON_ORGANIC + icon = base_bp_icon || DEFAULT_BODYPART_ICON_ORGANIC else if(status == BODYPART_ROBOTIC) - icon = DEFAULT_BODYPART_ICON_ROBOTIC + icon = base_bp_icon || DEFAULT_BODYPART_ICON_ROBOTIC if(owner) owner.updatehealth() @@ -311,7 +315,8 @@ species_id = "husk" //overrides species_id dmg_overlay_type = "" //no damage overlay shown when husked should_draw_gender = FALSE - should_draw_greyscale = FALSE + color_src = FALSE + base_bp_icon = DEFAULT_BODYPART_ICON no_update = TRUE body_markings = "husk" // reeee auxmarking = "husk" @@ -321,11 +326,12 @@ if(!animal_origin) var/mob/living/carbon/human/H = C - should_draw_greyscale = FALSE + color_src = FALSE var/datum/species/S = H.dna.species + base_bp_icon = S?.icon_limbs || DEFAULT_BODYPART_ICON species_id = S.limbs_id - should_draw_citadel = S.should_draw_citadel // Citadel Addition + species_flags_list = H.dna.species.species_traits //body marking memes @@ -340,7 +346,7 @@ if(S.use_skintones) skin_tone = H.skin_tone - should_draw_greyscale = TRUE + base_bp_icon = (base_bp_icon == DEFAULT_BODYPART_ICON) ? DEFAULT_BODYPART_ICON_ORGANIC : base_bp_icon else skin_tone = "" @@ -352,18 +358,28 @@ species_color = S.fixed_mut_color else species_color = H.dna.features["mcolor"] - should_draw_greyscale = TRUE + base_bp_icon = (base_bp_icon == DEFAULT_BODYPART_ICON) ? DEFAULT_BODYPART_ICON_ORGANIC : base_bp_icon else species_color = "" + if(base_bp_icon != DEFAULT_BODYPART_ICON) + color_src = MUTCOLORS //TODO - Add color matrix support to base limbs + + if("legs" in S.default_features) + if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG) + if(DIGITIGRADE in S.species_traits) + digitigrade_type = lowertext(H.dna.features["legs"]) + else + digitigrade_type = null + if("mam_body_markings" in S.default_features) var/datum/sprite_accessory/Smark Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] if(Smark) body_markings_icon = Smark.icon if(H.dna.features.["mam_body_markings"] != "None") - body_markings = lowertext(H.dna.features.["mam_body_markings"]) - auxmarking = lowertext(H.dna.features.["mam_body_markings"]) + body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) + auxmarking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) else body_markings = "plain" auxmarking = "plain" @@ -428,7 +444,7 @@ else . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(body_markings_icon, "[body_markings]_digitigrade_1_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/image/aux @@ -453,28 +469,17 @@ should_draw_gender = FALSE if(is_organic_limb()) - if(should_draw_greyscale) - limb.icon = 'icons/mob/human_parts_greyscale.dmi' - if(should_draw_gender) - limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" - else if(use_digitigrade) + limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi' + if(should_draw_gender) + limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" + else if (use_digitigrade) + if(base_bp_icon == DEFAULT_BODYPART_ICON_ORGANIC) //Compatibility hack for the current iconset. limb.icon_state = "digitigrade_[use_digitigrade]_[body_zone]" else - limb.icon_state = "[species_id]_[body_zone]" - else - limb.icon = 'icons/mob/human_parts.dmi' - if(should_draw_gender) - limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" - else - limb.icon_state = "[species_id]_[body_zone]" + limb.icon_state = "[species_id]_digitigrade_[use_digitigrade]_[body_zone]" - // Citadel Start - if(should_draw_citadel && !use_digitigrade) - limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' - if(should_draw_gender) - limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" - else - limb.icon_state = "[species_id]_[body_zone]" + else + limb.icon_state = "[species_id]_[body_zone]" // Body markings if(body_markings) @@ -533,11 +538,11 @@ else marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking = image(body_markings_icon, "[body_markings]_digitigrade_1_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) . += marking return - if(should_draw_greyscale) + if(color_src) //TODO - add color matrix support for base species limbs var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) if(draw_color) limb.color = "#[draw_color]" diff --git a/config/game_options.txt b/config/game_options.txt index 7f373657..ec31204b 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -415,6 +415,7 @@ ROUNDSTART_RACES human ## Races that are strictly worse than humans that could probably be turned on without balance concerns ROUNDSTART_RACES lizard +ROUNDSTART_RACES synthliz #ROUNDSTART_RACES fly #ROUNDSTART_RACES insect ROUNDSTART_RACES plasmaman diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index 03b829e4..6c9d59a0 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm index a8056b01..3c8d2a69 100644 --- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -702,10 +702,12 @@ /datum/sprite_accessory/mam_snouts color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + recommended_species = list("mammal", "slimeperson", "insect", "podweak", "avian", "aquatic") /datum/sprite_accessory/mam_snouts/none name = "None" icon_state = "none" + recommended_species = null /****************************************** @@ -857,6 +859,29 @@ icon_state = "roundlight" color_src = MUTCOLORS +//Synth snouts (This is the most important part) +/datum/sprite_accessory/mam_snouts/synthliz + recommended_species = list("synthliz") + color_src = MUTCOLORS + name = "Synthetic Lizard - Snout" + icon_state = "synthliz_basic" + +/datum/sprite_accessory/mam_snouts/synthliz/synthliz_under + color_src = MATRIXED + name = "Synthetic Lizard - Snout Under" + icon_state = "synthliz_under" + +/datum/sprite_accessory/mam_snouts/synthliz/synthliz_tert + color_src = MATRIXED + name = "Synthetic Lizard - Snout Tertiary" + icon_state = "synthliz_tert" + +/datum/sprite_accessory/mam_snouts/synthliz/synthliz_tertunder + color_src = MATRIXED + name = "Synthetic Lizard - Snout Tertiary Under" + icon_state = "synthliz_tertunder" + + /****************************************** **************** Snouts ******************* @@ -1361,6 +1386,18 @@ datum/sprite_accessory/mam_tails/insect name = "Wolf" icon_state = "wolf" +/datum/sprite_accessory/mam_tails/synthliz + recommended_species = list("synthliz") + color_src = MUTCOLORS + name = "Synthetic Lizard" + icon_state = "synthliz" + +/datum/sprite_accessory/mam_tails_animated/synthliz + recommended_species = list("synthliz") + color_src = MUTCOLORS + name = "Synthetic Lizard" + icon_state = "synthliz" + /****************************************** ************ Body Markings **************** *******************************************/ @@ -1371,6 +1408,7 @@ datum/sprite_accessory/mam_tails/insect color_src = MATRIXED gender_specific = 0 icon = 'modular_citadel/icons/mob/mam_markings.dmi' + recommended_species = list("mammal", "xeno", "slimeperson", "podweak", "avian", "aquatic") /datum/sprite_accessory/mam_body_markings/none name = "None" @@ -1544,6 +1582,26 @@ datum/sprite_accessory/mam_tails/insect icon_state = "xeno" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' +/datum/sprite_accessory/mam_body_markings/synthliz + recommended_species = list("synthliz") + name = "Synthetic Lizard - Plates" + icon_state = "synthlizscutes" + +/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_noplates + name = "Synthetic Lizard - No plates" + icon_state = "synthliznoplates" + +/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecs + name = "Synthetic Lizard - Pecs" + icon_state = "synthlizpecs" + +/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_lights + name = "Synthetic Lizard - Lights" + icon_state = "synthlizlights" + +/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecslight + name = "Synthetic Lizard - Pecs Light" + icon_state = "synthlizpecslight" /****************************************** ************ Taur Bodies ****************** @@ -1558,10 +1616,12 @@ datum/sprite_accessory/mam_tails/insect dimension_x = 64 var/taur_mode = NOT_TAURIC color_src = MATRIXED + recommended_species = list("human", "lizard", "insect", "mammal", "xeno", "jelly", "slimeperson", "podweak", "avian", "aquatic") /datum/sprite_accessory/taur/none name = "None" icon_state = "None" + recommended_species = null /datum/sprite_accessory/taur/cow name = "Cow" @@ -1652,6 +1712,43 @@ datum/sprite_accessory/mam_tails/insect icon_state = "wolf" taur_mode = PAW_TAURIC +//Synth Taurs (Ported from Virgo) +/datum/sprite_accessory/taur/synthliz + name = "Virgo - Synthetic Lizard" + icon_state = "synthlizard" + taur_mode = PAW_TAURIC + recommended_species = list("synthliz") + +/datum/sprite_accessory/taur/synthliz/inv + name = "Virgo - Synthetic Lizard (Inverted)" + icon_state = "synthlizardinv" + +/datum/sprite_accessory/taur/synthliz/feline + name = "Virgo - Synthetic Feline" + icon_state = "synthfeline" + +/datum/sprite_accessory/taur/synthliz/feline/inv + name = "Virgo - Synthetic Feline (Inverted)" + icon_state = "synthfelineinv" + +/datum/sprite_accessory/taur/synthliz/horse + name = "Virgo - Synthetic Horse" + icon_state = "synthhorse" + taur_mode = HOOF_TAURIC + //alt_taur_mode = PAW_TAURIC + +/datum/sprite_accessory/taur/synthliz/horse/inv + name = "Virgo - Synthetic Horse (Inverted)" + icon_state = "synthhorseinv" + +/datum/sprite_accessory/taur/synthliz/wolf + name = "Virgo - Synthetic Wolf" + icon_state = "synthwolf" + +/datum/sprite_accessory/taur/synthliz/wolf/inv + name = "Virgo - Synthetic Wolf (Inverted)" + icon_state = "synthwolfinv" + /****************************************** *************** Ayyliums ****************** *******************************************/ @@ -1831,10 +1928,12 @@ datum/sprite_accessory/mam_tails/insect /datum/sprite_accessory/antenna icon = 'modular_citadel/icons/mob/ipc_antennas.dmi' color_src = MUTCOLORS2 + recommended_species = list("ipc") /datum/sprite_accessory/antenna/none name = "None" icon_state = "None" + recommended_species = null /datum/sprite_accessory/antenna/antennae name = "Angled Antennae" @@ -1856,6 +1955,52 @@ datum/sprite_accessory/mam_tails/insect name = "Crowned" icon_state = "crowned" +/datum/sprite_accessory/antenna/synthliz + recommended_species = list("synthliz") + color_src = MUTCOLORS + name = "Synthetic Lizard - Antennae" + icon_state = "synth_antennae" + +/datum/sprite_accessory/antenna/synthliz/synthliz_curled + color_src = MUTCOLORS + name = "Synthetic Lizard - Curled" + icon_state = "synth_curled" + +/datum/sprite_accessory/antenna/synthliz/synthliz_thick + color_src = MUTCOLORS + name = "Synthetic Lizard - Thick" + icon_state = "synth_thick" + +/datum/sprite_accessory/antenna/synthliz/synth_thicklight + color_src = MATRIXED + name = "Synthetic Lizard - Thick Light" + icon_state = "synth_thicklight" + +/datum/sprite_accessory/antenna/synthliz/synth_short + color_src = MUTCOLORS + name = "Synthetic Lizard - Short" + icon_state = "synth_short" + +/datum/sprite_accessory/antenna/synthliz/synth_sharp + color_src = MUTCOLORS + name = "Synthetic Lizard - Sharp" + icon_state = "synth_sharp" + +/datum/sprite_accessory/antenna/synthliz/synth_sharplight + color_src = MATRIXED + name = "Synthetic Lizard - Sharp Light" + icon_state = "synth_sharplight" + +/datum/sprite_accessory/antenna/synthliz/synth_horns + color_src = MUTCOLORS + name = "Synthetic Lizard - Horns" + icon_state = "synth_horns" + +/datum/sprite_accessory/antenna/synthliz/synth_hornslight + color_src = MATRIXED + name = "Synthetic Lizard - Horns Light" + icon_state = "synth_hornslight" + // *** Snooooow flaaaaake *** /datum/sprite_accessory/horns/guilmon diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm index 1c7456a8..7e888ddd 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm @@ -163,4 +163,4 @@ /obj/item/bodypart - var/should_draw_citadel = FALSE + var/icon_limbs = DEFAULT_BODYPART_ICON_CITADEL diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index ba8359f9..fede1f07 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -2,7 +2,7 @@ name = "Anthro" id = "mammal" default_color = "4B4B4B" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,WINGCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "legs", "deco_wings") @@ -53,7 +53,7 @@ id = "avian" say_mod = "chirps" default_color = "BCAC9B" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,WINGCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) mutant_bodyparts = list("mam_snouts", "wings", "taur", "mam_tail", "mam_body_markings", "taur", "deco_wings") @@ -99,10 +99,10 @@ name = "Aquatic" id = "aquatic" default_color = "BCAC9B" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,WINGCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("mam_tail", "mam_ears","mam_body_markings", "taur", "legs", "mam_snouts", "deco_wings") + mutant_bodyparts = list("mam_tail", "mam_ears","mam_body_markings", "taur", "mam_snouts", "deco_wings") default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_ears" = "None", "mam_body_markings" = "Shark", "mam_snouts" = "Round", "taur" = "None", "legs" = "Normal Legs", "deco_wings" = "None") attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' @@ -146,7 +146,7 @@ name = "Insect" id = "insect" default_color = "BCAC9B" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) mutant_bodyparts = list("mam_ears", "mam_body_markings", "mam_tail", "taur", "moth_wings","moth_markings", "mam_snouts", "moth_fluff") @@ -212,7 +212,7 @@ id = "xeno" say_mod = "hisses" default_color = "00FF00" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL species_traits = list(MUTCOLORS,EYECOLOR,LIPS,WINGCOLOR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs", "deco_wings") @@ -240,6 +240,60 @@ C.Digitigrade_Leg_Swap(TRUE) . = ..() +//Synthetic Lizard +/datum/species/synthliz + name = "Synthetic Lizardperson" + id = "synthliz" + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL + say_mod = "beeps" + default_color = "00FF00" + species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR) + inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID) + mutant_bodyparts = list("ipc_antenna", "mam_tail", "mam_snouts", "legs", "mam_body_markings", "taur") + default_features = list("ipc_antenna" = "Synthetic Lizard - Antennae","mam_tail" = "Synthetic Lizard", "mam_snouts" = "Synthetic Lizard - Snout", "legs" = "Digitigrade Legs", "mam_body_markings" = "Synthetic Lizard - Plates", "taur" = "None") + meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc + //gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless) + mutanttongue = /obj/item/organ/tongue/robot/ipc + //Just robo looking parts. + mutant_heart = /obj/item/organ/heart/ipc + mutantlungs = /obj/item/organ/lungs/ipc + mutantliver = /obj/item/organ/liver/ipc + mutantstomach = /obj/item/organ/stomach/ipc + mutanteyes = /obj/item/organ/eyes/ipc + + exotic_bloodtype = "S" + + +/datum/species/synthliz/qualifies_for_rank(rank, list/features) + return TRUE + +//I wag in death +/datum/species/synthliz/spec_death(gibbed, mob/living/carbon/human/H) + if(H) + stop_wagging_tail(H) + +/datum/species/synthliz/spec_stun(mob/living/carbon/human/H,amount) + if(H) + stop_wagging_tail(H) + . = ..() + +/datum/species/synthliz/can_wag_tail(mob/living/carbon/human/H) + return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts) + +/datum/species/synthliz/is_wagging_tail(mob/living/carbon/human/H) + return ("mam_waggingtail" in mutant_bodyparts) + +/datum/species/synthliz/start_wagging_tail(mob/living/carbon/human/H) + if("mam_tail" in mutant_bodyparts) + mutant_bodyparts -= "mam_tail" + mutant_bodyparts |= "mam_waggingtail" + H.update_body() + +/datum/species/synthliz/stop_wagging_tail(mob/living/carbon/human/H) + if("mam_waggingtail" in mutant_bodyparts) + mutant_bodyparts -= "mam_waggingtail" + mutant_bodyparts |= "mam_tail" + H.update_body() //Praise the Omnissiah, A challange worthy of my skills - HS //EXOTIC// diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm index 8fd01393..8e866e46 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -3,7 +3,7 @@ id = "ipc" say_mod = "beeps" default_color = "00FF00" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL blacklisted = 0 sexes = 0 species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING) diff --git a/modular_citadel/icons/mob/ipc_antennas.dmi b/modular_citadel/icons/mob/ipc_antennas.dmi index b60f4002..71b8f35b 100644 Binary files a/modular_citadel/icons/mob/ipc_antennas.dmi and b/modular_citadel/icons/mob/ipc_antennas.dmi differ diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi index cd1afeb4..9dd29b0c 100644 Binary files a/modular_citadel/icons/mob/mam_markings.dmi and b/modular_citadel/icons/mob/mam_markings.dmi differ diff --git a/modular_citadel/icons/mob/mam_snouts.dmi b/modular_citadel/icons/mob/mam_snouts.dmi index 87b96c11..f1d1ed7c 100644 Binary files a/modular_citadel/icons/mob/mam_snouts.dmi and b/modular_citadel/icons/mob/mam_snouts.dmi differ diff --git a/modular_citadel/icons/mob/mam_tails.dmi b/modular_citadel/icons/mob/mam_tails.dmi index ec52ccfc..034427e7 100644 Binary files a/modular_citadel/icons/mob/mam_tails.dmi and b/modular_citadel/icons/mob/mam_tails.dmi differ diff --git a/modular_citadel/icons/mob/mam_taur.dmi b/modular_citadel/icons/mob/mam_taur.dmi index 84367ebf..db1f001f 100644 Binary files a/modular_citadel/icons/mob/mam_taur.dmi and b/modular_citadel/icons/mob/mam_taur.dmi differ diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi index f2edf133..a7973408 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ