portallight cleanup

This commit is contained in:
sarcoph
2022-05-05 05:01:50 -08:00
parent e555f0ea91
commit 42f33b2194
3 changed files with 94 additions and 94 deletions
+76 -77
View File
@@ -94,7 +94,6 @@
var/paired = 0
var/obj/item/portalunderwear
var/useable = FALSE
var/option = ""
/obj/item/portallight/examine(mob/user)
. = ..()
@@ -104,103 +103,103 @@
. += "<span class='notice'>The device is paired, and awaiting input. </span>"
/obj/item/portallight/attack(mob/living/carbon/holder, mob/living/user)
//use portallight! nearly the same as the fleshlight apart from you have a buddy!
var/obj/item/organ/genital/penis/P = holder.getorganslot("penis")
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(holder == user)//if your using it on yourself, more options! otherwise, just fuck.
option = input(usr, "Choose action", "Portal Fleshlight", "Fuck") in list("Fuck", "Lick", "Touch")
else
option = "Fuck"
var/obj/item/organ/genital/target_genital
if(istype(portalunderwear.loc, /obj/item/organ/genital)) //Sanity check. Without this it will runtime error.
target_genital = portalunderwear.loc
if(!target_genital)
if(!UpdateUsability())
to_chat(user, "<span class='notice'>\The [src] appears to be currently unusable.</span>")
return
var/option = "Fuck"
if(holder == user)
option = input(usr, "Choose action", "Portal Fleshlight", "Fuck") in list("Fuck", "Lick", "Touch")
var/obj/item/organ/genital/target_genital = portalunderwear.loc
var/mob/living/carbon/human/target = target_genital.owner
if(option == "Fuck"&&!P.is_exposed()) //we are trying to fuck with no penis!
var/obj/item/organ/genital/penis/P = holder.getorganslot("penis")
if(option == "Fuck" && !P.is_exposed())
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(!(holder == user)) //if we are targeting someone else.
holder.visible_message("<span class='userlove'>[user] is trying to use [src] on [holder]'s penis.</span>", "<span class='userlove'>[user] is trying to use [src] on your penis.</span>")
if(!do_mob(user, holder, 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(!(holder == user))
holder.visible_message("<span class='userlove'>[user] pumps [src] on [holder]'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.
target.emote("moan")
if(option == "Fuck")// normal fuck
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>")//message your partner, and kinky!
if(prob(30)) //30% chance to make them moan.
/*
WARMUP START - prevents spam/instant climax
*/
inuse = TRUE
if(holder != user)
holder.visible_message("<span class='userlove'>[user] is trying to use [src] on [holder]'s penis.</span>",\
"<span class='userlove'>[user] is trying to use [src] on your penis.</span>")
if(!do_mob(user, holder, 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(holder == user)
user.visible_message("<span class='userlove'>[user] pumps [src] on their penis.</span>",
"<span class='userlove'>You pump the fleshlight on your penis.</span>")
else
holder.visible_message("<span class='userlove'>[user] pumps [src] on [holder]'s penis.</span>",\
"<span class='userlove'>[user] 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))
holder.emote("moan")
if(prob(30)) //30% chance to make your partner moan.
target.emote("moan")
holder.adjustArousalLoss(20)
target.adjustArousalLoss(20)
target.do_jitter_animation() //make your partner shake too!
// Why not have a probability to cum when someone's getting nailed with max arousal?~
if (target.can_orgasm() && prob(5))
// if vagina is not exposed, the climax will not cause a spill
target.mob_climax_outside(target_genital, target_genital.is_exposed())
if (holder.can_orgasm())
target.do_jitter_animation()
if(target.can_orgasm() && prob(5))
target.mob_climax_outside(target_genital, spillage = target_genital.is_exposed())
if(holder.can_orgasm())
var/mob/living/carbon/human/O = holder
var/impreg_chance = target_genital.name == "vagina" && !P.condom && !P.sounding
O.mob_climax_partner(P, target, FALSE, impreg_chance, FALSE, TRUE)
if(option == "Lick")
if("Lick")
user.visible_message("<span class='userlove'>[user] 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(option == "Touch")
if("Touch")
user.visible_message("<span class='userlove'>[user] 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)
return
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/mob/living/carbon/human/H = G.owner
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
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)
/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
//Hyperstation 13 portal underwear