diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm new file mode 100644 index 00000000..4917f823 --- /dev/null +++ b/hyperstation/code/obj/fleshlight.dm @@ -0,0 +1,73 @@ +//Hyperstation 13 fleshlight +//dont forget to credit us! + +/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 = 12 + 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 + ..() \ No newline at end of file diff --git a/hyperstation/icons/obj/fleshlight.dmi b/hyperstation/icons/obj/fleshlight.dmi new file mode 100644 index 00000000..a02bb49a Binary files /dev/null and b/hyperstation/icons/obj/fleshlight.dmi differ diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm index b65088a8..bc7a3439 100644 --- a/modular_citadel/code/game/machinery/vending.dm +++ b/modular_citadel/code/game/machinery/vending.dm @@ -65,6 +65,7 @@ /obj/item/clothing/under/jabroni = 3, /obj/item/electropack/vibrator/small = 2, /obj/item/electropack/vibrator = 2, + /obj/item/fleshlight = 2, ) contraband = list( /obj/item/clothing/under/gear_harness = 3, diff --git a/sound/lewd/slaps.ogg b/sound/lewd/slaps.ogg new file mode 100644 index 00000000..78cf4eca Binary files /dev/null and b/sound/lewd/slaps.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 652cffdd..ecd1b05a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3089,6 +3089,7 @@ #include "hyperstation\code\obj\condom.dm" #include "hyperstation\code\obj\decal.dm" #include "hyperstation\code\obj\economy.dm" +#include "hyperstation\code\obj\fleshlight.dm" #include "hyperstation\code\obj\fluff.dm" #include "hyperstation\code\obj\kinkyclothes.dm" #include "hyperstation\code\obj\leash.dm"