From 015a64928a5d229b068d50c5d697001ca839e366 Mon Sep 17 00:00:00 2001 From: c0ffee Date: Mon, 24 Jan 2022 18:17:49 -0800 Subject: [PATCH] added simple for dildo --- 1.3/Assemblies/Rimworld-Animations.dll | Bin 55808 -> 58368 bytes .../Animations/Clips/BaseAnimationClip.cs | 1 + .../Animations/Clips/PawnAnimationClip.cs | 1 - .../Animations/Clips/ThingAnimationClip.cs | 60 +++++- 1.3/Source/Animations/Keyframes/Keyframe.cs | 4 +- .../Animations/Keyframes/PawnKeyframe.cs | 2 - .../Animations/Keyframes/ThingKeyframe.cs | 7 + .../Comps/CompProperties_BodyAnimator.cs | 5 +- .../Comps/CompProperties_ThingAnimator.cs | 8 +- 1.3/Source/Comps/CompThingAnimator.cs | 183 +++++++++++++++++- .../RimworldPatches/HarmonyPatch_Thing.cs | 31 +++ LoadFolders.xml | 2 + .../Assemblies/Patch_SexToysMasturbation.dll | Bin 0 -> 7168 bytes .../Defs/AnimationDefs/Animations_Dildo.xml | 137 +++++++++++++ .../Patch_SexToysMasturbation.csproj | 87 +++++++++ .../Properties/AssemblyInfo.cs | 36 ++++ .../Source/Defs/SexToyAnimationDef.cs | 16 ++ .../Source/Harmony/Harmony_PatchAll.cs | 23 +++ ...HarmonyPatch_JobDriver_SexBaseInitiator.cs | 66 +++++++ .../Source/Utilities/AnimSexToyUtility.cs | 47 +++++ Rimworld-Animations.csproj | 1 + Rimworld-Animations.sln | 6 + 22 files changed, 712 insertions(+), 11 deletions(-) create mode 100644 1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs create mode 100644 Patch_SexToysMasturbation/1.3/Assemblies/Patch_SexToysMasturbation.dll create mode 100644 Patch_SexToysMasturbation/1.3/Defs/AnimationDefs/Animations_Dildo.xml create mode 100644 Patch_SexToysMasturbation/Patch_SexToysMasturbation.csproj create mode 100644 Patch_SexToysMasturbation/Properties/AssemblyInfo.cs create mode 100644 Patch_SexToysMasturbation/Source/Defs/SexToyAnimationDef.cs create mode 100644 Patch_SexToysMasturbation/Source/Harmony/Harmony_PatchAll.cs create mode 100644 Patch_SexToysMasturbation/Source/Patches/HarmonyPatch_JobDriver_SexBaseInitiator.cs create mode 100644 Patch_SexToysMasturbation/Source/Utilities/AnimSexToyUtility.cs diff --git a/1.3/Assemblies/Rimworld-Animations.dll b/1.3/Assemblies/Rimworld-Animations.dll index 835583c6822855a1a856bce563f75bcf7a66e621..8125458e9ebc1071a288743cf8513fd306fbd4e5 100644 GIT binary patch literal 58368 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�?77#Z0Hg$gp2)dZZQ0=V2CKtiK>}ecGnxc zES#DxUMmcSR~)~H3j4m6fCqvAzT!wor||WNyETPBX(k0e?j7(J=%fWY`2{yH@oOf2 z+48q3HA}DB#LHk(lST7Ilf39D2RZQo-smuS2?)W5co|%)D34O~Dyk2V-j<@|&+y&b z%UVNX*B}MKA-A{nDAr*YOOme)5fM@+LjkgimrD?+l&B~mN?vwM6DxMp80rJCH1$x~ z0eI*}r?jMuDou$uS#k(>TkGc5NHA5XLqj0C1k@-_-1%Y{f4_)uFseWR11cBbl~;)K zMU7HK{kD`K_1wI9K0?hhD_5n)r1gj-VtLxBWSRdq#SnLT+Zf=F&c7a1zLgaP=DGfb4f z&AE=o5`A)23!MiUy%(4G9h6~w-gV5d<=f0kOVynA`D~nV;W!z z^)g(PJQhGX<@$gP4)jw$QjQbx`@GzO2C^KV{|e?OALc=}DB4G4$^zd77lK$Rx;W)e zYv1)i(ak_G=_0nH$szRy_^qLtND12oXl4b-;8t{itqF91<2)SG?hC+I-jR#7z9yLkr_3>6)rtcd6U$wZ-;vqDwFy^RA6j-&a`Jc zpFQq&6MtlF0Lgu{BaoaFv`Myv3v%&I60!!==U4F&O>3WkG}|qzpyOF(O$votMo`ix zY63vOPPQ=j8QL$vLaM0w0#Mwda?#-M$)JR3$uL)hibFb!usC_>b@+60ZlN-qR8!cc)3ASZ{L9B2ZRYLqAlHoU7tf!j}p=lqU}vaSOqk2$p{#3 z*+8iv%Gy*i0_RCaiaf_sNsUoq(U~&s-x1yW>_^}>4Ba&CTd+B{aP)0#R;fDi&qc-C z?<1Ek4olQ8>0$tw$?pn4@Hk%Hf>en^`V;vwonkABsdNr{TsCa9S2X~{Mvi- zJI@>&n*9A$*ogg6 zaC|jO79)8vO_~G_>0-&vvmxYw#Q{w-%{83f%N8=)5E|NteHI}!B845WwU6H@G2Zrv z82%CSS%ES56I{@zWgh9>GFVSZw()5{81YA0;5TrN&}laQX4XJWo6t+?gnxVg9J@dO>*AR9AX zMrc448(|}uw(6H&M&Up%?2AX zu~ksPCCvN$Cgy!szx_h>;^ms(k@_~bGG@yrGZ13=38C6noB+Gs4s6s z$ErDBoPJ}cRkto~K*~W!?cWGSZ?O&5N^St@sG|;V1ZfpD>t>)~E@yY&jkQoAzSE9+ ziUMm@Wlqv~l+BV#SNx1enK^d2A+BMb)=gLd)Dd!W*<&& zvi!f%flNifDuLD}BRI8Ig=O`|CL>Ym?5FAzylmFBv_|R$N6D5AEx7m9EA}?IUM_`# z^$8a3XX6mMwn-=WjH4dm`jMV#qT>;kb#x8pKeE66-W{W`xu|-az`HF#XTzyGLE>|% z<)PMPS)Pj1QJ@;Dv0%39s)c%Yf~;U?Nvru!6-%yxU7pl&?7zRRCU-)--@9H-si!s@ zz6(wt!2%_PJ!LKFor&6<+^jC!#M$;>vW3^3pzEhju{PY@ zVAZR=6?@5fBfd|-Ul>D$`sCLqV%(@oP zpYKWIh##kaWiuHqZiP|L0p!Z?af}=b$%GCpy+?gG*2dS@@!UIcYu5%Nf|xi4n(!Y} z2i`FmP2(6}28ZL6wa%CLc?#>=(bO)Lw}-ciaYmUG2>J7j*Cz0C+6}e@0p{mWZ*mqp z)}T&mgSZIiYeaZYfHr=4zCHQcg<~bi5m=7nU&PorYinOmN*y@Af;i5AW5k^Clp#vy zc6r!a7s`fX-<++$G56n4xbVaU#OJQyUV-xe{m%WqS<(>U>8s{`_nv$1 zx#ygF?z!jQ?|#Gjo$ppIrIZ_guf3+!gLv}a5=kdd#!y{4?F*&qfxtJWKWMD`#`JA{ ziFD&&%G#5P^*8p!1_rE5V|TnUH8jwe7-(F+acg70)f;awDGAQ7NpD)A)H=hZdYT%p zaeDi)YHBPp<|_3qK)f3Iofq+JWZqy>E_qY)O@NIC#!(MA|GCtzD~QVf=bm-QP>)j)o2=ZZls~WDkMioga(gCzD1-8|$C02;WVQK5N&Yn| zwW~dqPW7Oqd4p^msHdemn=FCU?WuUu0wQ@;;8}F=y)24kmMFEX5Q6cBT>MAgOyyA@ zJFL`0L$;Qs=FKH_bKUBjXaWvG${gVcjZ9N27>pFT%#lXqtm#aekQA$yjPhGG$d*(W z1%|?C7Iuf+<_P7qngI`cLY~T#M%Wwjwl=Ad+k)K$?fRLz-W~E-vyh#oT7nAsw;+$s zJvOq}iULq=%|>eD`K>Ax!oHBNZA|^JQTc}=?AagkSDti*1ED}G2>Go_A*7!5g@Y|B z6r7`sa_VThy7C?cL6mATqjQLZM1|+N)HVX~&y0-vAOIc#{Qy5K74ea7L6cDo6S5xI z?Pv+JPzUHSNw=at+D4>O)6{13=6fJmWE2%6tjDxrh-?{bOa?gXKPug435DZ!Q3fm znFx6V$2ybasZ__y@F|5RQ64I9ZO|s+dn0xb3WbPIJ8P-W{hJuv7vKw7ky(6OG zid4nL!1Kae(8rwl*vqfI1~=m_a5Hn%QdH7ul;f`vf8bj?J3I-$0Dnv2bl!tMae^p^ z;eU_f$$#dws?q7-$xNSvUPft-W_mHRF6HNnb}r7 z>*#J|PI~*$S$YK!XO6KZ3MN{P0+^4J$l2dk9~HocE*`d2f0x z@=+IXiv3YY)dDyq@TS)RZmmaB5{P;L=bGQTSRL&G0j~G0GgDw;(3W>2sd#~wIv>F3 zW)`;~QGuwBjRPGwW2Cb^Kvj7?FmTa*&~u+*_d!?On7UZ{plT;1kA|9lONYPJ?~nS? z8Eu`uc)Cr9zO^XzLGmRm`JE=7%5VVTNdT4+p6gNX0f&$@q)I)l;ZlzUNrF)rZ}6lM zIcc;Q)kVJ6GG)5lo>F&oJB4f6Tk4_dv;@7aMP5c@UX6($p}YW7wVbQG45Yjz6)xAv z4zwO+a&#vW@5p(O&$a?X`g9Jywf612XF3rkpMiL!K)5@aqU(>fSYh z?C0fVKLYy+&fHMy-FZQUtDuml74uXzI4T!Cm})kx8Ur7~O19a=Vixo+ssu=xsh?t; ztzB9()0C?+8bcnV0=CMOJM{-tZ;q67{1V0s?2ut&(*|2t6TchyZErya(<9i{fDGnC zu&oLim|?K37#U1S(xjzvUX$=tP$JA!i>Kgl`D!_%QiBP*kFa-V3%$X%QoQT znodqIhouEWA-33Ow`kWbuE@6Fw2>AGy9MVCTik57cm={j+RtQLaDFs6+6i-p5dCX5 z`ZqNC53=ZtF&1Q%Qvu#YIRRv-9Lx=gCP?EqHjS$_4a0O4%$Q+{t%ooJf?{BYPz|lM zTmtT9W>LBP*Et#pb8#o`0vmTea93n;xs(eoWe;$dr6i@hw zkV@?bMszRQD6`E~+2WNopry4$KV=?acrmdt zIivTwn1$TCA#!qK=i{Bjbq>B!X}D{Y6)@ITAVsU`E}}`Ypju|w0IMJ6kpU(a5^Ipv z*d)LcyKR){e!}PvOxahXIr~I6?vYJM%#lu{Rti|cL&}U!L07WJF-Nelx~(+oGSGtw z)AtDGV*AQHhp=aJbVvjCs2&hFBM)ZKw z#FZhEbr9tm&cH?Ypd00~4gnB$Bdi!k26Lh$(AuiZBkaX?2~A3koqOR0HtaCaW^S-y zs^yY#6sj?+I1Otiq@h~c$Klu7yJAF8y3a!Ts^h;VW>co_X-*^U$iS3(Jw`j;d8)MJ zl@t7p$xG6zW#u^jp-b6npDM4$KUFS)!^%*T8>Z~YiY+0o@yHnnY{@O=<{H5=?zTpt ze9uV}!-QqPt2#aeG#97LT#ewdj&OL|+_NfMrjDQz5ef4l^Q0F+yEi?G>L`M}V9*PD zfgfI9sKQcrTZ#8b2n|Or1y)NaufQ??(#~;)VAqcU8S2p!$?kLH7=SwO8F@SM=&>ZQ zXgMMq8&NQ%>gZ*tU$6?YL|V=*l%-@=h38}y*7LfMr)A1Wi3n8y^o&FR40|d((aS-G zD*;!K1BIgHQxz&l*eZGjT8OL=-6v+<;+as=$=ciEckFRZAljAxkZ9rYqHzuTyP~nx zKO$PLy(8MS<^-Z$^$&?wF2QF*DQ69a``Ovh8dFKaHV>bYq9B)g*hT?vYaE1E&*7zV3QEh7!eIYaVZ-_MwjUa zcIhDNY4shw5IMM+QEZY)kiJ>F-VrRw?$HedS4R=Vd%@-mKCrkmM)*9&10IYa$F*P? z4{lTtG2ev>Tcqf9sF|e=(z+h`wt+&wN|7DE`Yz;KH~gLYmdWdfu-jqyprdHLxhjS> zv;e9l;0U282IO!l2yVwwA^=(WvE1{h2KZ9ct-q5e`>vmRmNP=ExGX zuD(!)QWxy7YzyEg-B|j7ADzjuQ7zMvJq=j|KZN4cgis8RqXRvDh`DlnOaT%)hTJ%V zw(&YXg?jW&yFuS#K2os5K3D|$*30*7BGMv(D27>RZdikq8eNWh=tb&tQKfYQ^eS{9 z#-a&%Z_M(f$A09UXfi@;v2H{H+A^%OL{hz<{UY38x#-v&p~ZtQK91f5d>pt%>wqf< zl)Bpb7s7oKke-Kz>B1BMjE{ZNztj4u-gw7kLOdYa^(M^3Zqh? zDvTqyB0qD((SOBb=LO22!fTm9>o$~Rxz9&=uSS`;r_>GHZrsjxj8yCLNWV|onbEgs z1IQ=&eofLJ{Qxq)=p9IvI*OwQcWaH^PcsU(Ztg@i;}9;^4H#&xygY=vfG|pjg3;w5 zW4Oo8Jp(%)n$-vr>QsVU%)V+F2-*t=WS>oKD)SeKiI~wSIoA6SxDV}Pj=l{Ttx>I5 zCn%#G%^2-pmZg(~>+t7645xE-#Xo^AWgGdmE!nMl&DQ9AO=!h8o5EAe+2Y=zY zJ~hij1LHilg#h2s88u*GLxOi=^x18$>K3DF-%cB6IzZ76vsSBdc43?Jy{H;pNucKA z7|M=_Z%4k(m%0^0-cprUFHxuU5!42c#?Z9&EP0sG7V7__fZNC)LsrVzmA0a;7;ky* z11$P+B-SU8KyyXDMIZ&^KSDO_ebfJn;3wJLrAP`j!KhnEA4V1C09k&syb9?tv}d4h zs}laNQ2jK?wlZ^sE1Sf_a1_a|1Rvqm|ioxRJ%_;!SIlDPHq$#~w5}yVMGg=QjaBMW}!L%f6A?lYkd4oObm~r{0l1M+mahf?JR=>7d zx>ugHg)tX&ZI)hkcFdWGv(fViJ;L-9f;^iOf>J94nNxW$#%-~%!sH9Beb_1jkA9AF zor^5G=Q|E8uz0O4@zDxtMMof^mA01L0kw8nxnnCGP+1RxpgBU~(kl9SlqDDR%J~`S zGsarVr|yR)`oAJ8!JE+2aUFIfjO(ymIA?GgUZvrT*X^@8x55Fb!j_yd-WR|joGF{7 zZsTelgc|~22?1XQpgIyQ(jai{PQ6qBT1HT_D<6vsOlm7Yu+6b^Bhg~rn0A=D3gAd2 zTB1P=wNm$Mklh8jO#P?;#DPfp+-eY)4614o%;NMAF)VrH=%nUNSj8bobxl}Bji;_b zmCUv*gPf45FP;MCj7t6L6fhlXYPu(19GYJ$4p4=0vI+)e_#)9V&8SqpXTmD30;wnR z2%)9e;ybW@SIZdb(@Q(1<_1U(r>b|f!_=s->I*T$^oC4UWheePhM~=0ob|Eg@7(BM z{PL_1g*NIw*e24lMD|+t$>|XxRXhuqE#!R2-%@KI59P!3=@6Ig%Ym;K>+8`QhKi$T zFV=a29W7NjL57y$2ms}IbekCdw{Nu9oASX|DoWH#}+1Wm~Z~sSS z&rx$^|C2d^>{tDBWQWttmz}$WHz_?S{PU#GQFEmK3tZkQR{xHFj`VQ71=3@$^CqPy zg@2y(IckpdC)5PeU;WRK9t%u?^t?_5(&+Gw&U#Y#=SiQVW=oI#xwGwGf}X}5HocAm z!GdI;F4?C_JX3leQepApx(V0pbsX(Gp-9Kkz6<%*1-7NJLQVo?o7P%CA$a89fYo;N zl)7uMgtYda0=@`f>)~vVA=wKS^gj3X+l=2hvTOKh97N%8#iOe6qAwzW$}QPLJbgqr zPHA~M!G=Zt0pm=qT`u(~ab?5f96qWf%0g+01~QaDX_m6V z=+l`h(0ciei@Z&PRcccGZ-LnC`Ud9m~1}f zxMI$3Gy3nuQs(hePMt?d?<+`nDW;t@xeV`By5znO4$Np9U)3$;^wW9_g<#7J+?Mv~fp+C05 zV=Et(qucc3d_JO2kcT;QOjq)Wi2eg~=bT_o}rS>BB;x&y(^_!`{62_Srucha(;3=_!)wm^qrk6mbG z!HYh?IlIEcuOEScyk~Hx$J^1Xb3{?Dt8%9kVSPM-8(<#=S|Dc;p)YwBL=R|kTtVzw2%G$hPxO3)| z)KY=g<&S%5MX3zVoipoGT~a+Y6ufh0L+TnSObbB#@1uh|XHE;+?J%*tjv07TA0%G% zS)hQ=tjXqeoccU4^eHAUk5TPrfBXSTU!wRq`Ay(&~WZc&0qkP9t4POZXF(&ddl5B5)K z=T!b=vdR}w38xmWzK|De@>sNfiW(df;RfrOOJBo>Eul9vSvk8GbcFnGa(+8k?83YU zd-@xj=pkRouc!F`XjuYpY?5=%N`GNqqdo17&D>DH`kC|sM@+k~@Q<^5pY?Or%bH=T z7=|5NUao<^AXwC)-`q56gTWzoQR+re(bkgwCD6vu%sy@eF5a`)xO_#F`bZA?;n(aTidC`2`Yp3ukbftcwdy#6K)q;3UlfpD(^k?h`7iYqkWIgYs??M0;P=d( zM6R+j`Um8X<8(x~PgMr8(DWZsRSA?o;W|JAmB@wE9W5m+F1Cvo$^}(m`pH=-E_^-$#-jn2=!cER#3p|3<;ZeZ~Uo=ecB9vu-YHcEIe*Z`%YrOuEDn6_8Dk648HJ;HL zB#`TobECD$jZQ%VV%ec*&!kLa#ofb22>amgoilBv=EEcylDAZVh@7`S(5WF8@5mi? z!q=ABCQ}DuE{ENj?oh;&J6g3-c(kg|Q|qN?eZm?liB2VRk!S-R(P>CH9!qvMJ=Y#z zwlmsD=)2K0RGRA;*wfj_?!D4#Ldk3p6SeOhcU*6XNUI@5u3@Tv@;4dRQ>lf6p*(EIblh7BGt4E{qy=P7?o;!R3`2gbIgZT8y?PQy#>m` zT8&RT&J5t|47f^MX!r1)tf8V9n-cNIn%;FtLPPUEA3pfwwbQa|)Ck@u|JlfiwfDRs)T0vWzTNCASa6V^c8Eqr^q zz9ir3FLkeiKbC{h*7FMPs^d2LZ2EdS0k`-i8*mr^d1WD&JM1g%xj~Yv?5euBMftHF zjpKix@W20!^S^l7$#fd%GtE)7a`P(@Ig8#3nGo9I{=HW_axBeeOQ$K9b#ak@4ir=5 z6Ln+xu9hz}afR5I|1kkAmUjh9l;7npbz9Ig)HH`(j_59j*(Lfj<-Y$^(V^@S@u8PI z?fIjJwMxUJkhjJnz`%-C+)}TrgD$UNmY+dm^3=R{6ngQWG+5)w-;mQJvr(Ch-kqfU%Q~t}e{9{@9vF}z5q>)Nu&P$vU z^hR50gKe}y47KQK7M|MHTgyzV9aTq9Ln0;yyYnko^_HBavyDq#g*MYbJAEyB4SLPd z%h9cJZHiWa%OdXxizARDSRI{*wAhbNW3B^gdOk|gFpy^XFv1H_Qt7uMEeQbQdSY;r zjGm6fR};_(zFO-Hl!1VAF?$wu0H9pHC{8I`Hgmka3Q>S+6rF7vx(D;9t=QZ&^kHPM z7l5K*Q@DYPxE^zA_o5!R zYc7W1G*S;bc>%L7>_u4R<8Fj6d1v5T;tHP+b$6pqZe@gs$x;;a1Ge14?~N;bm6PFw zd=dML;RqNB;RB_Sb0EOZknf^VW^(s89yS$y5$>Evwwe42@15w$SwW!9pd*)f6zT}( zawW_qx|no2j-kD7q)#BJg^_bnC7(uN;H@PnpfTohnZlI|gv>3v4q>9ZWkh-LL3Ag@ zqx~W>mpeQct2$@@{#SH{{kwxU;WpkMBu=e^lRH%5ZoZzCvh&tFw@iTo;p5>Zyv}|M zvGAEG?8hpU2hkL~vbRXa1na;e`RF9N3}Vz=%sAI?%4Mi%o68$A84aq@rIA zq5}k{zT7o$tR#4U-u6v=Kh*&fh8b|sxz&$&L&Z4~ZVPkLi%S}yoCn4p3BC%X9cbQu z_M_VL!X-|f=+cK$$R8?!7sO2Dr`Fun;#M@SWQTm?FHIs;bXw<8MjT>{<`zz5O)QwFpsc+Y z%ZE1pfDB|F!VU=4I%{IMaA|ieAHm7e6}FLu6~~|g)fbio{EoTe)lb_^wv_p3`GQAR zKpffRoi$D&I2EaiBHqaV6lNtgUeFv%Gsd6*Hi`JQ6xJ%x!Cg;VnZg3*P%GY}YfvuW z)}P?m{c7FoF7Yjlp&HS(UUS9`i@ZU|tv2~_71tdsOsbhS;MQyUe*K)(3R>4_q`Xnf z4r>%!^p@7>>m%r|OkK_y3tT%a>Vx23nKMV8hYqWE$n-&p^8_V6Olvh2j?1-c@QkiS zf{-G~&l;`sSi{UZ$yn>1tvx|=_X=Y=+XHo z3f|Y#;=w6_#I#v8GPXpFsb)}zu1%uE=w^`M_a*#D1wm~w9C+#$Ouy>r7SuRcTaouh znMSuE*{nk#MjqH1G1$8r4ggaXbJeYWN)7R!89g7!>QaQH?$kpd>fGG86kBd*NQ zI0$!Yeo-FIc0%&+HC)Q|HFYE(=R!gr&WF$wrC!X3yp0fCBFXiRdFxK?1q3%!V2Ca1 z(p`jn5)k+pwZy*BacPXuU+b25#RI%QhyFHeT)cgy-kLLFRSEGZ~V(D+Ni;A@f2cT1U#>Tki^m1c~Xb(c=4Km zaX98lZk0DjdeEQt)BLho;^RnBM>TLG#T|e0facMQ(L290<3{BSOi?!R>j>ZyRJDdR zLBD+bHG*N)5hLz4`?00$_&SLcpx`vr-8%0SP(J06E>PxWg~|WrQcN6p$!7C6h5dxkX2Ja^kX2Ek5!x6C|FbSu_R>U9ZQg@OKl~B4#yCW zKsZQr!aYtPXv^K&ULX)b`BZa3o(M!~5J4|GmXn5;AP4?$g}G^*Fp#Bfyeuv-E-!b4 zPez6I`j9{FTqzkGAw;5N%*q}vFO-!mTfJl@)KXUwipH6( zP@(crMd~@Ul3!s!BUJ51Rok<8nI1YBX;#^n>H5tTk8k~SttkX0@J|e0@nyu?+Am*bhQypG!5jc=s>j~SkN z3d1e<9k1#Oi~ZV{$(>63O!1E=UVBX+4nib-@8U!=a9rM;1FjKX$l#K}r#TWwDj#ydA5%Tc-We87LSV%<^=;|n}Q2)LPkxzOD*vVd0 z%p7A)bSl;htez|L-=duh_3F21S0m@VMMKDAzeT$%2Q7Syrsm)~?<9z)?k9=cp+_iZ zkgV=2U^P6~Kb}trr1>P~NiR-b9X?qzA)mj<^0}%a%V%ZfaV)N&onl+uL&7i^at|r>jU0=k5SrgXKw<7^0|>tYKvCw=L6j=f`zZiA!Z(%DZMDJ#bX&ErqD}pEouDx@avbrQ76*RwI1I%p)EtM#oI>sK*}1}$ z<6q1b>W)v(7Am7dg^bh|GNM}K3&3$|&~i>0hYEF3QN<>FgD6p#wGyK^u4y@mFKN#F z5Dq&cbMVtuRMwm+>4RY4uv5gGGSwMSE10*(e%i?eh|g#mVk8TSFhpWAczYL-Gk2WG zjbNMY9_3JaL7G1k;hmFbW0<9mjU7Z*Y|N`(fIVp&V?At)!SO^kh8>T>)Ri}oP`+x# z-#q-aENofWfp^TRqnc)i<5|_Qg9((XI__rjRVIICQVYr*OOS|VvPa%zJA|jUzQf2t zv=KZy=93F^g!$SXk@*AWh}7BuF~yNX(A!a(Npu)V>)MHM4zp(N1T}f)xF{^MnRXzC z4Ic~JrUbC<5kMo?UI}~A#(IEER*#Zq0=U`-v5RWlJ*{dla}@mNRDW6gN1DdVy7 z=A5upHy&Z~IVWxE$F~_p*QYQzbv)L%nR!u8eR(Qs7}qL)2xRz1g@tK>LOj(nhenYb z?0nqdI9%I6^n9bKXoInBDm&jEc-5Y7>@jb?NijR$=E!{GaO(NSX_A|7GR!jH&<|gI zj9`YjM`^q=-;Rx&Z%0sJ`}Cv8f;iV;1d_Og$$8ECpm*A+J@$WK1j97}M_A`z z(ujpX|F-YGI)|k#WRzW1OHb9oA70}0Dqnb;(#NQv)Ho<-Wl{LcK4ik?4cZKzxfRFD zT63%=&ynB{{qiM=S3T>+@9klm%4L)PW@29R&##LrWvfRMY%R74SAwvjlO`j1Mk7VX zN5c);W2tS1L!Gl3u>r9eFf2ARhWb&Cf!NGDX*1cg2hu#x=E;;dX>wCLdK7AHJ0lOG z-_>0TaC>7OSZDRQ>KH0@c(2cl7#*~MS4^18(Yp}N3m31!cp_Xx3xsC-)KSvTC&$x2 zyCvV8#D1*%UF?p7s>SwAx!~)xifpsSFKGa zcXI5UqUW!3S3o>_-d%;PtaBduiDJFZv7VAt?ZqF+Dp&%ikV06kFfM$FD1C(R zguCMzr?jV^E5aY#G5%dyt|juSUlbjy^{NYsnf@$TUt6Z`#WLVkWkt9|sGgMcK1t6h zCL|zflcdW9{&KJzZJ&|!-2&+gDR6XT=U%6L(vij0` zuX?QEapdpuF^w5LuAq9dC4Cm)ww3y zUNeQ%9>$NJc-8mOS5VztN%%J!m_`I=q?GxW!pCuC=Qp*?9~VxpZ)})`Hya+N$)+Qo z3iX)=QZDflXHUry;6E(scR_QCYVa=hPElvpEcU*v`Y|{!tM_C0URLkJfCSY=E^_j< zz~ki&>g=*tO|Lo@re;Xe_9H?ctctXyTZjhmj4cPe9U$dZlW^)QI|B$y0Sr>b<_-S2n2` z#_ubGYLUTKvoTWmmFo~?`CKWr{Xe4H)uQvSgJw`&*u=DY2Gje>nf^(};&W&fQQxj2 zZ{HI;d9jq*E}lyG!Wo2b_EG28R586yG`~jDi>oMIRgmyj=pm>^Bb4;MDQp#y-bZ9i zmq(66iWjAquVAdb_{y1leolCc1lTq$8aNkeL~V}jYVxW-!iIzD(>~VzP$askhJF3q zPYQedtWAqtb<+C_;IKh`wT`3nnunt~J6Ik5iwe~77Vs~o&_bS?%CE?OR6-el)ODcJxmCU%A@i-C4ghTiRW-v;KVi zn!8Kt2B)!9j)j?+V^YF(4k^|6Sce-G>KN+IuVkqnaUC%aqg1aN!8=QPq|^#OPRx=3 zG23u}!ny!TQFzcYDZT7xX%XPZaCrB(W@0WvU_#9ISMRL(ydg5H0C(wXQ_sqMf#AEk4pG!J?? zUu{=QgqQymy=<5Ns6x4V%BAZ%1@pO(E-jbR*i>CwDeaz&=+bH_mD;5>QhK67*PSP& z{wiHsC#64^>e70Y@C&fzy0lU1B4xU?NlH`Qy0lr1L1)iR*QG5|y2hhR+eF&aYIW&+ z(ZmBbmF+_1o+e$lLrRr)yPbkrUAMD-*x0TvlG1tgJL^Y{9(9Rwp}+Z{e7@>Y-O4q+ zT&>1zIbZF@|9A}kJt-xyX6EV=YF}PypR$Asb}(qyuhMy?AvKa$I-)Mi>+f=Pt(5wu z-4zP|U6X9@*Q);qdp**84Y<9%_|I6+Ua9>X(g*68eswCMY_(Y+YpbWYy{fY68rbkv zrOXexnYQ|wHctrv^If_B8!l|XX-gf-xpbd zbb)_8()E(oNE&hxa@1sci=>`X=IbQ&Oxc3`yM+FB|4!taBwZruohBjgl(g2x{H)R# z(sD_^fd4=X`|ShdzB1MZYcFvb>S^$gxd^=(sAYOUQgUvn-}sqc2T2XJLDCOM`W7D{ z^BSLo&-!bGn*4D+(^?nP?S8_WBwZqDd8q~XEJ>GEyy(*-VyN$xX8`}t+CxaKsbff! zqSdvv9Iv@k-T_G2l)nWcYGu_8@S!(=w}{#&=^-!kn;MvYs)Fec%9-x+G5v$d^j5(+ zcgB-uM7=ci7Et&}#rr|?#8mPyf9f{$^2I>6dAeF|-h*00eGKW9ND29z5dY_||ATaF6zN$v$P7OF)1DM&-L{e zHK-5UrE4owC_Qdtda7sRR`HK@N&Pl*5OptROGk^QsVC=34{B${6-ABe?$cR%Ox<0E zd8Cru;KNRrHQ!P+OFd|pPL|x_nyrr8r7zdqRWw^YYnQ%>_+gIf#9O5-EEiFWBlf*?=8`F{ow;Hv|Fl6Tc@$~Ze8-XR(zyrj{2}&da~(8 z)IB1l$JE#0572w3ZkMQF>94DGX(Kc^NBz$lU3x%xDPAijv6ngO2`L@J4e?K)hyTf| z!*HFK!^Dql7nCZc^q6`X5q^t$M?u|v+0t6v?RwD03^l?tsi$)FwdrlTzw+kI#T!)b#kw?5zoU4gn!77kcfNWhrb~h5 zWbp+m+Rc*I#CEk%O1G#$bGmrD;(sm6soSXzNr`o1#XHp#c8PqxO+726$JEzhgBPoB z^yb=KtiC5Dt-*^`TimI;#ecC{BBjUFY>fLQD!!X_kE!otK6I%uyY%tq>)l=IJyOzq zcBv0Y=`!^Ro|ev`g_mDN9lF+Txg6DJ9)|x7s2lO{H61WMg7q;_X(0 zcIjOx^{7L6?RwRN1*NY@NmJ=n$L)5wNUVC*<^kRNht-Y6y{bn_y7#!Uq@>%$)gc>` z?c(Z0Uc0y|!izJlc>_`5EGa!_EXEAjqoQ_cdDCo^iuV)qxjr=1Tb?h&p&cT$b{y(d)BK~0mrCsbHUdK?m}UP_n2;@DrtF8vgvl2Db0 z*zPj*nDo9~N}B70N=ZqN%3hVROXPa5`oOUCC!?}geOQ--&%Npsb{+ZLs~)uL$md@5 zvRxvdi2o0hingA;s!U3n>%FQ*N|)j7j2D=<+9g`uUbHdPz2!`c8p_K}L|^6QE<|F4 zY$)TY-IXrfi&Ae7;Z#z&f$34bh!?!-=`e9V-awpLrNlWQZy{nhkn>0_PQj*3M(3wE zAtIgfa-SNmA?5>hr1muagJUjruh3^NruqdabFaaay%_2kdStxHT7F^x4r|KG-H4pa z%RPvh%dx)h@)74K_{Z1R;L0U@8Y)~%_>^X*S75(xs82%*M1A1aRPO~RE)@rFZjr(x zGI|lI66bN@im8c6o|v0NGt`eqQ6k2lOi4laYalXYo}9RZ6Svxe-aW#PSA86(dp=uN zx~;}(G8S6X}d>5G-D)oDKb_8{S>rc;{d;`Cy!YBT1-3g+VX1?Q^G zcT2~X?^WphjT~fZvTx6fYx!HA3L&n_U z^7=+ldqLxvIU6|FnO7Tct-RArxX!8ku({tgFY{0h!YLr1@U;VqKlWuJE<4V@88{!1a{*h3Pi}^1+H*T$_!zG~VcXLJdKR zkEss={xNCwfN1F<^>xo|UO8T^0E~cvuzw3pgha zCtT}cfrk59oaAg%-OY8bfO}WXRQCL28`E2<-_cLY*_Wm~*$(kok!@VHzB*w0% ztix@%r%C>+&F3J$1$o2Wi!|i^lDpGg>;CriweDV_*=y4|3ugjP%IHjYw}fJD!}xIU zh!0Jf)i^M9fhXbSj^}QfcQ44idqL*i z9fEl;(zTv@4eoWGF&@Hc$(N18O$R(*Hrkt+?kHpW#5AV6Y7TpzkXHNMYeR2G{TT`$&k zxK9|{;4?S7J{h?l`RAvOcuyFMVUs6}M_p6gPr2`#Hs&?Vy93v#fO+4vt5N%s;4Ew= zP7LQ@n~kqF-voFWMsu@K*EGXpn4a3(y??a(dKxE?PhosNh4iWB&jE8<$;Xi{C;@%- z&cLTY|3vY}k@^8Q%&$xShe)4NH#dJt(#O3aldVFg_CJ2iqou~i8OOa#ji;u6$NP-? zkM%$HKIg7){wW|gH~$8h*EXC$FQ2OM_+Amszasqn!cBR9Es&R>w+D=u+-aN}3>!~} zXZudL{{wqM!!y==w(nN+Q28=n!00bo;|m!-Yuf00#w?rG@2mA3EXA+IVniM==6Oz( zU*Rh@=%4SGwdsEI)r#8yp`PzIe_inb-)z^v`tI?aaFPBqW|jL%r0!|A!$O`YyWhRT z^;%@a+~Ho1v%93s(Alo9cux2>dp_?k@jqjJ1Sf~jn9CaOcZUpr=rs7i@54@#>aOBC z*E8nt;X|G=x1)BA>xQxx;P*EyKzehK>9eq|>Bfx#jFkI3zVm=TfD_}GXN`M>ztVWf zz1^Si{C3(U{{5cmu08&jOztIzJ%27cfIO}71kzjlC(PM(ySz^rx4A#!r{#Z&5bPeW z_WZu-2mX+8DKr)^DyyFN2aLL@fAQbpxw!dNf4#_JxIc!o%J<5gtv9%O*2^vdycBjfi>Xj0^~39 zY!2M(UhlaC`D5kGzvy|vGu!p`>3xCcJmi0k`GR+I;0e!Hn-8PaL!Qfl`EheI($7fx z%hJt(n5Ppwgp4JgjlMg~ZSGqG&$&j6?+^UKb4Js{$j^2?8E7@=v0IHZeculF@nzyK z@t!z@v=}?@-vvy(bN?gK8zj9MX@y#0{1TXJkeX_}LC9w0+wq3|J2+wss~;h)Qzwx& zD_==F&T$%%E|ByrNjn98o|*;tR)Jh3X^&bA$UfDFG_8h8?lLb^kCr@YUW4=}=1pp0 zS+k4zPDy)QH>n58E_3|^zhZQk>ksO=ibs)d2>%4|uZCT2Vm7;PQj01(k=|0-gY=ck z%aC?g-G%hAsz;H|iu?rWv53oalloDl$1{Rfmq~h;hZG)_{7)pse;tuDC0!zEr=&fS zUMA^XlK$9#n|i#YG4LxDC|we`O>HWD1nIw&E-AVV?@4!+ejjwkBz;8EA4{sr2yc{h ziKM$E9h3ACNq;P>5nDN z;J+gBdv&34tNAPQ74vl0D%W1ui0i$s-?)_9>n?HkxgT(U!~HGycirE2mw7ron>`iY zh_Bw)?mOML&G&iVxA3zrP5yKIcljUmKjfbu$ONtmTo<@0a97~_0ls;x#GA^wh{@-{ zcILzO7RpaEJ{|rDc5&Y-#TSWcq3;2t@2>nj(m*vKYbqW_dc5gTq+clh8q&KPpG5k* z#&5l$yoq<0F6>%ru(vX>2k;<21$!$KHjDp&1)^m9cU54sB}iMrkBRq^xRj+1DEwTy zI)uB6{BO|WPNEt^YZJc*QHS(uoFSX)CfqPF)y--;r208_7IW1vL1`{LavRd$s?(6Z z2x;d+s|%3+5w}|AslNhqp86Xw=c!kKIZvGg<~(eP<{>qW1xVe-TcIJpF&k;nXhB+P zv>`1wPD5G&%=xMknDcS#BiZ{dB$erX5%BqNu%8CFqfEBF3a^v*XLYcay{$X;eMa{BkoR5()%HA zsqd)oCf^3XfzQ#-4SY7>9^)=9|KAzd6T0&N&jtM0-xABER!p05zOH%%yTb8!@58Qr z{J%SSjc44y!zKZRy)MS?mitnvVix~Ch`sdqK7N2bHLh=Cq+9XV28(FNh@J*(n2W!8 zu!Q*-&jqT9+QUe-!54npc$fN(@gB9nd>8(1$KM@lz`O^~d+~QaPR$P*3(R5TukK;v z75pjBu;IpE!1I0MxaUvCZv2qP9^W2wk1vhC%go;xw}ak&<~9EN%p3flHgEUep?-$H z-{9{h|98#Sz`N96nt`mkz|-RXt}bXlmP`(#`+>}Y`4ENN zWihjtOJQbE1f`3E74;r9dBQ{W?aR3wPh`CU0A)t z8+Y$c$1@kI?!0^szB3QL6ZVp{dScpaVnXpiY!9@iDF2E>=rqnjQQNIlvbWRfAG8MI z1DUS#2YWFz>tl(5ZLw};Nr%j>j-~pof#G$DZq=XeK^tT^Jj-x>u+M(3kL`=EMR~o$(JtEE0-d+ns+?&|FdsQkn*q7*0TZhw`cz=7R zl}tkW7>acJs`x-Wg{qWgW!B*(2BcDZ;+ZbHhxM_6*q(Urwmy*WUDFHV$*!)%Kq8Zf zC9^={FGszKB@=rFwkI-uWZjWzQ!LZd*R|Xl$ZYM49f5(na`uC-QTV9fv#I1BBp%{rlpfv$9{Ki<`i zytLgoh`B_`QR*W?dgV~hK4hrI?s(U3T}oR+1HI|4_yFf!uj=fJ_w4Jo4y}uI$64MM zKa^Q9fC=CLR>djSXc=bYmUvGh4pz6s2HDWD;;ns&-I>Yo*I5Tp{W@aj zXve7rjf+vpK;EP@TpsU9#^4E7CgRCnSm|!0O9uxr^*j5ZUeW8yL@J%p#Vv_`F;sPs z=K6QKT_eMfDb)o_R9j+5EUFbx-G!p_wx`=xYEo^2hX&KS0A*o{Du>1O@k}3zwy1WA zzKS*gXFdSW49)eS2v66wG?|DGY>D;6ofg_Aa$p#tjZiq^u&s@$EpaRsXiFnbgEq1< z)*GS5RH8SoHV$^e$I)2&ARYLOtKN9`&>qRHv#foRSsp(iPdJ_BbpJ%#3e)JxYz3Ri z_yz(l>`%&b4JLmoBUx*Z9#jo5VZ#kW$ZWIpt>Ue*-EjqfoW_h(nMBV%2#;LWH|t{0 zP)cVw>mUL!w#54}=okp(JCpHPsx#Kp2N}?7DwfEkb#XWR18J?aQk#cBJrRdRH+Wf@vidvY$>f^dnC}{M%g{h3(I4M7JQ!b%fks;x2TR1YA@mSSsZ?=^!kvB7na zN9D;TB4D|Kj_9>ulANGqUiGA`g9DPIT4}*j0KF_wGO4`>G2Jt4vb_%hOK#;s-k#~p z;xGytpR9%3;WDg)U3v-bv<7x3_6(txy5Q=-JgiQhnjbn>S!_F#SZkdQ@~pF68)`hy zCtr}Tl30E*c7tfLEj7F;hLAvesywvy7@VP0H!$tV7st9cuZyz{pcMyV$suMq0XGhU zs{{&M;u%fKdWzcKr5SuGfO!Fv9!lhumeZT;;jGDFps_u7ajH#MSTs+qbVf?n)KjaM$J0Hj#2^>kT%}f(wAd0)#tum?ovU{`-ju@p>dBm1(P<41 zrxJVmCamfoj13Iu+Sne3eWIW4L=satSBvF(^H6*!t`Ios3fLaLgS? ztF|Wk2a|Dx83#1hmiYdmI3lZFL~>gbhcQhM*ua0madC>|fgG1SLDlPEX2HDh}ClAZlz}wXW24w(i%!JAppY_+$528nHgCNnaQJ(U3zmX z5it;$!xANmWU-(FX-;S_{&WZmgiPOVPO@#WJ#Yb7BC_oX(W_jXidh-!!6GW&-p-O6 zJ4?S~XDI`QcL2!n#A${MSli$*89gej)q@)tc_HRunb_L*>xG&@E#a%IjHPoKDeH)k zHFmUYTTr__2UwFxlR9(G+AZW0X)OgSu#xD>FWUhP*aB%IQi;Q05vUS+D{PbF zNePzH>*BjJ7|8TCE0IJ<6oZ{usSQ|#1R&=LNmejcT8f;_yVf%So!Ig!M8XmSx7kC< zJyI{=wlN^4!*!>m=y;Q5*?eJBB?AuU+;3wFPo$w@k_-+e5drtd2W*Mx5;uyX)XG=_ za$?R{h}{Mli1iKiBZH+xA<#)9EKMP>P7cGagalNW>>1)pwiJgXS<2k{V}AomafB!` ze>TERB1`**c;X^tTPPD$=QeXKOAUY>wLh25o1HY56^CFITmcxL6#{6j+HO}SV|&s$ z%<<;~dIQ$Q$s0q+W*_ZfKqfhkkm*66fIvI%ltQe*-sa^f!5LX8_?1&C#O!l;Y3{w2 z5*d*NcCuKT270%^f#;ta$@ncF(wjxq>tw{|SXg_h3k*(P6bcqKxL{I!gSv>t*@p>j z7s$FJFcnD7sM;)yYX*1WD-QLtjyLSL^vs|Z8_*}*em8&TC70=aM>SYwvi;Z zR$YU9vOmdi{-wLt#fFz7c*NciJJK}+yDh!yNKQv|cDBDeo{}t%Bj9!_ev9*(Ch zI9(E?2u zVKwp0#sRJd*d^(Jt*sO194XDx&>(#-xWO>!A+k~%2gDv(rH^9}fA3dYlbq%%g-{}a zeLKdO#Xb7LQHgUis*ht*YE{zehHl{85Ew7bU^n5^ILkecZBjG%@ z5l?1u9B?uRit*4ki?BzZ+om1;E>Fbv3}6?W=o!~R{`p$kJ{C~jIO*D#L{uE_<#}0_ ziWAVvq_YOMBD}+y!YS2saNN;m>-EuCS_iHOE96WJ&E(vR$6M*_Tu4jQBg-LX;~vzI zgPduNGfeIicr21u`|LxIG>jNwiCzQYHMlmVWu&r&v_5oz-lc9UHkvrVmF-$O7a?)7 z+OTdOEa&arz`AY&l4%)lM1hj0|I3SMY?mYPjoQs9hp!B_%6TjD@XOge;8@skU=+vE zVivkRg(HG&Nn2?$TZWT|q`9(~bGA0SFl8Z_DcL*^uKI`If#mcGyC|HKEj^Tg4N&b2 zFfb@iti^LA4T_x#;!Ctb1dR%Ab%yJq&O!5C86lmwT+z*=uO3(uLU0Rt90IjNH#j0o zx92(dbUWvH8YUnMN19|Ih$x3r07D>= z%!Q#@>(6sxj(OyR&R)ErtBYs2c_CLCr$d19K-mt$(h{ODuFr;FY1nu&6GN~CYubb0 zoxvy6g=7$a*#TjUg67=R2ly*??}i7QgzCoby&3`2T!$d(+#bUL^u~9`V5?5i zlDA)JzH*8sH-Ym+PXdQG=!Rls3(GBiHb{HH))fB7a?F2Rh1ewC;$#lS;{#oNI0y%J zAu!XI!r2UruMele@lEOB-4+gOWDgu0K!)+e(hN7GNV%$V@zx9jurijR+2ZZ0?3Li7 z@Omes{jFA!(u$CH%XZ^nR>_7gnb;@f2%sAlSM&ocFQL(xfem&QsdyU3 zqy02bj}#r!rg*9cMxi=WacpB(B)P-RFf4Vlcq`It^*f~%crTH%1{|d27<|c7?;8(d z;$$JBY|cJ;Z%d0L;R&=Z-aOHhjdP&=N#h)QcRCTN`~jQtY`>h)0GZD3tghYlU$k_u$=PCcXz7MM%#S_$zRX#8Y;e;se;v>XLnZ<9xhbV3q6-xMbC*P}8jp>T4c8dVI>1U{CG3Cu#N5nmTt_%C=h3Qh+2*t^+nbbUq*t3kjU z@i|jF?pw7hwd&2%PT>o+gSa<}ZywdQ9KCb52uFC+4xW;LH{uTI8{yjKqvQg#$H6t^ zh~bw$`;kNZAZ1E>AiuU~6DU*qG=Ac3JSOF{>x$Ncn<40@ZvwpjTwP!(S`3j|?RaX` zvec9_flCyvgv%7cB*^M{_ME?E!a&fQh5B9R7mIdT{VLDk+hD z0DT&>Cu>7%z~LCQmBN1jY%J@cK-MK@0GEn4mSZC z+HRSw|2|;H@Fnyz;C8FYM-tb?fC)DYUiOH;njGJuornL{$#_`>UT7=iJ(=H2=VYyV zz!k@jW0S-$BD@ZbNo~&IbR~N30SAw!s6$$5~%f6{0J^8Lu4N#9=9sOXJ3Yo$E35!&L~!9E)C--#K(IMIJgZA+t! zE=R60&!b1t=WamQ&oJ&t3vMkbjps&c!j0%ZHwSPj2|xO`TKohlsIl9&gH%cyQ+;jt z-wrS|gf1uqT??11B>qQ6xR4CsKZBA%{-7|y97SjpLnl$TYlP9$8L`}mTK@177alt4 zR)GxI6iGWFJ&ngRsxAcP#=N#7Qq|50p0cG7URYWON?N;zcC6e>p z0ATSrH&>&LiE4HRC=F~vCtBj|#qv@vzfM3vyhgaU81%$e+QD$KqSIf%Z-!D}5jCtJRb@E_lnutCkEZuBTPCfcr6gZC81klGxETcU31 z%&1XSwOs7tAT)?el!623yiI_{q1yz^xU0Y@aeoIjbXo;1$~Foe1{GqE0rHpNI2GkB zwY4e0`XL*qN)j}PONiRP0ub%sIpW)pryRY=YpWzb+Q}pVbK2$XgyVWpq~a*$#*1N$ zW9hV@L!c`TrmV0>g(*gTH=-9kxiQtZ>X|}KHKG-@&KVIC=h3J-0qI9ybl;9^c3g>e z2IP;L(E9Gh#}jHMLxqVX&;jNU`oZL$xfWRDbPfKNi6)jJ=TO&kLoJ%jH9Pn?F+uxo z%;P<9Y~(bqjI$SEBhIQzJ?`q=Tb2s z?Kvx)Wye_YdOb6o(=*tSbu0SSmax%Ys5l?~{>V`RXKAD5aGNp!S-7kZE90EWIEVqW z(7y7=9-+*nHZ$HQjcePIZ&QuXk|Q5i20b#4glZn=RW7J#92Zt_`5ou~&fNsv$7E$= zNIWoUx+mP$r$f~iMxIoeL`|YM2s$N-! zGZ;uN%-WUcMWhL?gUhPZffLWrana2&wx9x`JgIt=A_Oj#LAy4l#Nnqt{O2I&a`=pG8PrK zn@E|3@fO`bp+u3-RTbKgU#F<3H+6lzADjUcR$g5b z^-b~nCEHrj>O9Q}{^|Cux>>8ID%5Wjdm%+}u_*;V5JpXZDHRn~VMBoI6+rVXzS4@Z zk5!D_tQE9cc(qfrV(bcty_$Wxy%oo<#t%mW6B$TrhK}9f6YQ}opog&XdqLkHRsm4@ zj5MXh^)*wRZw!3Q5o(}NE=xb5fro7q451959Lmu9p(^WK~He!usA|K65%9>P+wgS5~+M=4aBz3;9Z*A%sM8Euzr?xy4G<5HSJ_!%Ro( zSxfXB9SNw0p_vd*EdgN|=tuj4J@w9ChM@?`*f~i)I2dObBqfHA<)R%e zs>u-NC^X{>Ra~4MHT3H`XUCvZG=&|M>Qspo>_;_OBSF9(z=ksK*Dwu>J8zoErK92u z7Mz!t$7xF`nPYveuW4&MDeFddG0x8SK8J#*RBm>Am3nZ~%D^t-sP?jS6|iuT@wY+oK!POY63KHY z>2TgM9UiJ6&TwNHUGwY9^<~L17c0<3grh%z2=ktyqG3pF2~0?ciM*8aE@qL=8z8}Y z6nL_g98b1_R>bKS!k~=$(o>N@!&(h6A>yFjf8Lms8ZEQbxMX8mjWJ!F_j8MJK2G(K zAb2L#>5UCu98x^%b3-%E%tpc;UQeLh7B;w4ODAf4JyWI**8$FSBIH? zgu1gXa;O8Q8p~>s&nMX`0y^eUc&tYD3u;D=nuysdSw7=6A5D}(Yr2Z+*?WA-BU1Ge zXVZx|owE7rr>MKsDZm&-H8VP>016%@!PDR_tX1B}NV*txi$rg%Q9b)W+MRuXvPXi6 zHc6*G#MCS@YtzCeK!h`$(h!)~(kV!u6GD8UDA%oY3R@{s8b|jRyxK3B>FlHxdfAkEX%rnyxUsidd#D--kVKGponq!s<991IDvZvW08ipr~_ltMf+=Beq} z!=T8FiWR+Em=LgjB0=DZp=xmcP<{J{FQ3~p`Ncne$$>+RM_LrP^4pkj{B2~6kh#J2gJqmE%q9(Ohfsz7E z6iV_bRuLjZT)%bGqh8=iFNifbww=Ew&zrjaMbE{(y`9Og*OFwWIn(4#sh-<6 z*Sg$1bY-q};PBk#nFF)U*6e}#nWZZSTJuXY&BdkW{QL}Yu0t@jc#Ri-{8IGXWaHF{ zGrc{p)93PStVem(*IZ+UE=S|Nn?)QMxgn3MRnohYSnZO!_%)AT%!R}0fH!F)-$$|8 zck;_y;=8!#6dj0H``*OO@_V>hHopH_qO5QHH7jyf@HeEUCx#Qcx7;Lu9j>K&so%P%c+d{b&1Ur zN3XS4Ud6+DI(cE`GA@UBJe?u#!L_5;h_kc1>xI9`Ip5v%++rVpmykP*J(O!&Z-a=- z-u^6*#`$1GR`bgy){mk}T^@)5z;0K$uN|CD1`GQ^5BfAWWotAakJuLq2g-aS?sU?P zb<+o@m+EJHU%`F~UI&`>olWu}u^1HG+%xhc&o!ZHMs&VhVoxIoi+0 zAoO+f82>?i*>hjlK8gW%$?1gc4Sj|AkMwWXU_d0-_S}mC-Z#y?cuG%#B-EC}Q|()} zP16a>g^gJ7+T5^V?MaZ8b8lg{^gqQibb=s8?vm%8-!hUX>3lf2Z_Bw0I}Ja8(r4JH zu#^$~>T^fgm<=dOG1+gk`D7I&jxS%j)5LAOgXrO{|}|Hh-XG3$Qz zalhcVN+k`*ftOK65n(vnW z{!eGnbCaE?S&%K@l(_mux_dcJ!UL+-ot|SgN-K3*osze=j(ry8v%i|B71^$HnpJRb zmEH#^#+35z8u(U7Z(5xuS5>?Z7;s4fK}=?rF_V4qRPd#2h#8 z879)K*Xy}fx!Kia{a_zF%fM;jsq8&5XE+02>Ee3`d4#~7v7XkW2aR=IwDTDvYy{;TW9`Mb3LB*Fgt_`jpT FzX2r6tn2^) diff --git a/1.3/Source/Animations/Clips/BaseAnimationClip.cs b/1.3/Source/Animations/Clips/BaseAnimationClip.cs index 1aaf03f..9963cd5 100644 --- a/1.3/Source/Animations/Clips/BaseAnimationClip.cs +++ b/1.3/Source/Animations/Clips/BaseAnimationClip.cs @@ -9,6 +9,7 @@ using Verse; namespace Rimworld_Animations { public abstract class BaseAnimationClip { + public Dictionary SoundEffects = new Dictionary(); public List types; //types of participants public int duration; public abstract void buildSimpleCurves(); diff --git a/1.3/Source/Animations/Clips/PawnAnimationClip.cs b/1.3/Source/Animations/Clips/PawnAnimationClip.cs index 746c3f4..e9d2489 100644 --- a/1.3/Source/Animations/Clips/PawnAnimationClip.cs +++ b/1.3/Source/Animations/Clips/PawnAnimationClip.cs @@ -12,7 +12,6 @@ namespace Rimworld_Animations { public List keyframes; public AltitudeLayer layer = AltitudeLayer.Pawn; - public Dictionary SoundEffects = new Dictionary(); public Dictionary quiver = new Dictionary(); public SimpleCurve GenitalAngle = new SimpleCurve(); public SimpleCurve BodyAngle = new SimpleCurve(); diff --git a/1.3/Source/Animations/Clips/ThingAnimationClip.cs b/1.3/Source/Animations/Clips/ThingAnimationClip.cs index 80ff19e..26f4d4c 100644 --- a/1.3/Source/Animations/Clips/ThingAnimationClip.cs +++ b/1.3/Source/Animations/Clips/ThingAnimationClip.cs @@ -3,14 +3,72 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Verse; +using RimWorld; namespace Rimworld_Animations { public class ThingAnimationClip : BaseAnimationClip { public List keyframes; - public override void buildSimpleCurves() { + public SimpleCurve PositionX = new SimpleCurve(); + public SimpleCurve PositionZ = new SimpleCurve(); + public SimpleCurve Rotation = new SimpleCurve(); + + public override void buildSimpleCurves() { + int duration = 0; + //getting the length of the whole clip + foreach (ThingKeyframe frame in keyframes) + { + duration += frame.tickDuration; + } + + //guarantees loops don't get cut off mid-anim + this.duration = duration; + + int keyframePosition = 0; + foreach (ThingKeyframe frame in keyframes) + { + + if (frame.atTick.HasValue) + { + if (frame.positionX.HasValue) + PositionX.Add((float)frame.atTick / (float)duration, frame.positionX.Value, true); + + if (frame.positionZ.HasValue) + PositionZ.Add((float)frame.atTick / (float)duration, frame.positionZ.Value, true); + + if (frame.rotation.HasValue) + Rotation.Add((float)frame.atTick / (float)duration, frame.rotation.Value, true); + + if (frame.soundEffect != null) + { + SoundEffects.Add((int)frame.atTick, frame.soundEffect); + } + + + } + else + { + if (frame.positionX.HasValue) + PositionX.Add((float)keyframePosition / (float)duration, frame.positionX.Value, true); + + if (frame.positionZ.HasValue) + PositionZ.Add((float)keyframePosition / (float)duration, frame.positionZ.Value, true); + + if (frame.rotation.HasValue) + Rotation.Add((float)keyframePosition / (float)duration, frame.rotation.Value, true); + + if (frame.soundEffect != null) + { + SoundEffects.Add(keyframePosition, frame.soundEffect); + } + keyframePosition += frame.tickDuration; + + } + + } } } } diff --git a/1.3/Source/Animations/Keyframes/Keyframe.cs b/1.3/Source/Animations/Keyframes/Keyframe.cs index 8b49841..b34eb44 100644 --- a/1.3/Source/Animations/Keyframes/Keyframe.cs +++ b/1.3/Source/Animations/Keyframes/Keyframe.cs @@ -8,7 +8,7 @@ namespace Rimworld_Animations { public abstract class Keyframe { public int tickDuration = 1; - - + public float? atTick; + public string soundEffect; } } diff --git a/1.3/Source/Animations/Keyframes/PawnKeyframe.cs b/1.3/Source/Animations/Keyframes/PawnKeyframe.cs index 685009e..e710981 100644 --- a/1.3/Source/Animations/Keyframes/PawnKeyframe.cs +++ b/1.3/Source/Animations/Keyframes/PawnKeyframe.cs @@ -22,9 +22,7 @@ namespace Rimworld_Animations { public int? bodyFacing; public int? headFacing; - public string soundEffect; public bool? quiver; - public float? atTick; } } diff --git a/1.3/Source/Animations/Keyframes/ThingKeyframe.cs b/1.3/Source/Animations/Keyframes/ThingKeyframe.cs index 9d35a96..6604f5e 100644 --- a/1.3/Source/Animations/Keyframes/ThingKeyframe.cs +++ b/1.3/Source/Animations/Keyframes/ThingKeyframe.cs @@ -7,5 +7,12 @@ using System.Threading.Tasks; namespace Rimworld_Animations { public class ThingKeyframe : Keyframe { + + public float? positionX; + public float? positionZ; + public float? rotation; + + + } } diff --git a/1.3/Source/Comps/CompProperties_BodyAnimator.cs b/1.3/Source/Comps/CompProperties_BodyAnimator.cs index dd991c1..bfcde83 100644 --- a/1.3/Source/Comps/CompProperties_BodyAnimator.cs +++ b/1.3/Source/Comps/CompProperties_BodyAnimator.cs @@ -7,9 +7,10 @@ using Verse; using RimWorld; namespace Rimworld_Animations { - class CompProperties_BodyAnimator : CompProperties + public class CompProperties_BodyAnimator : CompProperties { - public CompProperties_BodyAnimator() { + public CompProperties_BodyAnimator() + { base.compClass = typeof(CompBodyAnimator); } diff --git a/1.3/Source/Comps/CompProperties_ThingAnimator.cs b/1.3/Source/Comps/CompProperties_ThingAnimator.cs index f9b76bd..34c67b1 100644 --- a/1.3/Source/Comps/CompProperties_ThingAnimator.cs +++ b/1.3/Source/Comps/CompProperties_ThingAnimator.cs @@ -3,9 +3,15 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Verse; namespace Rimworld_Animations { - class CompProperties_ThingAnimator + public class CompProperties_ThingAnimator : CompProperties { + + public CompProperties_ThingAnimator() + { + base.compClass = typeof(CompThingAnimator); + } } } diff --git a/1.3/Source/Comps/CompThingAnimator.cs b/1.3/Source/Comps/CompThingAnimator.cs index bb3c944..967e3b6 100644 --- a/1.3/Source/Comps/CompThingAnimator.cs +++ b/1.3/Source/Comps/CompThingAnimator.cs @@ -1,11 +1,190 @@ -using System; +using rjw; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine; +using Verse; namespace Rimworld_Animations { - class CompThingAnimator + public class CompThingAnimator : ThingComp { + Vector3 anchor; + + Pawn pawn; + + public bool isAnimating = false; + + int animTicks = 0, stageTicks = 0, clipTicks = 0, curStage = 0; + float rotation = 0; + float clipPercent = 0; + + public Vector3 deltaPos; + + AnimationDef anim; + private ThingAnimationClip clip => (ThingAnimationClip)stage.animationClips[1]; + private AnimationStage stage + { + get + { + return anim.animationStages[curStage]; + } + + } + + public void StartAnimation(AnimationDef anim, Pawn pawn) + { + isAnimating = true; + + this.anim = anim; + this.pawn = pawn; + + animTicks = 0; + stageTicks = 0; + clipTicks = 0; + + curStage = 0; + clipPercent = 0; + + tickAnim(); + + } + + public void setAnchor(IntVec3 position) + { + anchor = position.ToVector3(); + } + + public override void CompTick() + { + base.CompTick(); + + if(isAnimating) + { + if (pawn.Dead || pawn?.jobs?.curDriver == null || (pawn?.jobs?.curDriver != null && !(pawn?.jobs?.curDriver is rjw.JobDriver_Sex))) + { + isAnimating = false; + } + else + { + tickAnim(); + } + } + + + } + + public void tickAnim() + { + if (!isAnimating) return; + animTicks++; + + if (animTicks < anim.animationTimeTicks) + { + tickStage(); + } + else + { + if (LoopNeverending()) + { + ResetOnLoop(); + } + else + { + isAnimating = false; + } + + + } + + } + + public void tickStage() + { + if (stage == null) + { + isAnimating = false; + return; + } + + stageTicks++; + + if (stageTicks >= stage.playTimeTicks) + { + + curStage++; + + stageTicks = 0; + clipTicks = 0; + clipPercent = 0; + } + + if (curStage >= anim.animationStages.Count) + { + if (LoopNeverending()) + { + ResetOnLoop(); + } + else + { + isAnimating = false; + } + + } + else + { + tickClip(); + } + } + + public void tickClip() + { + clipTicks++; + + if (clipPercent >= 1 && stage.isLooping) + { + clipTicks = 1;//warning: don't set to zero or else calculations go wrong + } + clipPercent = (float)clipTicks / (float)clip.duration; + + calculateDrawValues(); + } + + private void calculateDrawValues() + { + + //shift up and right 0.5f to align center + deltaPos = new Vector3(clip.PositionX.Evaluate(clipPercent) + 0.5f/* todo * (mirror ? -1 : 1) */, AltitudeLayer.Item.AltitudeFor(), clip.PositionZ.Evaluate(clipPercent) + 0.5f); + Log.Message("Clip percent: " + clipPercent + " deltaPos: " + deltaPos); + rotation = clip.Rotation.Evaluate(clipPercent); + } + + public void AnimateThing(Thing thing) + { + thing.Graphic.Draw(deltaPos + anchor, Rot4.North, thing, rotation); + } + + public bool LoopNeverending() + { + if (pawn?.jobs?.curDriver != null && + (pawn.jobs.curDriver is JobDriver_Sex) && (pawn.jobs.curDriver as JobDriver_Sex).neverendingsex) + { + return true; + } + + return false; + } + + public void ResetOnLoop() + { + curStage = 1; + animTicks = 0; + stageTicks = 0; + clipTicks = 0; + + tickAnim(); + } + } } diff --git a/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs new file mode 100644 index 0000000..9477abf --- /dev/null +++ b/1.3/Source/Patches/RimworldPatches/HarmonyPatch_Thing.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; + +namespace Rimworld_Animations +{ + [HarmonyPatch(typeof(Thing), "DrawAt")] + public static class HarmonyPatch_Thing + { + + public static bool Prefix(Thing __instance) + { + CompThingAnimator thingAnimator = __instance.TryGetComp(); + if (thingAnimator != null && thingAnimator.isAnimating) + { + thingAnimator.AnimateThing(__instance); + return false; + + } + + return true; + + } + + } +} diff --git a/LoadFolders.xml b/LoadFolders.xml index 1ed37eb..b9b9fa8 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -13,6 +13,8 @@
  • /
  • 1.3
  • Patch_HatsDisplaySelection/1.2
  • +
  • Patch_SexToysMasturbation
  • +
  • Patch_SexToysMasturbation/1.3
  • diff --git a/Patch_SexToysMasturbation/1.3/Assemblies/Patch_SexToysMasturbation.dll b/Patch_SexToysMasturbation/1.3/Assemblies/Patch_SexToysMasturbation.dll new file mode 100644 index 0000000000000000000000000000000000000000..490d03d616b8d3df3016e5f031fc17a7a87effab GIT binary patch literal 7168 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 Xwi*kXpF(ke+a1ti{%Z99Jpw-gEY#nm literal 0 HcmV?d00001 diff --git a/Patch_SexToysMasturbation/1.3/Defs/AnimationDefs/Animations_Dildo.xml b/Patch_SexToysMasturbation/1.3/Defs/AnimationDefs/Animations_Dildo.xml new file mode 100644 index 0000000..be91a8b --- /dev/null +++ b/Patch_SexToysMasturbation/1.3/Defs/AnimationDefs/Animations_Dildo.xml @@ -0,0 +1,137 @@ + + + + Masturbation_DildoVaginal + + vagina + true + +
  • Masturbation
  • +
    + +
  • + +
  • Human
  • + + true + +
    + + +
  • + Masturbating + true + 800 + 0 + +
  • + LayingPawn + +
  • + + 40 + 73.01611 + 40.0739746 + 0 + 0.054543376 + 0.112624526 + 0 + 3 + 3 +
  • +
  • + + Slimy + 30 + 76.4867554 + 50.3887634 + 0 + 0.0506898165 + 0.08564949 + 0 + 3 + 3 +
  • +
  • + + 30 + 78.22131 + 58.0072327 + 0 + 0.039129138 + 0.07794231 + 0 + 3 + 3 +
  • +
  • + + 30 + 76.4867554 + 50.3887634 + 0 + 0.0506898165 + 0.08564949 + 0 + 3 + 3 +
  • +
  • + + 1 + 73.01611 + 40.0739746 + 0 + 0.054543376 + 0.112624526 + 0 + 3 + 3 +
  • + + +
  • + +
  • + + 40 + -0.359264076 + -0.00901746 + 114.011215 +
  • +
  • + + 30 + -0.2783391 + -0.0514066666 + 81.16443 +
  • +
  • + + 30 + -0.1704393 + -0.0668209046 + 72.8611145 +
  • +
  • + + 30 + -0.2783391 + -0.0514066666 + 81.16443 +
  • +
  • + + 1 + -0.359264076 + -0.00901746 + 114.011215 +
  • + + + + + +
    +
    +
    \ No newline at end of file diff --git a/Patch_SexToysMasturbation/Patch_SexToysMasturbation.csproj b/Patch_SexToysMasturbation/Patch_SexToysMasturbation.csproj new file mode 100644 index 0000000..fc6cbf9 --- /dev/null +++ b/Patch_SexToysMasturbation/Patch_SexToysMasturbation.csproj @@ -0,0 +1,87 @@ + + + + + Debug + AnyCPU + {87763712-0536-4D5F-9EAA-520F15D4F84E} + Library + Properties + Patch_SexToysMasturbation + Patch_SexToysMasturbation + v4.7.2 + 512 + true + + + false + none + false + 1.3\Assemblies\ + DEBUG;TRACE + prompt + 4 + Auto + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\..\..\workshop\content\294100\1127530465\1.3\Assemblies\0Harmony.dll + False + + + ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + False + ..\1.3\Assemblies\Rimworld-Animations.dll + False + + + ..\..\rjw\1.3\Assemblies\RJW.dll + False + + + ..\..\rjw-toys-and-masturbation\Assemblies\RJW-ToysAndMasturbation.dll + False + + + + + + + + + + + ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll + False + + + ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + False + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Patch_SexToysMasturbation/Properties/AssemblyInfo.cs b/Patch_SexToysMasturbation/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..55c921a --- /dev/null +++ b/Patch_SexToysMasturbation/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Patch_SexToysMasturbation")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Patch_SexToysMasturbation")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("87763712-0536-4d5f-9eaa-520f15d4f84e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Patch_SexToysMasturbation/Source/Defs/SexToyAnimationDef.cs b/Patch_SexToysMasturbation/Source/Defs/SexToyAnimationDef.cs new file mode 100644 index 0000000..a572d5e --- /dev/null +++ b/Patch_SexToysMasturbation/Source/Defs/SexToyAnimationDef.cs @@ -0,0 +1,16 @@ +using Rimworld_Animations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Patch_SexToysMasturbation +{ + public class SexToyAnimationDef : AnimationDef + { + + public String requiredBodyPart = null; + + } +} diff --git a/Patch_SexToysMasturbation/Source/Harmony/Harmony_PatchAll.cs b/Patch_SexToysMasturbation/Source/Harmony/Harmony_PatchAll.cs new file mode 100644 index 0000000..b48ece7 --- /dev/null +++ b/Patch_SexToysMasturbation/Source/Harmony/Harmony_PatchAll.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using HarmonyLib; +using System.Reflection; + +namespace Patch_SexToysMasturbation +{ + + [StaticConstructorOnStartup] + public static class Harmony_PatchAll { + + static Harmony_PatchAll() { + + Harmony val = new Harmony("animtoyspatch"); + val.PatchAll(Assembly.GetExecutingAssembly()); + + } + } +} diff --git a/Patch_SexToysMasturbation/Source/Patches/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/Patch_SexToysMasturbation/Source/Patches/HarmonyPatch_JobDriver_SexBaseInitiator.cs new file mode 100644 index 0000000..279ea01 --- /dev/null +++ b/Patch_SexToysMasturbation/Source/Patches/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -0,0 +1,66 @@ +using HarmonyLib; +using Rimworld_Animations; +using rjw; +using RJW_ToysAndMasturbation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace Patch_SexToysMasturbation +{ + [HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")] + public class HarmonyPatch_JobDriver_SexBaseInitiator + { + + public static void Postfix(ref JobDriver_SexBaseInitiator __instance) + { + + if(__instance is JobDriver_MasturbateWithToy masturbateJobDriver) + { + Log.Message("Rerolling animations..."); + Pawn pawn = masturbateJobDriver.pawn; + Thing sexToy = masturbateJobDriver.dildo; + + RerollAnimationsForSexToy(pawn, sexToy); + } + + + } + + public static void RerollAnimationsForSexToy(Pawn pawn, Thing thing) + { + CompSexToy sextoy = thing.TryGetComp(); + + SexToyAnimationDef anim = AnimSexToyUtility.tryFindAnimation(sextoy, pawn); + + + + if (anim != null) + { + Log.Message("Playing anim " + anim.defName); + + pawn.TryGetComp().setAnchor(pawn.Position); + thing.TryGetComp().setAnchor(pawn.Position); + + pawn.TryGetComp().StartAnimation(anim, new List { pawn }, 0); + thing.TryGetComp().StartAnimation(anim, pawn); + + (pawn.jobs.curDriver as JobDriver_Sex).ticks_left = anim.animationTimeTicks; + (pawn.jobs.curDriver as JobDriver_Sex).sex_ticks = anim.animationTimeTicks; + (pawn.jobs.curDriver as JobDriver_Sex).duration = anim.animationTimeTicks; + } + else + { + Log.Message("No animation found"); + } + + + } + + } + + +} diff --git a/Patch_SexToysMasturbation/Source/Utilities/AnimSexToyUtility.cs b/Patch_SexToysMasturbation/Source/Utilities/AnimSexToyUtility.cs new file mode 100644 index 0000000..5ab05b1 --- /dev/null +++ b/Patch_SexToysMasturbation/Source/Utilities/AnimSexToyUtility.cs @@ -0,0 +1,47 @@ +using rjw; +using RJW_ToysAndMasturbation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace Patch_SexToysMasturbation +{ + public class AnimSexToyUtility + { + + public static SexToyAnimationDef tryFindAnimation(CompSexToy sexToy, Pawn pawn) + { + + IEnumerable options = DefDatabase.AllDefs.Where((SexToyAnimationDef x) => + { + + if(!sexToy.Props.requiredBodyParts.Contains(x.requiredBodyPart)) + { + return false; + } + + if(x.requiredBodyPart == "vagina" && !Genital_Helper.has_vagina(pawn)) + { + return false; + } + + return true; + + }); + + if(options != null && options.Any()) + { + return options.RandomElement(); + } + else + { + return null; + } + + } + + } +} diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index 196c846..1c066ce 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -65,6 +65,7 @@ + diff --git a/Rimworld-Animations.sln b/Rimworld-Animations.sln index 707d4cc..ca55d6f 100644 --- a/Rimworld-Animations.sln +++ b/Rimworld-Animations.sln @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rimworld-Animations", "Rimw EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Patch_HatsDisplaySelection", "Patch_HatsDisplaySelection\Patch_HatsDisplaySelection.csproj", "{BA766964-1716-422D-A09E-29426F8EB9D5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Patch_SexToysMasturbation", "Patch_SexToysMasturbation\Patch_SexToysMasturbation.csproj", "{87763712-0536-4D5F-9EAA-520F15D4F84E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -20,6 +22,10 @@ Global {BA766964-1716-422D-A09E-29426F8EB9D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BA766964-1716-422D-A09E-29426F8EB9D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {BA766964-1716-422D-A09E-29426F8EB9D5}.Release|Any CPU.Build.0 = Release|Any CPU + {87763712-0536-4D5F-9EAA-520F15D4F84E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87763712-0536-4D5F-9EAA-520F15D4F84E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87763712-0536-4D5F-9EAA-520F15D4F84E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87763712-0536-4D5F-9EAA-520F15D4F84E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE