//Hyperstation 13 fleshlight //Humbley request this doesnt get ported to other code bases, we strive to make things unique on our server and we dont have alot of coders //but if you absolutely must. please give us some credit~ <3 //made by quotefox /obj/item/fleshlight name = "fleshlight" desc = "A sex toy disguised as a flashlight, used to stimulate someones penis, complete with colour changing sleeve." icon = 'hyperstation/icons/obj/fleshlight.dmi' icon_state = "fleshlight_base" item_state = "fleshlight" w_class = WEIGHT_CLASS_SMALL var/sleevecolor = "#ffcbd4" //pink price = 8 var/mutable_appearance/sleeve var/inuse = 0 /obj/item/fleshlight/examine(mob/user) . = ..() . += "Alt-Click \the [src.name] to customize it." /obj/item/fleshlight/Initialize() . = ..() sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "vagina") sleeve.color = sleevecolor add_overlay(sleeve) /obj/item/fleshlight/AltClick(mob/user) . = ..() var/style = input(usr, "Choose style", "Customize Fleshlight", "vagina") in list("vagina", "anus") var/new_color = input(user, "Choose color.", "Customize Fleshlight", sleevecolor) as color|null if(new_color) cut_overlays() sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', style) sleevecolor = new_color sleeve.color = new_color add_overlay(sleeve) return TRUE /obj/item/fleshlight/attack(mob/living/carbon/C, mob/living/user) var/obj/item/organ/genital/penis/P = C.getorganslot("penis") if(inuse == 1) //just to stop stacking and causing people to cum instantly return if(P&&P.is_exposed()) inuse = 1 if(!(C == user)) //if we are targeting someone else. C.visible_message("[user] is trying to use [src] on [C]'s penis.", "[user] is trying to use [src] on your penis.") 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 if(!(C == user)) //lewd flavour text C.visible_message("[user] pumps [src] on [C]'s penis.", "[user] pumps [src] up and down on your penis.") else user.visible_message("[user] pumps [src] on their penis.", "You pump the fleshlight on your penis.") 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. return else to_chat(user, "You don't see anywhere to use this on.") 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." icon = 'hyperstation/icons/obj/fleshlight.dmi' icon_state = "unpaired" item_state = "fleshlight" w_class = WEIGHT_CLASS_SMALL var/partnercolor = "#ffcbd4" var/partnerbase = "normal" var/partnerorgan = "portal_vag" price = 20 var/mutable_appearance/sleeve var/mutable_appearance/organ var/inuse = 0 var/paired = 0 var/obj/item/portalunderwear var/useable = FALSE var/option = "" /obj/item/portallight/examine(mob/user) . = ..() if(!portalunderwear) . += "The device is unpaired, to pair, swipe against a pair of portal panties(TM). " else . += "The device is paired, and awaiting input. " /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") if(inuse) //just to stop stacking and causing people to cum instantly return if(!useable) to_chat(user, "It seems the device has failed or your partner is not wearing their device.") if(C == 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/vagina/V if(istype(portalunderwear.loc, /obj/item/organ/genital/vagina)) //Sanity check. Without this it will runtime. V = portalunderwear.loc if(!V) return var/mob/living/carbon/human/M = V.owner if(option == "Fuck"&&!P.is_exposed()) //we are trying to fuck with no penis! to_chat(user, "You don't see anywhere to use this on.") return else //other options dont need checks inuse = 1 if(!(C == user)) //if we are targeting someone else. C.visible_message("[user] is trying to use [src] on [C]'s penis.", "[user] is trying to use [src] on your penis.") 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("[user] pumps [src] on [C]'s penis.", "[user] pumps [src] up and down on your penis.") else if(option == "Fuck") user.visible_message("[user] pumps [src] on their penis.", "You pump the fleshlight on your penis.") if(option == "Lick") user.visible_message("[user] licks into [src].", "You lick into [src].") if(option == "Touch") user.visible_message("[user] touches softly against [src].", "You touch softly on [src].") if(prob(30)) //30% chance to make your partner moan. M.emote("moan") if(option == "Fuck")// normal fuck to_chat(M, "You feel a [P.shape] shaped penis pumping through the portal into your vagina.")//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 (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 O.mob_climax_partner(P, M, FALSE, TRUE, FALSE, TRUE) //climax with their partner remotely, and impreg because people keep asking! if(option == "Lick") to_chat(M, "You feel a tongue lick you through the portal against your vagina.") M.adjustArousalLoss(10) if(option == "Touch") to_chat(M, "You feel someone touching your vagina through the portal.") M.adjustArousalLoss(5) return ..() /obj/item/portallight/proc/updatesleeve() //get their looks and vagina colour! cut_overlays()//remove current overlays var/obj/item/organ/genital/vagina/V if(istype(portalunderwear.loc, /obj/item/organ/genital/vagina)) //Sanity check. Without this it will runtime. V = portalunderwear.loc if(!V) useable = FALSE return var/mob/living/carbon/human/H = V.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) organ = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_vag") organ.color = portalunderwear.loc.color useable = TRUE add_overlay(organ) else useable = FALSE //Hyperstation 13 portal underwear //can be attached to vagina, 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." icon = 'hyperstation/icons/obj/fleshlight.dmi' icon_state = "portalpanties" item_state = "fleshlight" w_class = WEIGHT_CLASS_SMALL var/obj/item/portallight var/attached = FALSE /obj/item/portalpanties/examine(mob/user) . = ..() if(!portallight) . += "The device is unpaired, to pair, swipe the fleshlight against this pair of portal panties(TM). " else . += "The device is paired, and awaiting attachment. " /obj/item/portalpanties/attackby(obj/item/I, mob/living/user) //pairing if(istype(I, /obj/item/portallight)) var/obj/item/portallight/P = I if(!P.portalunderwear) //make sure it aint linked to someone else portallight = P //pair the fleshlight P.portalunderwear = src //pair the panties on the fleshlight. P.icon_state = "paired" //we are paired! playsound(src, 'sound/machines/ping.ogg', 50, FALSE) to_chat(user, "[P] has been linked up successfully.") else to_chat(user, "[P] has already been linked to another pair of underwear.") else ..() //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, "[src] can only be attached once paired with a portal fleshlight.") return var/obj/item/organ/genital/picked_organ var/mob/living/carbon/human/S = user var/mob/living/carbon/human/T = C picked_organ = S.target_genitals(T) //allowing to pick organ for anus down the line if(picked_organ) C.visible_message("[user] is trying to attach [src] to [T]!",\ "[user] is trying to put [src] on you!") if(!do_mob(user, C, 5 SECONDS))//warn them and have a delay of 5 seconds to apply. return if(!(picked_organ.name == "vagina")) //only fits on a vagina to_chat(user, "[src] can only be attached to a vagina.") return if(!picked_organ.equipment) to_chat(user, "You wrap [src] around [T]'s [picked_organ.name].") else to_chat(user, "They already have a [picked_organ.equipment.name] there.") 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 P.updatesleeve() else to_chat(user, "You don't see anywhere to attach this.") /obj/item/portalpanties/proc/remove() //if taken off update it. if(portallight) var/obj/item/portallight/P = portallight P.updatesleeve() /obj/item/storage/box/portallight name = "Portal Fleshlight and Underwear" icon = 'hyperstation/icons/obj/fleshlight.dmi' desc = "A small silver box with Silver Love Co embossed." icon_state = "box" price = 15 // portal fleshlight box /obj/item/storage/box/portallight/PopulateContents() new /obj/item/portallight/(src) new /obj/item/portalpanties/(src) new /obj/item/paper/fluff/portallight(src) /obj/item/paper/fluff/portallight name = "Portal Fleshlight Instructions" info = "Thank you for purchasing the Silver Love Portal Fleshlight!
To use, simply register your new portal fleshlight with the provided underwear to link them together. The ask your lover to wear the underwear.
Have fun lovers,

Wilhelmina Steiner."