The Update (#241)

* auto vote runtime error fix

* part 1

* adds a wolf pai sprite

modified fox sprite that doesn't make your eyes bleed

* missed a painful sprite

* part 2

* ptwhatever

* save

* conflict resolution pt1

* conflict resolution pt2

* almost done with the preferences shit

* fixes missing arousal HUD

* file rename

* even more

* keep the panic commits coming

* forgot one

* wew, gonna go make some small changes

* s o o n

* LOOC admin and player toggles

* fixed backpacks and taurs clipping on the preview

* fixed penis length saving

* typo fix

* arousal fix

* icon tuning

* final
This commit is contained in:
TalkingCactus
2017-02-24 21:42:15 -05:00
committed by GitHub
parent 82fe4b01be
commit 36c580c236
49 changed files with 1608 additions and 540 deletions
+1 -1
View File
@@ -493,7 +493,7 @@ var/global/BSACooldown = 0
set name="Toggle Dead OOC"
dooc_allowed = !( dooc_allowed )
log_admin("[key_name(usr)] toggled OOC.")
log_admin("[key_name(usr)] toggled Dead OOC.")
message_admins("[key_name_admin(usr)] toggled Dead OOC.")
feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/*
+390 -272
View File
@@ -62,14 +62,79 @@ var/list/preferences_datums = list()
var/skin_tone = "caucasian1" //Skin color
var/eye_color = "000" //Eye color
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/list/features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tail_animated" = "None",
"xenodorsal" = "None", "xenohead" = "None", "xenotail" = "None", "legs" = "Normal Legs", "taur" = "None")
var/list/features = list("mcolor" = "FFF",
"mcolor2" = "FFF",
"mcolor3" = "FFF",
"tail_lizard" = "Smooth",
"tail_human" = "None",
"snout" = "Round",
"horns" = "None",
"ears" = "None",
"wings" = "None",
"frills" = "None",
"spines" = "None",
"body_markings" = "None",
"mam_body_markings" = "None",
"mam_ears" = "None",
"mam_tail" = "None",
"mam_tail_animated" = "None",
"xenodorsal" = "None",
"xenohead" = "None",
"xenotail" = "None",
"legs" = "Normal Legs",
"taur" = "None",
"exhibitionist" = FALSE,
"genitals_use_skintone" = FALSE,
"has_cock" = FALSE,
"cock_shape" = "human",
"cock_length" = 6,
"cock_girth_ratio" = COCK_GIRTH_RATIO_DEF,
"cock_color" = "fff",
"has_sheath" = FALSE,
"sheath_color" = "fff",
"has_balls" = FALSE,
"balls_internal" = FALSE,
"balls_color" = "fff",
"balls_amount" = 2,
"balls_sack_size" = BALLS_SACK_SIZE_DEF,
"balls_size" = BALLS_SIZE_DEF,
"balls_cum_rate" = CUM_RATE,
"balls_cum_mult" = CUM_RATE_MULT,
"balls_efficiency" = CUM_EFFICIENCY,
"balls_fluid" = "semen",
"has_ovi" = FALSE,
"ovi_shape" = "knotted",
"ovi_length" = 6,
"ovi_color" = "fff",
"has_eggsack" = FALSE,
"eggsack_internal" = TRUE,
"eggsack_color" = "fff",
"eggsack_size" = BALLS_SACK_SIZE_DEF,
"eggsack_egg_color" = "fff",
"eggsack_egg_size" = EGG_GIRTH_DEF,
"has_breasts" = FALSE,
"breasts_color" = "fff",
"breasts_size" = "C",
"breasts_fluid" = "milk",
"has_vag" = FALSE,
"vag_color" = "fff",
"vag_clits" = 1,
"vag_clit_diam" = 0.25,
"vag_clit_len" = 0.25,
"has_womb" = FALSE,
"womb_cum_rate" = CUM_RATE,
"womb_cum_mult" = CUM_RATE_MULT,
"womb_efficiency" = CUM_EFFICIENCY,
"womb_fluid" = "femcum"
)//MAKE SURE TO UPDATE THE LIST IN MOBS.DM IF YOU'RE GOING TO ADD TO THIS LIST, OTHERWISE THINGS MIGHT GET FUCKEY
var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
var/prefered_security_department = SEC_DEPT_RANDOM
//Mob preview
var/icon/preview_icon = null
var/icon/nude_preview_icon = null
//Jobs, uses bitflags
var/job_civilian_high = 0
@@ -90,7 +155,7 @@ var/list/preferences_datums = list()
// Want randomjob if preferences already filled - Donkie
var/joblessrole = BERANDOMJOB //defaults to 1 for fewer assistants
// 0 = character settings, 1 = game preferences
// 0 = character settings, 1 = game preferences, 2 = character appearance
var/current_tab = 0
var/flavor_text = ""
@@ -135,13 +200,18 @@ var/list/preferences_datums = list()
/datum/preferences/proc/ShowChoices(mob/user)
if(!user || !user.client)
return
update_preview_icon()
if(current_tab == 2)
update_preview_icon(nude=TRUE)
else
update_preview_icon(nude=FALSE)
user << browse_rsc(preview_icon, "previewicon.png")
var/dat = "<center>"
dat += "<a href='?_src_=prefs;preference=tab;tab=0' [current_tab == 0 ? "class='linkOn'" : ""]>Character Settings</a> "
dat += "<a href='?_src_=prefs;preference=tab;tab=0' [current_tab == 0 ? "class='linkOn'" : ""]>Character Settings</a>"
dat += "<a href='?_src_=prefs;preference=tab;tab=2' [current_tab == 2 ? "class='linkOn'" : ""]>Character Appearance</a>"
dat += "<a href='?_src_=prefs;preference=tab;tab=1' [current_tab == 1 ? "class='linkOn'" : ""]>Game Preferences</a>"
if(!path)
dat += "<div class='notice'>Please create an account to save your preferences</div>"
@@ -179,7 +249,8 @@ var/list/preferences_datums = list()
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : "Female"]</a><BR>"
dat += "<b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a><BR>"
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Exhibitionist:</b><a href='?_src_=prefs;preference=exhibitionist'>[features["exhibitionist"] == TRUE ? "Yes" : "No"]</a><BR>"
dat += "<b>Special Names:</b><BR>"
dat += "<a href ='?_src_=prefs;preference=clown_name;task=input'><b>Clown:</b> [custom_names["clown"]]</a> "
dat += "<a href ='?_src_=prefs;preference=mime_name;task=input'><b>Mime:</b>[custom_names["mime"]]</a><BR>"
@@ -196,270 +267,9 @@ var/list/preferences_datums = list()
dat += "<div class='statusDisplay'><center><img src=previewicon.png width=[preview_icon.Width()] height=[preview_icon.Height()]></center></div>"
dat += "</td></tr></table>"
dat += "<h2>Body</h2>"
dat += "<a href='?_src_=prefs;preference=all;task=random'>Random Body</A> "
dat += "<a href='?_src_=prefs;preference=all'>Always Random Body: [be_random_body ? "Yes" : "No"]</A><br>"
dat += "<table width='100%'><tr><td width='24%' valign='top'>"
if(config.mutant_races)
dat += "<b>Species:</b><BR><a href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
else
dat += "<b>Species:</b> Human<BR>"
dat += "<b>Underwear:</b><BR><a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><BR>"
dat += "<b>Undershirt:</b><BR><a href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a><BR>"
dat += "<b>Socks:</b><BR><a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><BR>"
dat += "<b>Backpack:</b><BR><a href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a><BR>"
dat += "<b>Uplink Spawn Location:</b><BR><a href ='?_src_=prefs;preference=uplink_loc;task=input'>[uplink_spawn_loc]</a><BR></td>"
// dat += "<b>Size:</b> <a href='?_src_=prefs;preference=character_size;task=input'>[character_size]</a><BR>"
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'><b>Set Flavor Text</b></a><br>"
if(lentext(flavor_text) <= 40)
if(!lentext(flavor_text))
dat += "\[...\]"
else
dat += "[flavor_text]"
else
dat += "[TextPreview(flavor_text)]...<br>"
dat += "<br>"
dat += "<br>"
if(pref_species.use_skintones)
dat += "<td valign='top' width='21%'>"
dat += "<h3>Skin Tone</h3>"
dat += "<a href='?_src_=prefs;preference=s_tone;task=input'>[skin_tone]</a><BR>"
dat += "</td>"
if(HAIR in pref_species.species_traits)
dat += "<td valign='top' width='21%'>"
dat += "<h3>Hair Style</h3>"
dat += "<a href='?_src_=prefs;preference=hair_style;task=input'>[hair_style]</a><BR>"
dat += "<a href='?_src_=prefs;preference=previous_hair_style;task=input'>&lt;</a> <a href='?_src_=prefs;preference=next_hair_style;task=input'>&gt;</a><BR>"
dat += "<span style='border:1px solid #161616; background-color: #[hair_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=hair;task=input'>Change</a><BR>"
dat += "</td><td valign='top' width='21%'>"
dat += "<h3>Facial Hair Style</h3>"
dat += "<a href='?_src_=prefs;preference=facial_hair_style;task=input'>[facial_hair_style]</a><BR>"
dat += "<a href='?_src_=prefs;preference=previous_facehair_style;task=input'>&lt;</a> <a href='?_src_=prefs;preference=next_facehair_style;task=input'>&gt;</a><BR>"
dat += "<span style='border: 1px solid #161616; background-color: #[facial_hair_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=facial;task=input'>Change</a><BR>"
dat += "</td>"
if(EYECOLOR in pref_species.species_traits)
dat += "<td valign='top' width='21%'>"
dat += "<h3>Eye Color</h3>"
dat += "<span style='border: 1px solid #161616; background-color: #[eye_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=eyes;task=input'>Change</a><BR>"
dat += "</td>"
if(config.mutant_races) //We don't allow mutant bodyparts for humans either unless this is true.
if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits))
dat += "<td valign='top' width='21%'>"
dat += "<h3>Alien/Mutant Colors</h3>"
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>"
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor2"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color2;task=input'>Change</a><BR>"
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor3"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color3;task=input'>Change</a><BR>"
dat += "</td>"
if("tail_lizard" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=tail_lizard;task=input'>[features["tail_lizard"]]</a><BR>"
dat += "</td>"
if("snout" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Snout</h3>"
dat += "<a href='?_src_=prefs;preference=snout;task=input'>[features["snout"]]</a><BR>"
dat += "</td>"
if("horns" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Horns</h3>"
dat += "<a href='?_src_=prefs;preference=horns;task=input'>[features["horns"]]</a><BR>"
dat += "</td>"
if("frills" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Frills</h3>"
dat += "<a href='?_src_=prefs;preference=frills;task=input'>[features["frills"]]</a><BR>"
dat += "</td>"
if("spines" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Spines</h3>"
dat += "<a href='?_src_=prefs;preference=spines;task=input'>[features["spines"]]</a><BR>"
dat += "</td>"
if("body_markings" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Body Markings</h3>"
dat += "<a href='?_src_=prefs;preference=body_markings;task=input'>[features["body_markings"]]</a><BR>"
dat += "</td>"
//Mammal bodyparts
if("mam_body_markings" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Mammal Body Markings</h3>"
dat += "<a href='?_src_=prefs;preference=mam_body_markings;task=input'>[features["mam_body_markings"]]</a><BR>"
dat += "</td>"
if("mam_tail" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=mam_tail;task=input'>[features["mam_tail"]]</a><BR>"
if("legs" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Legs</h3>"
dat += "<a href='?_src_=prefs;preference=legs;task=input'>[features["legs"]]</a><BR>"
dat += "</td>"
if("mam_ears" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Ears</h3>"
dat += "<a href='?_src_=prefs;preference=mam_ears;task=input'>[features["mam_ears"]]</a><BR>"
dat += "</td>"
if("taur" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Taur Body</h3>"
dat += "<a href='?_src_=prefs;preference=taur;task=input'>[features["taur"]]</a><BR>"
dat += "</td>"
//Xeno Bodyparts
if("xenohead" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Head/Caste</h3>"
dat += "<a href='?_src_=prefs;preference=xenohead;task=input'>[features["xenohead"]]</a><BR>"
dat += "</td>"
if("xenotail" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=xenotail;task=input'>[features["xenotail"]]</a><BR>"
dat += "</td>"
if("xenodorsal" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Dorsal Tubes</h3>"
dat += "<a href='?_src_=prefs;preference=xenodorsal;task=input'>[features["xenodorsal"]]</a><BR>"
dat += "</td>"
if(config.mutant_humans)
if("tail_human" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=tail_human;task=input'>[features["tail_human"]]</a><BR>"
dat += "</td>"
if("ears" in pref_species.mutant_bodyparts)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Ears</h3>"
dat += "<a href='?_src_=prefs;preference=ears;task=input'>[features["ears"]]</a><BR>"
dat += "</td>"
if("wings" in pref_species.mutant_bodyparts && r_wings_list.len >1)
dat += "<td valign='top' width='7%'>"
dat += "<h3>Wings</h3>"
dat += "<a href='?_src_=prefs;preference=wings;task=input'>[features["wings"]]</a><BR>"
dat += "</td>"
dat += "</tr></table>"
//citadel code
if(NOGENITALS in pref_species.species_traits)
dat += "<h2>Your species ([pref_species.name]) does not support genitals!</h2>"
else
dat += "<h2>Genitals</h2>"
dat += "<table width='100%'><tr><td width='20%' valign='top'>"
dat += "<td valign='top' width='20%'>"
dat += "<h3>Options</h3>"
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<h2>More Coming Soon(tm)</h2>"
dat += "</td>"
dat += "</td></tr></table>"
if (1) // Game Preferences
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>General Settings</h2>"
@@ -546,6 +356,7 @@ var/list/preferences_datums = list()
else
dat += "High"
dat += "</a><br>"
// dat += "<b>Genital Colors:</b><a href='?_src_=prefs;preference=genitals_color_source'>[features["genitals_use_skintone"] == TRUE ? "Skin Tone" : "Custom"]</a><BR>"
dat += "</td><td width='300px' height='300px' valign='top'>"
@@ -573,6 +384,127 @@ var/list/preferences_datums = list()
dat += "</td></tr></table>"
//Character Appearance
if(2)
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<div class='statusDisplay'><img src=previewicon.png width=[preview_icon.Width()] height=[preview_icon.Height()]></div><br>"
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'><b>Set Flavor Text</b></a><br>"
if(lentext(flavor_text) <= 40)
if(!lentext(flavor_text))
dat += "\[...\]"
else
dat += "[flavor_text]"
else
dat += "[TextPreview(flavor_text)]...<BR>"
if(config.mutant_races)//really don't need this check, but fuck un-tabbing all those lines
dat += "<h2>Body</h2>"
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : "Female"]</a><BR>"
dat += "<b>Species:</b><a href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
dat += "<a href='?_src_=prefs;preference=all;task=random'>Random Body</A><BR>"
dat += "<a href='?_src_=prefs;preference=all'>Always Random Body: [be_random_body ? "Yes" : "No"]</A><BR>"
if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits))
dat += "<b>Primary Color: </b><span style='border: 1px solid #161616; background-color: #[features["mcolor"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>"
dat += "<b>Secondary Color: </b><span style='border: 1px solid #161616; background-color: #[features["mcolor2"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color2;task=input'>Change</a><BR>"
dat += "<b>Tertiary Color: </b><span style='border: 1px solid #161616; background-color: #[features["mcolor3"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color3;task=input'>Change</a><BR>"
if(pref_species.use_skintones)
dat += "<b>Skin Tone: </b><a href='?_src_=prefs;preference=s_tone;task=input'>[skin_tone]</a><BR>"
if(HAIR in pref_species.species_traits)
dat += "<b>Hair Style: </b><a href='?_src_=prefs;preference=hair_style;task=input'>[hair_style]</a><BR>"
dat += "<b>Hair Color: </b><span style='border:1px solid #161616; background-color: #[hair_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=hair;task=input'>Change</a><BR>"
dat += "<b>Facial Hair Style: </b><a href='?_src_=prefs;preference=facial_hair_style;task=input'>[facial_hair_style]</a><BR>"
dat += "<b>Facial Hair Color: </b><span style='border: 1px solid #161616; background-color: #[facial_hair_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=facial;task=input'>Change</a><BR>"
if(EYECOLOR in pref_species.species_traits)
dat += "<b>Eye Color: </b><span style='border: 1px solid #161616; background-color: #[eye_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=eyes;task=input'>Change</a><BR>"
if("tail_lizard" in pref_species.mutant_bodyparts)
dat += "<b>Tail: </b><a href='?_src_=prefs;preference=tail_lizard;task=input'>[features["tail_lizard"]]</a><BR>"
else if("mam_tail" in pref_species.mutant_bodyparts)
dat += "<b>Tail: </b><a href='?_src_=prefs;preference=mam_tail;task=input'>[features["mam_tail"]]</a><BR>"
else if("tail_human" in pref_species.mutant_bodyparts)
dat += "<b>Tail: </b><a href='?_src_=prefs;preference=tail_human;task=input'>[features["tail_human"]]</a><BR>"
if("snout" in pref_species.mutant_bodyparts)
dat += "<b>Snout: </b><a href='?_src_=prefs;preference=snout;task=input'>[features["snout"]]</a><BR>"
if("horns" in pref_species.mutant_bodyparts)
dat += "<b>Snout: </b><a href='?_src_=prefs;preference=horns;task=input'>[features["horns"]]</a><BR>"
if("frills" in pref_species.mutant_bodyparts)
dat += "<b>Frills: </b><a href='?_src_=prefs;preference=frills;task=input'>[features["frills"]]</a><BR>"
if("spines" in pref_species.mutant_bodyparts)
dat += "<b>Spines: </b><a href='?_src_=prefs;preference=spines;task=input'>[features["spines"]]</a><BR>"
if("body_markings" in pref_species.mutant_bodyparts)
dat += "<b>Body Markings: </b><a href='?_src_=prefs;preference=body_markings;task=input'>[features["body_markings"]]</a><BR>"
else if("mam_body_markings" in pref_species.mutant_bodyparts)
dat += "<b>Body Markings: </b><a href='?_src_=prefs;preference=mam_body_markings;task=input'>[features["mam_body_markings"]]</a><BR>"
if("mam_ears" in pref_species.mutant_bodyparts)
dat += "<b>Ears: </b><a href='?_src_=prefs;preference=mam_ears;task=input'>[features["mam_ears"]]</a><BR>"
else if("ears" in pref_species.mutant_bodyparts)
dat += "<b>Ears: </b><a href='?_src_=prefs;preference=ears;task=input'>[features["ears"]]</a><BR>"
if("legs" in pref_species.mutant_bodyparts)
dat += "<b>Legs: </b><a href='?_src_=prefs;preference=legs;task=input'>[features["legs"]]</a><BR>"
if("taur" in pref_species.mutant_bodyparts)
dat += "<b>Taur: </b><a href='?_src_=prefs;preference=taur;task=input'>[features["taur"]]</a><BR>"
if("wings" in pref_species.mutant_bodyparts && r_wings_list.len >1)
dat += "<b>Wings: </b><a href='?_src_=prefs;preference=wings;task=input'>[features["wings"]]</a><BR>"
if("xenohead" in pref_species.mutant_bodyparts)
dat += "<b>Caste: </b><a href='?_src_=prefs;preference=xenohead;task=input'>[features["xenohead"]]</a><BR>"
if("xenotail" in pref_species.mutant_bodyparts)
dat += "<b>Tail: </b><a href='?_src_=prefs;preference=xenotail;task=input'>[features["xenotail"]]</a><BR>"
if("xenodorsal" in pref_species.mutant_bodyparts)
dat += "<b>Dorsal Tubes: </b><a href='?_src_=prefs;preference=xenodorsal;task=input'>[features["xenodorsal"]]</a><BR>"
dat += "</td><td width='300px' height='300px' valign='top'>"
dat += "<h2>Clothing & Equipment</h2>"
//underwear will be refactored later so it fits in with other wearable equipment and isn't just an overlay
// dat += "<b>Underwear:</b><a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><br>"
// dat += "<b>Undershirt:</b><a href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a><br>"
// dat += "<b>Socks:</b><a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><br>"
dat += "<b>Backpack:</b><a href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a><br>"
dat += "<b>Uplink Location:</b><a href ='?_src_=prefs;preference=uplink_loc;task=input'>[uplink_spawn_loc]</a><br>"
dat += "<h2>Genitals</h2>"
if(NOGENITALS in pref_species.species_traits)
dat += "<b>Your species ([pref_species.name]) does not support genitals!</b><br>"
else
dat += "<b>Has Penis:</b><a href='?_src_=prefs;preference=has_cock'>[features["has_cock"] == TRUE ? "Yes" : "No"]</a><BR>"
if(features["has_cock"] == TRUE)
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
dat += "<b>Penis Color:</b><span style='border: 1px solid #161616; background-color: #[skintone2hex(skin_tone)];'>&nbsp;&nbsp;&nbsp;</span>(Skin tone overriding)<BR>"
else
dat += "<b>Penis Color:</b><span style='border: 1px solid #161616; background-color: #[features["cock_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=cock_color;task=input'>Change</a><BR>"
// dat += "<br>"
dat += "<b>Penis Shape:</b> <a href='?_src_=prefs;preference=cock_shape;task=input'>[features["cock_shape"]]</a><BR>"
dat += "<b>Penis Length:</b> <a href='?_src_=prefs;preference=cock_length;task=input'>[features["cock_length"]] inch(es)</a><BR>"
dat += "<b>Has Testicles:</b><a href='?_src_=prefs;preference=has_balls'>[features["has_balls"] == TRUE ? "Yes" : "No"]</a><BR>"
if(features["has_balls"] == TRUE)
dat += "<b>Testicles Color:</b><span style='border: 1px solid #161616; background-color: #[features["balls_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=balls_color;task=input'>Change</a><BR>"
dat += "<b>Has Vagina:</b><a href='?_src_=prefs;preference=has_vag'>[features["has_vag"] == TRUE ? "Yes" : "No"]</a><BR>"
if(features["has_vag"])
dat += "<b>Vagina Color:</b><span style='border: 1px solid #161616; background-color: #[features["vag_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=vag_color;task=input'>Change</a><BR>"
dat += "<b>Has Womb:</b><a href='?_src_=prefs;preference=has_womb'>[features["has_womb"] == TRUE ? "Yes" : "No"]</a><BR>"
dat += "<b>Has Breasts:</b><a href='?_src_=prefs;preference=has_breasts'>[features["has_breasts"] == TRUE ? "Yes" : "No"]</a><BR>"
if(features["has_breasts"])
// if(pref_species.use_skintones)
// dat += "<b>Color:</b><span style='border: 1px solid #161616; background-color: #[skintone2hex(skin_tone)];'>&nbsp;&nbsp;&nbsp;</span>(Skin tone overriding)"
// else
// dat += "<b>Color:</b><span style='border: 1px solid #161616; background-color: #[features["breasts_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=breasts_color;task=input'>Change</a>"
dat += "<b>Cup Size:</b><a href='?_src_=prefs;preference=breasts_size;task=input'>[features["breasts_size"]]</a><br>"
/*
dat += "<h3>Ovipositor</h3>"
dat += "<b>Has Ovipositor:</b><a href='?_src_=prefs;preference=has_ovi'>[features["has_ovi"] == TRUE ? "Yes" : "No"]</a>"
if(features["has_ovi"])
dat += "<b>Ovi Color:</b><span style='border: 1px solid #161616; background-color: #[features["ovi_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=ovi_color;task=input'>Change</a>"
dat += "<h3>Eggsack</h3>"
dat += "<b>Has Eggsack:</b><a href='?_src_=prefs;preference=has_eggsack'>[features["has_eggsack"] == TRUE ? "Yes" : "No"]</a><BR>"
if(features["has_eggsack"] == TRUE)
dat += "<b>Color:</b><span style='border: 1px solid #161616; background-color: #[features["eggsack_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=eggsack_color;task=input'>Change</a>"
dat += "<b>Egg Color:</b><span style='border: 1px solid #161616; background-color: #[features["eggsack_egg_color"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=egg_color;task=input'>Change</a>"
dat += "<b>Egg Size:</b><a href='?_src_=prefs;preference=egg_size;task=input'>[features["eggsack_egg_size"]]\" Diameter</a>"
dat += "</td>"
*/
dat += "</td></tr></table>"
dat += "<hr><center>"
if(!IsGuestKey(user.key))
@@ -1122,24 +1054,33 @@ var/list/preferences_datums = list()
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_lizard
if(new_tail)
features["tail_lizard"] = new_tail
if(new_tail != "None")
features["taur"] = "None"
if("tail_human")
var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_human
if(new_tail)
features["tail_human"] = new_tail
if(new_tail != "None")
features["taur"] = "None"
if("mam_tail")
var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in mam_tails_list
if(new_tail)
features["mam_tail"] = new_tail
if(new_tail != "None")
features["taur"] = "None"
if("taur")
var/new_taur
new_taur = input(user, "Choose your character's tauric body:", "Character Preference") as null|anything in taur_list
if(new_taur)
features["taur"] = new_taur
if(new_taur != "None")
features["mam_tail"] = "None"
features["xenotail"] = "None"
/* Doesn't exist yet. will include facial overlays to mimic 5th port species heads.
if("mam_snout")
@@ -1326,6 +1267,82 @@ var/list/preferences_datums = list()
if(pickedui)
UI_style = pickedui
//citadel 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 << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
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 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 << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
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 << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
if("breasts_size")
var/new_size
new_size = input(user, "Breast Size", "Character Preference") as null|anything in breasts_size_list
if(new_size)
features["breasts_size"] = new_size
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 << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
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 << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
else
switch(href_list["preference"])
@@ -1339,6 +1356,105 @@ var/list/preferences_datums = list()
arousable = TRUE
else//failsafe
arousable = FALSE
if("has_cock")
switch(features["has_cock"])
if(TRUE)
features["has_cock"] = FALSE
if(FALSE)
features["has_cock"] = TRUE
features["has_ovi"] = FALSE
features["has_eggsack"] = FALSE
else
features["has_cock"] = FALSE
features["has_ovi"] = FALSE
if("has_balls")
switch(features["has_balls"])
if(TRUE)
features["has_balls"] = FALSE
if(FALSE)
features["has_balls"] = TRUE
features["has_eggsack"] = FALSE
else
features["has_balls"] = FALSE
features["has_eggsack"] = FALSE
if("has_ovi")
switch(features["has_ovi"])
if(TRUE)
features["has_ovi"] = FALSE
if(FALSE)
features["has_ovi"] = TRUE
features["has_cock"] = FALSE
features["has_balls"] = FALSE
else
features["has_ovi"] = FALSE
features["has_cock"] = FALSE
if("has_eggsack")
switch(features["has_eggsack"])
if(TRUE)
features["has_eggsack"] = FALSE
if(FALSE)
features["has_eggsack"] = TRUE
features["has_balls"] = FALSE
else
features["has_eggsack"] = FALSE
features["has_balls"] = FALSE
if("balls_internal")
switch(features["balls_internal"])
if(TRUE)
features["balls_internal"] = FALSE
if(FALSE)
features["balls_internal"] = TRUE
features["eggsack_internal"] = FALSE
else
features["balls_internal"] = FALSE
features["eggsack_internal"] = FALSE
if("eggsack_internal")
switch(features["eggsack_internal"])
if(TRUE)
features["eggsack_internal"] = FALSE
if(FALSE)
features["eggsack_internal"] = TRUE
features["balls_internal"] = FALSE
else
features["eggsack_internal"] = FALSE
features["balls_internal"] = FALSE
if("has_breasts")
switch(features["has_breasts"])
if(TRUE)
features["has_breasts"] = FALSE
if(FALSE)
features["has_breasts"] = TRUE
else
features["has_breasts"] = FALSE
if("has_vag")
switch(features["has_vag"])
if(TRUE)
features["has_vag"] = FALSE
if(FALSE)
features["has_vag"] = TRUE
else
features["has_vag"] = FALSE
if("has_womb")
switch(features["has_womb"])
if(TRUE)
features["has_womb"] = FALSE
if(FALSE)
features["has_womb"] = TRUE
else
features["has_womb"] = FALSE
if("exhibitionist")
switch(features["exhibitionist"])
if(TRUE)
features["exhibitionist"] = FALSE
if(FALSE)
features["exhibitionist"] = TRUE
else
features["exhibitionist"] = FALSE
if("publicity")
if(unlock_content)
@@ -1348,11 +1464,11 @@ var/list/preferences_datums = list()
gender = FEMALE
else
gender = MALE
underwear = random_underwear(gender)
undershirt = random_undershirt(gender)
socks = random_socks()
facial_hair_style = random_facial_hair_style(gender)
hair_style = random_hair_style(gender)
underwear = "Nude"
undershirt = "Nude"
socks = "Nude"
facial_hair_style = "Shaved"
hair_style = "Bald"
if("hotkeys")
hotkeys = !hotkeys
@@ -1490,6 +1606,8 @@ var/list/preferences_datums = list()
else
chosen_species = /datum/species/human
character.set_species(chosen_species, icon_update=0)
//citadel code
character.give_genitals()
if(icon_updates)
character.update_body()
+70 -9
View File
@@ -8,14 +8,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
This proc checks if the current directory of the savefile S needs updating
It is to be used by the load_character and load_preferences procs.
(S.cd=="/" is preferences, S.cd=="/character[integer]" is a character slot, etc)
if the current directory's version is below SAVEFILE_VERSION_MIN it will simply wipe everything in that directory
(if we're at root "/" then it'll just wipe the entire savefile, for instance.)
if its version is below SAVEFILE_VERSION_MAX but above the minimum, it will load data but later call the
respective update_preferences() or update_character() proc.
Those procs allow coders to specify format changes so users do not lose their setups and have to redo them again.
Failing all that, the standard sanity checks are performed. They simply check the data is suitable, reverting to
initial() values if necessary.
*/
@@ -312,6 +309,27 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_xeno_dors"] >> features["xenodorsal"]
S["feature_xeno_head"] >> features["xenohead"]
S["feature_lizard_legs"] >> features["legs"]
//cock features
S["feature_has_cock"] >> features["has_cock"]
S["feature_cock_shape"] >> features["cock_shape"]
S["feature_cock_color"] >> features["cock_color"]
S["feature_cock_length"] >> features["cock_length"]
S["feature_cock_girth"] >> features["cock_girth"]
S["feature_has_sheath"] >> features["sheath_color"]
//balls features
S["feature_has_balls"] >> features["has_balls"]
S["feature_balls_color"] >> features["balls_color"]
S["feature_balls_size"] >> features["balls_size"]
S["feature_balls_sack_size"] >> features["balls_sack_size"]
S["feature_balls_fluid"] >> features["balls_fluid"]
//breasts features
S["feature_has_breasts"] >> features["has_breasts"]
S["feature_breasts_size"] >> features["breasts_size"]
S["feature_breasts_color"] >> features["breasts_color"]
S["feature_breasts_fluid"] >> features["breasts_fluid"]
//vagina features
S["feature_has_vag"] >> features["has_vag"]
S["feature_vag_color"] >> features["vag_color"]
if(!config.mutant_humans)
features["tail_human"] = "none"
features["ears"] = "none"
@@ -361,14 +379,17 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(gender == MALE)
hair_style = sanitize_inlist(hair_style, hair_styles_male_list)
facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_male_list)
underwear = sanitize_inlist(underwear, underwear_m)
undershirt = sanitize_inlist(undershirt, undershirt_m)
// underwear = sanitize_inlist(underwear, underwear_m)
// undershirt = sanitize_inlist(undershirt, undershirt_m)
else
hair_style = sanitize_inlist(hair_style, hair_styles_female_list)
facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_female_list)
underwear = sanitize_inlist(underwear, underwear_f)
undershirt = sanitize_inlist(undershirt, undershirt_f)
socks = sanitize_inlist(socks, socks_list)
// underwear = sanitize_inlist(underwear, underwear_f)
// undershirt = sanitize_inlist(undershirt, undershirt_f)
// socks = sanitize_inlist(socks, socks_list)
underwear = "Nude"
undershirt = "Nude"
socks = "Nude"
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
hair_color = sanitize_hexcolor(hair_color, 3, 0)
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
@@ -396,6 +417,25 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["xenohead"] = sanitize_inlist(features["xenohead"], xeno_head_list)
features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], xeno_dorsal_list)
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], legs_list, "Normal Legs")
//cock features
features["has_cock"] = sanitize_integer(features["has_cock"], 0, 1, 0)
features["cock_shape"] = sanitize_inlist(features["cock_shape"], cock_shapes_list, "Human")
features["cock_color"] = sanitize_hexcolor(features["cock_color"], 3, 0)
features["cock_length"] = sanitize_integer(features["cock_length"], COCK_SIZE_MIN, COCK_SIZE_MAX, 6)
//balls features
features["has_balls"] = sanitize_integer(features["has_balls"], 0, 1, 0)
features["balls_color"] = sanitize_hexcolor(features["balls_color"], 3, 0)
features["balls_size"] = sanitize_integer(features["balls_size"], BALLS_SIZE_MIN, BALLS_SIZE_MAX, BALLS_SIZE_DEF)
features["balls_sack_size"] = sanitize_integer(features["balls_sack_size"], BALLS_SACK_SIZE_MIN, BALLS_SACK_SIZE_MAX, BALLS_SACK_SIZE_DEF)
features["balls_fluid"] = sanitize_inlist(features["balls_fluid"], cum_id_list, "semen")
//breasts features
features["has_breasts"] = sanitize_integer(features["has_breasts"], 0, 1, 0)
features["breasts_size"] = sanitize_inlist(features["breasts_size"], breasts_size_list, "C")
features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0)
features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], cum_id_list, "semen")
//vagina features
features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0)
features["vag_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0)
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
@@ -468,6 +508,27 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["religion_name"] << custom_names["religion"]
S["deity_name"] << custom_names["deity"]
S["prefered_security_department"] << prefered_security_department
//cock features
S["feature_has_cock"] << features["has_cock"]
S["feature_cock_shape"] << features["cock_shape"]
S["feature_cock_color"] << features["cock_color"]
S["feature_cock_length"] << features["cock_length"]
S["feature_cock_girth"] << features["cock_girth"]
S["feature_has_sheath"] << features["sheath_color"]
//balls features
S["feature_has_balls"] << features["has_balls"]
S["feature_balls_color"] << features["balls_color"]
S["feature_balls_size"] << features["balls_size"]
S["feature_balls_sack_size"] << features["balls_sack_size"]
S["feature_balls_fluid"] << features["balls_fluid"]
//breasts features
S["feature_has_breasts"] << features["has_breasts"]
S["feature_breasts_size"] << features["breasts_size"]
S["feature_breasts_color"] << features["breasts_color"]
S["feature_breasts_fluid"] << features["breasts_fluid"]
//vagina features
S["feature_has_vag"] << features["has_vag"]
S["feature_vag_color"] << features["vag_color"]
//Jobs
S["joblessrole"] << joblessrole
@@ -496,4 +557,4 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
/client/verb/savefile_import(path as text)
var/savefile/S = new /savefile(path)
S.ImportText("/",file("[path].txt"))
*/
*/
@@ -517,6 +517,22 @@
icon_state = "glass_yellow"
name = "Eggnog"
desc = "For enjoying the most wonderful time of the year."
if("aphro")
icon_state = "glass_aphro"
name = "glass of aphrodisiac"
desc = "For your love interest."
if("aphro+")
icon_state = "glass_aphro+"
name = "glass of strong aphrodisiac"
desc = "For your less interested love interest."
if("semen")
icon_state = "glass_semen"
name = "glass of semen"
desc = "Salty."
if("femcum")
icon_state = "glass_femcum"
name = "glass of female ejaculate"
desc = "A glass of female ejaculate."
else
icon_state ="glass_brown"
var/image/I = image(icon, "glassoverlay")
@@ -627,6 +643,18 @@
icon_state = "shotglassgreen"
name = "shot of absinthe"
desc = "I am stuck in the cycles of my guilt..."
if ("semen")
icon_state = "shotglasswhite"
name = "cum shot"
desc = "All those college years boil down to this."
if("aphro")
icon_state = "shotglassaphro"
name = "shot of love"
desc = "Guaranteed to put you in the mood."
if("aphro+")
icon_state = "shotglassaphro"
name = "strong shot of love"
desc = "Guaranteed to put you in the mood. Not recommended to take more than one unless you're dedicated."
else
icon_state = "shotglassbrown"
name = "shot of... what?"
@@ -648,7 +676,7 @@
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/cola
name = "Space Cola"
list_reagents = list("cola" = 50)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola
name = "Nuka Cola"
list_reagents = list("nuka_cola" = 50)
@@ -36,6 +36,8 @@
adjustCloneLoss(damage * hit_percent)
if(STAMINA)
adjustStaminaLoss(damage * hit_percent)
if(AROUSAL)
adjustArousalLoss(damage * hit_percent)
return 1
@@ -28,6 +28,9 @@
if (notransform)
return
//citadel code
if(stat != DEAD)
handle_arousal()
if(..()) //not dead
for(var/datum/mutation/human/HM in dna.mutations)
@@ -269,6 +269,7 @@
standing += img_eyes
//Underwear, Undershirts & Socks
/*This will be refactored at a later date
if(H.underwear)
var/datum/sprite_accessory/underwear/underwear = underwear_list[H.underwear]
if(underwear)
@@ -286,11 +287,13 @@
var/datum/sprite_accessory/socks/socks = socks_list[H.socks]
if(socks)
standing += image("icon"=socks.icon, "icon_state"="[socks.icon_state]", "layer"=-BODY_LAYER)
*/
if(standing.len)
H.overlays_standing[BODY_LAYER] = standing
H.apply_overlay(BODY_LAYER)
//citadel code
handle_genitals(H)
handle_mutant_bodyparts(H)
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
@@ -392,9 +395,9 @@
bodyparts_to_add -= "mam_ears"
if("taur" in mutant_bodyparts)
if(!H.dna.features["taur"] || H.dna.features["taur"] == "None" || !H.dna.features["mam_tail"] == "None" || !H.dna.features["mam_waggingtail"] == "None")
if(!H.dna.features["taur"] || H.dna.features["taur"] == "None")
bodyparts_to_add -= "taur"
else
//Digitigrade legs are stuck in the phantom zone between true limbs and mutant bodyparts. Mainly it just needs more agressive updating than most limbs.
var/update_needed = FALSE
@@ -265,8 +265,11 @@ There are several things that need to be remembered:
if(hud_used.inventory_shown) //if the inventory is open
client.screen += shoes //add it to client's screen
update_observer_view(shoes,1)
var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi')
overlays_standing[SHOES_LAYER] = standing
if("taur" in dna.species.mutant_bodyparts)
switch(dna.features["taur"])
if(!"Naga" || "None")
var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi')
overlays_standing[SHOES_LAYER] = standing
apply_overlay(SHOES_LAYER)
@@ -224,6 +224,9 @@
/mob/living/carbon/proc/update_body_parts()
//CHECK FOR UPDATE
var/oldkey = icon_render_key
var/istaur = 0
if("taur" in dna.species.mutant_bodyparts && dna.features["taur"] != "None")
istaur = 1
icon_render_key = generate_icon_render_key()
if(oldkey == icon_render_key)
return
@@ -232,6 +235,8 @@
for(var/X in bodyparts)
var/obj/item/bodypart/BP = X
if(istaur && (istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) )
continue
BP.update_limb()
//LOAD ICONS
@@ -5,9 +5,6 @@
gender = gender_override
else
gender = pick(MALE,FEMALE)
underwear = random_underwear(gender)
undershirt = random_undershirt(gender)
socks = random_socks()
skin_tone = random_skin_tone()
hair_style = random_hair_style(gender)
facial_hair_style = random_facial_hair_style(gender)
@@ -17,12 +14,16 @@
if(!pref_species)
var/rando_race = pick(config.roundstart_races)
pref_species = new rando_race()
backbag = 1
features = random_features()
age = rand(AGE_MIN,AGE_MAX)
/datum/preferences/proc/update_preview_icon()
/datum/preferences/proc/update_preview_icon(nude=FALSE)
// Silicons only need a very basic preview since there is no customization for them.
var/wide_icon = 0
var/stamp_x = 0
var/stamp_y = 1
if(features["taur"] != "None")
wide_icon = 1
if(job_engsec_high)
switch(job_engsec_high)
if(AI)
@@ -41,45 +42,56 @@
// Determine what job is marked as 'High' priority, and dress them up as such.
var/datum/job/previewJob
var/highRankFlag = job_civilian_high | job_medsci_high | job_engsec_high
if(!nude)
if(job_civilian_low & ASSISTANT)
previewJob = SSjob.GetJob("Assistant")
else if(highRankFlag)
var/highDeptFlag
if(job_civilian_high)
highDeptFlag = CIVILIAN
else if(job_medsci_high)
highDeptFlag = MEDSCI
else if(job_engsec_high)
highDeptFlag = ENGSEC
if(job_civilian_low & ASSISTANT)
previewJob = SSjob.GetJob("Assistant")
else if(highRankFlag)
var/highDeptFlag
if(job_civilian_high)
highDeptFlag = CIVILIAN
else if(job_medsci_high)
highDeptFlag = MEDSCI
else if(job_engsec_high)
highDeptFlag = ENGSEC
for(var/datum/job/job in SSjob.occupations)
if(job.flag == highRankFlag && job.department_flag == highDeptFlag)
previewJob = job
break
for(var/datum/job/job in SSjob.occupations)
if(job.flag == highRankFlag && job.department_flag == highDeptFlag)
previewJob = job
break
if(previewJob)
mannequin.job = previewJob.title
previewJob.equip(mannequin, TRUE)
CHECK_TICK
preview_icon = icon('icons/effects/effects.dmi', "nothing")
preview_icon.Scale(48+32, 16+32)
preview_icon.Scale((112), (32))
CHECK_TICK
mannequin.setDir(NORTH)
var/icon/stamp = getFlatIcon(mannequin)
if(wide_icon)
stamp_x = 16
else
stamp_x = 32
CHECK_TICK
preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17)
preview_icon.Blend(stamp, ICON_OVERLAY, stamp_x, stamp_y)
CHECK_TICK
mannequin.setDir(WEST)
stamp = getFlatIcon(mannequin)
if(wide_icon)
stamp_x = 48
else
stamp_x = 64
CHECK_TICK
preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9)
preview_icon.Blend(stamp, ICON_OVERLAY, stamp_x, stamp_y)
CHECK_TICK
mannequin.setDir(SOUTH)
stamp = getFlatIcon(mannequin)
if(wide_icon)
stamp_x = -15
else
stamp_x = 1
CHECK_TICK
preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1)
preview_icon.Blend(stamp, ICON_OVERLAY, stamp_x, stamp_y)
CHECK_TICK
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
CHECK_TICK
-42
View File
@@ -1,42 +0,0 @@
/obj/structure/reagent_dispensers/keg
name = "keg"
desc = "A keg."
icon_state = "keg"
var/reagent_type = "water"
/obj/structure/reagent_dispensers/keg/New()
..()
reagents.add_reagent(reagent_type,1000)
/obj/structure/reagent_dispensers/keg/blob_act()
qdel(src)
/obj/structure/reagent_dispensers/keg/mead
name = "keg of mead"
desc = "A keg of mead."
icon_state = "orangekeg"
reagent_type = "mead"
/obj/structure/reagent_dispensers/keg/aphro
name = "keg of aphrodisiac"
desc = "A keg of aphrodisiac."
icon_state = "pinkkeg"
reagent_type = "hornychem"
/obj/structure/reagent_dispensers/keg/milk
name = "keg of milk"
desc = "It's not quite what you were hoping for."
icon_state = "whitekeg"
reagent_type = "milk"
/obj/structure/reagent_dispensers/keg/semen
name = "keg of semen"
desc = "Dear lord, where did this even come from?"
icon_state = "whitekeg"
reagent_type = "semen"
/obj/structure/reagent_dispensers/keg/gargle
name = "keg of pan galactic gargleblaster"
desc = "A keg of... wow that's a long name."
icon_state = "bluekeg"
reagent_type = "gargleblaster"