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:
ktccd
2017-04-04 17:28:42 +02:00
parent 1a5ec9c3a2
commit cc1768b872
17 changed files with 262 additions and 64 deletions
+22 -2
View File
@@ -6,11 +6,11 @@
zone = "chest"
slot = "breasts"
w_class = 3
size = "e"
size = BREASTS_SIZE_DEF
fluid_id = "milk"
var/cup_size = BREASTS_SIZE_DEF
var/amount = 2
producing = TRUE
shape = "pair"
/obj/item/organ/genital/breasts/Initialize()
create_reagents(fluid_max_volume)
@@ -31,3 +31,23 @@
return FALSE
reagents.isolate_reagent(fluid_id)
reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))
/obj/item/organ/genital/breasts/update_appearance()
var/string = "breasts_[lowertext(shape)]_[size]"
icon_state = sanitize_text(string)
var/lowershape = lowertext(shape)
switch(lowershape)
if("pair")
desc = "That's a pair of breasts."
else
desc = "That's breasts, they seem to be quite exotic."
if (size)
desc += " You estimate they're about [size]-cup size."
else
desc += " You wouldn't measure them in cup sizes."
if(producing)
desc += "\nThey're leaking [fluid_id]."
else
desc += "\nThey do not seem to be producing liquids."
if(owner)
color = "#[owner.dna.features["breasts_color"]]"
+45 -27
View File
@@ -100,13 +100,14 @@
// T.color = skintone2hex(skin_tone)
// else
// T.color = "#[dna.features["balls_color"]]"
T.size = dna.features["balls_size"]
T.sack_size = dna.features["balls_sack_size"]
T.fluid_id = dna.features["balls_fluid"]
T.fluid_rate = dna.features["balls_cum_rate"]
T.fluid_mult = dna.features["balls_cum_mult"]
T.fluid_efficiency = dna.features["balls_efficiency"]
T.update()
if(T)
T.size = dna.features["balls_size"]
T.sack_size = dna.features["balls_sack_size"]
T.fluid_id = dna.features["balls_fluid"]
T.fluid_rate = dna.features["balls_cum_rate"]
T.fluid_mult = dna.features["balls_cum_mult"]
T.fluid_efficiency = dna.features["balls_efficiency"]
T.update()
/mob/living/carbon/human/proc/give_breasts()
if(!dna)
@@ -116,9 +117,15 @@
if(!getorganslot("breasts"))
var/obj/item/organ/genital/breasts/B = new
B.Insert(src)
B.cup_size = dna.features["breasts_size"]
B.fluid_id = dna.features["breasts_fluid"]
B.update()
if(B)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
B.color = skintone2hex(skin_tone)
else
B.color = "#[dna.features["breasts_color"]]"
B.size = dna.features["breasts_size"]
B.shape = dna.features["breasts_shape"]
B.fluid_id = dna.features["breasts_fluid"]
B.update()
/mob/living/carbon/human/proc/give_ovipositor()
@@ -131,11 +138,14 @@
if(!getorganslot("vagina"))
var/obj/item/organ/genital/vagina/V = new
V.Insert(src)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
V.color = skintone2hex(skin_tone)
else
V.color = "[dna.features["vag_color"]]"
V.update()
if(V)
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
V.color = skintone2hex(skin_tone)
else
V.color = "[dna.features["vag_color"]]"
V.shape = "[dna.features["vag_shape"]]"
V.update()
/mob/living/carbon/human/proc/give_womb()
if(!dna)
return FALSE
@@ -144,7 +154,8 @@
if(!getorganslot("womb"))
var/obj/item/organ/genital/womb/W = new
W.Insert(src)
W.update()
if(W)
W.update()
/datum/species/proc/genitals_layertext(layer)
@@ -183,13 +194,12 @@
return
var/list/genitals_to_add = list()
var/list/relevent_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER)
var/list/relevant_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER)
var/list/standing = list()
var/size
var/size = null
H.remove_overlay(GENITALS_BEHIND_LAYER)
H.remove_overlay(GENITALS_ADJ_LAYER)
H.remove_overlay(GENITALS_FRONT_LAYER)
for(var/L in relevant_layers) //Less hardcode
H.remove_overlay(L)
if(H.disabilities & HUSK)
return
@@ -198,14 +208,15 @@
if(H.is_groin_exposed(worn_stuff))
if(H.has_penis())
genitals_to_add += H.getorganslot("penis")
if(H.has_vagina())
genitals_to_add += H.getorganslot("vagina")
else
if(H.has_vagina()) //Sadly, a penis would cover the vagina and they use the same layer, so don't draw both.
genitals_to_add += H.getorganslot("vagina")
if(H.is_chest_exposed(worn_stuff))
if(H.has_breasts())
genitals_to_add += H.getorganslot("breasts")
var/image/I
//start applying overlays
for(var/layer in relevent_layers)
for(var/layer in relevant_layers)
var/layertext = genitals_layertext(layer)
for(var/obj/item/organ/genital/G in genitals_to_add)
var/datum/sprite_accessory/S
@@ -213,6 +224,12 @@
if(/obj/item/organ/genital/penis)
S = cock_shapes_list[G.shape]
size = G.size
if(/obj/item/organ/genital/vagina)
S = vagina_shapes_list[G.shape]
size = G.size
if(/obj/item/organ/genital/breasts)
S = breasts_shapes_list[G.shape]
size = G.size
if(!S || S.icon_state == "none")
continue
@@ -226,6 +243,8 @@
I.color = "#[H.dna.features["cock_color"]]"
if("breasts_color")
I.color = "#[H.dna.features["breasts_color"]]"
if("vag_color")
I.color = "#[H.dna.features["vag_color"]]"
if(MUTCOLORS)
if(fixed_mut_color)
I.color = "#[fixed_mut_color]"
@@ -246,6 +265,5 @@
H.overlays_standing[layer] = standing.Copy()
standing = list()
H.apply_overlay(GENITALS_BEHIND_LAYER)
H.apply_overlay(GENITALS_ADJ_LAYER)
H.apply_overlay(GENITALS_FRONT_LAYER)
for(var/L in relevant_layers)
H.apply_overlay(L)
@@ -27,15 +27,57 @@
icon_state = "tapered"
name = "Tapered"
//Vaginas
/datum/sprite_accessory/vagina
icon = 'code/citadel/icons/vagina_onmob.dmi'
icon_state = null
name = "vagina"
gender_specific = 0
color_src = "vag_color"
locked = 0
/datum/sprite_accessory/vagina/human
icon_state = "human"
name = "Human"
/datum/sprite_accessory/vagina/gaping
icon_state = "gaping"
name = "Gaping"
//I think this one is intended for arousal... but it would only work for human vaginas in this case...
//So I'm leaving it as a selectable option until we can make/need variants for the sprites to change based on arousal.
/datum/sprite_accessory/vagina/dripping
icon_state = "dripping"
name = "Dripping"
/datum/sprite_accessory/vagina/tentacles
icon_state = "tentacle"
name = "Tentacle"
/datum/sprite_accessory/vagina/dentata
icon_state = "dentata"
name = "Dentata"
/datum/sprite_accessory/vagina/hairy
icon_state = "hairy"
name = "Hairy"
//BREASTS BE HERE
/datum/sprite_accessory/breasts
icon = 'code/citadel/icons/breasts_onmob.dmi'
icon_state = null
name = "breasts"
gender_specific = 0
color_src = MUTCOLORS2 //I'll have skin_tone override this if the species uses them
color_src = "breasts_color"
locked = 0
/*!!ULTRACOMPRESSEDEDITION!!*/
/datum/sprite_accessory/breasts/pair
icon_state = "pair"
name = "Pair"
/*!!ULTRACOMPRESSEDEDITION!!
/datum/sprite_accessory/breasts/a
icon_state = "a"
name = "A"
@@ -90,6 +132,8 @@
icon_state = "h"
name = "HH"
locked = 1
*/// Sorry for ruining your things
//OVIPOSITORS BE HERE
/datum/sprite_accessory/ovipositor
@@ -100,10 +144,6 @@
color_src = "cock_color"
locked = 0
/datum/sprite_accessory/ovipositor/knotted
icon_state = "none"
name = "None"
/datum/sprite_accessory/ovipositor/knotted
icon_state = "knotted"
name = "Knotted"
+1 -1
View File
@@ -44,7 +44,7 @@
if(lowershape in knotted_types)
if(lowershape == "barbknot")
lowershape = "barbed, knotted"
desc = "That's a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long, [round(girth, 0.25)] inch[length > 1 ? "es" : ""] around the shaft \
desc = "That's a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long, [round(girth, 0.25)] inch[girth > 1 ? "es" : ""] around the shaft \
and [round(length * knot_girth_ratio, 0.25)] inch[length > 1 ? "es" : ""] around the knot."
else
desc = "That's a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long and [round(girth, 0.25)] inch[length > 1 ? "es" : ""] around."
+49 -2
View File
@@ -5,13 +5,60 @@
icon_state = "vagina"
zone = "groin"
slot = "vagina"
size = 1 //There is only 1 size right now
can_masturbate_with = 1
w_class = 3
var/wetness = 1
var/wetness = FALSE
var/cap_length = 8//D E P T H (cap = capacity)
var/cap_girth = 12
var/cap_girth_ratio = 1.5
var/clits = 1
var/clit_diam = 0.25
var/clit_len = 0.25
var/obj/item/organ/womb/linked_womb
var/list/vag_types = list("tentacle", "dentata", "hairy")
var/obj/item/organ/genital/womb/linked_womb
/obj/item/organ/genital/vagina/update_appearance()
var/string = "vagina" //Keeping this code here, so making multiple sprites for the different kinds is easier.
icon_state = sanitize_text(string)
var/lowershape = lowertext(shape)
desc = "That's a [lowershape] vagina. You estimate it could stretch about [round(cap_length, 0.25)] inch[cap_length > 1 ? "es" : ""] deep, around something [round(cap_girth, 0.25)] inch[cap_girth > 1 ? "es" : ""] thick \
and it has [clits > 1 ? "[clits] clits" : "a clit"], about [round(clit_len,0.25)] inch[clit_len > 1 ? "es" : ""] long and [round(clit_diam, 0.25)] inch[clit_diam > 1 ? "es" : ""] in diameter."
switch(lowershape)
if("tentacle")
desc += "\nIts opening is lined with several tentacles and "
if("dentata")
desc += "\nThere's teeth inside it and it is "
if("hairy")
desc += "\nIt has quite a bit of hair growing on it and is "
if("human")
desc += "\nIt is taut with smooth skin, though without much hair and "
if("gaping")
desc += "\nIt is gaping slightly open, though without much hair and "
if("dripping")
desc += "\nIt is gaping slightly, inflamed and "
else
desc += "\nIt has an exotic shape and is "
if(wetness)
desc += "slick with female arousal."
else
desc += "not very wet."
if(owner)
color = "#[owner.dna.features["vag_color"]]"
/obj/item/organ/genital/vagina/update_link()
if(owner)
linked_womb = (owner.getorganslot("womb"))
if(linked_womb)
linked_womb.linked_vag = src
else
if(linked_womb)
linked_womb.linked_vag = null
linked_womb = null
/obj/item/organ/genital/vagina/remove_ref()
if(linked_womb)
linked_womb.linked_vag = null
linked_womb = null
+15
View File
@@ -9,5 +9,20 @@
fluid_id = "femcum"
var/obj/item/organ/genital/vagina/linked_vag
/obj/item/organ/genital/womb/update_link()
if(owner)
linked_vag = (owner.getorganslot("vagina"))
if(linked_vag)
linked_vag.linked_womb = src
else
if(linked_vag)
linked_vag.linked_womb = null
linked_vag = null
/obj/item/organ/genital/womb/remove_ref()
if(linked_vag)
linked_vag.linked_womb = null
linked_vag = null
/obj/item/organ/genital/womb/Destroy()
return ..()