From ef5ba84edc2c46eaa5490a03c21f668cb068630f Mon Sep 17 00:00:00 2001 From: Azarak Date: Sun, 4 Oct 2020 02:00:29 +0200 Subject: [PATCH] skintoning (#1147) --- code/__DEFINES/~skyrat_defines/DNA.dm | 2 +- .../customization/_globalvars/lists.dm | 12 +---- .../modules/customization/datums/dna.dm | 2 +- .../genitals/breasts_onmob.dmi | Bin 10248 -> 19404 bytes .../sprite_accessory/genitals/penis_onmob.dmi | Bin 4320 -> 4818 bytes .../genitals/testicles_onmob.dmi | Bin 465 -> 618 bytes .../icons/obj/genitals/breasts.dmi | Bin 836 -> 887 bytes .../modules/client/preferences.dm | 13 +++-- .../mob/dead/new_player/preferences_setup.dm | 2 + .../new_player/sprite_accessories/genitals.dm | 8 +++ .../modules/surgery/organs/genitals.dm | 49 +++++++++++++----- 11 files changed, 59 insertions(+), 29 deletions(-) diff --git a/code/__DEFINES/~skyrat_defines/DNA.dm b/code/__DEFINES/~skyrat_defines/DNA.dm index f691b97ccf1..af0d9022c48 100644 --- a/code/__DEFINES/~skyrat_defines/DNA.dm +++ b/code/__DEFINES/~skyrat_defines/DNA.dm @@ -66,7 +66,7 @@ #define SHEATH_NORMAL "Sheath" #define SHEATH_SLIT "Slit" -#define MANDATORY_FEATURE_LIST list("mcolor" = "FFB","mcolor2" = "FFB","mcolor3" = "FFB","ethcolor" = "FCC","skin_color" = "FED","flavor_text" = "","breasts_size" = 1,"breasts_lactation" = FALSE,"penis_size" = 13,"penis_girth" = 9,"penis_taur_mode" = TRUE,"penis_sheath" = SHEATH_NONE ,"balls_size" = 1, "body_size" = BODY_SIZE_NORMAL, "custom_species" = null) +#define MANDATORY_FEATURE_LIST list("mcolor" = "FFB","mcolor2" = "FFB","mcolor3" = "FFB","ethcolor" = "FCC","skin_color" = "FED","flavor_text" = "","breasts_size" = 1,"breasts_lactation" = FALSE,"penis_size" = 13,"penis_girth" = 9,"penis_taur_mode" = TRUE,"penis_sheath" = SHEATH_NONE ,"balls_size" = 1, "body_size" = BODY_SIZE_NORMAL, "custom_species" = null, "uses_skintones" = FALSE) #define UNDERWEAR_HIDE_SOCKS (1<<0) #define UNDERWEAR_HIDE_SHIRT (1<<1) diff --git a/modular_skyrat/modules/customization/_globalvars/lists.dm b/modular_skyrat/modules/customization/_globalvars/lists.dm index 6a4f94df03e..6c2441a831b 100644 --- a/modular_skyrat/modules/customization/_globalvars/lists.dm +++ b/modular_skyrat/modules/customization/_globalvars/lists.dm @@ -26,16 +26,6 @@ GLOBAL_LIST_INIT(balls_size_translation, list("0" = "Small", "3" = "Enormous" )) -/*GLOBAL_LIST_INIT(bitflag_to_marking_zones, list(HEAD = "Head", - CHEST = "Chest", - LEG_LEFT = "Left Leg", - LEG_RIGHT = "Right Leg", - ARM_LEFT = "Left Arm", - ARM_RIGHT = "Right Arm", - HAND_LEFT = "Left Hand", - HAND_RIGHT = "Right Hand" - ))*/ - GLOBAL_LIST_INIT(marking_zone_to_bitflag, list(BODY_ZONE_HEAD = HEAD, BODY_ZONE_CHEST = CHEST, BODY_ZONE_L_LEG = LEG_LEFT, @@ -51,7 +41,7 @@ GLOBAL_LIST_INIT(marking_zone_to_bitflag, list(BODY_ZONE_HEAD = HEAD, GLOBAL_LIST_INIT(marking_zones, list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_PRECISE_L_HAND,BODY_ZONE_PRECISE_R_HAND)) ///Those are the values available from prefs -GLOBAL_LIST_INIT(preference_breast_sizes, list("Flatchested","A","B","C","D","E","F","G","H")) +GLOBAL_LIST_INIT(preference_breast_sizes, list("Flatchested","A","B","C","D","E","F","G","H","I","J")) GLOBAL_LIST_INIT(preference_balls_sizes, list("Small","Average","Big","Enormous")) diff --git a/modular_skyrat/modules/customization/datums/dna.dm b/modular_skyrat/modules/customization/datums/dna.dm index dac7c5b4a49..9e6927a48ed 100644 --- a/modular_skyrat/modules/customization/datums/dna.dm +++ b/modular_skyrat/modules/customization/datums/dna.dm @@ -22,7 +22,7 @@ var/change_multiplier = features["body_size"] / current_body_size //We update the translation to make sure our character doesn't go out of the southern bounds of the tile var/translate = ((change_multiplier-1) * 32)/2 - holder.transform = holder.transform.Scale(change_multiplier, change_multiplier) + holder.transform = holder.transform.Scale(change_multiplier) holder.transform = holder.transform.Translate(0, translate) current_body_size = features["body_size"] diff --git a/modular_skyrat/modules/customization/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi b/modular_skyrat/modules/customization/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi index 2c9cbe635492f3c4fb2fd73b8f51f87c4b6fafe6..47c61a4af484a60f48b82332347b97a80b7b9fc8 100644 GIT binary patch literal 19404 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 J_V~5?{|oH9a%lhn literal 10248 zcmch7dpMM9-}cx*2(&C)yMHoz|W%F;V7+BFc^d=DeqZ)qcYLKZ%pj&|VtsrkdUl=Sj zH}6q{_4{KorgZkv%HW8HIqrzNIhTbChY$Y5{qP~~>J7zcA*@a7kx?;ao9wB%bNOT0 zhZY;+qYKtPCD}~J8ez{}475+2A}#2p71r-+bN|Yd!N7mL)bpUQ%|DWL_O5JuQgyT% zkw+{3?D5k!RMbI>It>kJln)3j6IIOceIQ6ebM2r1YOJ)4O9~H4QykJ=K|O{oH^wR=c4d zei=6UcFC|MisV0{2X)qU27QP;^z^Wg_5(|wYcgh5dsLNDKM&Gb?n4{~D}3L+JGgBv zY9!O#H=*)S`5&D$HImOr$4T_%$4!5Ec=wB3Xkp{R zewfXnM5P}k&GCvnFFhZ_4O7#-Nq4UzL-H}m3bnmS?dyw&mmb;K%5*~`YYvo4GIyDA z?_3wr$K<6*tKGJ=T!_YcGP{vVoL;?Vqq3X!zQbMX7g{pW4UK9Uvaq8)bG(wlGCGht zeoJp`bco;h`Btbus$g~oy-!`R4Yyu2G^%5hwBSaVJoD+p3ig?0DwAMM;iM9)c1!;l zx&L)=SD*3$VkKoUG2z^|UrO;(8+LJ=$mmS&T1ef=+LIN|OpUfOk)5!Z^%%d~|L?Z` zgS-FFx(s(L&oWQFoKo{~@1T`xUj<3~Sc&)7VJn|pJzJ-tmYk{gVD)S}p*q)&g$YTV zw|M+~Ntr@9UgW)SUMK5vUi);F)2mr_UZAhxfs^$JzZ?2P9KSb`xqX?&pieYaQ`8+3I-IUmlmm{}v)o zyitJ)2dj zhYv=L(OKd6`$Eq?e_(|-VLjlFc)h#p&M54O0V~O8p9OdtV+4^Ozeufen6&D~9T7q-&ZtDkabNp%WoftjvTie6 zZhg&aB@RalNLNnttv%XP{Nl3H?G`c26XbnqX=%5Q+`Cm;7U>BI<#(?uxS61Hn$-|% z#|7w*n$)q0*OoqG@7~2GBt-JLtT~0z;=cI=O$L)jPL_<>ERLRAGu3KG;YkVKn!h;? z>|A5wv&l3iB`vn@i$%6LRZQK=e)w|yATp1I8wsdW)2v@L%o@3=l4d%)`xnelFXn~y z*gId3X4FK4hCVnZaY*8wBZ=9X<&o{~pyDcfe)%W8(x%#!s6?;rbnr&&;=pg+jk8)p zb8EeKE7!J9&bvEK$R_mLiw}fLz56X35pJFp7zA2B2(+X{dcQza2^2P!f&JPZzljR( z2_k)-N>!^co?=WxijK zp#IED34#J|*`)^}tA78r@Ek%##X66lq%Xd2cTDL1DZRbO3RyRI-JE;J&z9qN5m)L$ zD*Oi>s|G8(%8rWG-lf*8-mX`+xL8xyCGe|wq-@dMl!Obm6?((yoJy}W)aVMRd#G$t zNLf6ePt(fjn)$N!TqmbXnH)GD+>ow(Pc4fS$nbHCjE9?V~^@cBp#2B-y z)iTsb{R1bvpN$gDT$Z35(uBV7PQ8n0*qi3&%+}h|>LMnFDbB0~Zn~J(|UKSOzLQ1Kp_ldT04Ur!7#vQlwb?c7D^q&$lr1O-% zVdQ7u7_=m}E1KC>gm^j`#N0XB8Y)j%kVP~Y2cIYj+Z(N<6qXOq*(Z8?K~)BwEab#% z-i52M=~`sqQ?{8PE3P7kzUYhy)jWb+6u6;Qi*9e?IKjn5e3aXEdW`~9LX63JOLi

Jn!=S5QXyD^q$J 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 literal 4320 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 Ef{+Iw^8f$< literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvG8AvYpRA>UEgaUj*Tn`*L@aWN_D_5>8UAh#= z1_IYF$_7AL#*!evUg2M`mO22;zF8KKM ziI%sn*10q1gExd4Tr__0Nawtd=1GR4p57f6#zDrHjlC4+JeqW5QiwvZrujaVtvghV zE!DSL>{Bq@tZ`4_-o>Ndo!!Q&n^#DraEYf!1t#Tbb>w!0&z`)xeffOumsY$dH(!{L z!`*vg^Mwu|1?0_WXg$TXu1@cP2Rp+X*4eyF+NEpXuad%EqB6`uk6d`m(P3H z^tJS>iv>Re!w>!W=lJLPKWArPcrbOB3jdqvRkd^UPqLo;{(t4QCrxWY9|0u{j%|x+ z`lg!oB4+=))xibQ_S5HoY5MlpKH@{WjltH`lDpG^+AUUXOq>6_xw60V@opD;fu~HT z;!a(w*>O!s=LGANyn9>j-J5@cZAw90{Sw`$K#Liw_GfeR{J68X;4zTH;OXk;vd$@? F2>?Z>%$ooJ diff --git a/modular_skyrat/modules/customization/icons/obj/genitals/breasts.dmi b/modular_skyrat/modules/customization/icons/obj/genitals/breasts.dmi index c57fbe5fc8ae55ad2a07b87c22bd481f756e7b4d..c193919c23e9fce977fa8563b0895379ee560acf 100644 GIT binary patch delta 850 zcmV-Y1FihT2KNS#7Y={~0{{R3F%W$C0000UktH90|A7B_8FG&R0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRL zOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5Nr{UyC9|j)$TZ~QOe;#vO@*-G3X+Oa6N^iV z;|mghGmGL)NmFh@nsQ^(lpB$z+<-LYh9rhed@+e(L#hU2QZ*Qns=<&{4Fo*yWXRmE8T}2klVGq%+>sHV%+BT+|R;uEEh0&P9K7rQRG6nCEJLjzA#^fI8PQ*bV za7>7&7~*^4?(G2F(g5a=Li<1fQfMD=DbSb;2(&D~T>DW9g!o?|(3lPe7_$=Wr9hnV z#Z3os!O8*Q0iC;2M&tWQ+z%-XXSmHca;-RI@~|f638WNh^x*`aso<) zmta0YyxhY$07o=@w6shh#SdpG(754KZNhtb7DEaXKEf1!UQF)vS5#EI4m5lKojac=l(%RXmmeNKa9t_`ZK5gK@{kJX5v^50O$Te zn&C_Xq?a-0{y`G(z>jyiZOo~E5cP0|VL@(NocagR`!GP08Lv6{{mAZ}dk;tQdtG|8 z^sa(qNonWrLq$bJ#Vg^jS16@9*xM3W`F(i;f|0KL7v#07*qoM6N<$f>cnCAOHXW delta 799 zcmV+)1K|Ak2E+!C7Y<+q0{{R3Csb#80000RktH90CT(tn00001bW%=J06^y0W&i*H znR--MbVOxyV{&P5bZKvH004NLmC`*9!Y~Ym;W;^l)$XW&j4Y@X>d;;xN{JyJD9DcJ z^@*s&#^CL<^t_u(I1iU`hJG6D8(HYN!U?)VWz9w*#eB4lH4*6^(|$iNC5d}^Vt3T>PRCmvZ*;uU@mj~xi7p7*;HnK4ZQ%b0B@A=_eXtK~ zow*lDv`I7o00J^eL_t(oh3#0uje{@{G`N8n=?bt3QJxW23dk$(M5KZ=kRBqTEBkEo z*%@+JgimzG{07#;+Q!VXO0D={6lSwbpmcVBo`UztopV-lV{#942jUAqDJB=%*3&9cOGi0~hQW^lT^e2LYHth&bUITG~|eP;fzi zyaweUK$|GGJp?otB@qLjBygeof)~!+6OX!roUfl_|P-vQhC`~+Bl zzd;!uzq>m*2d+Reyc`K|1(M;~Us0fcFc^^GA%P7fklvNyNucgUWf|>SZc~OQ_pa|^2`aMdX+GG0jb?~;J^O=bC zh}^^ZXk!9P1VReE&xcLG^WVja6)XM{mY#6#AIvUcM)d-7&hSOY!%@A!oI4zUqmGB8 zdVx82IDk|CAS8$a+T#G`+&>5jweB10hj#x|zjNvzM1lIdCywO+aPA+Z8TK?ldKq)> zA0z<}eE*c&#+>>GQ4ePr7UVv~secf?4+Aur@tBj}x9r}z_pl|u*K?1SUQ}=lDJ}ec dSn<#C1D*_ktp@{cV*mgE07*p#PDHLkV1ig>X&nFn diff --git a/modular_skyrat/modules/customization/modules/client/preferences.dm b/modular_skyrat/modules/customization/modules/client/preferences.dm index bcd6fe14365..48acb4bd566 100644 --- a/modular_skyrat/modules/customization/modules/client/preferences.dm +++ b/modular_skyrat/modules/customization/modules/client/preferences.dm @@ -538,9 +538,8 @@ if(pref_species.can_have_genitals) - dat += "

Arousal Preview

" - dat += "Change arousal preview" dat += APPEARANCE_CATEGORY_COLUMN + dat += "Change arousal preview" dat += "

Penis

" var/penis_name = mutant_bodyparts["penis"][MUTANT_INDEX_NAME] dat += print_bodypart_change_line("penis") @@ -565,6 +564,7 @@ dat += "" dat += APPEARANCE_CATEGORY_COLUMN + dat += "Uses skintones: [(features["uses_skintones"]) ? "Yes" : "No"]" dat += "

Vagina

" dat += print_bodypart_change_line("vagina") dat += "

Womb

" @@ -572,6 +572,7 @@ dat += "" dat += APPEARANCE_CATEGORY_COLUMN + dat += "
" dat += "

Breasts

" var/breasts_name = mutant_bodyparts["breasts"][MUTANT_INDEX_NAME] dat += print_bodypart_change_line("breasts") @@ -1735,7 +1736,7 @@ validate_color_keys_for_part(key) if(!allow_advanced_colors) var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][new_name] - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features) + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) if("change_color") var/key = href_list["key"] if(!mutant_bodyparts[key]) @@ -1752,7 +1753,7 @@ if(!mutant_bodyparts[key]) return var/datum/sprite_accessory/SA = GLOB.sprite_accessories[key][mutant_bodyparts[key][MUTANT_INDEX_NAME]] - mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features) + mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST] = SA.get_default_color(features, pref_species) if("reset_all_colors") var/action = alert(user, "Are you sure you want to reset all colors?", "", "Yes", "No") if(action == "Yes") @@ -1881,6 +1882,10 @@ if(!isnull(msg)) exploitable_info = strip_html_simple(msg, MAX_FLAVOR_LEN, TRUE) + if("uses_skintones") + needs_update = TRUE + features["uses_skintones"] = !features["uses_skintones"] + if("erp_pref") switch(erp_pref) if("Yes") diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm index 61e6c3f89c3..966d8e6ca65 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm @@ -100,6 +100,8 @@ features[key] = new_features[key] mutant_bodyparts = pref_species.get_random_mutant_bodyparts(features) body_markings = pref_species.get_random_body_markings(features) + if(pref_species.use_skintones) + features["uses_skintones"] = TRUE //We reset the quirk-based stuff augments = list() all_quirks = list() diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm index 61952335ddf..f0bc2a8b0c4 100644 --- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm +++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm @@ -1,6 +1,7 @@ /datum/sprite_accessory/genital special_render_case = TRUE var/associated_organ_slot + var/uses_skintones /datum/sprite_accessory/genital/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) var/obj/item/organ/genital/badonkers = H.getorganslot(associated_organ_slot) @@ -36,6 +37,7 @@ special_x_dimension = TRUE //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + var/can_have_sheath = TRUE /datum/sprite_accessory/genital/penis/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) if(H.underwear != "Nude" && !(H.underwear_visibility & UNDERWEAR_HIDE_UNDIES)) @@ -67,7 +69,10 @@ /datum/sprite_accessory/genital/penis/human icon_state = "human" name = "Human" + color_src = USE_ONE_COLOR default_color = DEFAULT_SKIN_OR_PRIMARY + uses_skintones = TRUE + can_have_sheath = FALSE /datum/sprite_accessory/genital/penis/knotted icon_state = "knotted" @@ -105,6 +110,7 @@ always_color_customizable = TRUE special_icon_case = TRUE special_x_dimension = TRUE + default_color = DEFAULT_SKIN_OR_PRIMARY relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER) var/has_size = TRUE @@ -138,6 +144,7 @@ /datum/sprite_accessory/genital/testicles/pair name = "Pair" icon_state = "pair" + uses_skintones = TRUE /datum/sprite_accessory/genital/testicles/internal name = "Internal" @@ -230,6 +237,7 @@ always_color_customizable = TRUE default_color = DEFAULT_SKIN_OR_PRIMARY relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + uses_skintones = TRUE /datum/sprite_accessory/genital/breasts/is_hidden(mob/living/carbon/human/H, obj/item/bodypart/HD) if(H.undershirt != "Nude" && !(H.underwear_visibility & UNDERWEAR_HIDE_SHIRT)) diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm index cfd92aa2ce0..c49623fdb67 100644 --- a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm +++ b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm @@ -13,6 +13,8 @@ var/visibility_preference = GENITAL_HIDDEN_BY_CLOTHES ///Whether the organ is aroused, matters for sprites, use AROUSAL_CANT, AROUSAL_NONE, AROUSAL_PARTIAL or AROUSAL_FULL var/aroused = AROUSAL_NONE + ///Whether the organ is supposed to use a skintoned variant of the sprite + var/uses_skintones //This translates the float size into a sprite string /obj/item/organ/genital/proc/get_sprite_size_string() @@ -42,9 +44,11 @@ /obj/item/organ/genital/build_from_dna(datum/dna/DNA, associated_key) ..() - var/datum/sprite_accessory/SA = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]] + var/datum/sprite_accessory/genital/SA = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]] genital_name = SA.name genital_type = SA.icon_state + if(DNA.features["uses_skintones"]) + uses_skintones = SA.uses_skintones update_sprite_suffix() /obj/item/organ/genital/penis @@ -95,7 +99,10 @@ size_affix = "3" else size_affix = "4" - icon_state = "penis_[genital_type]_[size_affix]" + var/passed_string = "penis_[genital_type]_[size_affix]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string /obj/item/organ/genital/penis/get_sprite_size_string() if(aroused != AROUSAL_FULL && sheath != SHEATH_NONE) //Sheath time! @@ -120,12 +127,17 @@ size_affix = "3" else size_affix = "4" - return "[genital_type]_[size_affix]_[is_erect]" + var/passed_string = "[genital_type]_[size_affix]_[is_erect]" + if(uses_skintones) + passed_string += "_s" + return passed_string /obj/item/organ/genital/penis/build_from_dna(datum/dna/DNA, associated_key) ..() girth = DNA.features["penis_girth"] - sheath = DNA.features["penis_sheath"] + var/datum/sprite_accessory/genital/penis/PS = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]] + if(PS.can_have_sheath) + sheath = DNA.features["penis_sheath"] set_size(DNA.features["penis_size"]) /obj/item/organ/genital/testicles @@ -139,6 +151,13 @@ slot = ORGAN_SLOT_TESTICLES aroused = AROUSAL_CANT +/obj/item/organ/genital/testicles/update_genital_icon_state() + var/measured_size = clamp(genital_size, 1, 3) + var/passed_string = "testicles_[genital_type]_[measured_size]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string + /obj/item/organ/genital/testicles/get_description_string(datum/sprite_accessory/genital/gas) return "You see a pair of testicles, they look [lowertext(balls_size_to_description(genital_size))]." @@ -148,11 +167,11 @@ /obj/item/organ/genital/testicles/get_sprite_size_string() var/measured_size = FLOOR(genital_size,1) - if(measured_size < 0) - measured_size = 0 - else if (measured_size > 3) - measured_size = 3 - return "[genital_type]_[measured_size]" + measured_size = clamp(measured_size, 0, 3) + var/passed_string = "[genital_type]_[measured_size]" + if(uses_skintones) + passed_string += "_s" + return passed_string /obj/item/organ/genital/vagina name = "vagina" @@ -212,7 +231,7 @@ if("Flatchested") size_description = " They are small and flat, however." if("beyond measurement") - size_description = " Their size is enormous, far beyond measurement." + size_description = " Their size is enormous, you estimate they're around [genital_size] inches in diameter." else size_description = " You estimate they are [translation]-cups." returned_string += size_description @@ -230,7 +249,10 @@ current_size = 0 else if (current_size > max_size) current_size = max_size - icon_state = "breasts_pair_[current_size]" + var/passed_string = "breasts_pair_[current_size]" + if(uses_skintones) + passed_string += "_s" + icon_state = passed_string /obj/item/organ/genital/breasts/get_sprite_size_string() var/max_size = 5 @@ -241,7 +263,10 @@ current_size = 0 else if (current_size > max_size) current_size = max_size - return "[genital_type]_[current_size]" + var/passed_string = "[genital_type]_[current_size]" + if(uses_skintones) + passed_string += "_s" + return passed_string /obj/item/organ/genital/breasts/build_from_dna(datum/dna/DNA, associated_key) ..()