* Genital refactoring and masturbation rework Refactors a lot of genitalia code. Reworks masturbation code. Adds the ability to expose onself through clothing (Still bugfixing it). * Fixes it so everything works Toggling exposing your genitals now works properly. You can now expose genitals through clothing. Genitalia is rendered a bit more modularly and less hardcoded. Genitalia no longer has linked_penis and such, but instead linked_organ. More variables made general for genitals. Breasts can now be used to masturbate and climax, also letting you fill beakers and others with milk. Both being pulled and pulling someone can let you count them as a partner for climaxing verbs. Mob_climax split up into more sub-procs. Hexacrocin made less verbose, and not as spam-happy with forced orgasms. Hexacamphor also made less verbose. * Removes outcommented code Forgot to remove the old masturbation code that I commented out. * Changes one tab further on line 248 As pointed out to me ^^. * Climaxing with partner tabulation Also copied the command for the spillage version. * capitalisation and timers Removed timers from forced climaxes and made it a default value parameter instead, so it's adjustable. Changed capitalisation of genitals and the mentions of them now use the .name to avoid including a "The" in the mention. * I accidentally runtimestation Accidentally committed changing the map to runtimestation when I debugged my code. Changed it back to basemap now.
236 lines
7.6 KiB
Plaintext
236 lines
7.6 KiB
Plaintext
//body bluids
|
|
/datum/reagent/consumable/semen
|
|
name = "Semen"
|
|
id = "semen"
|
|
description = "Sperm from some animal. Useless for anything but insemination, really."
|
|
taste_description = "something salty"
|
|
taste_mult = 2 //Not very overpowering flavor
|
|
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
|
|
reagent_state = LIQUID
|
|
color = "#FFFFFF" // rgb: 255, 255, 255
|
|
nutriment_factor = 0.5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
|
|
if(!istype(T))
|
|
return
|
|
if(reac_volume < 3)
|
|
return
|
|
|
|
var/obj/effect/decal/cleanable/semen/S = locate() in T
|
|
if(!S)
|
|
S = new(T)
|
|
S.reagents.add_reagent("semen", reac_volume)
|
|
if(data["blood_DNA"])
|
|
S.blood_DNA[data["blood_DNA"]] = data["blood_type"]
|
|
|
|
/obj/effect/decal/cleanable/semen
|
|
name = "semen"
|
|
desc = null
|
|
gender = PLURAL
|
|
density = 0
|
|
layer = ABOVE_NORMAL_TURF_LAYER
|
|
icon = 'code/citadel/icons/effects.dmi'
|
|
icon_state = "semen1"
|
|
random_icon_states = list("semen1", "semen2", "semen3", "semen4")
|
|
|
|
/obj/effect/decal/cleanable/semen/New()
|
|
..()
|
|
dir = pick(1,2,4,8)
|
|
|
|
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
|
|
if(!isspaceturf(T))
|
|
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/semen(T)
|
|
reagentdecal.reagents.add_reagent("semen", reac_volume)
|
|
|
|
/datum/reagent/consumable/femcum
|
|
name = "Female Ejaculate"
|
|
id = "femcum"
|
|
description = "Vaginal lubricant found in most mammals and other animals of similar nature. Where you found this is your own business."
|
|
taste_description = "female arousal"
|
|
taste_mult = 2
|
|
data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null)
|
|
reagent_state = LIQUID
|
|
color = "#AAAAAA77"
|
|
nutriment_factor = 0.5 * REAGENTS_METABOLISM
|
|
|
|
/obj/effect/decal/cleanable/femcum
|
|
name = "female ejaculate"
|
|
desc = null
|
|
gender = PLURAL
|
|
density = 0
|
|
layer = ABOVE_NORMAL_TURF_LAYER
|
|
icon = 'code/citadel/icons/effects.dmi'
|
|
icon_state = "fem1"
|
|
random_icon_states = list("fem1", "fem2", "fem3", "fem4")
|
|
blood_DNA = list()
|
|
blood_state = null
|
|
bloodiness = null
|
|
|
|
/obj/effect/decal/cleanable/femcum/New()
|
|
..()
|
|
dir = pick(1,2,4,8)
|
|
|
|
/obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F)
|
|
if (F.blood_DNA)
|
|
blood_DNA |= F.blood_DNA.Copy()
|
|
..()
|
|
|
|
/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume)
|
|
if(!istype(T))
|
|
return
|
|
if(reac_volume < 3)
|
|
return
|
|
|
|
var/obj/effect/decal/cleanable/femcum/S = locate() in T
|
|
if(!S)
|
|
S = new(T)
|
|
S.reagents.add_reagent("femcum", reac_volume)
|
|
if(data["blood_DNA"])
|
|
S.blood_DNA[data["blood_DNA"]] = data["blood_type"]
|
|
|
|
//aphrodisiac & anaphrodisiac
|
|
|
|
/datum/reagent/aphrodisiac
|
|
name = "Crocin"
|
|
id = "aphro"
|
|
description = "Naturally found in the crocus and gardenia flowers, this drug acts as a natural and safe aphrodisiac."
|
|
taste_description = "strawberry roofies"
|
|
taste_mult = 2 //Hide the roofies in stronger flavors
|
|
color = "#FFADFF"//PINK, rgb(255, 173, 255)
|
|
|
|
/datum/reagent/aphrodisiac/on_mob_life(mob/living/M)
|
|
if(prob(33))
|
|
M.adjustArousalLoss(2)
|
|
if(prob(5))
|
|
M.emote(pick("moan","blush"))
|
|
if(prob(5))
|
|
var/aroused_message = pick("You feel frisky.", "You're having trouble suppressing your urges.", "You feel in the mood.")
|
|
to_chat(M, "<span class='love'>[aroused_message]</span>")
|
|
..()
|
|
|
|
/datum/reagent/aphrodisiacplus
|
|
name = "Hexacrocin"
|
|
id = "aphro+"
|
|
description = "Chemically condensed form of basic crocin. This aphrodisiac is extremely powerful and addictive in most animals.\
|
|
Addiction withdrawals can cause brain damage and shortness of breath. Overdosage can lead to brain damage and a\
|
|
permanent increase in libido (commonly referred to as 'bimbofication')."
|
|
taste_description = "liquid desire"
|
|
color = "#FF2BFF"//dark pink
|
|
addiction_threshold = 20
|
|
overdose_threshold = 20
|
|
|
|
/datum/reagent/aphrodisiacplus/on_mob_life(mob/living/M)
|
|
if(prob(33))
|
|
M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful.
|
|
if(prob(5))
|
|
if(M.getArousalLoss() > 75)
|
|
M.say(pick("Hnnnnngghh...", "Ohh...", "Mmnnn..."))
|
|
else
|
|
M.emote(pick("moan","blush"))
|
|
if(prob(5))
|
|
var/aroused_message
|
|
if(M.getArousalLoss() > 90)
|
|
aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!")
|
|
else
|
|
aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.")
|
|
to_chat(M, "<span class='love'>[aroused_message]</span>")
|
|
|
|
/datum/reagent/aphrodisiacplus/addiction_act_stage2(mob/living/M)
|
|
if(prob(30))
|
|
M.adjustBrainLoss(2)
|
|
..()
|
|
/datum/reagent/aphrodisiacplus/addiction_act_stage3(mob/living/M)
|
|
if(prob(30))
|
|
M.adjustBrainLoss(3)
|
|
|
|
..()
|
|
/datum/reagent/aphrodisiacplus/addiction_act_stage4(mob/living/M)
|
|
if(prob(30))
|
|
M.adjustBrainLoss(4)
|
|
..()
|
|
|
|
/datum/reagent/aphrodisiacplus/overdose_process(mob/living/M)
|
|
if(prob(33))
|
|
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(50)) //Less spam
|
|
to_chat(H, "<span class='love'>Your libido is going haywire!</span>")
|
|
H.mob_climax(forced_climax=TRUE)
|
|
if(M.min_arousal < 50)
|
|
M.min_arousal += 1
|
|
if(M.min_arousal < M.max_arousal)
|
|
M.min_arousal += 1
|
|
M.adjustArousalLoss(2)
|
|
..()
|
|
|
|
/datum/reagent/anaphrodisiac
|
|
name = "Camphor"
|
|
id = "anaphro"
|
|
description = "Naturally found in some species of evergreen trees, camphor is a waxy substance. When injested by most animals, it acts as an anaphrodisiac\
|
|
, reducing libido and calming them. Non-habit forming and not addictive."
|
|
taste_description = "dull bitterness"
|
|
taste_mult = 2
|
|
color = "#D9D9D9"//rgb(217, 217, 217)
|
|
reagent_state = SOLID
|
|
|
|
/datum/reagent/anaphrodisiac/on_mob_life(mob/living/M)
|
|
if(prob(33))
|
|
M.adjustArousalLoss(-2)
|
|
..()
|
|
|
|
/datum/reagent/anaphrodisiacplus
|
|
name = "Hexacamphor"
|
|
id = "anaphro+"
|
|
description = "Chemically condensed camphor. Causes an extreme reduction in libido and a permanent one if overdosed. Non-addictive."
|
|
taste_description = "tranquil celibacy"
|
|
color = "#D9D9D9"//rgb(217, 217, 217)
|
|
reagent_state = SOLID
|
|
overdose_threshold = 20
|
|
|
|
/datum/reagent/anaphrodisiacplus/on_mob_life(mob/living/M)
|
|
if(prob(33))
|
|
M.adjustArousalLoss(-4)
|
|
..()
|
|
|
|
/datum/reagent/anaphrodisiacplus/overdose_process(mob/living/M)
|
|
if(prob(33))
|
|
if(M.min_arousal > 0)
|
|
M.min_arousal -= 1
|
|
if(M.min_arousal > 50)
|
|
M.min_arousal -= 1
|
|
M.adjustArousalLoss(-2)
|
|
..()
|
|
|
|
//recipes
|
|
/datum/chemical_reaction/aphro
|
|
name = "crocin"
|
|
id = "aphro"
|
|
results = list("aphro" = 6)
|
|
required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "water" = 1)
|
|
required_temp = 400
|
|
mix_message = "The mixture boils off a pink vapor..."//The water boils off, leaving the crocin
|
|
|
|
/datum/chemical_reaction/aphroplus
|
|
name = "hexacrocin"
|
|
id = "aphro+"
|
|
results = list("aphro+" = 1)
|
|
required_reagents = list("aphro" = 6, "phenol" = 1)
|
|
required_temp = 400
|
|
mix_message = "The mixture rapidly condenses and darkens in color..."
|
|
|
|
/datum/chemical_reaction/anaphro
|
|
name = "camphor"
|
|
id = "anaphro"
|
|
results = list("anaphro" = 6)
|
|
required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "sulfur" = 1)
|
|
required_temp = 400
|
|
mix_message = "The mixture boils off a yellow, smelly vapor..."//Sulfur burns off, leaving the camphor
|
|
|
|
/datum/chemical_reaction/anaphroplus
|
|
name = "pentacamphor"
|
|
id = "anaphro+"
|
|
results = list("anaphro+" = 1)
|
|
required_reagents = list("anaphro" = 5, "acetone" = 1)
|
|
required_temp = 300
|
|
mix_message = "The mixture thickens and heats up slighty..."
|