@@ -53,7 +53,9 @@ var/global/list/xeno_dorsal_list = list()
|
||||
|
||||
//Genitals and Arousal Lists
|
||||
var/global/list/cock_shapes_list = list()//global_lists.dm for the list initializations
|
||||
var/global/list/breasts_shapes_list = list()
|
||||
var/global/list/breasts_size_list = list()
|
||||
var/global/list/vagina_shapes_list = list()
|
||||
var/global/list/cum_into_containers_list = list(/obj/item/weapon/reagent_containers/food/snacks/pie)
|
||||
var/global/list/dick_nouns = list("dick","cock","member","shaft")
|
||||
var/global/list/cum_id_list = list("semen")
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 698 B After Width: | Height: | Size: 703 B |
Binary file not shown.
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 767 B |
Binary file not shown.
|
Before Width: | Height: | Size: 592 B After Width: | Height: | Size: 607 B |
@@ -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"]]"
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ..()
|
||||
Reference in New Issue
Block a user