Merge pull request #11317 from deathride58/WEPORTINSYNTHSBOI

Ports Skyrat's synths (Plus limb rendering overhaul and more)
This commit is contained in:
Ghom
2020-03-09 00:26:06 +01:00
committed by GitHub
28 changed files with 316 additions and 52 deletions

View File

@@ -58,8 +58,10 @@
#define BODYPART_DISABLED_DAMAGE 1 #define BODYPART_DISABLED_DAMAGE 1
#define BODYPART_DISABLED_PARALYSIS 2 #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_ORGANIC 'icons/mob/human_parts_greyscale.dmi'
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.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 MONKEY_BODYPART "monkey"
#define ALIEN_BODYPART "alien" #define ALIEN_BODYPART "alien"

View File

@@ -47,7 +47,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list)
return pick(GLOB.socks_list) return pick(GLOB.socks_list)
/proc/random_features() /proc/random_features(intendedspecies)
if(!GLOB.tails_list_human.len) if(!GLOB.tails_list_human.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human)
if(!GLOB.tails_list_lizard.len) if(!GLOB.tails_list_lizard.len)
@@ -105,6 +105,8 @@
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[mtpath] var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[mtpath]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed) if(!S.ckeys_allowed)
snowflake_mam_tails_list[S.name] = mtpath snowflake_mam_tails_list[S.name] = mtpath
var/list/snowflake_markings_list = list() var/list/snowflake_markings_list = list()
@@ -112,6 +114,8 @@
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[mmpath] var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[mmpath]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed) if(!S.ckeys_allowed)
snowflake_markings_list[S.name] = mmpath snowflake_markings_list[S.name] = mmpath
var/list/snowflake_ears_list = list() var/list/snowflake_ears_list = list()
@@ -119,6 +123,8 @@
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[mepath] var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[mepath]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed) if(!S.ckeys_allowed)
snowflake_ears_list[S.name] = mepath snowflake_ears_list[S.name] = mepath
var/list/snowflake_mam_snouts_list = list() var/list/snowflake_mam_snouts_list = list()
@@ -126,8 +132,19 @@
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[mspath] var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[mspath]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed) if(!S.ckeys_allowed)
snowflake_mam_snouts_list[S.name] = mspath 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/color1 = random_short_color()
var/color2 = random_short_color() var/color2 = random_short_color()
var/color3 = random_short_color() var/color3 = random_short_color()
@@ -153,10 +170,10 @@
"insect_fluff" = "None", "insect_fluff" = "None",
"insect_markings" = pick(GLOB.insect_markings_list), "insect_markings" = pick(GLOB.insect_markings_list),
"taur" = "None", "taur" = "None",
"mam_body_markings" = pick(snowflake_markings_list), "mam_body_markings" = snowflake_markings_list.len ? pick(snowflake_markings_list) : "None",
"mam_ears" = pick(snowflake_ears_list), "mam_ears" = snowflake_ears_list ? pick(snowflake_ears_list) : "None",
"mam_snouts" = pick(snowflake_mam_snouts_list), "mam_snouts" = snowflake_mam_snouts_list ? pick(snowflake_mam_snouts_list) : "None",
"mam_tail" = pick(snowflake_mam_tails_list), "mam_tail" = snowflake_mam_tails_list ? pick(snowflake_mam_tails_list) : "None",
"mam_tail_animated" = "None", "mam_tail_animated" = "None",
"xenodorsal" = "Standard", "xenodorsal" = "Standard",
"xenohead" = "Standard", "xenohead" = "Standard",
@@ -204,7 +221,7 @@
"womb_cum_rate" = CUM_RATE, "womb_cum_rate" = CUM_RATE,
"womb_cum_mult" = CUM_RATE_MULT, "womb_cum_mult" = CUM_RATE_MULT,
"womb_efficiency" = CUM_EFFICIENCY, "womb_efficiency" = CUM_EFFICIENCY,
"ipc_screen" = "Sunburst", "ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
"ipc_antenna" = "None", "ipc_antenna" = "None",
"flavor_text" = "", "flavor_text" = "",
"meat_type" = "Mammalian" "meat_type" = "Mammalian"

View File

@@ -218,7 +218,7 @@
unique_enzymes = generate_unique_enzymes() unique_enzymes = generate_unique_enzymes()
uni_identity = generate_uni_identity() uni_identity = generate_uni_identity()
struc_enzymes = generate_struc_enzymes() struc_enzymes = generate_struc_enzymes()
features = random_features() features = random_features(species?.id)
/datum/dna/stored //subtype used by brain mob's stored_dna /datum/dna/stored //subtype used by brain mob's stored_dna

View File

@@ -138,7 +138,8 @@
limb = new buildpath(loc) limb = new buildpath(loc)
if(selected_category=="human" || selected_category=="lizard") //Species with greyscale parts should be included here if(selected_category=="human" || selected_category=="lizard") //Species with greyscale parts should be included here
limb.icon = 'icons/mob/human_parts_greyscale.dmi' 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 else
limb.icon = 'icons/mob/human_parts.dmi' limb.icon = 'icons/mob/human_parts.dmi'
// Set this limb up using the specias name and body zone // Set this limb up using the specias name and body zone

View File

@@ -92,7 +92,7 @@
H.socks = random_socks(H.gender) H.socks = random_socks(H.gender)
//H.eye_color = random_eye_color() //H.eye_color = random_eye_color()
REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) // REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) //
H.dna.features = random_features() H.dna.features = random_features(H.dna.species?.id)
// Apply Appearance // Apply Appearance
H.update_body() // Outfit and underware, also body. H.update_body() // Outfit and underware, also body.

View File

@@ -210,6 +210,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/icon/bgstate = "steel" var/icon/bgstate = "steel"
var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced") 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) /datum/preferences/New(client/C)
parent = C parent = C
@@ -411,6 +413,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
//Mutant stuff //Mutant stuff
var/mutant_category = 0 var/mutant_category = 0
dat += APPEARANCE_CATEGORY_COLUMN
dat += "<h3>Show mismatched markings</h3>"
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=mismatched_markings;task=input'>[show_mismatched_markings ? "Yes" : "No"]</a>"
mutant_category++
if(mutant_category >= MAX_MUTANT_ROWS) //just in case someone sets the max rows to 1 or something dumb like that
dat += "</td>"
mutant_category = 0
if("tail_lizard" in pref_species.default_features) if("tail_lizard" in pref_species.default_features)
if(!mutant_category) if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN dat += APPEARANCE_CATEGORY_COLUMN
@@ -1618,6 +1628,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else else
to_chat(user, "<span class='danger'>Invalid color. Your color is not bright enough.</span>") to_chat(user, "<span class='danger'>Invalid color. Your color is not bright enough.</span>")
if("mismatched_markings")
show_mismatched_markings = !show_mismatched_markings
if("ipc_screen") if("ipc_screen")
var/new_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 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 features["ipc_screen"] = new_ipc_screen
if("ipc_antenna") 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 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) if(new_ipc_antenna)
features["ipc_antenna"] = 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] var/datum/sprite_accessory/tails/human/instance = GLOB.tails_list_human[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_tails_list[S.name] = path snowflake_tails_list[S.name] = path
var/new_tail var/new_tail
@@ -1663,6 +1688,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path] var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_tails_list[S.name] = path snowflake_tails_list[S.name] = path
var/new_tail var/new_tail
@@ -1686,6 +1713,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/mam_snouts/instance = GLOB.snouts_list[path] var/datum/sprite_accessory/mam_snouts/instance = GLOB.snouts_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_snouts_list[S.name] = path snowflake_snouts_list[S.name] = path
var/new_snout var/new_snout
@@ -1701,6 +1730,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path] var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_mam_snouts_list[S.name] = path snowflake_mam_snouts_list[S.name] = path
var/new_mam_snouts var/new_mam_snouts
@@ -1798,6 +1829,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_taur_list[S.name] = path snowflake_taur_list[S.name] = path
var/new_taur var/new_taur
@@ -1816,6 +1849,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path] var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_ears_list[S.name] = path snowflake_ears_list[S.name] = path
var/new_ears var/new_ears
@@ -1829,6 +1864,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path] var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_ears_list[S.name] = path snowflake_ears_list[S.name] = path
var/new_ears 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] var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
if(istype(instance, /datum/sprite_accessory)) if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance 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))) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_markings_list[S.name] = path snowflake_markings_list[S.name] = path
var/new_mam_body_markings var/new_mam_body_markings

View File

@@ -22,7 +22,7 @@
if(!pref_species) if(!pref_species)
var/rando_race = pick(GLOB.roundstart_races) var/rando_race = pick(GLOB.roundstart_races)
pref_species = new rando_race() pref_species = new rando_race()
features = random_features() features = random_features(pref_species?.id)
age = rand(AGE_MIN,AGE_MAX) age = rand(AGE_MIN,AGE_MAX)
/datum/preferences/proc/update_preview_icon(equip_job = TRUE) /datum/preferences/proc/update_preview_icon(equip_job = TRUE)

View File

@@ -72,6 +72,9 @@
//for snowflake/donor specific sprites //for snowflake/donor specific sprites
var/list/ckeys_allowed var/list/ckeys_allowed
//For soft-restricting markings to species IDs
var/list/recommended_species
/datum/sprite_accessory/underwear /datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi' icon = 'icons/mob/underwear.dmi'
var/has_color = FALSE var/has_color = FALSE

View File

@@ -38,6 +38,7 @@
color_src = MATRIXED color_src = MATRIXED
gender_specific = 0 gender_specific = 0
icon = 'modular_citadel/icons/mob/mam_markings.dmi' icon = 'modular_citadel/icons/mob/mam_markings.dmi'
recommended_species = list("mammal", "xeno", "slimeperson", "podweak")
/datum/sprite_accessory/mam_body_markings/none /datum/sprite_accessory/mam_body_markings/none
name = "None" name = "None"

View File

@@ -132,10 +132,12 @@
/datum/sprite_accessory/antenna /datum/sprite_accessory/antenna
icon = 'modular_citadel/icons/mob/ipc_antennas.dmi' icon = 'modular_citadel/icons/mob/ipc_antennas.dmi'
color_src = MUTCOLORS2 color_src = MUTCOLORS2
recommended_species = list("ipc")
/datum/sprite_accessory/antenna/none /datum/sprite_accessory/antenna/none
name = "None" name = "None"
icon_state = "None" icon_state = "None"
recommended_species = null
/datum/sprite_accessory/antenna/antennae /datum/sprite_accessory/antenna/antennae
name = "Angled Antennae" name = "Angled Antennae"

View File

@@ -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/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. var/alt_taur_mode = NONE //Same as above.
color_src = MATRIXED color_src = MATRIXED
recommended_species = list("human", "lizard", "insect", "mammal", "xeno", "jelly", "slimeperson", "podweak")
/datum/sprite_accessory/taur/none /datum/sprite_accessory/taur/none
dimension_x = 32 dimension_x = 32
center = FALSE center = FALSE
name = "None" name = "None"
icon_state = "None" icon_state = "None"
recommended_species = null
/datum/sprite_accessory/taur/cow /datum/sprite_accessory/taur/cow
name = "Cow" name = "Cow"

View File

@@ -151,11 +151,12 @@
/datum/sprite_accessory/mam_snouts /datum/sprite_accessory/mam_snouts
color_src = MATRIXED color_src = MATRIXED
icon = 'modular_citadel/icons/mob/mam_snouts.dmi' icon = 'modular_citadel/icons/mob/mam_snouts.dmi'
recommended_species = list("mammal", "slimeperson", "insect", "podweak")
/datum/sprite_accessory/mam_snouts/none /datum/sprite_accessory/mam_snouts/none
name = "None" name = "None"
icon_state = "none" icon_state = "none"
recommended_species = null
/datum/sprite_accessory/mam_snouts/bird /datum/sprite_accessory/mam_snouts/bird
name = "Beak" name = "Beak"

View File

@@ -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"

View File

@@ -501,10 +501,12 @@
/datum/sprite_accessory/mam_tails /datum/sprite_accessory/mam_tails
color_src = MATRIXED color_src = MATRIXED
icon = 'modular_citadel/icons/mob/mam_tails.dmi' icon = 'modular_citadel/icons/mob/mam_tails.dmi'
recommended_species = list("mammal", "slimeperson", "podweak", "felinid", "insect")
/datum/sprite_accessory/mam_tails/none /datum/sprite_accessory/mam_tails/none
name = "None" name = "None"
icon_state = "none" icon_state = "none"
recommended_species = null
/datum/sprite_accessory/mam_tails_animated /datum/sprite_accessory/mam_tails_animated
color_src = MATRIXED color_src = MATRIXED

View File

@@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/fixed_mut_color3 = "" var/fixed_mut_color3 = ""
var/whitelisted = 0 //Is this species restricted to certain players? 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/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 // // PROCS //

View File

@@ -13,7 +13,7 @@
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
liked_food = MEAT | FRUIT liked_food = MEAT | FRUIT
disliked_food = TOXIC disliked_food = TOXIC
should_draw_citadel = TRUE icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H) /datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
if(H) if(H)

View File

@@ -2,7 +2,7 @@
name = "Anthromorph" name = "Anthromorph"
id = "mammal" id = "mammal"
default_color = "4B4B4B" default_color = "4B4B4B"
should_draw_citadel = TRUE icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR) species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST 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") mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "deco_wings", "taur", "horns", "legs")
@@ -55,7 +55,7 @@
id = "xeno" id = "xeno"
say_mod = "hisses" say_mod = "hisses"
default_color = "00FF00" default_color = "00FF00"
should_draw_citadel = TRUE icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
species_traits = list(MUTCOLORS,EYECOLOR,LIPS) species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs") 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") default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")

View File

@@ -3,7 +3,7 @@
id = "ipc" id = "ipc"
say_mod = "beeps" say_mod = "beeps"
default_color = "00FF00" default_color = "00FF00"
should_draw_citadel = TRUE icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
blacklisted = 0 blacklisted = 0
sexes = 0 sexes = 0
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING) species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING)

View File

@@ -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()

View File

@@ -41,9 +41,9 @@
var/skin_tone = "" var/skin_tone = ""
var/body_gender = "" var/body_gender = ""
var/species_id = "" 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_gender = FALSE
var/should_draw_greyscale = FALSE
var/species_color = "" var/species_color = ""
var/mutation_color = "" var/mutation_color = ""
var/no_update = 0 var/no_update = 0
@@ -283,9 +283,9 @@
if(change_icon_to_default) if(change_icon_to_default)
if(status == BODYPART_ORGANIC) if(status == BODYPART_ORGANIC)
icon = DEFAULT_BODYPART_ICON_ORGANIC icon = base_bp_icon || DEFAULT_BODYPART_ICON_ORGANIC
else if(status == BODYPART_ROBOTIC) else if(status == BODYPART_ROBOTIC)
icon = DEFAULT_BODYPART_ICON_ROBOTIC icon = base_bp_icon || DEFAULT_BODYPART_ICON_ROBOTIC
if(owner) if(owner)
owner.updatehealth() owner.updatehealth()
@@ -313,7 +313,8 @@
species_id = "husk" //overrides species_id species_id = "husk" //overrides species_id
dmg_overlay_type = "" //no damage overlay shown when husked dmg_overlay_type = "" //no damage overlay shown when husked
should_draw_gender = FALSE should_draw_gender = FALSE
should_draw_greyscale = FALSE color_src = FALSE
base_bp_icon = DEFAULT_BODYPART_ICON
no_update = TRUE no_update = TRUE
body_markings = "husk" // reeee body_markings = "husk" // reeee
aux_marking = "husk" aux_marking = "husk"
@@ -323,11 +324,11 @@
if(!animal_origin) if(!animal_origin)
var/mob/living/carbon/human/H = C var/mob/living/carbon/human/H = C
should_draw_greyscale = FALSE color_src = FALSE
var/datum/species/S = H.dna.species var/datum/species/S = H.dna.species
base_bp_icon = S?.icon_limbs || DEFAULT_BODYPART_ICON
species_id = S.limbs_id species_id = S.limbs_id
should_draw_citadel = S.should_draw_citadel // Citadel Addition
species_flags_list = H.dna.species.species_traits species_flags_list = H.dna.species.species_traits
//body marking memes //body marking memes
@@ -342,7 +343,7 @@
if(S.use_skintones) if(S.use_skintones)
skin_tone = H.skin_tone 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 else
skin_tone = "" skin_tone = ""
@@ -354,10 +355,13 @@
species_color = S.fixed_mut_color species_color = S.fixed_mut_color
else else
species_color = H.dna.features["mcolor"] 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 else
species_color = "" 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("legs" in S.default_features)
if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG) if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG)
if(DIGITIGRADE in S.species_traits) if(DIGITIGRADE in S.species_traits)
@@ -371,8 +375,8 @@
if(Smark) if(Smark)
body_markings_icon = Smark.icon body_markings_icon = Smark.icon
if(H.dna.features["mam_body_markings"] != "None") if(H.dna.features["mam_body_markings"] != "None")
body_markings = lowertext(H.dna.features["mam_body_markings"]) body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
aux_marking = lowertext(H.dna.features["mam_body_markings"]) aux_marking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
else else
body_markings = "plain" body_markings = "plain"
aux_marking = "plain" aux_marking = "plain"
@@ -462,29 +466,13 @@
should_draw_gender = FALSE should_draw_gender = FALSE
if(is_organic_limb()) if(is_organic_limb())
if(should_draw_greyscale) limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi'
limb.icon = 'icons/mob/human_parts_greyscale.dmi'
if(should_draw_gender) if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
else if (use_digitigrade) 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]" limb.icon_state = "[digitigrade_type]_[use_digitigrade]_[body_zone]"
else 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 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]" limb.icon_state = "[species_id]_[digitigrade_type]_[use_digitigrade]_[body_zone]"
else else
limb.icon_state = "[species_id]_[body_zone]" limb.icon_state = "[species_id]_[body_zone]"
@@ -555,7 +543,7 @@
. += marking . += marking
return 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)) var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone))
if(draw_color) if(draw_color)
limb.color = "#[draw_color]" limb.color = "#[draw_color]"

View File

@@ -421,6 +421,7 @@ ROUNDSTART_RACES human
## Races that are strictly worse than humans that could probably be turned on without balance concerns ## Races that are strictly worse than humans that could probably be turned on without balance concerns
ROUNDSTART_RACES lizard ROUNDSTART_RACES lizard
ROUNDSTART_RACES synthliz
#ROUNDSTART_RACES fly #ROUNDSTART_RACES fly
#ROUNDSTART_RACES insect #ROUNDSTART_RACES insect
ROUNDSTART_RACES plasmaman ROUNDSTART_RACES plasmaman

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -2139,6 +2139,7 @@
#include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm" #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\snouts.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\socks.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\tails.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm"
#include "code\modules\mob\dead\new_player\sprite_accessories\underwear.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\underwear.dm"
@@ -2261,6 +2262,7 @@
#include "code\modules\mob\living\carbon\human\species_types\podpeople.dm" #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\shadowpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\skeletons.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\synths.dm"
#include "code\modules\mob\living\carbon\human\species_types\vampire.dm" #include "code\modules\mob\living\carbon\human\species_types\vampire.dm"
#include "code\modules\mob\living\carbon\human\species_types\zombies.dm" #include "code\modules\mob\living\carbon\human\species_types\zombies.dm"