Huge Sprite Rework
This is a big one, I reworked: Vagina sprites, Breast sprites, both onmob and item, and some Taur sprites How Taur sprites are layered, finally making genitals show for Nagas as they should. How colours are chosen (Humans can enable/disabled matching genitals to their skintones, everyone else has to pick a colour). Vaginas and Breasts now follow the same naming convention for sprites that penises use, so all genital organs can be rendered using the same piece of code. This means that breast sizes have dropped to single-letter variants, since those are what we got sprites for (Because the cup-size is now the Size of the obj). Breasts now have shapes! So far we only got the "pair" shape, but we got code-support for other variants. Vaginas can now also be chosen and will render properly, meaning we now have more of them to choose from (Some of them terrifying). They don't really use a size, but there's code support for it if sprites would be made for it. Breast items now change their size and color to the owner's when/if they somehow lose the organs (gibbing for example). Both Breasts and Vaginas change their description to match what the object is set to look like, sprites are lacking in that area however. Minor variable error in the penis-description code fixed. Taur sprites renamed to use the correct layers. Shephard sprite bug fixed where there was a missing 2 pixels in the middle of the body.
This commit is contained in:
@@ -115,8 +115,10 @@ var/list/preferences_datums = list()
|
||||
"has_breasts" = FALSE,
|
||||
"breasts_color" = "fff",
|
||||
"breasts_size" = "C",
|
||||
"breasts_shape" = "pair",
|
||||
"breasts_fluid" = "milk",
|
||||
"has_vag" = FALSE,
|
||||
"vag_shape" = "human",
|
||||
"vag_color" = "fff",
|
||||
"vag_clits" = 1,
|
||||
"vag_clit_diam" = 0.25,
|
||||
@@ -353,7 +355,6 @@ 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'>"
|
||||
|
||||
@@ -405,6 +406,8 @@ var/list/preferences_datums = list()
|
||||
dat += "<b>Tertiary Color: </b><span style='border: 1px solid #161616; background-color: #[features["mcolor3"]];'> </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>"
|
||||
dat += "<b>Genitals use skintone:</b><a href='?_src_=prefs;preference=genital_colour'>[features["genitals_use_skintone"] == TRUE ? "Enabled" : "Disabled"]</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];'> </span> <a href='?_src_=prefs;preference=hair;task=input'>Change</a><BR>"
|
||||
@@ -473,18 +476,26 @@ var/list/preferences_datums = list()
|
||||
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"]];'> </span> <a href='?_src_=prefs;preference=balls_color;task=input'>Change</a><BR>"
|
||||
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
||||
dat += "<b>Testicles Color:</b><span style='border: 1px solid #161616; background-color: #[skintone2hex(skin_tone)];'> </span>(Skin tone overriding)<BR>"
|
||||
else
|
||||
dat += "<b>Testicles Color:</b><span style='border: 1px solid #161616; background-color: #[features["balls_color"]];'> </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"]];'> </span> <a href='?_src_=prefs;preference=vag_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Vagina Type:</b> <a href='?_src_=prefs;preference=vag_shape;task=input'>[features["vag_shape"]]</a><BR>"
|
||||
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
||||
dat += "<b>Vagina Color:</b><span style='border: 1px solid #161616; background-color: #[skintone2hex(skin_tone)];'> </span>(Skin tone overriding)<BR>"
|
||||
else
|
||||
dat += "<b>Vagina Color:</b><span style='border: 1px solid #161616; background-color: #[features["vag_color"]];'> </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)];'> </span>(Skin tone overriding)"
|
||||
// else
|
||||
// dat += "<b>Color:</b><span style='border: 1px solid #161616; background-color: #[features["breasts_color"]];'> </span> <a href='?_src_=prefs;preference=breasts_color;task=input'>Change</a>"
|
||||
if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)
|
||||
dat += "<b>Color:</b><span style='border: 1px solid #161616; background-color: #[skintone2hex(skin_tone)];'> </span>(Skin tone overriding)<BR>"
|
||||
else
|
||||
dat += "<b>Color:</b><span style='border: 1px solid #161616; background-color: #[features["breasts_color"]];'> </span> <a href='?_src_=prefs;preference=breasts_color;task=input'>Change</a><BR>"
|
||||
dat += "<b>Cup Size:</b><a href='?_src_=prefs;preference=breasts_size;task=input'>[features["breasts_size"]]</a><br>"
|
||||
dat += "<b>Breast Shape:</b><a href='?_src_=prefs;preference=breasts_shape;task=input'>[features["breasts_shape"]]</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>"
|
||||
@@ -847,6 +858,11 @@ var/list/preferences_datums = list()
|
||||
eye_color = random_eye_color()
|
||||
if("s_tone")
|
||||
skin_tone = random_skin_tone()
|
||||
if(pref_species.use_skintones && features["genitals_use_skintone"])
|
||||
features["cock_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["breasts_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["vag_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["balls_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
if("bag")
|
||||
backbag = pick(backbaglist)
|
||||
if("all")
|
||||
@@ -1163,6 +1179,10 @@ var/list/preferences_datums = list()
|
||||
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones
|
||||
if(new_s_tone)
|
||||
skin_tone = new_s_tone
|
||||
features["cock_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["breasts_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["vag_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["balls_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
|
||||
if("ooccolor")
|
||||
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null
|
||||
@@ -1313,6 +1333,12 @@ var/list/preferences_datums = 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 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)
|
||||
@@ -1323,6 +1349,11 @@ var/list/preferences_datums = list()
|
||||
features["breasts_color"] = sanitize_hexcolor(new_breasts_color)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
if("vag_shape")
|
||||
var/new_shape
|
||||
new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in 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)
|
||||
@@ -1338,6 +1369,22 @@ var/list/preferences_datums = list()
|
||||
switch(href_list["preference"])
|
||||
|
||||
//citadel code
|
||||
if("genital_colour")
|
||||
switch(features["genitals_use_skintone"])
|
||||
if(TRUE)
|
||||
features["genitals_use_skintone"] = FALSE
|
||||
if(FALSE)
|
||||
features["genitals_use_skintone"] = TRUE
|
||||
features["cock_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["breasts_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["vag_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["balls_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
else
|
||||
features["genitals_use_skintone"] = FALSE
|
||||
features["cock_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["breasts_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["vag_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
features["balls_color"] = sanitize_hexcolor(skintone2hex(skin_tone))
|
||||
if("arousable")
|
||||
switch(arousable)
|
||||
if(TRUE)
|
||||
|
||||
@@ -148,10 +148,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//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_shape"] = sanitize_inlist(features["breasts_shape"], breasts_shapes_list, "pair")
|
||||
features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0)
|
||||
features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], milk_id_list, "milk")
|
||||
//vagina features
|
||||
features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0)
|
||||
features["vag_shape"] = sanitize_inlist(features["vag_shape"], vagina_shapes_list, "human")
|
||||
features["vag_color"] = sanitize_hexcolor(features["vag_color"], 3, 0)
|
||||
//womb features
|
||||
features["has_womb"] = sanitize_integer(features["has_womb"], 0, 1, 0)
|
||||
@@ -383,10 +385,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//breasts features
|
||||
S["feature_has_breasts"] >> features["has_breasts"]
|
||||
S["feature_breasts_size"] >> features["breasts_size"]
|
||||
S["feature_breasts_shape"] >> features["breasts_shape"]
|
||||
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_shape"] >> features["vag_shape"]
|
||||
S["feature_vag_color"] >> features["vag_color"]
|
||||
//womb features
|
||||
S["feature_has_womb"] >> features["has_womb"]
|
||||
@@ -547,10 +551,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//breasts features
|
||||
S["feature_has_breasts"] << features["has_breasts"]
|
||||
S["feature_breasts_size"] << features["breasts_size"]
|
||||
S["feature_breasts_shape"] << features["breasts_shape"]
|
||||
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_shape"] << features["vag_shape"]
|
||||
S["feature_vag_color"] << features["vag_color"]
|
||||
//womb features
|
||||
S["feature_has_womb"] << features["has_womb"]
|
||||
|
||||
@@ -357,12 +357,11 @@
|
||||
|
||||
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
||||
var/list/bodyparts_to_add = mutant_bodyparts.Copy()
|
||||
var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
var/list/relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER, BODY_TAUR_LAYER)
|
||||
var/list/standing = list()
|
||||
|
||||
H.remove_overlay(BODY_BEHIND_LAYER)
|
||||
H.remove_overlay(BODY_ADJ_LAYER)
|
||||
H.remove_overlay(BODY_FRONT_LAYER)
|
||||
for(var/L in relevant_layers)
|
||||
H.remove_overlay(L)
|
||||
|
||||
if(!mutant_bodyparts)
|
||||
return
|
||||
@@ -488,7 +487,7 @@
|
||||
|
||||
var/image/I
|
||||
|
||||
for(var/layer in relevent_layers)
|
||||
for(var/layer in relevant_layers)
|
||||
var/layertext = mutant_bodyparts_layertext(layer)
|
||||
|
||||
for(var/bodypart in bodyparts_to_add)
|
||||
@@ -695,9 +694,8 @@
|
||||
H.overlays_standing[layer] = standing.Copy()
|
||||
standing = list()
|
||||
|
||||
H.apply_overlay(BODY_BEHIND_LAYER)
|
||||
H.apply_overlay(BODY_ADJ_LAYER)
|
||||
H.apply_overlay(BODY_FRONT_LAYER)
|
||||
for(var/L in relevant_layers)
|
||||
H.apply_overlay(L)
|
||||
|
||||
|
||||
//This exists so sprite accessories can still be per-layer without having to include that layer's
|
||||
@@ -710,6 +708,8 @@
|
||||
return "ADJ"
|
||||
if(BODY_FRONT_LAYER)
|
||||
return "FRONT"
|
||||
if(BODY_TAUR_LAYER)
|
||||
return "TAUR"
|
||||
|
||||
|
||||
/datum/species/proc/spec_life(mob/living/carbon/human/H)
|
||||
|
||||
Reference in New Issue
Block a user