mirror of
https://github.com/quotefox/Hyper-Station-13.git
synced 2026-08-30 16:16:15 +01:00
@@ -5,4 +5,9 @@
|
||||
#define BELLY_STRETCH_SIZE 6 // for flavor text
|
||||
|
||||
#define BUTT_MIN_SIZE 0
|
||||
#define BUTT_MAX_SIZE 8
|
||||
#define BUTT_MAX_SIZE_SELECTABLE 5
|
||||
#define BUTT_MAX_SIZE 8
|
||||
|
||||
#define GENITALS_HIDDEN "hidden"
|
||||
#define GENITALS_CLOTHES "clothes"
|
||||
#define GENITALS_VISIBLE "visible"
|
||||
|
||||
@@ -60,6 +60,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
|
||||
#define isbrain(A) (istype(A, /mob/living/brain))
|
||||
|
||||
#define isnoncarbon(A) (isliving(A) && !iscarbon(A))
|
||||
|
||||
//Carbon mobs
|
||||
#define iscarbon(A) (istype(A, /mob/living/carbon))
|
||||
|
||||
|
||||
@@ -2435,9 +2435,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["belly_size"] = clamp(new_bellysize, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
|
||||
|
||||
if("butt_size")
|
||||
var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-5)", "Character Preference") as num|null
|
||||
var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE_SELECTABLE])", "Character Preference") as num|null
|
||||
if(new_buttsize != null)
|
||||
features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, 5) //Restricted to 5 in menu, because we have chems to make them big IC, like with breasts and what not.
|
||||
features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE_SELECTABLE)
|
||||
//Restricted to 5 in menu, because we have chems to make them big IC, like with breasts and what not.
|
||||
|
||||
if("vag_shape")
|
||||
var/new_shape
|
||||
|
||||
@@ -1647,8 +1647,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
)
|
||||
if (target.canbearoused)
|
||||
target.adjustArousalLoss(5)
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && HAS_TRAIT(target, TRAIT_MASO) && target.has_dna())
|
||||
target.mob_climax(forced_climax=TRUE)
|
||||
if (HAS_TRAIT(target, TRAIT_MASO))
|
||||
target.mob_climax_instant()
|
||||
if (!HAS_TRAIT(target, TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
|
||||
@@ -2005,8 +2005,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.update_damage_overlays()
|
||||
if(HAS_TRAIT(H, TRAIT_MASO))
|
||||
H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
|
||||
if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna())
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.mob_climax_instant()
|
||||
|
||||
else//no bodypart, we deal damage with a more general method.
|
||||
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
|
||||
|
||||
@@ -77,8 +77,7 @@
|
||||
var/mob/living/carbon/human/B = src
|
||||
if(HAS_TRAIT(B, TRAIT_CHOKE_SLUT))
|
||||
B.adjustArousalLoss(7)
|
||||
if (B.getArousalLoss() >= 100 && ishuman(B) && B.has_dna())
|
||||
B.mob_climax(forced_climax=TRUE)
|
||||
B.mob_climax_instant()
|
||||
else
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
|
||||
else
|
||||
|
||||
@@ -282,16 +282,16 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(chalice_taken == 1)
|
||||
if(chalice_taken)
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"My chalice has already been taken, dear. I cannot give you another...\"</i></b>")
|
||||
return
|
||||
if(user.getArousalLoss() < 100)
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"You are not horny enough to receive my blessing, dear~\"</i></b>")
|
||||
return
|
||||
if (ishuman(user) && user.has_dna())
|
||||
user.mob_climax(forced_climax=TRUE)
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"You are worth of my blessing dear~\"</i></b>")
|
||||
to_chat(user, "<span class='userdanger'>You feel overpowering pleasure surge through your entire body.</span>")
|
||||
var/A = new /obj/item/reagent_containers/chalice/lust
|
||||
user.put_in_hands(A)
|
||||
chalice_taken = 1
|
||||
var/mob/living/carbon/user_carbon = user
|
||||
user_carbon.mob_climax_instant()
|
||||
to_chat(user, "<i>You hear a voice in your head... <b>\"You are worthy of my blessing, dear~\"</i></b>")
|
||||
to_chat(user, "<span class='userdanger'>You feel overpowering pleasure surge through your entire body.</span>")
|
||||
var/A = new /obj/item/reagent_containers/chalice/lust
|
||||
user.put_in_hands(A)
|
||||
chalice_taken = TRUE
|
||||
@@ -581,7 +581,7 @@
|
||||
for(var/V in listeners)
|
||||
var/mob/living/carbon/human/H = V
|
||||
if(H.canbearoused && H.has_dna() && HAS_TRAIT(H, TRAIT_NYMPHO)) // probably a redundant check but for good measure
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.mob_climax_instant()
|
||||
*/
|
||||
else if((findtext(message, family_friendly_words)))
|
||||
cooldown = COOLDOWN_MEME
|
||||
@@ -1123,7 +1123,7 @@
|
||||
if(E.phase > 1)
|
||||
if(HAS_TRAIT(H, TRAIT_NYMPHO) && H.canbearoused && E.lewd) // probably a redundant check but for good measure
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, H, "<span class='love'>Your [E.enthrallGender] pushes you over the limit, overwhelming your body with pleasure.</b></span>"), 5)
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.mob_climax_instant()
|
||||
H.SetStun(20)
|
||||
H.setArousalLoss(H.min_arousal)
|
||||
E.resistanceTally = 0 //makes resistance 0, but resets arousal, resistance buildup is faster unaroused (massively so).
|
||||
|
||||
@@ -11,7 +11,15 @@
|
||||
for(var/obj/item/organ/genital/G in U.internal_organs)
|
||||
if(!G.nochange)
|
||||
if(!G.dontlist)
|
||||
dat += "<a href='byond://?src=[REF(src)];hide[G.name]=1'>[G.mode == "hidden" ? "[G.name] <font color='red'>(Hidden)</font>" : (G.mode == "clothes" ? "[G.name] <font color='yellow'>(Hidden by Clothes)</font>" : (G.mode == "visable" ? "[G.name] <font color='green'>(Visable)</font>" : "[G.name] <font color='green'>(Visable)</font>"))]</a><BR>"
|
||||
var/genital_visibility = "[G.name] <font color='green'>(Visible)</font>"
|
||||
switch(G.mode)
|
||||
if(GENITALS_HIDDEN)
|
||||
genital_visibility = "[G.name] <font color='red'>(Hidden)</font>"
|
||||
if(GENITALS_CLOTHES)
|
||||
genital_visibility = "[G.name] <font color='yellow'>(Hidden by Clothes)</font>"
|
||||
if(GENITALS_VISIBLE)
|
||||
genital_visibility = "[G.name] <font color='green'>(Visible)</font>"
|
||||
dat += "<a href='byond://?src=[REF(src)];hide[G.name]=1'>[genital_visibility]</a><BR>"
|
||||
|
||||
dat += {"<BR><B>Contexual Options</B><BR><HR>"}
|
||||
var/obj/item/organ/genital/penis/P = user.getorganslot("penis")
|
||||
@@ -45,20 +53,17 @@
|
||||
if(Belly.inflatable)
|
||||
dat += "<a href='byond://?src=[REF(src)];shrink_belly=1'>Deflate belly</A>"
|
||||
dat += "(Shrink your belly down a size)<BR>"
|
||||
|
||||
|
||||
if(user.pulling)
|
||||
|
||||
if(user.pulling && !isnoncarbon(user.pulling)) // do not fuck animals
|
||||
dat += "<a href='byond://?src=[REF(src)];climaxover=1'>Climax over [user.pulling]</A>" //you can cum on objects if you really want...
|
||||
dat += "(Orgasm over a person or object.)<BR>"
|
||||
if(isliving(user.pulling))
|
||||
if(iscarbon(user.pulling))
|
||||
dat += "<a href='byond://?src=[REF(src)];climaxwith=1'>Climax with [user.pulling]</A>"
|
||||
dat += {"(Orgasm with another person.)<BR>"}
|
||||
|
||||
var/mob/living/carbon/human/H = user.pulling
|
||||
if(H.breedable && P && H)
|
||||
dat += "<a href='byond://?src=[REF(src)];impreg=1'>Impregnate [U.pulling] ([clamp(U.impregchance,0,100)]%)</A>"
|
||||
dat += "(Climax inside another person, and attempt to knock them up.)<BR>"
|
||||
if(iscarbon(user.pulling))
|
||||
dat += "<a href='byond://?src=[REF(src)];climaxwith=1'>Climax with [user.pulling]</A>"
|
||||
dat += {"(Orgasm with another person.)<BR>"}
|
||||
var/mob/living/carbon/human/H = user.pulling
|
||||
if(H && H.breedable && P)
|
||||
dat += "<a href='byond://?src=[REF(src)];impreg=1'>Impregnate [U.pulling] ([clamp(U.impregchance,0,100)]%)</A>"
|
||||
dat += "(Climax inside another person, and attempt to knock them up.)<BR>"
|
||||
else
|
||||
dat += "<span class='linkOff'>Climax over</span></A>"
|
||||
dat += "(Requires a partner)<BR>"
|
||||
@@ -81,11 +86,9 @@
|
||||
dat += "<a href='byond://?src=[REF(src)];omenu=1'>Old Menu</A>"
|
||||
dat += "<a href='byond://?src=[REF(src)];underwear=1'>Toggle Undergarments </A>"
|
||||
dat += "<BR>"
|
||||
|
||||
var/datum/browser/popup = new(user, "arousal", "Arousal Panel")
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(icon, icon_state), 500,600)
|
||||
|
||||
popup.open()
|
||||
|
||||
|
||||
@@ -140,7 +143,7 @@
|
||||
T.toggle_visibility(picked_visibility)
|
||||
|
||||
if(href_list["masturbate"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.solomasturbate()
|
||||
return
|
||||
else
|
||||
@@ -148,7 +151,7 @@
|
||||
return
|
||||
|
||||
if(href_list["container"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.cumcontainer()
|
||||
return
|
||||
else
|
||||
@@ -156,7 +159,7 @@
|
||||
return
|
||||
|
||||
if(href_list["clothesplosion"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //Requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //Requires 33% arousal.
|
||||
H.clothesplosion()
|
||||
return
|
||||
else
|
||||
@@ -164,7 +167,7 @@
|
||||
return
|
||||
|
||||
if(href_list["climaxself"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.climaxself()
|
||||
return
|
||||
else
|
||||
@@ -172,7 +175,7 @@
|
||||
return
|
||||
|
||||
if(href_list["climax"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.climaxalone(FALSE)
|
||||
return
|
||||
else
|
||||
@@ -180,7 +183,7 @@
|
||||
return
|
||||
|
||||
if(href_list["climaxover"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.climaxover(usr.pulling)
|
||||
return
|
||||
else
|
||||
@@ -188,7 +191,7 @@
|
||||
return
|
||||
|
||||
if(href_list["climaxwith"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.climaxwith(usr.pulling)
|
||||
return
|
||||
else
|
||||
@@ -196,7 +199,7 @@
|
||||
return
|
||||
|
||||
if(href_list["impreg"])
|
||||
if (H.arousalloss >= (H.max_arousal / 100) * 33) //requires 33% arousal.
|
||||
if (H.isPercentAroused(33)) //requires 33% arousal.
|
||||
H.impregwith(usr.pulling)
|
||||
return
|
||||
else
|
||||
@@ -331,7 +334,7 @@ obj/screen/arousal/proc/kiss()
|
||||
return
|
||||
//We got hands, let's pick an organ
|
||||
var/obj/item/organ/genital/picked_organ
|
||||
picked_organ = pick_masturbate_genitals()
|
||||
picked_organ = pick_climax_genitals(masturbation=TRUE, title="Masturbation")
|
||||
if(picked_organ)
|
||||
src << browse(null, "window=arousal") //closes the window
|
||||
mob_masturbate(picked_organ)
|
||||
@@ -365,55 +368,31 @@ obj/screen/arousal/proc/kiss()
|
||||
to_chat(src, "<span class='warning'>You cannot climax without choosing genitals.</span>")
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/climaxwith(mob/living/T)
|
||||
|
||||
var/mob/living/carbon/human/L = pick_partner()
|
||||
/mob/living/carbon/human/proc/climaxwith(mob/living/carbon/human/partner)
|
||||
if(!partner)
|
||||
to_chat(src, "<span class='warning'>You cannot do this alone.</span>")
|
||||
return
|
||||
var/obj/item/organ/genital/picked_organ
|
||||
picked_organ = pick_climax_genitals()
|
||||
if(picked_organ)
|
||||
var/mob/living/partner = L
|
||||
if(partner)
|
||||
src << browse(null, "window=arousal") //alls fine, we can close the window now.
|
||||
var/obj/item/organ/genital/penis/P = picked_organ
|
||||
var/spillage = "No" //default to no, just incase player has items on to prevent climax
|
||||
if(!P.condom == 1&&!P.sounding == 1) //you cant climax with a condom on or sounding in.
|
||||
spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No")
|
||||
if(spillage == "Yes")
|
||||
mob_climax_partner(picked_organ, partner, TRUE, FALSE, FALSE)
|
||||
else
|
||||
mob_climax_partner(picked_organ, partner, FALSE, FALSE, FALSE)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You cannot do this alone.</span>")
|
||||
return
|
||||
else //They either lack organs that can masturbate, or they didn't pick one.
|
||||
if(!picked_organ)
|
||||
to_chat(src, "<span class='warning'>You cannot climax without choosing genitals.</span>")
|
||||
return
|
||||
src << browse(null, "window=arousal") // close arousal window
|
||||
mob_climax_inside_spillage(picked_organ, partner, impreg=FALSE)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/climaxover(mob/living/T)
|
||||
|
||||
var/mob/living/carbon/human/L = T
|
||||
/mob/living/carbon/human/proc/climaxover(atom/partner)
|
||||
var/obj/item/organ/genital/picked_organ
|
||||
picked_organ = pick_climax_genitals()
|
||||
if(picked_organ)
|
||||
src << browse(null, "window=arousal") //alls fine, we can close the window now.
|
||||
var/mob/living/partner = L
|
||||
if(partner)
|
||||
var/obj/item/organ/genital/penis/P = picked_organ
|
||||
if(P.condom == 1)
|
||||
to_chat(src, "<span class='warning'>You cannot do this action with a condom on.</span>")
|
||||
return
|
||||
if(P.sounding == 1)
|
||||
to_chat(src, "<span class='warning'>You cannot do this action with a sounding in.</span>")
|
||||
return
|
||||
mob_climax_partner(picked_organ, partner, FALSE, FALSE, TRUE)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You cannot do this alone.</span>")
|
||||
return
|
||||
else //They either lack organs that can masturbate, or they didn't pick one.
|
||||
if(!picked_organ)
|
||||
to_chat(src, "<span class='warning'>You cannot climax without choosing genitals.</span>")
|
||||
return
|
||||
src << browse(null, "window=arousal") //alls fine, we can close the window now.
|
||||
if(!partner || isnoncarbon(partner))
|
||||
to_chat(src, "<span class='warning'>You cannot do this alone.</span>")
|
||||
return
|
||||
mob_climax_cover(picked_organ, partner)
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/clothesplosion()
|
||||
if(usr.restrained(TRUE))
|
||||
@@ -428,39 +407,29 @@ obj/screen/arousal/proc/kiss()
|
||||
H.visible_message("<span class='boldnotice'>[H] explodes out of their clothes!'</span>")
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/impregwith(mob/living/T)
|
||||
|
||||
var/mob/living/carbon/human/L = pick_partner()
|
||||
var/obj/item/organ/genital/picked_organ
|
||||
picked_organ = src.getorganslot("penis") //Impregnation must be done with a penis.
|
||||
if(picked_organ)
|
||||
var/mob/living/partner = L
|
||||
if(partner)
|
||||
if(!partner.breedable)//check if impregable.
|
||||
to_chat(src, "<span class='warning'>Your partner cannot be impregnated.</span>")//some fuckary happening, you shouldnt even get to this point tbh.
|
||||
return
|
||||
var/obj/item/organ/genital/penis/P = picked_organ
|
||||
//you cant impreg with a condom on or sounding in.
|
||||
if(P.condom == 1)
|
||||
to_chat(src, "<span class='warning'>You cannot do this action with a condom on.</span>")
|
||||
return
|
||||
if(P.sounding == 1)
|
||||
to_chat(src, "<span class='warning'>You cannot do this action with a sounding in.</span>")
|
||||
return
|
||||
src << browse(null, "window=arousal") //alls fine, we can close the window now.
|
||||
//Keeping this for messy fun
|
||||
var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No")
|
||||
if(spillage == "Yes")
|
||||
mob_climax_partner(picked_organ, partner, TRUE, TRUE, FALSE)
|
||||
else
|
||||
mob_climax_partner(picked_organ, partner, FALSE, TRUE, FALSE)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You cannot do this alone.</span>")
|
||||
return
|
||||
else //no penis :(
|
||||
to_chat(src, "<span class='warning'>You cannot impregnate without a penis.</span>")
|
||||
/mob/living/carbon/human/proc/impregwith(mob/living/carbon/T)
|
||||
var/mob/living/carbon/human/partner = pick_partner()
|
||||
var/obj/item/organ/genital/penis/picked_organ = src.getorganslot("penis")
|
||||
// wow that is a lot of conditionals huh
|
||||
if(!picked_organ) // no penis :(
|
||||
to_chat(src, "<span class='warning'>You cannot impregnate someone without a penis.</span>")
|
||||
return
|
||||
if(!partner)
|
||||
to_chat(src, "<span class='warning'>You cannot do this alone.</span>")
|
||||
return
|
||||
if(!partner.breedable) //check if impregable.
|
||||
to_chat(src, "<span class='warning'>Your partner cannot be impregnated.</span>")
|
||||
//some fuckery happening, you shouldnt even get to this point tbh.
|
||||
return
|
||||
if(picked_organ.condom)
|
||||
to_chat(src, "<span class='warning'>You cannot impregnate someone with a condom on.</span>")
|
||||
return
|
||||
if(picked_organ.sounding)
|
||||
to_chat(src, "<span class='warning'>You cannot impregnate someone with a sounding rod in.</span>")
|
||||
return
|
||||
src << browse(null, "window=arousal") //alls fine, we can close the window now.
|
||||
mob_climax_inside_spillage(picked_organ, partner, impreg=TRUE)
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/cumcontainer(mob/living/T)
|
||||
//We'll need hands and no restraints.
|
||||
@@ -500,6 +469,11 @@ obj/screen/arousal/proc/kiss()
|
||||
cum_splatter_icon.Blend(icon('hyperstation/icons/effects/cumoverlay.dmi', "cum_obj"), ICON_MULTIPLY)
|
||||
add_overlay(cum_splatter_icon)
|
||||
|
||||
/mob/living/carbon/add_cum_overlay(type="normal")
|
||||
var/mutable_appearance/cumoverlay = mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi')
|
||||
cumoverlay.icon_state = "cum_[type]"
|
||||
add_overlay(cumoverlay)
|
||||
|
||||
/atom/proc/wash_cum()
|
||||
cut_overlay(mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi', "cum_normal"))
|
||||
cut_overlay(mutable_appearance('hyperstation/icons/effects/cumoverlay.dmi', "cum_large"))
|
||||
@@ -523,7 +497,7 @@ obj/screen/arousal/proc/kiss()
|
||||
return
|
||||
//We got hands, let's pick an organ
|
||||
var/obj/item/organ/genital/picked_organ
|
||||
picked_organ = pick_masturbate_genitals()
|
||||
picked_organ = pick_climax_genitals(masturbation=TRUE, title="Masturbation")
|
||||
if(picked_organ)
|
||||
src << browse(null, "window=arousal") //closes the window
|
||||
mob_masturbate(picked_organ, cover = TRUE)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/obj/item/organ/genital/proc/get_fluid_source()
|
||||
if(producing)
|
||||
return src.reagents
|
||||
if(linked_organ && linked_organ.producing)
|
||||
return linked_organ.reagents
|
||||
return null
|
||||
@@ -115,7 +115,6 @@ obj/item/condom/update_icon()
|
||||
return
|
||||
if(!P.condom)
|
||||
return
|
||||
|
||||
var/obj/item/condom/filled/C = new
|
||||
P.linked_organ.reagents.trans_to(C, P.linked_organ.reagents.total_volume)
|
||||
C.loc = loc
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/reagent_containers/food/snacks/grown/wheat/
|
||||
var stacktype = /obj/item/stack/tile/hay
|
||||
/obj/item/reagent_containers/food/snacks/grown/wheat
|
||||
var/stacktype = /obj/item/stack/tile/hay
|
||||
var/tile_coefficient = 0.02 // same as grass
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/wheat/attack_self(mob/user)
|
||||
|
||||
@@ -45,11 +45,9 @@
|
||||
inuse = 1
|
||||
if(!(C == user)) //if we are targeting someone else.
|
||||
C.visible_message("<span class='userlove'>[user] is trying to use [src] on [C]'s penis.</span>", "<span class='userlove'>[user] is trying to use [src] on your penis.</span>")
|
||||
|
||||
if(!do_mob(user, C, 3 SECONDS)) //3 second delay
|
||||
inuse = 0
|
||||
return
|
||||
|
||||
//checked if not used on yourself, if not, carry on.
|
||||
playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1) //slapping sound
|
||||
inuse = 0
|
||||
@@ -57,27 +55,22 @@
|
||||
C.visible_message("<span class='userlove'>[user] pumps [src] on [C]'s penis.</span>", "<span class='userlove'>[user] pumps [src] up and down on your penis.</span>")
|
||||
else
|
||||
user.visible_message("<span class='userlove'>[user] pumps [src] on their penis.</span>", "<span class='userlove'>You pump the fleshlight on your penis.</span>")
|
||||
|
||||
if(prob(30)) //30% chance to make them moan.
|
||||
C.emote("moan")
|
||||
|
||||
C.do_jitter_animation()
|
||||
C.adjustArousalLoss(20) //make the target more aroused.
|
||||
if (C.getArousalLoss() >= 100 && ishuman(C) && C.has_dna())
|
||||
C.mob_climax(forced_climax=TRUE) //make them cum if they are over the edge.
|
||||
|
||||
if(C.can_orgasm() && ishuman(C))
|
||||
var/mob/living/carbon/human/user_human = C
|
||||
user_human.mob_climax_outside(P, mb_time=0) // instant, because we already did a warmup
|
||||
return
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You don't see anywhere to use this on.</span>")
|
||||
|
||||
inuse = 0
|
||||
..()
|
||||
|
||||
|
||||
//Hyperstation 13 portal fleshlight
|
||||
//kinky!
|
||||
|
||||
/obj/item/portallight
|
||||
name = "portal fleshlight"
|
||||
desc = "A silver love(TM) fleshlight, used to stimulate someones penis, with bluespace tech that allows lovers to hump at a distance."
|
||||
@@ -95,7 +88,6 @@
|
||||
var/paired = 0
|
||||
var/obj/item/portalunderwear
|
||||
var/useable = FALSE
|
||||
var/option = ""
|
||||
|
||||
/obj/item/portallight/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -104,136 +96,109 @@
|
||||
else
|
||||
. += "<span class='notice'>The device is paired, and awaiting input. </span>"
|
||||
|
||||
/obj/item/portallight/attack(mob/living/carbon/C, mob/living/user) //use portallight! nearly the same as the fleshlight apart from you have a buddy!
|
||||
var/obj/item/organ/genital/penis/P = C.getorganslot("penis")
|
||||
|
||||
/obj/item/portallight/attack(mob/living/carbon/user, mob/living/holder)
|
||||
if(inuse) //just to stop stacking and causing people to cum instantly
|
||||
return
|
||||
if(!useable)
|
||||
to_chat(user, "<span class='notice'>It seems the device has failed or your partner is not wearing their device.</span>")
|
||||
|
||||
if(C == user)//if your using it on yourself, more options! otherwise, just fuck.
|
||||
if(!UpdateUsability())
|
||||
to_chat(holder, "<span class='notice'>\The [src] appears to be currently unusable.</span>")
|
||||
return
|
||||
var/option = "Fuck"
|
||||
if(user == holder)
|
||||
option = input(usr, "Choose action", "Portal Fleshlight", "Fuck") in list("Fuck", "Lick", "Touch")
|
||||
else
|
||||
option = "Fuck"
|
||||
|
||||
var/obj/item/organ/genital/G
|
||||
if(istype(portalunderwear.loc, /obj/item/organ/genital)) //Sanity check. Without this it will runtime error.
|
||||
G = portalunderwear.loc
|
||||
if(!G)
|
||||
var/obj/item/organ/genital/target_genital = portalunderwear.loc
|
||||
var/mob/living/carbon/human/target = target_genital.owner
|
||||
var/obj/item/organ/genital/penis/P = user.getorganslot("penis")
|
||||
if(option == "Fuck" && !P.is_exposed())
|
||||
to_chat(holder, "<span class='notice'>You don't see anywhere to use this on.</span>")
|
||||
return
|
||||
var/mob/living/carbon/human/M = G.owner
|
||||
|
||||
if(option == "Fuck"&&!P.is_exposed()) //we are trying to fuck with no penis!
|
||||
to_chat(user, "<span class='notice'>You don't see anywhere to use this on.</span>")
|
||||
return
|
||||
else //other options dont need checks
|
||||
inuse = 1
|
||||
if(!(C == user)) //if we are targeting someone else.
|
||||
C.visible_message("<span class='userlove'>[user] is trying to use [src] on [C]'s penis.</span>", "<span class='userlove'>[user] is trying to use [src] on your penis.</span>")
|
||||
|
||||
if(!do_mob(user, C, 3 SECONDS)) //3 second delay
|
||||
inuse = 0
|
||||
return
|
||||
|
||||
//checked if not used on yourself, if not, carry on.
|
||||
if(option == "Fuck")
|
||||
playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1) //slapping sound for fuck.
|
||||
|
||||
inuse = 0
|
||||
if(!(C == user))
|
||||
C.visible_message("<span class='userlove'>[user] pumps [src] on [C]'s penis.</span>", "<span class='userlove'>[user] pumps [src] up and down on your penis.</span>")
|
||||
else
|
||||
if(option == "Fuck")
|
||||
user.visible_message("<span class='userlove'>[user] pumps [src] on their penis.</span>", "<span class='userlove'>You pump the fleshlight on your penis.</span>")
|
||||
if(option == "Lick")
|
||||
user.visible_message("<span class='userlove'>[user] licks into [src].</span>", "<span class='userlove'>You lick into [src].</span>")
|
||||
if(option == "Touch")
|
||||
user.visible_message("<span class='userlove'>[user] touches softly against [src].</span>", "<span class='userlove'>You touch softly on [src].</span>")
|
||||
|
||||
|
||||
if(prob(30)) //30% chance to make your partner moan.
|
||||
M.emote("moan")
|
||||
|
||||
if(option == "Fuck")// normal fuck
|
||||
to_chat(M, "<span class='love'>You feel a [P.length] inch, [P.shape] shaped penis pumping through the portal into your [G.name].</span>")//message your partner, and kinky!
|
||||
if(prob(30)) //30% chance to make them moan.
|
||||
C.emote("moan")
|
||||
if(prob(30)) //30% chance to make your partner moan.
|
||||
M.emote("moan")
|
||||
C.adjustArousalLoss(20)
|
||||
M.adjustArousalLoss(20)
|
||||
M.do_jitter_animation() //make your partner shake too!
|
||||
|
||||
if (M.getArousalLoss() >= 100 && ishuman(M) && prob(5))//Why not have a probability to cum when someone's getting nailed with max arousal?~
|
||||
if(G.is_exposed()) //Oh yea, if vagina is not exposed, the climax will not cause a spill
|
||||
M.mob_climax_outside(G, spillage = TRUE)
|
||||
else
|
||||
M.mob_climax_outside(G, spillage = FALSE)
|
||||
|
||||
if (C.getArousalLoss() >= 100 && ishuman(C) && C.has_dna())
|
||||
var/mob/living/carbon/human/O = C
|
||||
|
||||
if( (P.condom == 1) || (P.sounding == 1)) //If coundomed and/or sounded, do not fire impreg chance
|
||||
O.mob_climax_partner(P, M, FALSE, FALSE, FALSE, TRUE)
|
||||
else //Else, fire impreg chance
|
||||
if(G.name == "vagina") //no more spontaneous impregnations through the butt!
|
||||
O.mob_climax_partner(P, M, FALSE, TRUE, FALSE, TRUE)
|
||||
else
|
||||
O.mob_climax_partner(P, M, FALSE, FALSE, FALSE, TRUE)
|
||||
|
||||
if(option == "Lick")
|
||||
to_chat(M, "<span class='love'>You feel a tongue lick you through the portal against your [G.name].</span>")
|
||||
M.adjustArousalLoss(10)
|
||||
if(option == "Touch")
|
||||
to_chat(M, "<span class='love'>You feel someone touching your [G.name] through the portal.</span>")
|
||||
M.adjustArousalLoss(5)
|
||||
|
||||
/*
|
||||
WARMUP START - prevents spam/instant climax
|
||||
*/
|
||||
inuse = TRUE
|
||||
if(user != holder)
|
||||
user.visible_message("<span class='userlove'>[holder] is trying to use [src] on [user]'s penis.</span>",\
|
||||
"<span class='userlove'>[holder] is trying to use [src] on your penis.</span>")
|
||||
if(!do_mob(holder, user, 3 SECONDS))
|
||||
inuse = FALSE
|
||||
return
|
||||
inuse = FALSE
|
||||
/*
|
||||
WARMUP END - proceed with the action
|
||||
*/
|
||||
switch(option)
|
||||
if("Fuck")
|
||||
playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1)
|
||||
if(user == holder)
|
||||
holder.visible_message("<span class='userlove'>[holder] pumps [src] on their penis.</span>",
|
||||
"<span class='userlove'>You pump the fleshlight on your penis.</span>")
|
||||
else
|
||||
user.visible_message("<span class='userlove'>[holder] pumps [src] on [user]'s penis.</span>",\
|
||||
"<span class='userlove'>[holder] pumps [src] up and down on your penis.</span>")
|
||||
to_chat(target, "<span class='love'>You feel a [P.length] inch, [P.shape] shaped penis pumping through the portal into your [target_genital.name].</span>")
|
||||
if(prob(30))
|
||||
user.emote("moan")
|
||||
user.adjustArousalLoss(20)
|
||||
target.adjustArousalLoss(20)
|
||||
target.do_jitter_animation()
|
||||
if(target.can_orgasm() && prob(5))
|
||||
target.mob_climax_outside(target_genital, spillage=target_genital.is_exposed())
|
||||
if(user.can_orgasm())
|
||||
var/mob/living/carbon/human/O = user
|
||||
var/impreg_chance = target_genital.name == "vagina" && !P.condom && !P.sounding
|
||||
if(O.mob_climax_in_partner(P, target, spillage=FALSE, remote=TRUE) && impreg_chance)
|
||||
target.impregnate(by=O)
|
||||
if("Lick")
|
||||
holder.visible_message("<span class='userlove'>[holder] licks into [src].</span>",\
|
||||
"<span class='userlove'>You lick into [src].</span>")
|
||||
to_chat(target, "<span class='love'>You feel a tongue lick you through the portal against your [target_genital.name].</span>")
|
||||
target.adjustArousalLoss(10)
|
||||
if("Touch")
|
||||
holder.visible_message("<span class='userlove'>[holder] touches softly against [src].</span>",\
|
||||
"<span class='userlove'>You touch softly on [src].</span>")
|
||||
to_chat(target, "<span class='love'>You feel someone touching your [target_genital.name] through the portal.</span>")
|
||||
target.adjustArousalLoss(5)
|
||||
if(prob(30))
|
||||
target.emote("moan")
|
||||
..()
|
||||
|
||||
/obj/item/portallight/proc/updatesleeve()
|
||||
//get their looks and vagina colour!
|
||||
cut_overlays()//remove current overlays
|
||||
|
||||
var/obj/item/organ/genital/G
|
||||
if(istype(portalunderwear.loc, /obj/item/organ/genital)) //Sanity check. Without this it will runtime.
|
||||
G = portalunderwear.loc
|
||||
if(!G)
|
||||
useable = FALSE
|
||||
cut_overlays()
|
||||
if(!UpdateUsability())
|
||||
return
|
||||
var/obj/item/organ/genital/G = portalunderwear.loc
|
||||
var/mob/living/carbon/human/H = G.owner // H is verified by UpdateUsability()
|
||||
var/sleeve_species = "normal"
|
||||
switch(H.dna.species.name)
|
||||
if("Lizardperson")
|
||||
sleeve_species = "lizard"
|
||||
if("Slimeperson")
|
||||
sleeve_species = "slime"
|
||||
if("Avian")
|
||||
sleeve_species = "avian"
|
||||
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_[sleeve_species]")
|
||||
sleeve.color = "#" + H.dna.features["mcolor"]
|
||||
add_overlay(sleeve)
|
||||
if(G.name == "vagina")
|
||||
organ = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_vag")
|
||||
organ.color = portalunderwear.loc.color
|
||||
if(G.name == "anus")
|
||||
organ = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_anus")
|
||||
organ.color = "#" + H.dna.features["mcolor"]
|
||||
add_overlay(organ)
|
||||
|
||||
var/mob/living/carbon/human/H = G.owner
|
||||
/obj/item/portallight/proc/UpdateUsability()
|
||||
var/useable = FALSE
|
||||
if(portalunderwear && istype(portalunderwear.loc, /obj/item/organ/genital))
|
||||
var/obj/item/organ/genital/loc_genitals = portalunderwear.loc
|
||||
if(loc_genitals.owner && ishuman(loc_genitals.owner))
|
||||
useable = TRUE
|
||||
src.useable = useable
|
||||
return useable
|
||||
|
||||
if(H) //if the portal panties are on someone.
|
||||
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_normal")
|
||||
if(H.dna.species.name == "Lizardperson") // lizard nerd
|
||||
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_lizard")
|
||||
|
||||
if(H.dna.species.name == "Slimeperson") // slime nerd
|
||||
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_slime")
|
||||
|
||||
if(H.dna.species.name == "Avian") // bird nerd
|
||||
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_avian")
|
||||
|
||||
sleeve.color = "#" + H.dna.features["mcolor"]
|
||||
add_overlay(sleeve)
|
||||
|
||||
if(G.name == "vagina")
|
||||
organ = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_vag")
|
||||
organ.color = portalunderwear.loc.color
|
||||
if(G.name == "anus")
|
||||
organ = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_anus")
|
||||
organ.color = "#" + H.dna.features["mcolor"]
|
||||
|
||||
useable = TRUE
|
||||
add_overlay(organ)
|
||||
else
|
||||
useable = FALSE
|
||||
|
||||
//Hyperstation 13 portal underwear
|
||||
//can be attached to vagina or anus, just like the vibrator, still requires pairing with the portallight
|
||||
|
||||
/obj/item/portalpanties
|
||||
name = "portal panties"
|
||||
desc = "A silver love(TM) pair of portal underwear, with bluespace tech allows lovers to hump at a distance. Needs to be paired with a portal fleshlight before use."
|
||||
@@ -252,7 +217,6 @@
|
||||
else
|
||||
. += "<span class='notice'>The device is paired, and awaiting attachment. </span>"
|
||||
|
||||
|
||||
/obj/item/portalpanties/attackby(obj/item/I, mob/living/user) //pairing
|
||||
if(istype(I, /obj/item/portallight))
|
||||
var/obj/item/portallight/P = I
|
||||
@@ -268,11 +232,9 @@
|
||||
..() //just allows people to hit it with other objects, if they so wished.
|
||||
|
||||
/obj/item/portalpanties/attack(mob/living/carbon/C, mob/living/user)
|
||||
|
||||
if(!portallight) //we arent paired yet! noobie trap, let them know.
|
||||
to_chat(user, "<span class='warning'>[src] can only be attached once paired with a portal fleshlight.</span>")
|
||||
return
|
||||
|
||||
var/obj/item/organ/genital/picked_organ
|
||||
var/mob/living/carbon/human/S = user
|
||||
var/mob/living/carbon/human/T = C
|
||||
@@ -282,21 +244,17 @@
|
||||
"<span class='warning'>[user] is trying to put [src] on you!</span>")
|
||||
if(!do_mob(user, C, 3 SECONDS))//warn them and have a delay of 5 seconds to apply.
|
||||
return
|
||||
|
||||
if((picked_organ.name == "vagina")||(picked_organ.name == "anus")) //only fits on a vagina or anus
|
||||
|
||||
src.shapetype = picked_organ.name
|
||||
if(!picked_organ.equipment)
|
||||
to_chat(user, "<span class='love'>You wrap [src] around [T]'s [picked_organ.name].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>They already have [picked_organ.equipment.name] there.</span>")
|
||||
return
|
||||
|
||||
if(!user.transferItemToLoc(src, picked_organ)) //check if you can put it in
|
||||
return
|
||||
src.attached = TRUE
|
||||
picked_organ.equipment = src
|
||||
|
||||
var/obj/item/portallight/P = portallight
|
||||
//now we need to send what they look like, but saddly if the person changes colour for what ever reason, it wont update. but dont tell people shh.
|
||||
if(P) //just to make sure
|
||||
@@ -312,6 +270,7 @@
|
||||
var/obj/item/portallight/P = portallight
|
||||
P.updatesleeve()
|
||||
|
||||
|
||||
/obj/item/storage/box/portallight
|
||||
name = "Portal Fleshlight and Underwear"
|
||||
icon = 'hyperstation/icons/obj/fleshlight.dmi'
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
var/results = "null"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
|
||||
/obj/item/pregnancytest/attack_self(mob/user)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
@@ -16,28 +15,26 @@
|
||||
return
|
||||
if(isAI(user))
|
||||
return
|
||||
if(user.stat > 0)//unconscious or dead
|
||||
if(user.stat > CONSCIOUS)//unconscious or dead
|
||||
return
|
||||
if(status == 1)
|
||||
return //Already been used once, pregnancy tests only work once.
|
||||
test(user)
|
||||
|
||||
/obj/item/pregnancytest/proc/force(mob/living/user)
|
||||
//Force it negative
|
||||
icon_state = "negative"
|
||||
name = "[results] pregnancy test"
|
||||
status = 1
|
||||
to_chat(user, "<span class='notice'>You use the pregnancy test, the display reads negative!</span>")
|
||||
|
||||
|
||||
/obj/item/pregnancytest/proc/test(mob/living/user)
|
||||
Test(user)
|
||||
|
||||
/obj/item/pregnancytest/proc/Test(mob/living/user)
|
||||
if(status)
|
||||
return
|
||||
var/_results = FALSE
|
||||
var/obj/item/organ/genital/womb/W = user.getorganslot("womb")
|
||||
if(W.pregnant == 1)
|
||||
results = "positive"
|
||||
icon_state = "positive"
|
||||
name = "[results] pregnancy test"
|
||||
status = 1
|
||||
to_chat(user, "<span class='notice'>You use the pregnancy test, the display reads positive!</span>")
|
||||
else
|
||||
force(user)
|
||||
if(!W)
|
||||
return // no reason to waste the single-use on them
|
||||
if(W.pregnant)
|
||||
_results = TRUE
|
||||
UpdateResult(user, _results)
|
||||
|
||||
/obj/item/pregnancytest/proc/UpdateResult(mob/living/user, results)
|
||||
var/result_text = results ? "positive" : "negative"
|
||||
src.results = result_text
|
||||
icon_state = result_text
|
||||
name = "[results] preganancy test"
|
||||
status = TRUE
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>You use the pregnancy test, the display reads [results]!</span>")
|
||||
@@ -132,14 +132,13 @@ Code:
|
||||
if(2) //med, can make you cum
|
||||
to_chat(U, "<span class='love'>You feel intense pleasure surge through your [G.name]</span>")
|
||||
U.do_jitter_animation()
|
||||
if (U.getArousalLoss() >= 100 && ishuman(U) && U.has_dna())
|
||||
U.mob_climax(forced_climax=TRUE)
|
||||
U.mob_climax_instant()
|
||||
if(3) //high, makes you stun
|
||||
to_chat(U, "<span class='userdanger'>You feel overpowering pleasure surge through your [G.name]</span>")
|
||||
U.Jitter(3)
|
||||
U.Stun(30)
|
||||
if (U.getArousalLoss() >= 100 && ishuman(U) && U.has_dna())
|
||||
U.mob_climax(forced_climax=TRUE)
|
||||
if (U.can_orgasm())
|
||||
U.mob_climax_instant()
|
||||
if(prob(50))
|
||||
U.emote("moan")
|
||||
|
||||
|
||||
@@ -620,7 +620,7 @@
|
||||
else if (lowertext(customTriggers[trigger]) == "cum")//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
if (HAS_TRAIT(C, TRAIT_NYMPHO) && lewd)
|
||||
if (C.getArousalLoss() > 80)
|
||||
C.mob_climax(forced_climax=TRUE)
|
||||
C.mob_climax_instant()
|
||||
C.SetStun(10)//We got your stun effects in somewhere, Kev.
|
||||
else
|
||||
C.adjustArousalLoss(10)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -78,22 +78,21 @@
|
||||
if("Always visible")
|
||||
through_clothes = TRUE
|
||||
hidden = FALSE
|
||||
mode = "visible"
|
||||
mode = GENITALS_VISIBLE
|
||||
if(!(src in owner.exposed_genitals))
|
||||
owner.exposed_genitals += src
|
||||
if("Hidden by clothes")
|
||||
through_clothes = FALSE
|
||||
hidden = FALSE
|
||||
mode = "clothes"
|
||||
mode = GENITALS_CLOTHES
|
||||
if(src in owner.exposed_genitals)
|
||||
owner.exposed_genitals -= src
|
||||
if("Always hidden")
|
||||
through_clothes = FALSE
|
||||
hidden = TRUE
|
||||
mode = "hidden"
|
||||
mode = GENITALS_HIDDEN
|
||||
if(src in owner.exposed_genitals)
|
||||
owner.exposed_genitals -= src
|
||||
|
||||
if(ishuman(owner)) //recast to use update genitals proc
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.update_genitals()
|
||||
|
||||
@@ -25,12 +25,12 @@
|
||||
if(ismob(M) && M.canbearoused && arousal_gain != 0)
|
||||
var/orgasm = FALSE
|
||||
if(arousal_gain > 0)
|
||||
if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
||||
if(M.can_orgasm())
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/orgasm_message = pick("A sharp pulse of electricity pushes you to orgasm!", "You feel a jolt of electricity force you into orgasm!")
|
||||
H.visible_message("<span class='warning'>\The [assembly] electrodes shock [H]!</span>", "<span class='warning'>[orgasm_message]</span>")
|
||||
playsound(src, "sound/effects/light_flicker.ogg", 30, 1)
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
H.mob_climax_instant()
|
||||
orgasm = TRUE
|
||||
else
|
||||
M.adjustArousalLoss(arousal_gain)
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
|
||||
/datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M)
|
||||
if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO) && prob(33))
|
||||
if(prob(5) && M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
||||
if(prob(5) && M.can_orgasm())
|
||||
if(prob(5)) //Less spam
|
||||
to_chat(M, "<span class='love'>Your libido is going haywire!</span>")
|
||||
if(M.min_arousal < 50)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -3145,6 +3145,7 @@
|
||||
#include "hyperstation\code\modules\arousal\arousalhud.dm"
|
||||
#include "hyperstation\code\modules\arousal\creampie.dm"
|
||||
#include "hyperstation\code\modules\arousal\expansion.dm"
|
||||
#include "hyperstation\code\modules\arousal\organs\genitals.dm"
|
||||
#include "hyperstation\code\modules\busy_space\air_traffic.dm"
|
||||
#include "hyperstation\code\modules\busy_space\atc_controller.dm"
|
||||
#include "hyperstation\code\modules\busy_space\loremaster.dm"
|
||||
|
||||
Reference in New Issue
Block a user