mirror of
https://github.com/KabKebab/GS13.git
synced 2026-08-23 13:06:18 +01:00
165 lines
7.3 KiB
Plaintext
165 lines
7.3 KiB
Plaintext
/obj/item/organ/genital/breasts
|
|
name = "breasts"
|
|
desc = "Female milk producing organs."
|
|
icon_state = "breasts"
|
|
icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
|
|
zone = "chest"
|
|
slot = "breasts"
|
|
w_class = 3
|
|
size = BREASTS_SIZE_DEF //SHOULD BE A LETTER, starts as a number...???
|
|
var/cached_size = null //for enlargement SHOULD BE A NUMBER
|
|
var/prev_size //For flavour texts SHOULD BE A LETTER
|
|
//var/breast_sizes = list ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "huge", "massive", "giga", "impossible", "flat")
|
|
var/breast_values = list ("a" = 1, "b" = 2, "c" = 3, "d" = 4, "e" = 5, "f" = 6, "g" = 7, "h" = 8, "i" = 9, "j" = 10, "k" = 11, "l" = 12, "m" = 13, "n" = 14, "o" = 15, "huge" = 16, "massive" = 17, "giga" = 25, "impossible" = 30, "flat" = 0) // Note: Do not forget to define new sizes.
|
|
var/statuscheck = FALSE
|
|
fluid_id = /datum/reagent/consumable/milk
|
|
var/amount = 2
|
|
fluid_mult = 0.25 // Set to a lower value due to production scaling with size (I.E. D cups produce the "normal" amount)
|
|
fluid_max_volume = 10
|
|
producing = TRUE
|
|
shape = "Pair"
|
|
can_masturbate_with = TRUE
|
|
masturbation_verb = "massage"
|
|
can_climax = TRUE
|
|
fluid_transfer_factor = 0.5
|
|
var/sent_full_message = TRUE //defaults to 1 since they're full to start
|
|
|
|
/obj/item/organ/genital/breasts/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
|
|
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.
|
|
reagents.total_volume = 0.1
|
|
else
|
|
fluid_rate = CUM_RATE * cached_size * fluid_mult // fluid rate is scaled by the size of the organ
|
|
generate_milk()
|
|
|
|
/obj/item/organ/genital/breasts/proc/generate_milk()
|
|
if(owner.stat == DEAD)
|
|
return FALSE
|
|
if(reagents.total_volume >= reagents.maximum_volume)
|
|
if(!sent_full_message)
|
|
send_full_message()
|
|
sent_full_message = TRUE
|
|
/*
|
|
if(HAS_TRAIT(owner, TRAIT_FLUID_LEAK))
|
|
reagents.get_master_reagent().reaction_turf(get_turf(owner), 3)
|
|
reagents.remove_reagent(fluid_id, 3)
|
|
*/
|
|
return FALSE
|
|
sent_full_message = FALSE
|
|
reagents.isolate_reagent(fluid_id)
|
|
reagents.add_reagent(fluid_id, (fluid_rate))
|
|
|
|
/obj/item/organ/genital/breasts/proc/send_full_message(msg = "Your breasts finally feel full, again.")
|
|
if(owner && istext(msg))
|
|
to_chat(owner, msg)
|
|
return TRUE
|
|
|
|
/obj/item/organ/genital/breasts/update_appearance()
|
|
var/lowershape = lowertext(shape)
|
|
switch(lowershape)
|
|
if("pair")
|
|
desc = "You see a pair of breasts."
|
|
if("quad")
|
|
desc = "You see two pairs of breast, one just under the other."
|
|
if("sextuple")
|
|
desc = "You see three sets of breasts, running from their chest to their belly."
|
|
else
|
|
desc = "You see some breasts, they seem to be quite exotic."
|
|
if(cached_size > 18 && cached_size != 25 && cached_size != 30)
|
|
desc = "You see [pick("some serious honkers", "a real set of badonkers", "some dobonhonkeros", "massive dohoonkabhankoloos", "two big old tonhongerekoogers", "a couple of giant bonkhonagahoogs", "a pair of humongous hungolomghnonoloughongous")]. Their volume is way beyond cupsize now, measuring in about [round(cached_size)]cm in diameter."
|
|
else if (!isnum(size))
|
|
if (size == "flat")
|
|
desc += " They're very small and flatchested, however."
|
|
else
|
|
desc += " You estimate that they're [uppertext(size)]-cups."
|
|
//string = "breasts_[lowertext(shape)]_[size]-s"
|
|
|
|
if(producing && sent_full_message)
|
|
desc += " They're leaking [initial(fluid_id.name)]."
|
|
var/string
|
|
if(owner)
|
|
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 = "breasts_[GLOB.breasts_shapes_icons[shape]]_[size]-s"
|
|
else
|
|
color = "#[owner.dna.features["breasts_color"]]"
|
|
string = "breasts_[GLOB.breasts_shapes_icons[shape]]_[size]"
|
|
if(ishuman(owner))
|
|
var/mob/living/carbon/human/H = owner
|
|
icon_state = sanitize_text(string)
|
|
H.update_genitals()
|
|
|
|
icon_state = sanitize_text(string)
|
|
|
|
|
|
//Allows breasts to grow and change size, with sprite changes too.
|
|
//maximum wah
|
|
//Comical sizes slow you down in movement and actions.
|
|
//Rediculous sizes makes you more cumbersome.
|
|
//this is far too lewd wah
|
|
|
|
/obj/item/organ/genital/breasts/update_size()//wah
|
|
if(!ishuman(owner) || !owner)
|
|
return
|
|
if(cached_size < 0)//I don't actually know what round() does to negative numbers, so to be safe!!fixed
|
|
to_chat(owner, "<span class='warning'>You feel your breasts shrinking away from your body as your chest flattens out.</b></span>")
|
|
src.Remove(owner)
|
|
switch(round(cached_size))
|
|
if(0) //If flatchested
|
|
size = "flat"
|
|
if(owner.has_status_effect(/datum/status_effect/chem/breast_enlarger))
|
|
owner.remove_status_effect(/datum/status_effect/chem/breast_enlarger)
|
|
statuscheck = FALSE
|
|
if(1 to 8) //If modest size
|
|
size = breast_values[round(cached_size)]
|
|
if(owner.has_status_effect(/datum/status_effect/chem/breast_enlarger))
|
|
owner.remove_status_effect(/datum/status_effect/chem/breast_enlarger)
|
|
statuscheck = FALSE
|
|
if(9 to 15) //If massive
|
|
size = breast_values[round(cached_size)]
|
|
if(!owner.has_status_effect(/datum/status_effect/chem/breast_enlarger))
|
|
owner.apply_status_effect(/datum/status_effect/chem/breast_enlarger)
|
|
statuscheck = TRUE
|
|
if(16 to 18) //if Ridiculous
|
|
size = breast_values[round(cached_size)]
|
|
if(!owner.has_status_effect(/datum/status_effect/chem/breast_enlarger))
|
|
owner.apply_status_effect(/datum/status_effect/chem/breast_enlarger)
|
|
statuscheck = TRUE
|
|
|
|
if(19 to INFINITY) //if Hyper-Ridiculous
|
|
size = cached_size
|
|
if(!owner.has_status_effect(/datum/status_effect/chem/breast_enlarger))
|
|
owner.apply_status_effect(/datum/status_effect/chem/breast_enlarger)
|
|
statuscheck = TRUE
|
|
|
|
|
|
if(round(cached_size) < 19 && round(cached_size) == 25 && round(cached_size) == 30)//Because byond doesn't count from 0, I have to do this.
|
|
if (prev_size == 0)
|
|
prev_size = "flat"
|
|
if(size == 0)//Bloody byond with it's counting from 1
|
|
size = "flat"
|
|
if(isnum(prev_size))
|
|
prev_size = breast_values[prev_size]
|
|
if (breast_values[size] > breast_values[prev_size])
|
|
to_chat(owner, "<span class='warning'>Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a [uppertext(size)]-cup.</b></span>")
|
|
var/mob/living/carbon/human/H = owner
|
|
H.Force_update_genitals()
|
|
else if ((breast_values[size] < breast_values[prev_size]) && (breast_values[size] > 0.5))
|
|
to_chat(owner, "<span class='warning'>Your breasts [pick("shrink down to", "decrease into", "diminish into", "deflate into", "shrivel regretfully into", "contracts into")] a [uppertext(size)]-cup.</b></span>")
|
|
var/mob/living/carbon/human/H = owner
|
|
H.Force_update_genitals()
|
|
prev_size = size
|
|
else if (cached_size >= 18 && cached_size < 25)
|
|
size = "massive"
|
|
else if (cached_size >= 25 && cached_size < 30)
|
|
size = "giga"
|
|
else if (cached_size >= 30)
|
|
size = "impossible"
|