From 1d6d72e6136e386c00bc1ad8da3dd22c5bb0e005 Mon Sep 17 00:00:00 2001
From: QuoteFox <49098813+quotefox@users.noreply.github.com>
Date: Thu, 15 Apr 2021 20:57:22 +0100
Subject: [PATCH 01/25] Customizable Fleshlights.
Now you have fleshlights. That can be customized in colour and style!
---
hyperstation/code/obj/fleshlight.dm | 73 ++++++++++++++++++
hyperstation/icons/obj/fleshlight.dmi | Bin 0 -> 2141 bytes
.../code/game/machinery/vending.dm | 1 +
sound/lewd/slaps.ogg | Bin 0 -> 20304 bytes
tgstation.dme | 1 +
5 files changed, 75 insertions(+)
create mode 100644 hyperstation/code/obj/fleshlight.dm
create mode 100644 hyperstation/icons/obj/fleshlight.dmi
create mode 100644 sound/lewd/slaps.ogg
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 0000000000000000000000000000000000000000..a02bb49a0aee93389ebe459bba4a11890decdb54
GIT binary patch
literal 2141
zcma);c~H{p8pnT#TjJKqrNY9ca!WIFucKL9m&t%!C{1%YN6|7dl`@RQEKS6vYtrI^
znYkdL=21%xa>+_9O$}2sOiL5o@`wUQ@N)jUGxy$^`^Wn{^PPF-d7gLX`+nxlL?Jvi
z)OM-?0HERR1^1O_viyXpD$C==43;m078gkIHCWZ{DJYtGS+O^h#wMsdwD!$NTbg|B_UZ)Tq6>3OIcm+lMAN=R
z(-Va~_@S)(DG(W`483a#r%-q1-&ekLhip3qKHujqEZN;Q4>NJR88Vz}FmINY-F#T-
zi!eXscCy3xvU<<57i{<*j1oJ|9poVDFZVES=m=OHjEj?y1t=X-3)q!qx{=1m&ThlxOu_MK!
zP-E=5tQR?$5Z*(a`Lj0*dX#e(>4{VDBUe{d0UOaeVExCHu(h`5G#ELU%lQU8$?=1uo5q9}G{Y(*bnD-{3S?|0;KLQcoYi}Go
z^EATQT1wms>FxPFk{NsBTerMJxUV~#*%$h??y&?fIFPL<mSk%ICQ*0sef@!1c0;;RWms|U-|J*
zw&|s`JwqC!1%fA>VL;xEx!MJdd;Hq;!i^zQ1(8y($btiRJg$q@^Ci^(1nu!L{}&wf#B|89|2aGSfinD&=h(n%#?
zL*L-2p;M{sJG4&EN~Qh(I8TiLPIEM--)ux&g}y{sAGGyNIqyM$Rj=C
zM=bVr&566ft@T@$54H7Z1#c~u%!NUN;8#m@|2!>Zwf<7-`#aN
zrvJ)JV9LH~J<$9>KU$h5#MD)HL4xB{dT0QB5xfRdVBI8(S1zd*A?!#b0|0fF?NI;x
zJ9-0Cibrp^YQ9!gvKOYc$CcHzEdrS}(W(M4zOtJuJu!_`lf|^k;Vg#Zhfwn%V{x*#P}K+2C!Wnj!`&qOHS
z;IfVIEIcpFjxV>F($7*)3BI0P5#^&;=O5}zvWF95q5~it52xXz;jdRttE%D@AbMca
zTwrNoHxyKaD6Lf~bo*S`#O80+>9hu(Rp^+}<`(9*B0JSH`R-$%N_=Z0M9o2=@EVzM
zkP2x%6PZL;Mz;xrj;MWB1^ZQ$Q-M_V)c_5f?b$ArbN8%$;%CfdJU-;0+)7}wp?&Iv
z1kc|bYOf98bb6(kCRWW=b-K;#p{A5t#!^=zS5yahkR)6w!~75-X;DPbBjIC*})dctVl_xbMlCh<5`Xs_{7o3o>ficNL}E`0*J!ok`Z
z8b=Kr{%?`=u4Z??Us;vl0%A*pi(3eU+dm}%s-wy&@+WBZE*C?%APmsRyO&S2QrvH*
z!n&OO?gX^Bu*93#vXhC;WivplOoY*3pxDm*RMMl{#i*f?1kSBtF%#<(dP&=Crc!0|
zCVOL*Zyz&TSvlBj;#ShaE(6W?Ax{q>;dETh6e%>+rD<~YT3Cga)@c!$hV~OSglsZd
zT45Ms%LAF-#N*VrbQq!qI>9)$P@0OX?vWjHzVEb_xFmVGA2J!@qf`%UWRyIt2Mdq@1TGx($T+F
z)a<#5KNGkquCns$V8Vw0IfTd+eiZSXmu>oJ`f`c|)DnHbx43WtE6{V`NbQU|6{Ib9
zBtnehT+y}G8Px~g?^#-wc(GPlxbSots^c8YU16IZvQ-IbfdwH&+Io>-3T;1kJ;x`(IYbCvL$>
zlirL9LDXPX2L8CSr|WUTg#LBL7apyN*i;Mt5d#W`Q*h{TVsl%*%Pmz&FMgj%tqB
zx+hGZEu{}CzRjlR5Z^-qL(-ut&5=&ZKAY*NfkWXyx69LuK#A6WwY(VCW8n(++*(sC
Q|1SXE|3JW5$HK1v3w!7bTL1t6
literal 0
HcmV?d00001
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 0000000000000000000000000000000000000000..78cf4ecaaea950bec2367841819ae7b3cd4abe8f
GIT binary patch
literal 20304
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
literal 0
HcmV?d00001
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"
From 7d928cfecadc68b44e9e17339266c37b0c87edb7 Mon Sep 17 00:00:00 2001
From: QuoteFox <49098813+quotefox@users.noreply.github.com>
Date: Fri, 16 Apr 2021 14:38:54 +0100
Subject: [PATCH 02/25] smoother blast door animation
---
icons/obj/doors/blastdoor.dmi | Bin 3318 -> 7048 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/obj/doors/blastdoor.dmi b/icons/obj/doors/blastdoor.dmi
index c72d29b5901fa50709e027cbb77487cd30e30941..c35554dc49714d9f45be62392acb890a1efe4aaf 100644
GIT binary patch
literal 7048
zcmZ`;c|4Ts`+lb}6d_57F+y}wQr5AJikN7$St=qe6fyQ~GJ^`0WahNlMJckMEThaQ
zSq>RXLYA4BY-3*sW9Ijc&gq=<{d|6ZjCbDWzVGY0?(2Cz&pYoU_5{X4RCtFl005$B
zOS4k|0CC}eHbTLXV#?`o@N)8m^%-+2l`1161KwF~6SKB3?eC=3RFz$Ib(4{i_VMy{
zyLe7aOmwLQN_`0z6&010l~Gn!=J9yGH~j9$M557X-dHHRTlnM&Ss9tFG%_4S`_{VE
z41|ODpTe95OozIzf;WkwXB_;^uJ~Q@y@vI_=IsRl!O5rXu)YCH^QW;h3(P%M`}Q<9
z(M}iIYPM=I2KLgde`^4I@5hzvYn{?+*E*({JV2}=o>4sg8%0saCib4zu98#Lct$mu^bfxnp0PH}a%?_OjPM%1C1SwTW+>#oYD;B&&cctg?
zc!)SznU+7ul`c6op?aBNOT_YRH?N~p6*7u<=XT(aIdDtPU0kE&o(^HNW@dWI>gp&8
zwP_q_77HyKPJUpOi^3rq+h43@&xs=*_9r&a`3edTtG;=r1x4eXFCe(#IL^%A
z%*<4D=aas2jBC7+67Gna;*Ea3opLRHS6A&;X5M&kpJ
zEhY)^Cw=?_Vf@&VCqSnsDBSCOga*=5c%HNSHn+5POZ6r>hvPuX9`URaC}*%|KCMG<
zmE`DVkM-uJ=~DFy82ud7ghaJ*l;QNKiW;1OI?zy5aBUpm&47Q8M!^~V`&THq%$eC_
zQO2A|TQ?*;r*Va}$SDrLdpEO0ye*$kg>-{8m6V%^-vE*Str$C3w
z+DQnINzd#|^T5?E4%U6Q-LpFtv^+3mYtK$6BWfC2MYOQ>6Ljw|K0?JlAV^Oo!3j*a
zLP)^bRzy|`Q+FBgdZ+}HrIHZ
z+fAz#86k9ZJ74U<#TsINKMo7Low+F2@nyH3f=9tIu2tVyoAdV$cJJMh7q3k*nx6EW
zmv`U{RZ~{w?pUpl?cKnQxlh23?lUfGGH>axUJ5!^e?^|z>Yb1+GVwx9&i+e8Nu$T9
zLvDGqJ>F+dL-QHrgs7!Fl}UXY>Cn3V2S;mOLA^6=d`=zGs}5g{yMCQ2<=L0CYbi*V
z{Plvt=4qx{oadfG$@|~di(O^_lHe#EPiS|Wo{brqj(H__mgpF*Qugj;K=|<}xlLKT
zfjGg+M-~%$V|j9-9`XBPBfhp@qeot=x&?QLw;MvkzCGQ*$I46x@{CIzqV~4%8`w2Y
z4Kr&)FXKM%Z81vEi)%GyyK9j{QcaSYni7bN_y>>7me)d8yx`!WLF;1+;YzNjLV
zid?l|FXEAcYqrWl!zYURcczyVTr2$xMsl1_AlU2v1sYsfx836*%%HNh@Uyf?Ve#wq
zB$ss(hFygMHR`Xv^NMf$)GhRfR8?r?8o#mf8?ZE@LwO`TWv#I8FXdi;g|5M9Xx|S~
zM(Pcts=-%@l~?|C??7Uad_-I3z$;VP0pJT3);Dp>(XAdSbuY-=l`UKWH_h}dIPfablNc8jn4t`6k4kzZO
zCR`*ct9E%)P97I6k4*B*W}7v2HUK@B3Vy$kD9jZ2xR`hSy7hHs-uOj7EnJmsrM;Y!
z2g119zE3Rq^65ivX$$M?F>MdMEy8M5jPm7&qq#0bou0;O%QeVhXU7B+UOQ*Z0mBs2
z_B~{am@v=DHkLs#+ukd9UU)HC`mNT-qAS)pukPanh#x{?JmG6zd`zVp@+6^z
zBp-HlSUE?fPO!e}Wf7#f;M((o*D=oRzvDfO+%l^L>%Fw?Y@ZD#5#&Ty3Vy(&JU!B#
zdOTuiwp~C1suNV7m_~QNf%;pL?)cLbdv>^YE?$WD1C=mod?gZeMGd%14<)!P=TgUF
z*Ftwc%P0T&fJHX>S9_kTPayf5i}NBD5n)!76?g9^MYSb*2$iFKXCaF=0spN@QbGESll_Rj7z1kS>wK$%u^4ux
zYQw}A=sT5)(wQ|W{9(ep-?m3VuNJo7m=KK{-t!zd!XmEc@ojzIs&8>p_VRh?MD2wm
zxcujdjQaHneh$$EWsT&`BJcjmZm3Ve)*=1NTVLfwl-Gt=-)}jtg1f7w^+(?
zo!2G|HdJx<`rpL^d^`Nr!4;3usrC!{l_*o!A?VqR!b*2hMITMK^~CR-(NY1uVFZPcC#we4^Y)tv*D|Rnp(3S5tY)RZ$4-z@BJupr>_yUU;2-4S7nXRNv-
zN+;^c=R4c1O|4`NTauh3ozpWyMhi}0J;e+3rDu{Lsdbc)h)2}N2ek26n?i`v;HDK<
zPhDz#$iYCyQSOAgzUFp#5*{xdQs>IrwsJivHmG@%&p0)X(_@cyiIYo2>33-lQM)+O
z)ph5Hn*tBZ8xq)W-o6nSYR(9GjSuQ5y~$RKjDOn&DD%el_>^MU%|TUF;UW9Y+jDvsB6lV@cGRTW8^|430SHibxm~}J`FsAz5luVJ#ph6I~t?qMA54?
zM~{3;t88^y-i4)!eMVU4<5nwB`XGx6POYX0`u;!T2~q60_yfkJeVgc@rKaBDn|e!*%n6ay>D-JOE@Pv~SK@TamO8Qdp(j*hLv6ff
zMKNMA*$z7*US&n}1D&33Bqi6T8=)G|s%&*NWZa>Ua3aZCGlAK)NduhzF3w7JeL5&!
zneAY8u$r%5G0phkVMAmb(u<419IURvJTRFz1MgRT{=QFPfL%uqiL2Uw7Jjf+y}Q9u
zwd=15k5gL*4OKr^U4)V`hVGIazoieZlBzG9?1icPPg`*AziBO(6)-@>O>{Sj
zH%F&BTzq_H5?P2R9240wo2jHBG5sO74M-@eRs3L;Dm(9KI>
zHPJ&Tf1e&Wr!r#hM;D~V?Y&=pFm!puSjNdXChz!sM@&Qzs|!+}{ob!4VDoIz@_veu
zWa413p9{mpC@`IZ)YL;24^boY@e?e=2PvtFCFKtD}9xf;D
z&Mg~HZAGB3AWVqo<#NI#FdcydkQVcKDm))kTZ^!sXX1M5a3zPIL@hVDNcCL-@P~N9V+$$^R>k^AT`c
zV)a*34^HC&G>w^y5bO`l0ezoqIWCC7hbUN%&2|b}hhkN$-TkhfcR#jj1WlX2H8DF?}
z2gukr*z%$0ysEeq!(&?m_y(~f`u=a0`!{acaqrIdeys|}03D@9Ap<59em3`^7^QIk
zAGPpv>^F^xgAOKb5(ufwVrB*cm$|J?j)rywfEe!&LA@RzBV-
zObxkSnB5E#fUi5r%)^&jTRy0g?tS=nYrX!QIatr9xp1&zH>dI+IT>M#Eg$CinUs6~
zFp=FFr?=5Aqlrg;HgnWKU@zJW?Mn$Fiu9En5n)+t2>+C!%+qY!>C)YhV2Jeh>3`
zo276tVzQ{iOP;c+1J8`k5NgFiYwLv!X2q4^=duqkjkkO-AVmwm2@sx1Xf|Z{fdC@f
znrdzrI@xX+6%U4nLoMd$P<@h|io3IMjVuhi<4!QazU!g}Bin#Q0L{tz2)R1NGbb}Q
zxQk<}v-wvc&4COQ8tWdw}Oz?
zkH7B^qeJfpm);EK?Qer|=D+UEQfGIU^%qZkT*W7V?v-8L=~PXtT6lZ|kM;#OgVBx{
zK2+{b5X#MYqWS-a;$8xwKpRT_hFU@>J5?_M%Bg%PE8^-J$uaaNE0|hhaa01#ooO{h
zniHBZ7|?HU3lXrKU~YpPG(=Xf)h%N%TU_`BQjn{BC@il?L}uoXfa~IuU^7b8aS#QZ
zjX;R9!fKRT5^q+ysHDGPbv(N$^o#B-z_X|C7Hiz{gGsW0GqZn7MP1*6Uu#ndE+@W}L4G@^kuF21MET
zKc@H5cj)`8FL~vAu(yMnnrAE1?oQq`4H!yd?Wlsu;GUQ8i{6XB>aDEE|9+lOt!B_T
zHR;{AO8E2r|E4tK{*6msf^(|8L65$JC5R`;(bnz)k7``T@7x*L@e-HxU?CL&mNqSo+QjO&(E?rPxZkK>4aQ
zd{DalUca6b4B}@^F;yllT-7WPp<=ve<4kQxGkB2F8_)kCQ;Ohf&6Hi=;0f^gyMdcv
zyX31dHLl%pf@r$$)DYPn=AGpB2JH(@31h@sLzD8l3BR1+kQa1-hqUlb0ACB3-W^>Q
za?~yylVQwCWV!95G9*(jROcW1Iw0xvgPsRbFljTFJORbw(w*00o^l=pXMan`5508;
zKp;knE$U^re7^}dR&pFRA8d>PSBf};aU>weToBV~e(oT>9Ha&aA;u1J
zVL!*GGkqvJ{pG&`WQYmW5tsE*YJ5e{ILIx%1QH4$rdZCcjT
z6YM?p2B8IKZdYLUt2P*Z1DEih)2iz2&YU>u)Eeo?r$M~7l*=V
zeGLs8k}F8*VCLnu`TP=*<)h&1%jkPTtW6zd>wc4N#;zL-6h
z1s6^>kH{~1k_znX?+oaFE2&spY2a9G+ecd6H(d)OAEZLI4BT`=Rzvv#dB#_YY^9;G
z)Ajwvz`=K!>Jx9Fil531aAur~P;1#5Dd;;RB?FYwW0h=-Z#|v-?qx#3wGqp@syaHk
z)dfBx$_VOlPe0P|RZ*_X4Vq$H;=!lw-sA-w=D5#E0AIGK)v;D#8-rDWcPr{1JY@C>z>4vgL$re+ubo
z(8!Jv^%j#h3LnsEC8kRh?HS4E0uM5fXfc?Btw~7q2Dg*x?FHAs?b&kJxqUO0kszkG
z!}bU1kZvJO&_Iq6#8=TSC(6Hk%=5KfzWh*hydzS_+ebD
zg%|yGsSO*Dpfs4F!RkfYy4vq`k8FROML!UIc-*&5%1Euj$$MYo6Xx&g!5AVbpMgYA
z-jVvt0{eUh1XS}Rp8*Bcgf|MOz9pRoQw+g#>(mlb1F@dV%WXnmeGj1
zHHviL?X@v3e)$7ec>P-ZhS7ZGY;{UwairmsE3hDqM&U`v#}M#iVK)4CP=qDN?pWi^
z-sYZadBMERJ=gPs`C>8S^NQ=x3+5GB5Fy0OUjy7r93OZ7(R`)b-Cv{8uEOuE9rhQ*
zfAOVyEB30FuP2;Jx=mBp-kr+LUFCH&@_P!JI;MX(kP
zNF{Y)Q+c2wBrFD8NKzCLSrR~`2(lZNl)QmwU)%X{=gc|ZJ>Pfc&bc#l!F?YcjnYE_
z0DyLK+_fJ7AfO3IkWg@Z&v6U{Py5{W9@x#}@j!Dgof;7qdE%&7-&x*
zD}x;wdPV^rqj647PL5g_U0ocnlz_pYWg;jVjn>!KpMQs9xa;C@n!?8f91i#Rc8?vH
z4idG0p9er4?g|1guEibjjN0}6nPZVBnNcUh!vG+r(Blv@GFmq4!JL{K+TvoerTwMQ
zqw=7+*g`U}Rk+uv4T#LTR7IgO5Wx+*0hVtb`NA
z7e=o}8X4CvK4L+U06ENco7c-X6#$@G>9mV>Af|BK_hRIGvYOU)OGd}TDgDq6g+kns
zn&*TCj7{1rJ!VSZ>V_)6P)3SG-k$2+xh3a`nVXwX=;r4CL(YpPUsbcR
zv&S?-c+w~76=#gbx#>@|`^FtrW@)O*#?*T`;~iZgbq^KOH)jsV$i`j1^na2~NS9=9
z2aZ7LD{(X)*RJkO9)q~W#wHT<<`)+?u0^aw+|XL5cmtKnT3V@pn2Rz9JV`J-W3DP?
zKiU)jg;nrzx?yrJXN2qp2~0dKnUpOsRMTyFwa`O{!GVWkxj{A}JoiG(5j{y*p9u(O
zY)5S$G%Rt0R$~tK#k-`q>0=9=jI%khfAoJjs_3+LKF1epkU9kj=N$o4O!8;9K~9aV
zx8~h)P4CkClgTz&$quR$?JuT_XP1tVKQGA{s&qQbleo?i7iCk|K$LZGn!=EpLgCJ|
zE<&G7Ap65DSlYWCcT9KvIca~8+j=iDMX7nQiT9uBLonk5CWa3GK(M5Ix3z)5%3>
ztD$=WHsmqn6gArCNtYFPLE~46gD%p*G%kr7L%rl3$I~2wsY{si0<0bkZ5!Z$O-sg<
z&_p8Ww{V)b`h2fCdMx=OxIE|An|pEeJk2ec-s)YInwGOHS7Q+H4|D!1yC;1``Ur&R
za`}a>UTv8&p8H)njIU=k%NpD+I7e!g4iAisDrHlvKXSvIx06R9)r(~#gK9V4e*eeO
zVrIO})fK36G7@Bw&6_JHfw6e^w2>_f-)1fxXSzi-JPQ{Wk+*fLIa
zx^{LpHMH*6U};cy!0YR|bI#XunQLO}%-avp_^%%Ff3w;1soKs+x~V(hXyI)(yU9NN
z!WVoQXYGh~m_g2Abe5J0z7I>Y1_+Q^sK{hn6sky{<(6{h-9w{H1T6|CB6StR6VW&I
zS@j4hhN|OmNbarUV3tMLu32sb>wwc23NRT1@%R0lW;Mea{c$Jm6iEyfze8+Kl6njBK-7)U0O3ysaY&j3nY86Ujf4=vF}>rJ@<}XpNiSfT6+`xheZMYlBZ$Cp^IUTF@$ADicb=<_q_ur&EAsigFTR>W#Ae7{=OR?B
zeiT5Bla*8IcqZ-2=AAm(qDC<)E#jtcb+lP;ypH-Ft&MzoYdIMlAo$
z_956i8wW2GpIaB4n)NyFrQ7IF*(LfUU4NWjOzZQ3N(YUHv^}v|!zcb^2*etfvo@dC
zHcd@F;yM1^H6pn7eWOxsQ(ZSTlLS}qckCa4=M#O95iROMFBi~*F_J8iH|3Kd*biWf
z8QRxj8yBk1VW0O`4a8g8yG&BDr(K?{*{Mojus)QKGn})u90J+~D`HCIgeM>LUJ2J#
z{0rnZyjjIhz({I~2@IARCJQnrE-pm$GX#v~yCcB1))tJ2ndiU#2F{BNl6aSk<#khc
z23Hn$QJJ>qtn={ZIj4WkZj*21eYnN%BM3R
zoDdW^wl5|aw^lP{Z%N&d&lR-r#J7nam?HxeX7*n?p*=vAhLpF}8lA?sR31;VMu+vpQUI+0|XBhRmbQKnR5Ciqs`(s
z@Hy7qT*2TmUqa2Ra8WGLeX_nmLMdepY7k^IkUp8t)f?(v_YFQICiB;3l+?>~YF`Y3
z-kt>IBDs}4+Ss0%#0a6Xd|_WvHVCW3+De<1|Q8Lu=z$=ua5YG
zh?dNIHHHcw2}#`yv3M7Widt2LAh
zpy>-AQRbQnQ`hU+zf5|dBAr<0OXOl`7pWkYmGzgW$^QH%V=Fu?^u7>E!xA9*fxEE}
z+w6pnlPzZ#QQ0A>YOCT_!e9@=JTuoC(|#G7;W@8jTb!|d+MMN}{}F>QMNd9G6=00?UD|6K*bHKA3^r{<%PC
zMt!>X$s0C*yp;E{sPX~$${p$+D0e61n%@LJxq8eFmA~0M6&a#kLm^h0`z)Rse|hLN
zvE|dNBlt3E3v)rPWVR~>bI!0A+?0K2NstbVr!Qm>!wO`zXz>DB^rV!R`Ma^rpoO(e
zLYIF5z~+67bx6iMF-tq8;#Vi-w209fGPzPUOqel)%J%1SKdR67&!{HY7Sv8XKi#$^
zrk?-kdk?Lr2Rnm2qD&d=6V0*kilj{yTX#ckr&W(XTfCJLMc>bNwdUzJP>=b
zdTODj9DkC<4_<71Z|*^62WGO>?6U6C$JBrW9GtH+KQ#PG^or-Arj35PF}V&KM^Y6
zcQ}h)Lv2>1eOm_m>Kr?!5_zETFw;YQRfx6e86PAYA2tfHTY$IT;5;@GNF+!exN~^1
q)pMz@21=)6d`P3CwV_EV3Sd3a)CZ0K$Oiu~0H@vic9lB>u>T7^z8zcu
From 919cbae1ab7dd681030e39e41cc0e4b112eae27d Mon Sep 17 00:00:00 2001
From: QuoteFox <49098813+quotefox@users.noreply.github.com>
Date: Fri, 16 Apr 2021 14:41:25 +0100
Subject: [PATCH 03/25] fix (animation error)
---
icons/obj/doors/blastdoor.dmi | Bin 7048 -> 6811 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/icons/obj/doors/blastdoor.dmi b/icons/obj/doors/blastdoor.dmi
index c35554dc49714d9f45be62392acb890a1efe4aaf..30847afa873e3748d2e617e5af358633d17d439a 100644
GIT binary patch
literal 6811
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
literal 7048
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
Date: Fri, 16 Apr 2021 20:40:01 +0100
Subject: [PATCH 04/25] Portal Fleshlights
---
.../code/modules/arousal/arousalhud.dm | 5 +-
hyperstation/code/obj/fleshlight.dm | 203 +++++++++++++++++-
hyperstation/icons/obj/fleshlight.dmi | Bin 2141 -> 3576 bytes
.../code/game/machinery/vending.dm | 1 +
.../code/modules/arousal/arousal.dm | 9 +-
.../code/modules/arousal/organs/genitals.dm | 4 +-
6 files changed, 215 insertions(+), 7 deletions(-)
diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm
index d5c609ea..faafdb4c 100644
--- a/hyperstation/code/modules/arousal/arousalhud.dm
+++ b/hyperstation/code/modules/arousal/arousalhud.dm
@@ -54,7 +54,7 @@
dat += "Remove sounding rod (penis)
"
for(var/obj/item/organ/genital/G in U.internal_organs)
if(G.equipment) //they have equipment
- dat += "Remove [G.equipment.name] ([G.name]).
"
+ dat += "Remove [G.equipment.name] ([G.name])
"
dat += {"
"}//Newline for the objects
//bottom options
@@ -201,6 +201,9 @@
var/obj/item/organ/genital/vagina/O = usr.getorganslot("vagina")
var/obj/item/I = O.equipment
usr.put_in_hands(I)
+ if(istype(I, /obj/item/portalpanties))
+ var/obj/item/portalpanties/P = I
+ P.remove()
O.equipment = null
if(href_list["removeequipmentbelly"])
diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm
index 4917f823..c70c8981 100644
--- a/hyperstation/code/obj/fleshlight.dm
+++ b/hyperstation/code/obj/fleshlight.dm
@@ -70,4 +70,205 @@
to_chat(user, "You don't see anywhere to use this on.")
inuse = 0
- ..()
\ No newline at end of file
+ ..()
+
+
+//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
+
+/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.")
+
+ var/obj/item/organ/genital/vagina/V = portalunderwear.loc
+ if(!V)
+ return
+ var/mob/living/carbon/human/M = V.owner
+ 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")
+ if(prob(30)) //30% chance to make your partner moan.
+ M.emote("moan")
+
+ to_chat(M, "You feel a [P.shape] shaped penis pumping through the portal into your vagina.")//message your partner and kinky!
+ M.adjustArousalLoss(20)
+ M.do_jitter_animation() //make your partner shake too!
+
+ C.do_jitter_animation()
+
+ C.adjustArousalLoss(20) //make the target more aroused.
+
+ if (C.getArousalLoss() >= 100 && ishuman(C) && C.has_dna())
+ var/mob/living/carbon/human/O = user
+ O.mob_climax_partner(P, M, TRUE, FALSE, FALSE, TRUE) //climax with your partner remotely!
+ return
+
+ else
+ to_chat(user, "You don't see anywhere to use this on.")
+
+ inuse = 0
+ ..()
+
+/obj/item/portallight/proc/updatesleeve()
+ //get their looks and vagina colour!
+ cut_overlays()//remove current overlays
+
+ var/obj/item/organ/genital/vagina/V = portalunderwear.loc
+ var/mob/living/carbon/human/H = V.owner
+
+ if(H) //if the portal panties are on someone.
+
+ if(H.dna.species.name == "Lizardperson") // lizard nerd
+ sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_lizard")
+ else
+ sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_normal")
+
+ 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"
+ 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"
+
+// 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."
\ No newline at end of file
diff --git a/hyperstation/icons/obj/fleshlight.dmi b/hyperstation/icons/obj/fleshlight.dmi
index a02bb49a0aee93389ebe459bba4a11890decdb54..0115dfc03095d2da6907d3a8077d24a4de7d67b4 100644
GIT binary patch
literal 3576
zcmbuCS5OmNw}t~jN&pjzC^ZO(6d{yQq=TVJ2POC+(v%_rlujT4BhnENsR8K-d{P9Z
zSMwoV2)!2tA|N0&gyzYAaps(JbLOAa&7)KmY)M)zAQ8
zNsW0_g)`Dq*LY_qUTT;?-?Q;UJn?n*aewCL?(GEt1ZAft4S~MMutW`QSw(C~6ySq4
zbwz6kMc4O#G8(y;52KGP}tbAOpvXTge;efi;H
z1{~t>=Y<5BkGpD
zY-#2?GE8~4f8r0&Iv9;pp75ouB`IcH(7&y@*yZ1OJf=W^w0Yp7t0rl$q=fT|V;(j!
zW^24SYJc0_R!)~B$4w~HLJhRo!{WWo9kurD?(ZqkclRrN%Yz%sPBby!#m7}TF${4dNVs6g{+}zL<%_Pk
z-<_x3&%K?U_4wsYl04gp2=Z^wCVJf!L^>h}?^+&^?yc_+c?Q1cLgQWFl
z(P&jJ685+z7;P&k%+6hwr~>}I19>*2vs5_R(K2xKLr3H$`^GpDz62yI#JoqN&3}A&
z(ZAK{Py|hPO0Pahwg!mbnUee!9YKix`XiEe>BVUl!bO>D*9Pu1cl@2%>hN>jpVZH=
zl0;`>xJ4<`Cj>MSzIUxG7j`0NssMx8*axtG=cKbh=O+rN(G9gk#;f?uzp*el%%lK{
zOnMHy7aH7~G?LoS2}q47=M6tV#~(CIXez{l(v{m&wL{HcIh4zTCXck!aR&_iqjqWF
z9oRVefEJn3@rp6PaV|n{gZyZsw0(n!JG|oB`D^gWyu-`MI7uY?dSy~-^PB+U$L?9h
z2vf*;@BP$gjq1nCS>3xN^{|Ms4C|jB?(IaldNU64$buZF7(5C*`?Z~Q7
zY1?laBE>~jO)OT9W>?zVFuYhYTK^>2eWeze(fp>6lcr*rG=8yA5%RI_8!&VV2wwo7
z9l3T4DHVTpp8g@z%-_6#1_G+RmV=NDRhoyL5AH8UVa^|YC?EO-GSao*op(+ay)8!z
zh@JNo;hUJcbzbdDP0)tYdL;>;oK-wjd(O?~w!|kxeza7TQ`QZ|B$0!<$JTA?9mEcm
zEW=duq)r}Gz&twK)VzFeyjkz+Zkkb{yflf`AO_8?`Gg<>h*9)HL7|5m*^F-GZLg1v
znz@R%^}+Z6uX;*^C|kZ&hdOh(Qaz34OcL*lUjYt+@kjRYX1G2R`(03t7Z^}t`uCd(
z4yLGSxoBw%DT6`kosXOCYY(|8GebS(HSeEi32W2nQF41utPYe+Gg?xnm*>E}Daj+l
zlQ^3l_zmJ+kL*dqw?fqFJ_+45ar@kscC-_=3XZMHC*fRc-AMtqXsK;KaP{x}0Y-Qo
zeZ7xs@TSL!gfv$|@gxD@(RL|$!`8D6g(*IA#aCr8S4PaBmu8zU?j4;3vl`6J;Aw(3
zQ)rkfhp}2X$;bbpvbH^1QtKm9+Eg@^?Qi2NJ
zS*~^a(;1{lN7x7cl?*jy9U;BX9SV(KAh<67`Mh|17H+*7WraJSta~Ux@9;3O_JeIe
zly!sLM64`5Ttw5MY~{T$X7lhc3&wkA52#4(zV%-jk^-jZUKDGuF7DKhTd+#$Bihr;
zX-}{!BTAPEd%z>F`M8_@jAqkkJb=}+XJ}a!&3VM+BpzCAUUUM>f$l_x9VTeB_$|aO
z!ua}b>&eoZ5|uBKgjF@OAC0gDSxZ3WZG3tj#68}$pa0FFC3jg)XR+rjsO9i*jo}s-
zwWYXS`mwikC&F(e=WeI0MD!#gpPqE)Zy#zP<