mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-17 02:48:10 +01:00
ad375d374d
ball fix
104 lines
4.0 KiB
Plaintext
104 lines
4.0 KiB
Plaintext
/obj/item/organ/genital/testicles
|
|
name = "testicles"
|
|
desc = "A male reproductive organ."
|
|
icon_state = "testicles"
|
|
icon = 'modular_citadel/icons/obj/genitals/testicles.dmi'
|
|
zone = "groin"
|
|
slot = "testicles"
|
|
size = BALLS_SIZE_MIN
|
|
var/size_name = "average"
|
|
shape = "single"
|
|
var/sack_size = BALLS_SACK_SIZE_DEF
|
|
var/cached_size = 6
|
|
//fluid_mult = 0.133 // Set to a lower value due to production scaling with size (I.E. 6 inches the "normal" amount)
|
|
fluid_mult = 1.0 //Defaults to 1 no matter what you do. It just does. Just gonna adapt I guess.
|
|
fluid_max_volume = 3
|
|
fluid_id = /datum/reagent/consumable/semen
|
|
producing = TRUE
|
|
can_masturbate_with = FALSE
|
|
masturbation_verb = "massage"
|
|
can_climax = TRUE
|
|
var/sent_full_message = TRUE //defaults to 1 since they're full to start
|
|
|
|
|
|
|
|
/obj/item/organ/genital/testicles/on_life()
|
|
if(QDELETED(src))
|
|
return
|
|
if(!reagents || !owner)
|
|
return
|
|
//reagents.maximum_volume = fluid_max_volume * cached_size// fluid amount is also scaled by the size of the organ
|
|
reagents.maximum_volume = fluid_max_volume * ((cached_size / 2) + 1) * ((size / 2) + 1) * fluid_mult //Hyper - New calculation for more dynamic fluid levels. I can't believe I typed that.
|
|
if(fluid_id && producing)
|
|
if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank.
|
|
fluid_rate = 0.1
|
|
else
|
|
//fluid_rate = CUM_RATE * cached_size * fluid_mult // fluid rate is scaled by the size of the organ
|
|
fluid_rate = ((CUM_RATE / 5) * (cached_size / 3) * (size / 4) * fluid_mult) / 10 //Hyper - Production was way too high by default. This should drop it back down, but allow for it to get really high
|
|
generate_cum()
|
|
|
|
/obj/item/organ/genital/testicles/proc/generate_cum()
|
|
//reagents.maximum_volume = fluid_max_volume //This is the line that broke cum for so long
|
|
if(reagents.total_volume >= reagents.maximum_volume - 0.1) //Hyper - Check for it being close to the maximum. It sometimes doesn't proc due to a rounding error.
|
|
if(!sent_full_message)
|
|
send_full_message()
|
|
sent_full_message = TRUE
|
|
return FALSE
|
|
sent_full_message = FALSE
|
|
update_link()
|
|
if(!linked_organ)
|
|
return FALSE
|
|
reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally
|
|
reagents.add_reagent(fluid_id, (fluid_rate))//generate the cum
|
|
|
|
/obj/item/organ/genital/testicles/update_link()
|
|
if(owner && !QDELETED(src))
|
|
linked_organ = (owner.getorganslot("penis"))
|
|
if(linked_organ)
|
|
linked_organ.linked_organ = src
|
|
size = linked_organ.size
|
|
var/obj/item/organ/genital/penis/O = linked_organ
|
|
cached_size = O.length
|
|
else
|
|
if(linked_organ)
|
|
linked_organ.linked_organ = null
|
|
linked_organ = null
|
|
|
|
/obj/item/organ/genital/testicles/proc/send_full_message(msg = "Your balls finally feel full, again.")
|
|
if(owner && istext(msg))
|
|
to_chat(owner, msg)
|
|
return TRUE
|
|
|
|
/obj/item/organ/genital/testicles/update_appearance()
|
|
switch(size)
|
|
if(0.1 to 3)
|
|
size_name = "average"
|
|
//if(1.1 to 2)
|
|
if(3.1 to 8)
|
|
size_name = "enlarged"
|
|
//if(2.1 to INFINITY)
|
|
if(8.1 to INFINITY)
|
|
size_name = "engorged"
|
|
else
|
|
size_name = "nonexistant"
|
|
|
|
if(!internal)
|
|
desc = "You see an [size_name] pair of testicles."
|
|
else
|
|
desc = "They don't have any testicles you can see."
|
|
|
|
if(owner)
|
|
var/string
|
|
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
|
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
|
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
|
|
color = "#[skintone2hex(H.skin_tone)]"
|
|
string = "testicles_[GLOB.balls_shapes_icons[shape]]_[size]-s"
|
|
else
|
|
color = "#[owner.dna.features["balls_color"]]"
|
|
string = "testicles_[GLOB.balls_shapes_icons[shape]]_[size]"
|
|
if(ishuman(owner))
|
|
var/mob/living/carbon/human/H = owner
|
|
icon_state = sanitize_text(string)
|
|
H.update_genitals()
|