diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index dc67de3150..c1686560d6 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 ALIEN_BODYPART "alien" diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 75e711ad03..034b5d1825 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -564,13 +564,13 @@ var/list/possible_loc = list() for(var/turf/found_turf in turfs) var/area/turf_area = get_area(found_turf) - if (specific_area) // We check if both the turf is a floor, and that it's actually in the area. // We also want a location that's clear of any obstructions. + if(specific_area) // We check if both the turf is a floor, and that it's actually in the area. // We also want a location that's clear of any obstructions. if(!istype(turf_area, specific_area)) continue if(!isspaceturf(found_turf)) if(!is_blocked_turf(found_turf)) possible_loc.Add(found_turf) - if (possible_loc.len < 1) // Need at least one free location. + if(possible_loc.len < 1) // Need at least one free location. return FALSE return pick(possible_loc) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 2da96c7f8b..7852ab9d06 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -47,7 +47,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) @@ -105,6 +105,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() @@ -112,6 +114,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() @@ -119,6 +123,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() @@ -126,8 +132,19 @@ var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_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_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() @@ -153,10 +170,10 @@ "insect_fluff" = "None", "insect_markings" = pick(GLOB.insect_markings_list), "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", @@ -204,7 +221,7 @@ "womb_cum_rate" = CUM_RATE, "womb_cum_mult" = CUM_RATE_MULT, "womb_efficiency" = CUM_EFFICIENCY, - "ipc_screen" = "Sunburst", + "ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None", "ipc_antenna" = "None", "flavor_text" = "", "meat_type" = "Mammalian" diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 68c6839482..2f4dba9c38 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -218,7 +218,7 @@ unique_enzymes = generate_unique_enzymes() uni_identity = generate_uni_identity() struc_enzymes = generate_struc_enzymes() - features = random_features() + features = random_features(species?.id) /datum/dna/stored //subtype used by brain mob's stored_dna diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 2ad3d84fd1..a4b1f68265 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -1168,7 +1168,7 @@ GLOBAL_LIST_EMPTY(possible_sabotages) var/found = FALSE while(!found) var/area/dropoff_area = pick(GLOB.sortedAreas) - if(dropoff_area && is_station_level(dropoff_area.z) && !dropoff_area.outdoors) + if(dropoff_area && is_station_level(dropoff_area.z) && !dropoff_area.outdoors && !istype(dropoff_area, /area/shuttle/)) dropoff = dropoff_area found = TRUE diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 28afea817b..f77cf3adfb 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -138,7 +138,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/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 7d4cd2d91d..8e93aa4fb4 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -378,7 +378,7 @@ item_flags = NONE force = 5 cooldown = 20 - stam_dmg = 45 //3 hit stamcrit + stam_dmg = 45 //4 hit stamcrit affect_silicon = TRUE on_sound = 'sound/weapons/contractorbatonextend.ogg' on_stun_sound = 'sound/effects/contractorbatonhit.ogg' diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index ab55555562..d4d45b603c 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -481,8 +481,7 @@ /obj/item/clothing/gloves/krav_maga/combatglovesplus, /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, /obj/item/reagent_containers/syringe/stimulants, - /obj/item/storage/box/syndie_kit/imp_freedom, - /obj/item/toy/eightball/haunted + /obj/item/storage/box/syndie_kit/imp_freedom ) var/obj/item1 = pick_n_take(item_list) var/obj/item2 = pick_n_take(item_list) diff --git a/code/modules/antagonists/bloodsucker/powers/veil.dm b/code/modules/antagonists/bloodsucker/powers/veil.dm index 0c83cc2d44..0b3cded832 100644 --- a/code/modules/antagonists/bloodsucker/powers/veil.dm +++ b/code/modules/antagonists/bloodsucker/powers/veil.dm @@ -92,7 +92,7 @@ H.socks = random_socks(H.gender) //H.eye_color = random_eye_color() REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) // - H.dna.features = random_features() + H.dna.features = random_features(H.dna.species?.id) // Apply Appearance H.update_body() // Outfit and underware, also body. diff --git a/code/modules/antagonists/traitor/syndicate_contract.dm b/code/modules/antagonists/traitor/syndicate_contract.dm index c22012fe87..20d07556c1 100644 --- a/code/modules/antagonists/traitor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/syndicate_contract.dm @@ -2,6 +2,7 @@ var/id = 0 var/status = CONTRACT_STATUS_INACTIVE var/datum/objective/contract/contract = new() + var/target_rank var/ransom = 0 var/payout_type = null var/list/victim_belongings = list() @@ -13,6 +14,11 @@ /datum/syndicate_contract/proc/generate(blacklist) contract.find_target(null, blacklist) + var/datum/data/record/record = find_record("name", contract.target.name, GLOB.data_core.general) + if(record) + target_rank = record.fields["rank"] + else + target_rank = "Unknown" if (payout_type == CONTRACT_PAYOUT_LARGE) contract.payout_bonus = rand(9,13) else if(payout_type == CONTRACT_PAYOUT_MEDIUM) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d5f2ae35ed..a9cf45744e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -210,6 +210,8 @@ 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 @@ -411,6 +413,14 @@ 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 @@ -1618,6 +1628,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 @@ -1625,8 +1638,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 @@ -1646,6 +1669,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 @@ -1663,6 +1688,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 @@ -1686,6 +1713,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 @@ -1701,6 +1730,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 @@ -1798,6 +1829,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 @@ -1816,6 +1849,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 @@ -1829,6 +1864,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 @@ -1842,6 +1879,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 a82054d500..14cd7be547 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -22,7 +22,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(equip_job = TRUE) 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 92bc8e407b..abe51bf486 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 @@ -71,6 +71,9 @@ //for snowflake/donor specific sprites var/list/ckeys_allowed + + //For soft-restricting markings to species IDs + var/list/recommended_species /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index a5437aaf39..8f043125b2 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -38,6 +38,7 @@ color_src = MATRIXED gender_specific = 0 icon = 'modular_citadel/icons/mob/mam_markings.dmi' + recommended_species = list("mammal", "xeno", "slimeperson", "podweak") /datum/sprite_accessory/mam_body_markings/none name = "None" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm b/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm index 6d2ab1a39b..d47607f6fd 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/ipc_synths.dm @@ -132,10 +132,12 @@ /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" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm index b31a41bcc7..fe154ffeec 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm @@ -30,12 +30,14 @@ var/taur_mode = NONE //Must be a single specific tauric suit variation bitflag. Don't do FLAG_1|FLAG_2 var/alt_taur_mode = NONE //Same as above. color_src = MATRIXED + recommended_species = list("human", "lizard", "insect", "mammal", "xeno", "jelly", "slimeperson", "podweak") /datum/sprite_accessory/taur/none dimension_x = 32 center = FALSE name = "None" icon_state = "None" + recommended_species = null /datum/sprite_accessory/taur/cow name = "Cow" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm index 55bdc31aef..c016e9b119 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -151,11 +151,12 @@ /datum/sprite_accessory/mam_snouts color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + recommended_species = list("mammal", "slimeperson", "insect", "podweak") /datum/sprite_accessory/mam_snouts/none name = "None" icon_state = "none" - + recommended_species = null /datum/sprite_accessory/mam_snouts/bird name = "Beak" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm new file mode 100644 index 0000000000..a2884ab944 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm @@ -0,0 +1,150 @@ +//Synth snouts (This is the most important part) +/datum/sprite_accessory/mam_snouts/synthliz + recommended_species = list("synthliz") + icon = 'modular_citadel/icons/mob/synthliz_snouts.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Snout" + icon_state = "synthliz_basic" + +/datum/sprite_accessory/mam_snouts/synthliz/synthliz_under + icon = 'modular_citadel/icons/mob/synthliz_snouts.dmi' + color_src = MATRIXED + name = "Synthetic Lizard - Snout Under" + icon_state = "synthliz_under" + +/datum/sprite_accessory/mam_snouts/synthliz/synthliz_tert + icon = 'modular_citadel/icons/mob/synthliz_snouts.dmi' + color_src = MATRIXED + name = "Synthetic Lizard - Snout Tertiary" + icon_state = "synthliz_tert" + +/datum/sprite_accessory/mam_snouts/synthliz/synthliz_tertunder + icon = 'modular_citadel/icons/mob/synthliz_snouts.dmi' + color_src = MATRIXED + name = "Synthetic Lizard - Snout Tertiary Under" + icon_state = "synthliz_tertunder" + +//Synth body markings +/datum/sprite_accessory/mam_body_markings/synthliz + recommended_species = list("synthliz") + icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' + name = "Synthetic Lizard - Plates" + icon_state = "synthlizscutes" + +/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecs + icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' + name = "Synthetic Lizard - Pecs" + icon_state = "synthlizpecs" + +/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecslight + icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' + name = "Synthetic Lizard - Pecs Light" + icon_state = "synthlizpecslight" + +//Synth tails +/datum/sprite_accessory/mam_tails/synthliz + recommended_species = list("synthliz") + icon = 'modular_citadel/icons/mob/synthliz_tails.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard" + icon_state = "synthliz" + +/datum/sprite_accessory/mam_tails_animated/synthliz + recommended_species = list("synthliz") + icon = 'modular_citadel/icons/mob/synthliz_tails.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard" + icon_state = "synthliz" + +//Synth Antennae +/datum/sprite_accessory/antenna/synthliz + recommended_species = list("synthliz") + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Antennae" + icon_state = "synth_antennae" + +/datum/sprite_accessory/antenna/synthliz/synthliz_curled + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Curled" + icon_state = "synth_curled" + +/datum/sprite_accessory/antenna/synthliz/synthliz_thick + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Thick" + icon_state = "synth_thick" + +/datum/sprite_accessory/antenna/synthliz/synth_thicklight + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MATRIXED + name = "Synthetic Lizard - Thick Light" + icon_state = "synth_thicklight" + +/datum/sprite_accessory/antenna/synthliz/synth_short + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Short" + icon_state = "synth_short" + +/datum/sprite_accessory/antenna/synthliz/synth_sharp + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Sharp" + icon_state = "synth_sharp" + +/datum/sprite_accessory/antenna/synthliz/synth_sharplight + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MATRIXED + name = "Synthetic Lizard - Sharp Light" + icon_state = "synth_sharplight" + +/datum/sprite_accessory/antenna/synthliz/synth_horns + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MUTCOLORS + name = "Synthetic Lizard - Horns" + icon_state = "synth_horns" + +/datum/sprite_accessory/antenna/synthliz/synth_hornslight + icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi' + color_src = MATRIXED + name = "Synthetic Lizard - Horns Light" + icon_state = "synth_hornslight" + +//Synth Taurs (Ported from Virgo) +/datum/sprite_accessory/taur/synthliz + name = "Virgo - Synthetic Lizard" + icon_state = "synthlizard" + taur_mode = STYLE_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 = STYLE_HOOF_TAURIC + alt_taur_mode = STYLE_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" 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 5ae3c9a8b3..90980743e1 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -501,10 +501,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") /datum/sprite_accessory/mam_tails/none name = "None" icon_state = "none" + recommended_species = null /datum/sprite_accessory/mam_tails_animated color_src = MATRIXED diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 92a19b9bd7..85a7a09d5c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/fixed_mut_color3 = "" 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/should_draw_citadel = FALSE + 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/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index e2e41330fb..6bd8a44e0a 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -13,7 +13,7 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect liked_food = MEAT | FRUIT disliked_food = TOXIC - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL /datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H) if(H) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index ab86b2cc5d..608d71e2c5 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -2,7 +2,7 @@ name = "Anthromorph" id = "mammal" default_color = "4B4B4B" - should_draw_citadel = TRUE + icon_limbs = DEFAULT_BODYPART_ICON_CITADEL species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "deco_wings", "taur", "horns", "legs") @@ -55,7 +55,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) mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs") default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade") diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index add0e17c43..b7305a9228 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/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/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm new file mode 100644 index 0000000000..40441c45fd --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -0,0 +1,53 @@ +/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 = 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", "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() \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm b/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm index 42af956e2e..35470cdee9 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm @@ -129,16 +129,9 @@ "item_icon" = hub_item.item_icon )) for(var/datum/syndicate_contract/contract in traitor_data.contractor_hub.assigned_contracts) - var/target_rank = "" - if(contract.contract.target) - var/datum/data/record/record = find_record("name", contract.contract.target.current.real_name, GLOB.data_core.general) - if(record) - target_rank = record.fields["rank"] - else - target_rank = "Unknown" data["contracts"] += list(list( "target" = contract.contract.target, - "target_rank" = target_rank, + "target_rank" = contract.target_rank, "payout" = contract.contract.payout, "payout_bonus" = contract.contract.payout_bonus, "dropoff" = contract.contract.dropoff, diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index bdea05decd..4b56ab6cb8 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -41,9 +41,9 @@ var/skin_tone = "" var/body_gender = "" var/species_id = "" - var/should_draw_citadel = FALSE + 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 = "" var/mutation_color = "" var/no_update = 0 @@ -283,9 +283,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() @@ -313,7 +313,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 aux_marking = "husk" @@ -323,11 +324,11 @@ 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 @@ -342,7 +343,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 = "" @@ -354,9 +355,12 @@ 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) @@ -371,8 +375,8 @@ if(Smark) body_markings_icon = Smark.icon if(H.dna.features["mam_body_markings"] != "None") - body_markings = lowertext(H.dna.features["mam_body_markings"]) - aux_marking = lowertext(H.dna.features["mam_body_markings"]) + body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) + aux_marking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) else body_markings = "plain" aux_marking = "plain" @@ -462,32 +466,16 @@ 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_type]_[use_digitigrade]_[body_zone]" else - limb.icon_state = "[species_id]_[body_zone]" + limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]" else - limb.icon = 'icons/mob/human_parts.dmi' - if(should_draw_gender) - limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" - else if(use_digitigrade) - limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]" - else - limb.icon_state = "[species_id]_[body_zone]" - - // Citadel Start - if(should_draw_citadel) - limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' - if(should_draw_gender) - limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" - else if(use_digitigrade) - limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]" - else - limb.icon_state = "[species_id]_[body_zone]" + limb.icon_state = "[species_id]_[body_zone]" // Body markings if(!isnull(body_markings)) @@ -555,7 +543,7 @@ . += 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/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm index 039a29a69d..1c7d3393ab 100644 --- a/code/modules/uplink/uplink_items/uplink_bundles.dm +++ b/code/modules/uplink/uplink_items/uplink_bundles.dm @@ -38,7 +38,7 @@ specialised contractor baton, and three randomly selected low cost items. Can include otherwise unobtainable items." item = /obj/item/storage/box/syndie_kit/contract_kit cost = 20 - player_minimum = 20 + player_minimum = 15 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) /datum/uplink_item/bundles_TC/cybernetics_bundle diff --git a/config/game_options.txt b/config/game_options.txt index 5be76ae60d..4113a90e6d 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -421,6 +421,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/html/changelogs/AutoChangeLog-pr-11317.yml b/html/changelogs/AutoChangeLog-pr-11317.yml new file mode 100644 index 0000000000..e49efbe795 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11317.yml @@ -0,0 +1,8 @@ +author: "Bhijn (original PR by Azarak, sprites by Discord user Smug Asshole Muhreen#5522)" +delete-after: True +changes: + - rscadd: "Synths, the open source and free-as-in-freedom species by FA user vader-san, have been ported from Skyrat." + - rscadd: "Ported VOREStation's synthetic taursprites" + - rscadd: "Markings that don't match very well with your selected species are now hidden from the markings list by default. You can still use these mismatched markings to create horrendous sparkledog abominations by using the \"Show mismatched markings\" button ingame." + - bugfix: "Body markings who's iconstates don't match their name will now actually render properly." + - code_imp: "Limb base icons are no longer hardcoded, should_draw_citadel and should_draw_grayscale have been removed in favor of the species-level `icon_limbs` var and the bodypart-level `base_bp_icon` and `color_src` vars. Downstreams should no longer have to touch bodypart rendering code a whole lot if they want to add custom species. Downstreams that have already added species with digitigrade leg support will have to append species IDs to the digitigrade leg sprites, but aside from that, the migration process to this more modularity-friendly system should be fairly smooth." diff --git a/html/changelogs/AutoChangeLog-pr-11377.yml b/html/changelogs/AutoChangeLog-pr-11377.yml new file mode 100644 index 0000000000..c0c175a943 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11377.yml @@ -0,0 +1,8 @@ +author: "Kraseo" +delete-after: True +changes: + - balance: "Contractor kit pop cap reduced from 20 to 15." + - balance: "You can no longer get haunted 8balls from contractor kits." + - bugfix: "Pods and shuttles should no longer be valid dropoff locations." + - bugfix: "Contract tablets will no longer break when one of your contracts is deleted from the world." + - bugfix: "Baton inhands for the right hand now shows the right direction." diff --git a/icons/mob/inhands/weapons/melee_righthand.dmi b/icons/mob/inhands/weapons/melee_righthand.dmi index 7284f43e60..9c734fbb93 100644 Binary files a/icons/mob/inhands/weapons/melee_righthand.dmi and b/icons/mob/inhands/weapons/melee_righthand.dmi differ diff --git a/modular_citadel/icons/mob/mam_taur.dmi b/modular_citadel/icons/mob/mam_taur.dmi index 84367ebf0a..db1f001fae 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 8ff4a3ddb5..95b121b453 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ diff --git a/modular_citadel/icons/mob/synthliz_antennas.dmi b/modular_citadel/icons/mob/synthliz_antennas.dmi new file mode 100644 index 0000000000..0c75578ee9 Binary files /dev/null and b/modular_citadel/icons/mob/synthliz_antennas.dmi differ diff --git a/modular_citadel/icons/mob/synthliz_body_markings.dmi b/modular_citadel/icons/mob/synthliz_body_markings.dmi new file mode 100644 index 0000000000..52f9027f03 Binary files /dev/null and b/modular_citadel/icons/mob/synthliz_body_markings.dmi differ diff --git a/modular_citadel/icons/mob/synthliz_snouts.dmi b/modular_citadel/icons/mob/synthliz_snouts.dmi new file mode 100644 index 0000000000..908ac583d0 Binary files /dev/null and b/modular_citadel/icons/mob/synthliz_snouts.dmi differ diff --git a/modular_citadel/icons/mob/synthliz_tails.dmi b/modular_citadel/icons/mob/synthliz_tails.dmi new file mode 100644 index 0000000000..6aaf4ad391 Binary files /dev/null and b/modular_citadel/icons/mob/synthliz_tails.dmi differ diff --git a/tgstation.dme b/tgstation.dme index eb8d570ca1..cd0e1a333d 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2155,6 +2155,7 @@ #include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\snouts.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\socks.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\synthliz.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\tails.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear.dm" @@ -2277,6 +2278,7 @@ #include "code\modules\mob\living\carbon\human\species_types\podpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm" #include "code\modules\mob\living\carbon\human\species_types\skeletons.dm" +#include "code\modules\mob\living\carbon\human\species_types\synthliz.dm" #include "code\modules\mob\living\carbon\human\species_types\synths.dm" #include "code\modules\mob\living\carbon\human\species_types\vampire.dm" #include "code\modules\mob\living\carbon\human\species_types\zombies.dm"