diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 7d46553be1..bc85cc3ddf 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -105,7 +105,7 @@ "mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), - "tail_lizard" = pick(GLOB.tails_list_lizard), + "tail_lizard" = "None", "tail_human" = "None", "wings" = "None", "snout" = pick(GLOB.snouts_list), @@ -118,9 +118,9 @@ "caps" = pick(GLOB.caps_list), "moth_wings" = pick(GLOB.moth_wings_list), "taur" = "None", - "mam_body_markings" = "wolf", - "mam_ears" = "wolf", - "mam_tail" = "wolf", + "mam_body_markings" = "None", + "mam_ears" = "None", + "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "standard", "xenohead" = "standard", diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4e78cb8814..9199bd7051 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -9,8 +9,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) - - /datum/preferences var/client/parent //doohickeys for savefiles @@ -167,9 +165,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/dat = list("
") dat += "Character Settings" - dat += "Game Preferences" dat += "Character Appearance" dat += "Loadout" + dat += "Game Preferences" + if(!path) dat += "
Please create an account to save your preferences
" @@ -236,24 +235,28 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" -// CITADEL EDIT - ALL OF THESE ARE HANDLED IN THE MODULAR VERSION, TAB 2 - /* dat += "

Body

" - dat += "Random Body " - dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
" - - dat += "" + //Character Appearance + if(2) + update_preview_icon(nude=TRUE) + user << browse_rsc(preview_icon, "previewicon.png") + dat += "
" - - dat += "Species:
[pref_species.name]
" - - dat += "Underwear:
[underwear]
" - dat += "Undershirt:
[undershirt]
" - dat += "Socks:
[socks]
" - dat += "Backpack:
[backbag]
" - dat += "Uplink Spawn Location:
[uplink_spawn_loc]
" - //Mutant stuff var/mutant_category = 0 @@ -319,6 +320,30 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 + if("mam_tail" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Tail

" + + dat += "[features["mam_tail"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("tail_human" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Tail

" + + dat += "[features["tail_human"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 if("snout" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -331,7 +356,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 - if("horns" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -343,8 +367,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) dat += "" - mutant_category = 0 - if("frills" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -383,46 +405,30 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 - - if("legs" in pref_species.default_features) + if("mam_body_markings" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Legs

" + dat += "

Species Markings

" - dat += "[features["legs"]]
" + dat += "[features["mam_body_markings"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + + if("mam_ears" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Ears

" + + dat += "[features["mam_ears"]]
" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 - - if("moth_wings" in pref_species.default_features) - if(!mutant_category) - dat += APPEARANCE_CATEGORY_COLUMN - - dat += "

Moth wings

" - - dat += "[features["moth_wings"]]
" - - mutant_category++ - if(mutant_category >= MAX_MUTANT_ROWS) - dat += "" - mutant_category = 0 - - if("tail_human" in pref_species.default_features) - if(!mutant_category) - dat += APPEARANCE_CATEGORY_COLUMN - - dat += "

Tail

" - - dat += "[features["tail_human"]]
" - - mutant_category++ - if(mutant_category >= MAX_MUTANT_ROWS) - dat += "" - mutant_category = 0 - if("ears" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -435,27 +441,166 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(mutant_category >= MAX_MUTANT_ROWS) dat += "" mutant_category = 0 + if("legs" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN - if(CONFIG_GET(flag/join_with_mutant_humans)) + dat += "

Legs

" - if("wings" in pref_species.default_features && GLOB.r_wings_list.len >1) - if(!mutant_category) - dat += APPEARANCE_CATEGORY_COLUMN + dat += "[features["legs"]]
" - dat += "

Wings

" + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("moth_wings" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN - dat += "[features["wings"]]
" + dat += "

Moth wings

" - mutant_category++ - if(mutant_category >= MAX_MUTANT_ROWS) - dat += "" - mutant_category = 0 + dat += "[features["moth_wings"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("taur" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Tauric Body

" + + dat += "[features["taur"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("wings" in pref_species.mutant_bodyparts && GLOB.r_wings_list.len >1) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Wings

" + + dat += "[features["wings"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("xenohead" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Caste Head

" + + dat += "[features["xenohead"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("xenotail" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Tail

" + + dat += "[features["xenotail"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("xenodorsal" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Dorsal Spines

" + + dat += "[features["xenodorsal"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("ipc_screen" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Screen

" + + dat += "[features["ipc_screen"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 + if("ipc_antenna" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Antenna

" + + dat += "[features["ipc_antenna"]]
" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "" + mutant_category = 0 if(mutant_category) dat += "" mutant_category = 0 - dat += "
" + dat += "
" + dat += "Set Flavor Text
" + if(lentext(features["flavor_text"]) <= 40) + if(!lentext(features["flavor_text"])) + dat += "\[...\]" + else + dat += "[features["flavor_text"]]" + else + dat += "[TextPreview(features["flavor_text"])]...
" + dat += "

Body

" + dat += "Gender: [gender == MALE ? "Male" : "Female"]
" + dat += "Species:[pref_species.id]
" + dat += "Random Body
" + dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
" var/use_skintones = pref_species.use_skintones if(use_skintones) - dat += APPEARANCE_CATEGORY_COLUMN dat += "

Skin Tone

" @@ -262,14 +265,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/mutant_colors if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) - if(!use_skintones) dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Mutant Color

" - - dat += "    Change
" - + dat += "

Body Colors


" + dat += "Primary Color:     Change
" + dat += "Secondary Color:     Change
" + dat += "Tertiary Color:     Change
" mutant_colors = TRUE if((EYECOLOR in pref_species.species_traits) && !(NOEYES in pref_species.species_traits)) @@ -302,7 +304,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "    Change
" dat += "
"*/ + dat += "" + + dat += "" + + dat += "

Clothing & Equipment

" + + dat += "Underwear:[underwear]
" + dat += "Undershirt:[undershirt]
" + dat += "Socks:[socks]
" + dat += "Backpack:[backbag]
" + dat += "Uplink Location:[uplink_spawn_loc]
" + + dat += "

Genitals

" + if(NOGENITALS in pref_species.species_traits) + dat += "Your species ([pref_species.name]) does not support genitals!
" + else + dat += "Has Penis:[features["has_cock"] == TRUE ? "Yes" : "No"]
" + if(features["has_cock"] == TRUE) + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "Penis Color:   (Skin tone overriding)
" + else + dat += "Penis Color:    Change
" + dat += "Penis Shape: [features["cock_shape"]]
" + dat += "Penis Length: [features["cock_length"]] inch(es)
" + dat += "Has Testicles:[features["has_balls"] == TRUE ? "Yes" : "No"]
" + if(features["has_balls"] == TRUE) + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "Testicles Color:   (Skin tone overriding)
" + else + dat += "Testicles Color:    Change
" + dat += "Has Vagina:[features["has_vag"] == TRUE ? "Yes" : "No"]
" + if(features["has_vag"]) + dat += "Vagina Type: [features["vag_shape"]]
" + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "Vagina Color:   (Skin tone overriding)
" + else + dat += "Vagina Color:    Change
" + dat += "Has Womb:[features["has_womb"] == TRUE ? "Yes" : "No"]
" + dat += "Has Breasts:[features["has_breasts"] == TRUE ? "Yes" : "No"]
" + if(features["has_breasts"]) + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "Color:   (Skin tone overriding)
" + else + dat += "Color:    Change
" + dat += "Cup Size:[features["breasts_size"]]
" + dat += "Breast Shape:[features["breasts_shape"]]
" + dat += "" if (1) // Game Preferences dat += "" + if(user.client.holder) + dat +="" + dat += "
" @@ -475,11 +620,30 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Ghost Sight: [(chat_toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" dat += "Ghost Whispers: [(chat_toggles & CHAT_GHOSTWHISPER) ? "All Speech" : "Nearest Creatures"]
" dat += "Ghost PDA: [(chat_toggles & CHAT_GHOSTPDA) ? "All Messages" : "Nearest Creatures"]
" - + dat += "Window Flashing: [(windowflashing) ? "Enabled":"Disabled"]
" + dat += "
" + dat += "Play Admin MIDIs: [(toggles & SOUND_MIDI) ? "Enabled":"Disabled"]
" + dat += "Play Lobby Music: [(toggles & SOUND_LOBBY) ? "Enabled":"Disabled"]
" + dat += "See Pull Requests: [(chat_toggles & CHAT_PULLR) ? "Enabled":"Disabled"]
" + dat += "
" + if(user.client) + if(unlock_content) + dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
" + if(unlock_content || check_rights_for(user.client, R_ADMIN)) + dat += "OOC Color:     Change
" + dat += "
" + dat += "

Admin Settings

" + dat += "Adminhelp Sounds: [(toggles & SOUND_ADMINHELP)?"Enabled":"Disabled"]
" + dat += "Announce Login: [(toggles & ANNOUNCE_LOGIN)?"Enabled":"Disabled"]
" + dat += "
" + dat += "Combo HUD Lighting: [(toggles & COMBOHUD_LIGHTING)?"Full-bright":"No Change"]
" + dat += "
" if(unlock_content) dat += "Ghost Form: [ghost_form]
" dat += "Ghost Orbit: [ghost_orbit]
" - var/button_name = "If you see this something went wrong." switch(ghost_accs) if(GHOST_ACCS_FULL) @@ -490,7 +654,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) button_name = GHOST_ACCS_NONE_NAME dat += "Ghost Accessories: [button_name]
" - switch(ghost_others) if(GHOST_OTHERS_THEIR_SETTING) button_name = GHOST_OTHERS_THEIR_SETTING_NAME @@ -501,9 +664,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Ghosts of Others: [button_name]
" dat += "
" - dat += "FPS: [clientfps]
" - dat += "Parallax (Fancy Space): " switch (parallax) if (PARALLAX_LOW) @@ -517,7 +678,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dat += "High" dat += "
" - dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
" dat += "Fit Viewport: [auto_fit_viewport ? "Auto" : "Manual"]
" @@ -562,6 +722,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Be [capitalize(i)]: \[IN [days_remaining] DAYS]
" else dat += "Be [capitalize(i)]: [(i in be_special) ? "Enabled" : "Disabled"]
" + dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Enabled" : "Disabled"]
" + dat += "
" dat += "

Citadel Preferences

" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" @@ -575,39 +737,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (user && user.client && !user.client.prefs.screenshake==0) dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
" dat += "
" - dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Enabled" : "Disabled"]
" - - dat += "" - - dat += "" - - if(user.client.holder) - dat +="" - dat += "
" - dat += "

OOC Settings

" - dat += "Window Flashing: [(windowflashing) ? "Enabled":"Disabled"]
" - dat += "
" - dat += "Play Admin MIDIs: [(toggles & SOUND_MIDI) ? "Enabled":"Disabled"]
" - dat += "Play Lobby Music: [(toggles & SOUND_LOBBY) ? "Enabled":"Disabled"]
" - dat += "See Pull Requests: [(chat_toggles & CHAT_PULLR) ? "Enabled":"Disabled"]
" - dat += "
" - - if(user.client) - if(unlock_content) - dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]
" - - if(unlock_content || check_rights_for(user.client, R_ADMIN)) - dat += "OOC Color:     Change
" - - dat += "
" - - dat += "

Admin Settings

" - - dat += "Adminhelp Sounds: [(toggles & SOUND_ADMINHELP)?"Enabled":"Disabled"]
" - dat += "Announce Login: [(toggles & ANNOUNCE_LOGIN)?"Enabled":"Disabled"]
" - dat += "
" - dat += "Combo HUD Lighting: [(toggles & COMBOHUD_LIGHTING)?"Full-bright":"No Change"]
" - dat += "
" if(3) if(!gear_tab) @@ -660,9 +789,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[gear.description]" dat += "" - else - dat = citadel_dat_replace(current_tab) - dat += "
" if(!IsGuestKey(user.key)) @@ -1190,7 +1316,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_age) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) -/* if("hair") + if("flavor_text") + var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as null|message + if(!isnull(msg)) + msg = copytext(msg, 1, MAX_MESSAGE_LEN*2) + features["flavor_text"] = msg + + if("hair") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null if(new_hair) hair_color = sanitize_hexcolor(new_hair) @@ -1220,27 +1352,25 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference","#"+facial_hair_color) as color|null if(new_facial) facial_hair_color = sanitize_hexcolor(new_facial) - - if("facial_hair_style") - var/new_facial_hair_style - if(gender == MALE) - new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_male_list - else - new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_female_list - if(new_facial_hair_style) - facial_hair_style = new_facial_hair_style + if("facial_hair_style") + var/new_facial_hair_style + if(gender == MALE) + new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_male_list + else + new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_female_list + if(new_facial_hair_style) + facial_hair_style = new_facial_hair_style if("next_facehair_style") if (gender == MALE) facial_hair_style = next_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) else facial_hair_style = next_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) - - if("previous_facehair_style") - if (gender == MALE) - facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) - else - facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) + if("previous_facehair_style") + if (gender == MALE) + facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) + else + facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) if("underwear") var/new_underwear @@ -1266,22 +1396,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_socks) socks = new_socks - if(BODY_ZONE_PRECISE_EYES) + if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null if(new_eyes) eye_color = sanitize_hexcolor(new_eyes) if("species") - var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races - if(result) var/newtype = GLOB.species_list[result] pref_species = new newtype() //Now that we changed our species, we must verify that the mutant colour is still allowed. var/temp_hsv = RGBtoHSV(features["mcolor"]) - if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3])) + if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) features["mcolor"] = pref_species.default_color + if(features["mcolor2"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) + features["mcolor2"] = pref_species.default_color + if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) + features["mcolor3"] = pref_species.default_color if("mutant_color") var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference","#"+features["mcolor"]) as color|null @@ -1289,22 +1421,88 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright, but only if they affect the skin + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor"] = sanitize_hexcolor(new_mutantcolor) else to_chat(user, "Invalid color. Your color is not bright enough.") + if("mutant_color2") + var/new_mutantcolor = input(user, "Choose your character's secondary alien/mutant color:", "Character Preference") as color|null + if(new_mutantcolor) + var/temp_hsv = RGBtoHSV(new_mutantcolor) + if(new_mutantcolor == "#000000") + features["mcolor2"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin + features["mcolor2"] = sanitize_hexcolor(new_mutantcolor) + else + to_chat(user, "Invalid color. Your color is not bright enough.") + + if("mutant_color3") + var/new_mutantcolor = input(user, "Choose your character's tertiary alien/mutant color:", "Character Preference") as color|null + if(new_mutantcolor) + var/temp_hsv = RGBtoHSV(new_mutantcolor) + if(new_mutantcolor == "#000000") + features["mcolor3"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin + features["mcolor3"] = sanitize_hexcolor(new_mutantcolor) + else + to_chat(user, "Invalid color. Your color is not bright enough.") + + 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 + if(new_ipc_screen) + features["ipc_screen"] = new_ipc_screen + + if("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 + if(new_ipc_antenna) + features["ipc_antenna"] = new_ipc_antenna + if("tail_lizard") var/new_tail new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_lizard if(new_tail) features["tail_lizard"] = new_tail + if(new_tail != "None") + features["taur"] = "None" + features["tail_human"] = "None" + features["mam_tail"] = "None" if("tail_human") + var/list/snowflake_tails_list = list("Normal" = null) + for(var/path in GLOB.tails_list_human) + 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_tails_list[S.name] = path var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_human + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in snowflake_tails_list if(new_tail) features["tail_human"] = new_tail + if(new_tail != "None") + features["taur"] = "None" + features["tail_lizard"] = "None" + features["mam_tail"] = "None" + + if("mam_tail") + var/list/snowflake_tails_list = list("Normal" = null) + for(var/path in GLOB.mam_tails_list) + 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_tails_list[S.name] = path + var/new_tail + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in snowflake_tails_list + if(new_tail) + features["mam_tail"] = new_tail + if(new_tail != "None") + features["taur"] = "None" + features["tail_human"] = "None" + features["tail_lizard"] = "None" if("snout") var/new_snout @@ -1363,7 +1561,177 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("s_tone") var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones if(new_s_tone) - skin_tone = new_s_tone*/ + skin_tone = new_s_tone + + if("taur") + var/list/snowflake_taur_list = list("Normal" = null) + for(var/path in GLOB.taur_list) + var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_taur_list[S.name] = path + var/new_taur + new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in snowflake_taur_list + if(new_taur) + features["taur"] = new_taur + if(new_taur != "None") + features["mam_tail"] = "None" + features["xenotail"] = "None" + features["tail_human"] = "None" + features["tail_lizard"] = "None" + + if("ears") + var/list/snowflake_ears_list = list("Normal" = null) + for(var/path in GLOB.ears_list) + var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_ears_list[S.name] = path + var/new_ears + new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in snowflake_ears_list + if(new_ears) + features["ears"] = new_ears + + if("mam_ears") + var/list/snowflake_ears_list = list("Normal" = null) + for(var/path in GLOB.mam_ears_list) + 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_ears_list[S.name] = path + var/new_ears + new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in snowflake_ears_list + if(new_ears) + features["mam_ears"] = new_ears + + if("mam_body_markings") + var/list/snowflake_markings_list = list("Normal" = null) + for(var/path in GLOB.mam_body_markings_list) + 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) + snowflake_markings_list[S.name] = path + var/new_mam_body_markings + new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list + if(new_mam_body_markings) + features["mam_body_markings"] = new_mam_body_markings + + //Xeno Bodyparts + if("xenohead")//Head or caste type + var/new_head + new_head = input(user, "Choose your character's caste:", "Character Preference") as null|anything in GLOB.xeno_head_list + if(new_head) + features["xenohead"] = new_head + + if("xenotail")//Currently one one type, more maybe later if someone sprites them. Might include animated variants in the future. + var/new_tail + new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.xeno_tail_list + if(new_tail) + features["xenotail"] = new_tail + if(new_tail != "None") + features["mam_tail"] = "None" + features["taur"] = "None" + features["tail_human"] = "None" + features["tail_lizard"] = "None" + + if("xenodorsal") + var/new_dors + new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in GLOB.xeno_dorsal_list + if(new_dors) + features["xenodorsal"] = new_dors + //Genital code + if("cock_color") + var/new_cockcolor = input(user, "Penis color:", "Character Preference") as color|null + if(new_cockcolor) + var/temp_hsv = RGBtoHSV(new_cockcolor) + if(new_cockcolor == "#000000") + features["cock_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["cock_color"] = sanitize_hexcolor(new_cockcolor) + else + user << "Invalid color. Your color is not bright enough." + + if("cock_length") + var/new_length = input(user, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Character Preference") as num|null + if(new_length) + features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN) + + if("cock_shape") + var/new_shape + new_shape = input(user, "Penis shape:", "Character Preference") as null|anything in GLOB.cock_shapes_list + if(new_shape) + features["cock_shape"] = new_shape + + if("balls_color") + var/new_ballscolor = input(user, "Testicle Color:", "Character Preference") as color|null + if(new_ballscolor) + var/temp_hsv = RGBtoHSV(new_ballscolor) + if(new_ballscolor == "#000000") + features["balls_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["balls_color"] = sanitize_hexcolor(new_ballscolor) + else + user << "Invalid color. Your color is not bright enough." + + if("egg_size") + var/new_size + var/list/egg_sizes = list(1,2,3) + new_size = input(user, "Egg Diameter(inches):", "Egg Size") as null|anything in egg_sizes + if(new_size) + features["eggsack_egg_size"] = new_size + + if("egg_color") + var/new_egg_color = input(user, "Egg Color:", "Character Preference") as color|null + if(new_egg_color) + var/temp_hsv = RGBtoHSV(new_egg_color) + if(ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["eggsack_egg_color"] = sanitize_hexcolor(new_egg_color) + else + user << "Invalid color. Your color is not bright enough." + + if("breasts_size") + var/new_size + new_size = input(user, "Breast Size", "Character Preference") as null|anything in GLOB.breasts_size_list + if(new_size) + features["breasts_size"] = new_size + + if("breasts_shape") + var/new_shape + new_shape = input(user, "Breast Shape", "Character Preference") as null|anything in GLOB.breasts_shapes_list + if(new_shape) + features["breasts_shape"] = new_shape + + if("breasts_color") + var/new_breasts_color = input(user, "Breast Color:", "Character Preference") as color|null + if(new_breasts_color) + var/temp_hsv = RGBtoHSV(new_breasts_color) + if(new_breasts_color == "#000000") + features["breasts_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["breasts_color"] = sanitize_hexcolor(new_breasts_color) + else + user << "Invalid color. Your color is not bright enough." + + if("vag_shape") + var/new_shape + new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list + if(new_shape) + features["vag_shape"] = new_shape + + if("vag_color") + var/new_vagcolor = input(user, "Vagina color:", "Character Preference") as color|null + if(new_vagcolor) + var/temp_hsv = RGBtoHSV(new_vagcolor) + if(new_vagcolor == "#000000") + features["vag_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["vag_color"] = sanitize_hexcolor(new_vagcolor) + else + user << "Invalid color. Your color is not bright enough." if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null @@ -1628,8 +1996,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) LAZYADD(chosen_gear, G.type) gear_points -= initial(G.cost) - process_citadel_link(user, href_list) - ShowChoices(user) return 1 diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index bc163b1781..1d54b9f4a0 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -50,7 +50,7 @@ to_chat(src, "You have OOC muted.") return - mob.log_talk(raw_msg, LOG_OOC) + mob.log_talk(raw_msg, LOG_OOC, tag="(OOC)") var/keyname = key if(prefs.unlock_content) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 7929a00357..ad2c45b291 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -271,20 +271,18 @@ "You shake [src] trying to get [p_them()] up!") else if(check_zone(M.zone_selected) == "head") - M.visible_message("[M] gives [src] a pat on the head to make [p_them()] feel better!", \ - "You give [src] a pat on the head to make [p_them()] feel better!") - if(dna && dna.species && ("tail_lizard" in dna.species.mutant_bodyparts) && (dna.features["tail_lizard"])!= "None") - emote("wag") //lewd - else if(dna && dna.species && ("tail_human" in dna.species.mutant_bodyparts) && (dna.features["tail_human"])!= "None") - emote("wag") - else if(dna && dna.species && ("mam_tail" in dna.species.mutant_bodyparts) && (dna.features["mam_tail"])!= "None") - emote("wag") + var/mob/living/carbon/human/H = src + M.visible_message("[M] gives [H] a pat on the head to make [p_them()] feel better!", \ + "You give [H] a pat on the head to make [p_them()] feel better!") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "headpat", /datum/mood_event/headpat) + if(H.dna.species.can_wag_tail(H) && (H.dna.features["tail_human"]!= "None" || H.dna.features["tail_lizard"]!= "None" || H.dna.features["mam_tail"])!= "None") + H.emote("wag") else M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \ "You hug [src] to make [p_them()] feel better!") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) + AdjustStun(-60) AdjustKnockdown(-60) AdjustUnconscious(-60) diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index a7c20b981a..d0eacf8622 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -29,7 +29,7 @@ return ("mam_waggingtail" in mutant_bodyparts) /datum/species/human/start_wagging_tail(mob/living/carbon/human/H) - if("tail_human" in mutant_bodyparts) + if("mam_tail" in mutant_bodyparts) mutant_bodyparts -= "mam_tail" mutant_bodyparts |= "mam_waggingtail" H.update_body() diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index f083e7c658..416f02b40c 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -11,7 +11,7 @@ mutanttail = /obj/item/organ/tail/lizard coldmod = 1.5 heatmod = 0.67 - default_features = list("mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None") + default_features = list("mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/config/config.txt b/config/config.txt index 411e8f979f..3a74166fe7 100644 --- a/config/config.txt +++ b/config/config.txt @@ -117,6 +117,9 @@ LOG_ATTACK ## log pda messages LOG_PDA +## log telecomms messages +LOG_TELECOMMS + ## log prayers LOG_PRAYER @@ -126,6 +129,9 @@ LOG_LAW ## log crew manifest to seperate file LOG_MANIFEST +## log job divide debugging information +#LOG_JOB_DEBUG + ## log all world.Topic() calls # LOG_WORLD_TOPIC @@ -134,7 +140,7 @@ LOG_MANIFEST # LOG_TWITTER ## Enable logging pictures -LOG_PICTURES +# LOG_PICTURES ##Log camera pictures - Must have picture logging enabled PICTURE_LOGGING_CAMERA @@ -154,9 +160,6 @@ ALLOW_ADMIN_OOCCOLOR ## Job slot open/close by identification consoles delay in seconds ID_CONSOLE_JOBSLOT_DELAY 30 -## If metadata is supported -ALLOW_METADATA - ## allow players to initiate a restart vote #ALLOW_VOTE_RESTART @@ -234,6 +237,17 @@ CHECK_RANDOMIZER ## Github address # GITHUBURL https://www.github.com/tgstation/tgstation +## Round specific stats address +## Link to round specific parsed logs; IE statbus. It is appended with the RoundID automatically by ticker/Reboot() +## This will take priority over the game logs address during reboot. +## Example: https://atlantaned.space/statbus/round.php?round= +# ROUNDSTATSURL + +## Game Logs address +## Incase you don't have a fancy parsing system, but still want players to be able to find where you keep your server's logs. +## Example: https://tgstation13.org/parsed-logs/basil/data/logs/ +# GAMELOGURL + ## Github repo id ##This can be found by going to https://api.github.com/users//repos ##Or https://api.github.com/orgs//repos if the repo owner is an organization @@ -257,7 +271,7 @@ CHECK_RANDOMIZER ## Uncomment this to forbid admins from possessing the singularity. #FORBID_SINGULO_POSSESSION -## Uncomment to show a popup 'reply to' window to every non-admin that recieves an adminPM. +## Uncomment to show a popup 'reply to' window to every non-admin that receives an adminPM. ## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off) #POPUP_ADMIN_PM @@ -367,10 +381,6 @@ AUTOADMIN_RANK Game Master ## Uncomment to automatically give that admin rank to all players #AUTOADMIN -## GENERATE_MINIMAPS -## Generating minimaps(For crew monitor) is slow and bogs down testing, so its disabled by default and must be enabled by uncommenting this config if you are running a production server. -#GENERATE_MINIMAPS - ## CLIENT VERSION CONTROL ## This allows you to configure the minimum required client version, as well as a warning version, and message for both. ## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower. diff --git a/config/game_options.txt b/config/game_options.txt index 953de2f923..f4d76c670c 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -14,8 +14,6 @@ REVIVAL_CLONING ## amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) REVIVAL_BRAIN_LIFE -1 -## RENAMING ### - ## OOC DURING ROUND ### ## Comment this out if you want OOC to be automatically disabled during the round, it will be enabled during the lobby and after the round end results. OOC_DURING_ROUND @@ -37,13 +35,16 @@ EMOJIS RUN_DELAY 1 WALK_DELAY 4 -## The variables below affect the movement of specific mob types. -HUMAN_DELAY 0 -ROBOT_DELAY 0 -MONKEY_DELAY 0 -ALIEN_DELAY 0 -SLIME_DELAY 0 -ANIMAL_DELAY 1 +## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE! +## Entries completely override all subtypes. Later entries have precedence over earlier entries. +## This means if you put /mob 0 on the last entry, it will null out all changes, while if you put /mob as the first entry and +## /mob/living/carbon/human on the last entry, the last entry will override the first. +##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/human 0 +##MULTIPLICATIVE_MOVESPEED /mob/living/silicon/robot 0 +##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/monkey 0 +##MULTIPLICATIVE_MOVESPEED /mob/living/carbon/alien 0 +##MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal/slime 0 +MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1 ## NAMES ### @@ -134,10 +135,10 @@ MIDROUND_ANTAG CHANGELING MIDROUND_ANTAG WIZARD #MIDROUND_ANTAG MONKEY -## Uncomment these for overrides of the minimum / maximum number of players in a round type. +## Uncomment these for overrides of the minimum / maximum number of players in a round type. ## If you set any of these occasionally check to see if you still need them as the modes ## will still be actively rebalanced around the SUGGESTED populations, not your overrides. -## Notes: For maximum number of players a value of -1 means no maximum. Setting minimums to +## Notes: For maximum number of players a value of -1 means no maximum. Setting minimums to ## VERY low numbers (< 5) can lead to errors if the roundtypes were not designed for that. #MIN_POP TRAITOR 0 @@ -257,6 +258,9 @@ EVENTS_MIN_PLAYERS_MUL 1 ## Allow the AI job to be picked. ALLOW_AI +## Allow the AI Multicamera feature to be used by AI players +ALLOW_AI_MULTICAM + ## Secborg ### ## Uncomment to prevent the security cyborg module from being chosen #DISABLE_SECBORG @@ -423,11 +427,21 @@ ROUNDSTART_RACES plasmaman ## Races that are straight upgrades. If these are on expect powergamers to always pick them #ROUNDSTART_RACES skeleton #ROUNDSTART_RACES zombie -ROUNDSTART_RACES slimeperson +#ROUNDSTART_RACES slime #ROUNDSTART_RACES pod #ROUNDSTART_RACES military_synth #ROUNDSTART_RACES agent +## CITADEL Races +ROUNDSTART_RACES mammal +ROUNDSTART_RACES avian +ROUNDSTART_RACES aquatic +ROUNDSTART_RACES insect +ROUNDSTART_RACES xeno +ROUNDSTART_RACES datashark +ROUNDSTART_RACES guilmon +ROUNDSTART_RACES ipc + ##------------------------------------------------------------------------------------------- ## Uncomment to give players the choice of joining as a human with mutant bodyparts before they join the game @@ -509,27 +523,6 @@ MICE_ROUNDSTART 10 ## Determines if players are allowed to print integrated circuits, uncomment to allow. #IC_PRINTING -## CITADEL Races -ROUNDSTART_RACES mammal -ROUNDSTART_RACES avian -ROUNDSTART_RACES aquatic -ROUNDSTART_RACES insect -ROUNDSTART_RACES xeno -ROUNDSTART_RACES datashark -ROUNDSTART_RACES guilmon -ROUNDSTART_RACES ipc - -## CREW OBJECTIVES ## -## Comment to disable objectives for innocent crew members. -ALLOW_CREW_OBJECTIVES - -## MISCREANTS ## -## Comment to allow miscreants to spawn. Miscreants are a mini-antag with objectives that are not tracked. -ALLOW_MISCREANTS - -## Uncomment to let miscreants spawn during Extended. I hold no responsibility for fun that may occur while this is enabled. -#ALLOW_EXTENDED_MISCREANTS - ## Uncomment to allow roundstart quirk selection in the character setup menu. ## This used to be named traits, hence the config name, but it handles quirks, not the other kind of trait! ROUNDSTART_TRAITS diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 7d73fa618b..6611b1da1a 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -99,563 +99,6 @@ ..() LAZYINITLIST(chosen_gear) -/datum/preferences/proc/citadel_dat_replace(current_tab) - var/mob/user - //This proc is for menus other than game pref and char pref - . = "
" - . += "Character Settings" - . += "Character Appearance" - . += "Loadout" - . += "Game Preferences" - - if(!path) - . += "
Please create an account to save your preferences
" - - . += "
" - - . += "
" - - //Character Appearance - if(current_tab == 2) - update_preview_icon(nude=TRUE) - user << browse_rsc(preview_icon, "previewicon.png") - . += "" - */ - . += "
" - . += "
" - . += "Set Flavor Text
" - if(lentext(features["flavor_text"]) <= 40) - if(!lentext(features["flavor_text"])) - . += "\[...\]" - else - . += "[features["flavor_text"]]" - else - . += "[TextPreview(features["flavor_text"])]...
" - . += "

Body

" - . += "Gender: [gender == MALE ? "Male" : "Female"]
" - . += "Species:[pref_species.id]
" - . += "Random Body
" - . += "Always Random Body: [be_random_body ? "Yes" : "No"]
" - if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) - . += "Primary Color:     Change
" - . += "Secondary Color:     Change
" - . += "Tertiary Color:     Change
" - if(pref_species.use_skintones) - . += "Skin Tone: [skin_tone]
" - . += "Genitals Use Skintone:[features["genitals_use_skintone"] == TRUE ? "Enabled" : "Disabled"]
" - - if(HAIR in pref_species.species_traits) - . += "Hair Style: [hair_style]
" - . += "Hair Color:     Change
" - . += "Facial Hair Style: [facial_hair_style]
" - . += "Facial Hair Color:     Change
" - if(EYECOLOR in pref_species.species_traits) - . += "Eye Color:     Change
" - if("tail_lizard" in pref_species.mutant_bodyparts) - . += "Tail: [features["tail_lizard"]]
" - else if("mam_tail" in pref_species.mutant_bodyparts) - . += "Tail: [features["mam_tail"]]
" - else if("tail_human" in pref_species.mutant_bodyparts) - . += "Tail: [features["tail_human"]]
" - if("snout" in pref_species.mutant_bodyparts) - . += "Snout: [features["snout"]]
" - if("horns" in pref_species.mutant_bodyparts) - . += "Horns: [features["horns"]]
" - if("frills" in pref_species.mutant_bodyparts) - . += "Frills: [features["frills"]]
" - if("spines" in pref_species.mutant_bodyparts) - . += "Spines: [features["spines"]]
" - if("body_markings" in pref_species.mutant_bodyparts) - . += "Body Markings: [features["body_markings"]]
" - else if("mam_body_markings" in pref_species.mutant_bodyparts) - . += "Body Markings: [features["mam_body_markings"]]
" - if("mam_ears" in pref_species.mutant_bodyparts) - . += "Ears: [features["mam_ears"]]
" - else if("ears" in pref_species.mutant_bodyparts) - . += "Ears: [features["ears"]]
" - if("legs" in pref_species.mutant_bodyparts) - . += "Legs: [features["legs"]]
" - if("moth_wings" in pref_species.mutant_bodyparts) - . += "Moth wings[features["moth_wings"]]
" - if("taur" in pref_species.mutant_bodyparts) - . += "Taur: [features["taur"]]
" - if("wings" in pref_species.mutant_bodyparts && GLOB.r_wings_list.len >1) - . += "Wings: [features["wings"]]
" - if("xenohead" in pref_species.mutant_bodyparts) - . += "Caste: [features["xenohead"]]
" - if("xenotail" in pref_species.mutant_bodyparts) - . += "Tail: [features["xenotail"]]
" - if("xenodorsal" in pref_species.mutant_bodyparts) - . += "Dorsal Tubes: [features["xenodorsal"]]
" - if("ipc_screen" in pref_species.mutant_bodyparts) - . += "Screen:[features["ipc_screen"]]
" - if("ipc_antenna" in pref_species.mutant_bodyparts) - . += "Antenna:[features["ipc_antenna"]]
" - - . += "
" - - . += "

Clothing & Equipment

" - - . += "Underwear:[underwear]
" - . += "Undershirt:[undershirt]
" - . += "Socks:[socks]
" - . += "Backpack:[backbag]
" - . += "Uplink Location:[uplink_spawn_loc]
" - - . += "

Genitals

" - if(NOGENITALS in pref_species.species_traits) - . += "Your species ([pref_species.name]) does not support genitals!
" - else - . += "Has Penis:[features["has_cock"] == TRUE ? "Yes" : "No"]
" - if(features["has_cock"] == TRUE) - if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - . += "Penis Color:   (Skin tone overriding)
" - else - . += "Penis Color:    Change
" - . += "Penis Shape: [features["cock_shape"]]
" - . += "Penis Length: [features["cock_length"]] inch(es)
" - . += "Has Testicles:[features["has_balls"] == TRUE ? "Yes" : "No"]
" - if(features["has_balls"] == TRUE) - if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - . += "Testicles Color:   (Skin tone overriding)
" - else - . += "Testicles Color:    Change
" - . += "Has Vagina:[features["has_vag"] == TRUE ? "Yes" : "No"]
" - if(features["has_vag"]) - . += "Vagina Type: [features["vag_shape"]]
" - if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - . += "Vagina Color:   (Skin tone overriding)
" - else - . += "Vagina Color:    Change
" - . += "Has Womb:[features["has_womb"] == TRUE ? "Yes" : "No"]
" - . += "Has Breasts:[features["has_breasts"] == TRUE ? "Yes" : "No"]
" - if(features["has_breasts"]) - if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - . += "Color:   (Skin tone overriding)
" - else - . += "Color:    Change
" - . += "Cup Size:[features["breasts_size"]]
" - . += "Breast Shape:[features["breasts_shape"]]
" - /* - . += "

Ovipositor

" - . += "Has Ovipositor:[features["has_ovi"] == TRUE ? "Yes" : "No"]" - if(features["has_ovi"]) - . += "Ovi Color:    Change" - . += "

Eggsack

" - . += "Has Eggsack:[features["has_eggsack"] == TRUE ? "Yes" : "No"]
" - if(features["has_eggsack"] == TRUE) - . += "Color:    Change" - . += "Egg Color:    Change" - . += "Egg Size:[features["eggsack_egg_size"]]\" Diameter" - . += "
" - -/datum/preferences/proc/process_citadel_link(mob/user, list/href_list) - if("input") - switch(href_list["preference"]) - if("flavor_text") - var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as null|message - if(!isnull(msg)) - msg = copytext(msg, 1, MAX_MESSAGE_LEN*2) - features["flavor_text"] = msg - - if("hair") - var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null - if(new_hair) - hair_color = sanitize_hexcolor(new_hair) - - if("hair_style") - var/new_hair_style - if(gender == MALE) - new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in GLOB.hair_styles_male_list - else - new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in GLOB.hair_styles_female_list - if(new_hair_style) - hair_style = new_hair_style - - if("next_hair_style") - if (gender == MALE) - hair_style = next_list_item(hair_style, GLOB.hair_styles_male_list) - else - hair_style = next_list_item(hair_style, GLOB.hair_styles_female_list) - - if("previous_hair_style") - if (gender == MALE) - hair_style = previous_list_item(hair_style, GLOB.hair_styles_male_list) - else - hair_style = previous_list_item(hair_style, GLOB.hair_styles_female_list) - - if("facial") - var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference","#"+facial_hair_color) as color|null - if(new_facial) - facial_hair_color = sanitize_hexcolor(new_facial) - if("facial_hair_style") - var/new_facial_hair_style - if(gender == MALE) - new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_male_list - else - new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in GLOB.facial_hair_styles_female_list - if(new_facial_hair_style) - facial_hair_style = new_facial_hair_style - - if("next_facehair_style") - if (gender == MALE) - facial_hair_style = next_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) - else - facial_hair_style = next_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) - if("previous_facehair_style") - if (gender == MALE) - facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_male_list) - else - facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_female_list) - - if("underwear") - var/new_underwear - if(gender == MALE) - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_m - else - new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_f - if(new_underwear) - underwear = new_underwear - - if("undershirt") - var/new_undershirt - if(gender == MALE) - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_m - else - new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_f - if(new_undershirt) - undershirt = new_undershirt - - if("socks") - var/new_socks - new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list - if(new_socks) - socks = new_socks - - if("eyes") - var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null - if(new_eyes) - eye_color = sanitize_hexcolor(new_eyes) - - if("species") - var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races - if(result) - var/newtype = GLOB.species_list[result] - pref_species = new newtype() - //Now that we changed our species, we must verify that the mutant colour is still allowed. - var/temp_hsv = RGBtoHSV(features["mcolor"]) - if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) - features["mcolor"] = pref_species.default_color - if(features["mcolor2"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) - features["mcolor2"] = pref_species.default_color - if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) - features["mcolor3"] = pref_species.default_color - - if("mutant_color") - var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference","#"+features["mcolor"]) as color|null - if(new_mutantcolor) - var/temp_hsv = RGBtoHSV(new_mutantcolor) - if(new_mutantcolor == "#000000") - features["mcolor"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin - features["mcolor"] = sanitize_hexcolor(new_mutantcolor) - else - to_chat(user, "Invalid color. Your color is not bright enough.") - - if("mutant_color2") - var/new_mutantcolor = input(user, "Choose your character's secondary alien/mutant color:", "Character Preference") as color|null - if(new_mutantcolor) - var/temp_hsv = RGBtoHSV(new_mutantcolor) - if(new_mutantcolor == "#000000") - features["mcolor2"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin - features["mcolor2"] = sanitize_hexcolor(new_mutantcolor) - else - to_chat(user, "Invalid color. Your color is not bright enough.") - - if("mutant_color3") - var/new_mutantcolor = input(user, "Choose your character's tertiary alien/mutant color:", "Character Preference") as color|null - if(new_mutantcolor) - var/temp_hsv = RGBtoHSV(new_mutantcolor) - if(new_mutantcolor == "#000000") - features["mcolor3"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin - features["mcolor3"] = sanitize_hexcolor(new_mutantcolor) - else - to_chat(user, "Invalid color. Your color is not bright enough.") - - 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 - if(new_ipc_screen) - features["ipc_screen"] = new_ipc_screen - - if("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 - if(new_ipc_antenna) - features["ipc_antenna"] = new_ipc_antenna - - if("tail_lizard") - var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_lizard - if(new_tail) - features["tail_lizard"] = new_tail - if(new_tail != "None") - features["taur"] = "None" - - if("tail_human") - var/list/snowflake_tails_list = list("Normal" = null) - for(var/path in GLOB.tails_list_human) - 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_tails_list[S.name] = path - var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in snowflake_tails_list - if(new_tail) - features["tail_human"] = new_tail - if(new_tail != "None") - features["taur"] = "None" - - if("mam_tail") - var/list/snowflake_tails_list = list("Normal" = null) - for(var/path in GLOB.mam_tails_list) - 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_tails_list[S.name] = path - var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in snowflake_tails_list - if(new_tail) - features["mam_tail"] = new_tail - if(new_tail != "None") - features["taur"] = "None" - - if("snout") - var/new_snout - new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.snouts_list - if(new_snout) - features["snout"] = new_snout - - if("horns") - var/new_horns - new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list - if(new_horns) - features["horns"] = new_horns - - if("ears") - var/new_ears - new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.ears_list - if(new_ears) - features["ears"] = new_ears - - if("wings") - var/new_wings - new_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.r_wings_list - if(new_wings) - features["wings"] = new_wings - - if("frills") - var/new_frills - new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in GLOB.frills_list - if(new_frills) - features["frills"] = new_frills - - if("spines") - var/new_spines - new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in GLOB.spines_list - if(new_spines) - features["spines"] = new_spines - - if("body_markings") - var/new_body_markings - new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.body_markings_list - if(new_body_markings) - features["body_markings"] = new_body_markings - - if("legs") - var/new_legs - new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list - if(new_legs) - features["legs"] = new_legs - - if("moth_wings") - var/new_moth_wings - new_moth_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.moth_wings_list - if(new_moth_wings) - features["moth_wings"] = new_moth_wings - - if("s_tone") - var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in GLOB.skin_tones - if(new_s_tone) - skin_tone = new_s_tone - - if("taur") - var/list/snowflake_taur_list = list("Normal" = null) - for(var/path in GLOB.taur_list) - var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_taur_list[S.name] = path - var/new_taur - new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in snowflake_taur_list - if(new_taur) - features["taur"] = new_taur - if(new_taur != "None") - features["mam_tail"] = "None" - features["xenotail"] = "None" - - if("ears") - var/list/snowflake_ears_list = list("Normal" = null) - for(var/path in GLOB.ears_list) - var/datum/sprite_accessory/ears/instance = GLOB.ears_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_ears_list[S.name] = path - var/new_ears - new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in snowflake_ears_list - if(new_ears) - features["ears"] = new_ears - - if("mam_ears") - var/list/snowflake_ears_list = list("Normal" = null) - for(var/path in GLOB.mam_ears_list) - 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_ears_list[S.name] = path - var/new_ears - new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in snowflake_ears_list - if(new_ears) - features["mam_ears"] = new_ears - - if("mam_body_markings") - var/list/snowflake_markings_list = list("Normal" = null) - for(var/path in GLOB.mam_body_markings_list) - 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((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) - snowflake_markings_list[S.name] = path - var/new_mam_body_markings - new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list - if(new_mam_body_markings) - features["mam_body_markings"] = new_mam_body_markings - - //Xeno Bodyparts - if("xenohead")//Head or caste type - var/new_head - new_head = input(user, "Choose your character's caste:", "Character Preference") as null|anything in GLOB.xeno_head_list - if(new_head) - features["xenohead"] = new_head - - if("xenotail")//Currently one one type, more maybe later if someone sprites them. Might include animated variants in the future. - var/new_tail - new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.xeno_tail_list - if(new_tail) - features["xenotail"] = new_tail - - if("xenodorsal") - var/new_dors - new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in GLOB.xeno_dorsal_list - if(new_dors) - features["xenodorsal"] = new_dors - //Genital code - if("cock_color") - var/new_cockcolor = input(user, "Penis color:", "Character Preference") as color|null - if(new_cockcolor) - var/temp_hsv = RGBtoHSV(new_cockcolor) - if(new_cockcolor == "#000000") - features["cock_color"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) - features["cock_color"] = sanitize_hexcolor(new_cockcolor) - else - user << "Invalid color. Your color is not bright enough." - - if("cock_length") - var/new_length = input(user, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Character Preference") as num|null - if(new_length) - features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN) - - if("cock_shape") - var/new_shape - new_shape = input(user, "Penis shape:", "Character Preference") as null|anything in GLOB.cock_shapes_list - if(new_shape) - features["cock_shape"] = new_shape - - if("balls_color") - var/new_ballscolor = input(user, "Testicle Color:", "Character Preference") as color|null - if(new_ballscolor) - var/temp_hsv = RGBtoHSV(new_ballscolor) - if(new_ballscolor == "#000000") - features["balls_color"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) - features["balls_color"] = sanitize_hexcolor(new_ballscolor) - else - user << "Invalid color. Your color is not bright enough." - - if("egg_size") - var/new_size - var/list/egg_sizes = list(1,2,3) - new_size = input(user, "Egg Diameter(inches):", "Egg Size") as null|anything in egg_sizes - if(new_size) - features["eggsack_egg_size"] = new_size - - if("egg_color") - var/new_egg_color = input(user, "Egg Color:", "Character Preference") as color|null - if(new_egg_color) - var/temp_hsv = RGBtoHSV(new_egg_color) - if(ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) - features["eggsack_egg_color"] = sanitize_hexcolor(new_egg_color) - else - user << "Invalid color. Your color is not bright enough." - - if("breasts_size") - var/new_size - new_size = input(user, "Breast Size", "Character Preference") as null|anything in GLOB.breasts_size_list - if(new_size) - features["breasts_size"] = new_size - - if("breasts_shape") - var/new_shape - new_shape = input(user, "Breast Shape", "Character Preference") as null|anything in GLOB.breasts_shapes_list - if(new_shape) - features["breasts_shape"] = new_shape - - if("breasts_color") - var/new_breasts_color = input(user, "Breast Color:", "Character Preference") as color|null - if(new_breasts_color) - var/temp_hsv = RGBtoHSV(new_breasts_color) - if(new_breasts_color == "#000000") - features["breasts_color"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) - features["breasts_color"] = sanitize_hexcolor(new_breasts_color) - else - user << "Invalid color. Your color is not bright enough." - - if("vag_shape") - var/new_shape - new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list - if(new_shape) - features["vag_shape"] = new_shape - - if("vag_color") - var/new_vagcolor = input(user, "Vagina color:", "Character Preference") as color|null - if(new_vagcolor) - var/temp_hsv = RGBtoHSV(new_vagcolor) - if(new_vagcolor == "#000000") - features["vag_color"] = pref_species.default_color - else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) - features["vag_color"] = sanitize_hexcolor(new_vagcolor) - else - user << "Invalid color. Your color is not bright enough." - /datum/preferences/proc/is_loadout_slot_available(slot) var/list/L LAZYINITLIST(L) 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 4eba44598c..ef3c9487ba 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 @@ -5,7 +5,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "taur") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "body_markings" = "husky", "mam_tail" = "husky", "mam_ears" = "husky", "mam_body_markings" = "husky", "taur" = "None") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None") attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -61,7 +61,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) mutant_bodyparts = list("snout", "wings", "taur", "mam_tail", "mam_body_markings", "taur") - default_features = list("snout" = "Sharp", "wings" = "None", "taur" = "None", "mam_body_markings" = "Hawk") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "snout" = "Beak", "wings" = "None", "taur" = "None", "mam_body_markings" = "Hawk", "mam_tail" = "Hawk") attack_verb = "peck" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -114,7 +114,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) mutant_bodyparts = list("mam_tail", "mam_body_markings", "mam_ears", "taur") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF","mam_tail" = "shark", "mam_body_markings" = "None", "mam_ears" = "None") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF","mam_tail" = "shark", "mam_body_markings" = "Shark", "mam_ears" = "None") attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -168,7 +168,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "taur", "moth_wings") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "moth", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "None") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "moth", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain") attack_verb = "flutter" //wat? attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -222,8 +222,8 @@ default_color = "00FF00" species_traits = list(MUTCOLORS,EYECOLOR,LIPS) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "legs", "taur","mam_body_markings") - default_features = list("xenotail"="xeno","xenohead"="standard","xenodorsal"="standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "xeno") + mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "legs", "taur", "mam_body_markings") + default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "Xeno", "legs" = "Digitigrade Legs") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg'