From 702964a8c279f9dfc929d88637f00cd059c6f155 Mon Sep 17 00:00:00 2001 From: c0ffee Date: Sat, 24 Jul 2021 13:52:33 -0700 Subject: [PATCH] Changed from rerouting the job to another for joininbed to simply patching joininbed, code tidying --- 1.3/Assemblies/Rimworld-Animations.dll | Bin 59904 -> 54272 bytes Defs/JobDefs/Jobs_SexForAnim.xml | 17 --- Rimworld-Animations.csproj | 41 ++++--- ...Driver_SexBaseRecieverLovedForAnimation.cs | 89 --------------- .../JobDriver_SexCasualForAnimation.cs | 93 ---------------- Source/Patches/HarmonyPatch_AlienRace.cs | 92 ---------------- Source/Patches/HarmonyPatch_CSL.cs | 87 --------------- .../Patches/HarmonyPatch_DontShaveYourHead.cs | 29 ----- .../Patches/HarmonyPatch_FacialAnimation.cs | 104 ------------------ Source/Patches/HarmonyPatch_SetPawnLaying.cs | 28 ----- .../Patches/HarmonyPatch_ShowHairWithHats.cs | 51 --------- .../HarmonyPatch_HatsDisplaySelection.cs | 0 .../HarmonyPatch_JobDriver_JoinInBed.cs | 84 ++++++++++++++ ...HarmonyPatch_JobDriver_SexBaseInitiator.cs | 20 ---- ...onyPatch_JobDriver_SexBaseReceiverLoved.cs | 40 +++++++ .../HarmonyPatch_HeadHair.cs | 0 .../HarmonyPatch_PawnRenderer.cs | 0 .../HarmonyPatch_PawnRotation.cs | 0 .../HarmonyPatch_Pawn_DrawTracker.cs | 0 .../HarmonyPatch_SetPawnAnimatable.cs | 0 .../HarmonyPatch_DoLovinAnimationPatch.cs | 26 ----- .../rjwPatches/HarmonyPatch_DrawSemen.cs | 22 ---- .../HarmonyPatch_JoinInBedGiveJob.cs | 68 ------------ .../HarmonyPatch_PlayAnimJoinInBedRMB.cs | 26 ----- 24 files changed, 143 insertions(+), 774 deletions(-) delete mode 100644 Defs/JobDefs/Jobs_SexForAnim.xml delete mode 100644 Source/JobDrivers/JobDriver_SexBaseRecieverLovedForAnimation.cs delete mode 100644 Source/JobDrivers/JobDriver_SexCasualForAnimation.cs delete mode 100644 Source/Patches/HarmonyPatch_AlienRace.cs delete mode 100644 Source/Patches/HarmonyPatch_CSL.cs delete mode 100644 Source/Patches/HarmonyPatch_DontShaveYourHead.cs delete mode 100644 Source/Patches/HarmonyPatch_FacialAnimation.cs delete mode 100644 Source/Patches/HarmonyPatch_SetPawnLaying.cs delete mode 100644 Source/Patches/HarmonyPatch_ShowHairWithHats.cs rename Source/Patches/{ => OtherModPatches}/HarmonyPatch_HatsDisplaySelection.cs (100%) create mode 100644 Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs rename Source/Patches/{rjwPatches => RJWPatches/JobDrivers}/HarmonyPatch_JobDriver_SexBaseInitiator.cs (87%) create mode 100644 Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs rename Source/Patches/{ => RimworldPatches}/HarmonyPatch_HeadHair.cs (100%) rename Source/Patches/{ => RimworldPatches}/HarmonyPatch_PawnRenderer.cs (100%) rename Source/Patches/{ => RimworldPatches}/HarmonyPatch_PawnRotation.cs (100%) rename Source/Patches/{ => RimworldPatches}/HarmonyPatch_Pawn_DrawTracker.cs (100%) rename Source/Patches/{ => RimworldPatches}/HarmonyPatch_SetPawnAnimatable.cs (100%) delete mode 100644 Source/Patches/rjwPatches/HarmonyPatch_DoLovinAnimationPatch.cs delete mode 100644 Source/Patches/rjwPatches/HarmonyPatch_DrawSemen.cs delete mode 100644 Source/Patches/rjwPatches/HarmonyPatch_JoinInBedGiveJob.cs delete mode 100644 Source/Patches/rjwPatches/HarmonyPatch_PlayAnimJoinInBedRMB.cs diff --git a/1.3/Assemblies/Rimworld-Animations.dll b/1.3/Assemblies/Rimworld-Animations.dll index 086d4372596f9c876a7265d9bcb1e1863edc9c40..53a3c9876d766833b26d8d9b0efc7b90fce7bac7 100644 GIT binary patch literal 54272 zcmcG131D2sk#@Z|r$*99Go#yw#(>S(I(!1M0pt4s8=o8|fIODQ_FzdPW+dA}$jF@G zOb7(x4M{MNgKU!B?2=8$2}vMfNdhF~a6$-2vI#jMoBJ^T_f@|)hb#pA$qLl3ySlo% zs=B(mx?ewe{RM9qkBE5j`|7JApTd(rOEjH08AWxt`O{%}pzQ0@K4q=@`n0XP)46zm zHnS_6?2UIN`}#5i@g1pncCas=?u)P3uqED`=}xs*R)$V+NN-#zvd;3zEo*-8HMh6t z<_Bb}xBo{}0Vj7Vklh;lF z8j@MZ9g`86G{=?;(GF5aAjNPa@H58)J=8KcDhZfcs9XXWn228j!;?sDxE|?IyCT>c z7Tdr^2ogbq>1fdQ=(AN(Ia&t+CS_vm`k7f4?8ug|EM6y7RMci>fLcXMENUlCM6Oc&Wy39ipC1x{672iO=-WP82d%k%+x`*q zT~}UAB^Dw&tOMNT7A5Jq+!5UF=!F-s9i% z78j4@`V3eKv1wbrX)qFGQ>b&irixeE6f@Z2r7Tj$rjUHRrixeEbauXJC=y~*sA{~X zidWinKAS?|P^>&s-a5-3hDyh4s(9c!w5K5KynNe=NCn$MljF5jyfJO(vaM>qGEzyF zVMgP%RlHJ`+w)DskuaOW*2inAcqL7T7XY*7s3%qxscJnA#t|RWG9B?LP6lm5Four5 zVwRMeM0KRPb*eFmz#FlHNF+jh+JTEd;owIjQQ~v(UHl10JQj%&pCj(#PdLmqk($t=nMY0j-PFks}VM+hD>`tdG1k%rbfXXpZ@!-W!E zLw$P~Gw~$k63|4b#j1-nMjBfaXaoo84b*3#Q2G}wIgQS*-&SYfLaORw%GF!Y$1HmE zudlueH{&gFGqYqV42n*p8ozP;g0OLRcoKdtewV`O+=<^R2o>XG>4=;x4a&(<(@vIV<788&R99HkN_#4iNQbrm&G_iBDw9T3;DexNi^|$M!N72+unE}h0OG}`WXkh zkvZz$1+*M=6q-KDngp7+_>cP0%77JcU}tHg-EQslQPw1&$d&`3R7^Nsz+sKjNr1DK zO@4c0u7hgZLHI)C&>`~v+#=)?7>JhgK*DDj0pI@IX@F-=M^X_?_yLc3Bi`14EFY z$xaVkDB@Xkh90QLL=a@g5-)Rzw{!$rgMmaDP-xd&DW*Ae==#gE?v&GRNy*f%lyOW(VJM0 zeBx{*zIxM@%mR-dxd1$3h{$7oVgu^IlihMA7&2@q59qx^JcjDQ;}OvK4Apb(vD6Pv zL#@}J!94IEj4||?Wpr^{K^HYgtz!irdJVzD-tFVaepW&D%Qu4Q>1T)i7n~dQloX1z zVjrspSLLb)TV~qen0oNmY_hR%h5QR^01`X<6O40alhI7Gcxn=xk;kZjtty11|BLEP zb(I}Ihvfo0Vma7q+iQrw1^8_zB7^ud)HW3v*mJ0@78!W0P+J8u=OLpbU8nPagr|TK z3Eyf6FU%800M!~7PvU&jCPouygOyH$?WRF8-+*>Mjht+ATF{u;Vvp0J-L$wS-+~sd zEnptxOG6g6c&F3iZx9yJej?w3amiFyJ26HYME{C|{&j=?!#q0UiTQcuM8TUXrwkb? z2XjLs2h#YJL*sfw!?IlkGd^f?^bq6XUjgh0s-d-(i^1LWJSvy^Nv;NBT*!$#-@%;+ z+?9D;F58Mr*<)OjiM!3gg^ko#wn!Pw8uQ1JrFg;{MI?JEFcNP;8?oCwH7$NyXHaXU zdFniZBf-SRl-DYqq~$GMPkD<3X3evQFGS-(gwvMJ8MD8Gi;7?Yg`f3?TEst#YZ|60 z_i%uFMpyx3ZABqbOLvigf8*3W!2x70MtQiC$#x`}B&)F@fSd11yAd5$yfa!tVh~ zmi96Djlk!uM6_i3ETu0U-x{Ayow~E#M#hnWDS0hMJ8n2uTJp*X{>J1bX=zzChJWZ% z7r0~PHTcKMrEpjoY6`=YA6c~}uY42>OS#&TSIy1Cc`?T`4Ey!^GCdrFHt&p@mMOy? zKukVjAN3=)^XGa|o#;an^1~>wV5~3IQ`p;9>AxJIo_9C{td>Yofdl)63&xDLQ{N9{ z=)hRM)93J|0GhmSIEy@bgmEpy;_V~q$WqsGMyV{7GZ41cVroo^cw3r= zAv%OA0s4k(08~pI02%lLSnA$V!HQ`rjmz04F$jE>6oLoTa$9`k$~jScNBE9iP`J@R zkzjlOA;BVJ1k(xhx}vewKO$P8y(`*H_Bf*L`-eoU9xEE>`s<3uR{w}-h4!v!ABS5! zX4LloL!w2;ipF5#bwy*Ve?+uGdsnpYj5pJU{vpv~V@0Evy!7?v8e9D%q7~XZqPZh> z8HA}D8AfXRM!05T@#YF^hrJ_QA;W%k!8j|aAK`Lqdvxus(`8qW1xFSGEG^gv)ESIA z13?j6B_3cdF^@%jV9yaafcVl2Co^&?AtjChYrJ;^8w9UipTJq6A8f*#U>AykU>xuu zo>;>fR$LCA@u)*JqT+i|;mDL2LCp+fkr`~XLv4MfZj~~-ZuJV}ThD%-`j(072N5JP zL@<%E*+5l59Yz9aDRZR|M-Gpi4sK1XqynHNf+Y|3bRK({;ekE80%>9t-06M=0BqB| z=lX2!sl2+|F*-5vSfz=L)}l^hp&1OqPC*GsjAtM+PGVJWRG8_{Zb_SP%4~gbSn9Cc zvdOlGIjr^P>sXqC6MAg~{HPb(4B#h@=io@oG-TV5#j-(YyMbbOTpdtwjjIZLFjhmy zkQ-;p4qnH9pdNkGaL~8fj~1NJ4km%V!95nQGrmz_0CWA75PuW|!rMQ{x7>!OUB7KXt zv-wJZW>HM?ZH8np@pfbaiCdA19Kf#1+uGptGp(STcc2W7akRX@$Pt;!ze@~1&Frb>O{Fc>;;F+dk+3WJs^}@Kxyp%aM$J!PH)$fQz;n0&ar` zmLIj%Yebzc43>jL;s7XBhHX$7%XRwXuq5MdJNH;{k5o=Efyt zFfJ!v;sa>W8Z=f*7tAxa7+jI5&C|;}r^I-ijjSc~a;C=+{F6Amu_3X5u5SY{Q^N)n|?kzl^mM4yujIDjZ+g=1}`XAZQPhxCU*B`%%_h z$gk&UpwIYcDW9evn&|%*Sq<=%o{9ai4~MVU=tiq}{#Su|xK_d$)H`sm;Gk3x00N$X zGev-QIfMP|ySbv{V4wv6#(mj`0jRIz8z6$tAn276&=P`<_Y`9-BWMdiu+7mk>Jo@a z*_d{iy$;~Ix&%T{f}jO&_TvWRbU`k&KPmw&Cn(^Req1c5h0-jXBI00$1n8!-bH}aX z5M(>Yt)j-WH=;^sTb@Bq$n0m10dq!We{l?W9l_Il#p2NXvMGR~*3nvcdn-_vKmb8T zwd&4stGEheA1fj>OUKkJZ}s6YSI5W#Hs?kgOdo7t*Rn)U!kiP-9&|Xptzrf)Sm+T_u%*#CK`Mrs10*in z1Hd2*^Jn0M6Tn3+BuA{vSigb5DS0LXy-?21S=xKp&|5_)H z3m*O$u-XnBQwK^`Yxgl=o-$>)gM7{2=e%~CF&k3t8h#pwRXBk0Nj+Zp)oGw|NB*SG zoa2pAT9HmZ&Y{K+FglEOxzwY?l?@L)-K*6o3#D-ez!@A}jh$`yzd<~G3uh-Z%Z1*_ zYT#yYxsaQ1&xFth$_3j_{5vUd*>$oSyw*7b3YPIkG3yydAOeKa&8Hq|%-U%u{)1Rz zKZyXwPW&h7J%Hpj?oxX6jt>qTXd9m}E%k^r^Is^0T28sgn8bg{1kB7zGZGvPA=SJL{MPvQP#@bRptuOJD^Rr!ebL3H6xqNV+$XN2g$>% zS+*zfY35|s4lwo^W)HxEyaz5sGV)oJXDvHUM*qe=(dU=v;sh{8^~(&uNF(Km3f_x; z4i$KO-aNiw9uMJ>co<3Ui%7}?{>+!~ltA`X#4{i``h}XzmjRi<6@1Ck%p-N&aUtXnnzjLF>lY@ zBZ_KMRXCl9nd1rE`dR|!$_mF3kx<{%=*8wEQ>4+mbi!QCLI2Mw{nn`qFFR%s1{>VV24&JR?~UOrTbaj{qd;@{%@@I% zr`KhV_e=jh)9cGJ|BV{Qf9g5WJ<}VqbG5RuXc+F9-jrRc&`HJP9*%}}aPFBtIoqk# zQzD^zrcce@sDj#n`S{l5(s(klhi$HXxArI*8V1zJU~lC-9hoH(1R_Bjx5u2?Y)W-sW z?0&Wl7Pk$$ZPltDqB@rt^k5)+3(?Dp(aT))GGH$F5|iZyy)2Nu59l?Sr`Q*-sMMQ# z<720d6wlZ|_EUvMxXQBdc`)GIHsjruO38i`2Q_YlD-d-yC`U@Y@Z_K4dn zI;W?%d1kcudEeMCk(x1!57Z{%Abc1%0B^67~xzl};bwOIZ6yl7Lz zV&*%j!7&kTtu9*nDn9CnyqU?GLF4%yk>H!0-|khr81KH~B4Fnmn5~gOBxt7ica1D% zZ)}ot&T4-#UY(u&#%6A$Eb~3>1&)|@9}SMN`#|Oh>*0YJA0;vDSW~$MexG0!$h_T& z8-u|coAT^CK*d-~?gu~{rPzia;NrB~!R2eD?1u}u&k%Pzac6Bt4?koNi3pd7A2G|7 z`8my;DNok8i*^FW>hR~63oQ{$QQRjCsU3#G<>p>t+Z1!3v9&hrAASKX+RBi55gCL= zW+PjRwm78bF+t(Hrovo1tTdM$!=b`~kaNqC2SSM-BMByc!tDPb!Gx407aaF|durJQ ziJubsGbAy*WF3A9ne3M#GV(uXO%&o4T`rA!d4Q%j3bo!`w)ld%Y=PS|VP9G17eI)R z7};+NXav<_hszS9D2D^D&yC^*3ql4Hzhp~Xt7Je`llc`(&Ye(c!E3vsJEAgcar4pK zCD7D#d!z^GxJPA40uooKU2Ignw}x$#(ZwD5)#wwErxy_@uA5;bp(GtP{Z3^X+D~G8 zIe=vm7m5ebLGIT;$^3?R@~n@EzWZRDg!M(5CW#Mmqs9BmSwIjxz%EU<=&srs@L<@x z+PtxaX`WSbj}$jWPvnrp<%GO?iPZt@0YHxt^`)$H-L#-Dy=E%)6)h6v-D>nr9uSuC z{u*r0Z)^_cZMQ79hqr?oF2%l#2W})ojuuRT`k<<&wJK12F&CQBBlSuNdc0w8rWx!Z zw4=(gk*CUWmVv`e&czGR-xQTu<1Bn2p-*R>HN#MAU|P`rR1>`Ui@iWa%Vbj>^7s{_ z@XonTWusgk!GsvA+n~{{&Kumf_c&TNXR2ld#=O`DL9bC5Xj*#DFQ~jHUV&QLO0Ox_ z>p3QczQPDSLZSIRQ<0q??>f?>4iW##RPvGiD&}PFw>naZ|HUKo zJ0#B7+A;%p#=cvt?9A^`b>I(3c#WE-9TZRf=7Mz_y`dAq_(gKJqtlSz9=Q>{if3aY z1`8i53_cx@KWx%+@6?o+D00kP# z3__qWa};GD-031@US&&9fZLyzO|%)mfSANp?;8ifmep2aZyZFYyw(6m2)p!42OK`; z(XeH~Z0(I18_#k)J$M#bSVUL#;$86|MvH`SFa|D3qtGViMMr>IcoY5>2u?%yp_6Ze z$Cw{)a084A__C#0BHm~qfI9FMiV(?*o)eoO7X+E2)itkC9SPKd3}3<2q5BBF5g7KN z@dc5XQUf@dQCzXzaXm1*s-9IHC z4vO1y}WRe>@Z!Oc<*+m;S zgzi?HMi-~Bpebs zX(QY_d?{~CMgn7RHEoN9-PT2vw}NsctWoG|*Oo&yuU$*S_C&&451fzQsXqqe$B!ol zJBwowt{ABRMHpoTl!)zTev}ZAFM8xCBGwiJ;$OqCI)V5s6O%mztzt3d+ESX)acuOSvHQc&LBEA+B^uuKQC2w^jXYMn7YT)A{Q)(=s1 z$%{G2%8F}HW%cJ*mIYmN#j$JKZH|=1XvKmjDj|-(3qEy>La-yLOi{&U&S>RPhyc#l~LfEL$K*s6U=-zaxaa0^#n{{T)uuKp?agCmZ zAv>Nn;5D(prRF)I6|}B3NJXQTA68yzYiUiqHbR{axX0b!=rXwQZg4O5^kMGa>bL3i zL5cGOB|hv-H5HD_Z}?CJu`d#YBD)x1W@4;irbaUvgySd=*WrQb0}ng{&N@*~s9{T2 z8h+=YB0E)d%MGT9S`|8Tze#}O^|kowk>Eqmq6n0++e$Egg02S}m0F?^GfNx^7_I6BuOjE2mUcvUj{MZS6ToaNj zE<$CtAyjz9c*TW;Y%YduBjlE1$T@@*zfZh^>uL6T#W?2@(o|kVnO-Qnt{8&w(VM-x z7;+vVj{<@>!r0`s$Q76^-fTsMd6T-td6RlYC!uQq#hcy+#oJEEwFZKasztYI%@k67 zlqJ|#=uiD9JE8OQx+$T7$6KtUnM-^6ldw2)2zJp%WJ!pJfSKd(% z+`5X6-(#O92WEfyBD8_2k?L8u}Vk`~c5{O4YW>WTFNyda`%QzO4=+E9U0-@|}Z7&gspkk_p zfKLUYG>D)V9xO=1NVxC+R+wLm5eBlfjgJTP7|0vM~35y;GhNeyH54P{!8kbNApFNEtG(~ue{mUhh0 zu^}!zE&K_!a-bEY_yOX=Cs_Qy9ljIuvd5}RWhKj*HnI|FnG}sA+L?_?q&gDKE<`Im zwL&9Q%|=z*GkB>LIa(K&{GaDAUsm&b$6%z|Jv}b(2-}dVM6CdnXea97CYjgQd7|8U zab5@6Gsy1rdNVKi8iAbLGrh4`x8v-Unw&{Fsmz&oaPuKfyDP_zZ~&~d))kXWz%O!S zIlb^bX0dJZFChFM+vY|2@i7Vn&v@NXsy@2MF+9&L@XVv<1CDp&$?*R%!-K~#+!B{y z{rMF^Gvw~B5Pzy+(eM8J>Z|5J5F(lPpFi>>0$%JyMQ-p6Z=qlf=IJaxXJFtm^B^6D zW7b~JFg6-qt`>aS`dz(Vsb+0^ZYPXrv>P>raBs7xDBk5R1!3f@S)Rmvki>_Sv!;4< zyk}kFoKWKXirplgSOA2POGpbJ*z+vq6R_F@);@cf2qFJUI0vC=!~01Yei1|Q5}+VP z;z6Chh{0kht@v%3-7>r5_sDc0z?F_un4HgKh{?Y&;dcfdzhuI{S5r63u2oL>Vj1U? z-o#W;8Ro&+Cmq2bACg+k+##}x`qPr@rZ zXd@X?9#;CpB%e763V3pdi;%q&<81S-r?)0?GO7}g0nz-z72sIx105($x#=>X=N2M6 zk|w!&m7v}g#b7m!#cCK2YtmS(#__NwkHu;li?s;MG>pZXG#*ytSggt8VbzVrnlcva zRP^{{Ep(!Tk^LO>R#THW4bURZOf79CEwebzW3+FS*jzRSm)}#H(c(B&*qCf;5Vnq+ zp^`Zr{T;;>@kQVN`>U_k&BEVd;fTy?$}L94Wp0sYqNiZ|X6Eg>`RIJaJG6V90rSgY zZ8{-BErB|H4}jCI;U3hF&?^0)oao22n>F@a|2EVf_1}Z4H+Wv#o*Urw1+k*(3*I>Q z2Js9s?o6Bk_77YN9Q|t~L_X@@%TAV{V)`g+63v(?h(cFM_J5&#J>|{*6}iMR;AB@u zbU^- z!Fu=#2HJqVAzv{Ucr6QB7IgdpnGWoLr314|I<_$xWO5&qN0|J9Nh2tCEJ319gFVui zpfks5>_ZO2xF3&>dE~+#X1;M--Ml_~SZf`CPWs_hkoEx0II$W@>zU)>tYOWZacZ7i zop%}UH#(*1tG9rYhQpu)a2RU=EuKs{GFd-D?$u$aVil{{tteK*cv!`*K(QLfVx5T| zi(P?YHI2nO3s^N~rYgduu?XvcP$cA6Xcg-LD{3=&Y#Vx^V;Gz=7E3(`j)NSNe5#qmqtnszUFlMuNgvP7BWdzXT#d!!7&U_n27R33U2xnn> zFWw$zeaPSZ_jYb(>$laPY`0X%v-r&FN)UPmClyZIQ7?8Q|C9#X`vn0lPBFN)vweAB zCAR~dDel_dQqdCW_$UA!k0YrI{qR*H)Q%9HlkIXm%?f>>2$F$+35{F2#t&?{xBa;-jts@KQ&{YUubb2b~+}FS_onb$3k8$U>OU+`pZc~uIfY2 zUhMX&Uvk>o$B3ddxG1OQQMjs*35T~D@V00Rj;W32SWBMkLeB>61n~Uw41E4l?3Ae@ z{@|EEf8nR~C+n!k5Nxe*2**HJxE_&_BBRlwYcs9+u`o8np)S}A#k19Bz>?Ywti(IQ zF;JVimNwI#yB?3xg8&wy!PuPO*tG<9Vb&629`)adM$THonsL{X+Nishb;AS-$yOtaxiJPH{V%x^CglpT^AggOhP`(Gfnze-WSWA3RZ?SEnaP+*=#zVm8Qs2^ds>dsZR0~7mBZPPHe%^0uvXJ~HnKPTp$KIuuE z4mkmEafqgjG?p?VE&65h7&VM2YSS20sEdj+{*yUVHcCvyUH|z3yyVf)j6{m2f)?}s zvrXp$^=IY+O`|XuRIfT0;5>9LT!;D*4yDe8cW^G`&-6II&f-|%$JRH}dhd%Os2vgTdICRCbjvN?;T<+X#?V!}mxFHBYEV|s*Ud*lFV7n7TmFY6oV z!YMmGti`1CDx-$pW}pW6<;n^0-oeZk6p!h2Qhj}9D=YHv^iKhQ@J%KB72bnE67bdN z&?&r)aoc}pn(PEn=A2+DC;zopM9<=mSW zGp_Gn2^E@s#BD~IZ{GL+CrLnNT+Cj!hb4nk;ypYss`-%)#t2TfoChq->XA;Sx*LT zUw^P{Sm!n0Q(lI7A%C&v^P@rb4ik}+@C&g8S`ZR%#4jv?Q%KIkFUCa!rYN51Qe!Sm zKyA-Jssg`p{EB=OuSfagms`r)8*mFn)0;w%)mO>62#NgiKxkUjFPD}x-K^;gntn{v zuW0&`;@lmo0)+#bo}_SZ`IjpF^1;c^Rr#gUy5AF$qZQ4eu$*C^R2G&$StphGrObM+ zYPH1b$^GM~4ar@#%^|=1Lh&~!#xJ(lUN0x_i>Y&3>r?PFRM+r1th| zrma;cL1BodKI#L!RbPolLD? z?*D~cj=}cJVsvr;+# z&oF!Zdkxdu(R-8JQg)`NN!B0@$z_21#TT0vZIbY`Gd)qsdLM2M$qiK>vqLiKVOn4L zF*_=;I>I-4Z}&yzH_Z<>N9B1<6F$Pz&=}s~g8o$568LRwsvKwiHWrdoEW+nw6#Vj1 zB{kWg{IpdQzFD>UqL29po0+DjF@2

33Ay9{^@lK3l_HLeOwnj>D*hzWUILL{!z7)8MQxyT;J7RQW#CY+@{)l zLV5doko+94GX4g&QJG&$EBaTAMMy3Qu(n#|>aJ&B?*qPHrUqI2w8}L}dw(1ph9y!- z{ue@0zm#L7Lb7cdE#Y_ZY0;2;K>1l7C+7=dOndzwv+?PP@>4O1{7(;2|3}N1`l~2Q zV-vahlaAe9Pz%W zr?beyN6?_~q<|k5BQ-PCwK4fd3|`_p|mJWvqQAN+}vE$oWN4rY}Zs zXEZDCgkz#7;eXX~O8udxrTNmPDJwbX&qQk3Rt=^UptU)w!haj5ANs9T_=<2{F(K8L>#f3jlURd%T9 z5tKU6pUCyVT#C}^+WW~W-#M~aOV_Jj&XFbBuF*@(b7ZNud$QV;mMP}H*P7A_ExlZ0 zN-MSWt%xbD)>5xiw?<2eu&G;%lE`}}nbKKWy0glZ)+^>32lH$#r5s*1$S8D{Y&Mu1 zwREq~lr}5Z&p0w{QBC~Bp>mE=3C0cPd0JZSv^!rh4>cZYy2v^QU-WYvZfH8xl(drg zd-opnM~yGVUG?qanN}_D^sv+|DXn`&>vqc}awQ~+ds)|y`@;pyeynz+VlcC^uc$O6 zR}^6$l(!buT_rbZ$@G3B)=pCC)&6dhcNMj}P40$Gex%{MLBE{b#Po}ko<(}Jp858= z!HJ^uxhL$R7zX z{iCM8v6=s_raL{%uc};%bdIL)o=kpjs9gidvtibLvi^D75`XwGE~oykmgx+$7%jqKl4AEvKb!pnObVHc@oo|9;V?S;YR{Y|ETGl$_>g7)3YMi z`^|`0@^aNyKr#*IBfWXjcBH>XFKAWI@p`UdHy~eV=r602RW(CMN5EU1oTusee&*XI zGyQCY>F=wU)?=*eWQm9AkmB4tZL?h`-QBpXA(KtUiMSZ$#Sdx zHq=^jJJLfIQ?YL^vt(I_l2$jr7x`a#n18kDUQqZ8QcFH5A3^#VOEqJEqKtGtgSOYo zLvO0>#JxPMz5LMnZ_sSB->bbm{RVq^uN*9p#5`>pn&sOuFY>4_(#X1XT6eWW^Fl2>DyDA5 z3}U+deM3ub-BTrX-`A2$<>w`J|65Y}o0jg7FI4{wT6hSXOp!Zer}d{YuXN8er4DZh z>-g84(*IP)L)FqV%hY{7IzLn|_qCc*b7To3y;rn!ZSeci7d$w`Yh&HD!Ivv%;;w#! zQ<88kN&{Lt82qXKtk4v>%PHLv+lbO<9n6<%XX2IT)21ZftUU*HKhBpfMCA7nw-2zf z?nqatS@>7{p-=gC*pKba3ND1G`*1uLnl5j5N>eNGZdN|zlrFCy4JG6Or}R_AAT#AO zZt2nP5zL60($HZ_=f+riPIpk(%G_#}?p|c-{*I`9raXOyDea3MwLxWxDJ_`7(oLom zJUMb*Xr|oflorIBJTv99T6$D!FwbYo_GPABF2d69uoELM2cf~4^1>QZdO&#zuGNy- z%S?GhO9%0t#ZBnpg`&Dy^0$(b@61BGSyHW~M`gK}f6?sflDhlzrSExX$pa4NR}qD^ z$k$CN_?C)y;7t5Er|$QY!nhb&vxz-CDi=dbt#Z&Q9f7ZCl{>U#EV)(Qr=?pPw$T4VdS$98AS z?WRs;*dR|A)oqX;7u9W)igR6>lgl^C5~s93enR$iRgzm9xq(l)JTLG;xu9Bwx3={33bbB4V1l?ea@4-65C8FD~CMr(bNS zP=+0{QA>|X18lHMmUb4}b;&v{8SQq-;e6f9K$kqArANg-Iqd6}Biq^TQMnQREG55l zN_EqY^QNRc$vVSJN@}!p75-tSOUhGnf>T;;_m}UKt9KFeD(OOLmweDEU53(bc|=Qw zm$W>kB||eU-*+&vKPpelZ=BLS)+Oba$X}dNnSDw59G?~D`Fzql%1fqXRbdA7%F9mOPo|!V(x05VyX!6o=BazMo%KrHCe*Fa zlHs~nt}ZFPT}wuWUb#z4SK$60_HWVp`AI;TXgGjdv{ zz;#Aen38gxk+YmSa-ET_P93?<$em7!TxaBcS~C4*jF$T4XIe5^ z>X&quG>w+}g&*o0JG10cxkF1vOIdlBQzF+{xqN__hR>{AZA!{#R&I3a$Y)k=ck0Mz zR=(?$$Y)l5q$R^yR(__XtE3a&Ix9;C*~3-xB1SVS&pD+hprx!Fzn67JyIEPRCBtV< zmN+HynUkJ<#58>7WWbb^&z$fzyQ|NfTdKr62_1c}31znq7Iz}Kd87v4saPIYxa&a5Zq$xWp8Y}5v||5W;Du+Sc%9Axs*SY-)>JF>k51ZTUeX$NfGpbx0e)H=hCO&{%@OETkMG^7$v#8!6lJ3FyR->$7G9HXE?nfXxAH z4q$Ttn*-P!z~%uq53qTF%>!&6U<&|S0N4V+767&Yuri?+jv)2pM0+mIL1!YZ#+eP% zg_RCNbRtu4iSK%XrTOPN($%6TI9Qg`7~l~rH^!24$J$e9E8Uv$}&TjEQQW-6J!t$DjO0QlwBn|BtBs-ITvsf42YKAG99>W{thcIwO{_%RH-N?RErz zC1Qcy=(#_(!agJqWB)tN^SR0A*fTvlCSL%^ld&$l%zCtOw>{VMjmi4~xiY@lzDu?= z9kv&G$~+%L`pHJ7D}zkuYx+r>`S)sifA|69w@oJGYT&Q+G=v|v7g|%MK5B3Ce9-@d zeMD}p{f@oO4%I$mFSH-RX~RMJ%^R^!z$wuIdR%HPujD) z>|)Q5XLRz#o-ga@d|Ah9$g?;=_*_l*RWpBF)y1A8vakLU&q2?lWf{*xi@T^>Js+O- z0Qk4PGv%NsS388>H$@M4?vv@@>X7FEc1(voU%<)IR{8JvVf%j1-1_@G+pPCb`8Pnm zQS~X$VS6#oBDPtl*Kf8Ddw!1dkeBS+!(YIe#CJ5`HtoyEmzA-064H-*e(U{j&x4+G znxFD?E6r|)&WCDV05zUbd`(B^VbAL7-+G>s^`UC-W1dHAYrTh{jY-~v^3%%Wyqhe4 z6SBJVQ_c}5|Pm?IXx{5dy7J#VO*DbIUmH?QwV$>048TvQqzxHp9_4- zo3w79^su+g%YD{;I=_Cb^XtbtztW01g!FsfA&Wb#`>h;KZ*H}I&}{o|weE;By&=r> z)+tOu-*-q`MZ7z!!^m&1s`W*@ZDmt^WuEQz$NL(+w^q*dJ+1Tc8BLGKf#7Uk+S*xV zX3$B#nO^GWkoBzhROIVI%RuL7Y%S7{G;j0`Kr?@`58KyHS?N9G>8V=jJ#6z#Z$PDf zTE1KLH+e?Wi1%^4PnhfFj_+xV0?xuTo$KYUZ=u)npX+j#zg=&yQK0xg3$( zeUDk`$#?sLiGdi26sSX1G1*#Fti z`a9_Pu)VbGuqWxgIq(GVrw5@E@2%b={=dm@yg&Cp<$eE@SNuo3eV)JgAGEond)|9u zRaxLcvo0W=8F<+K*Ty-4L)JIE%LAMpX92=J+$*xa_65%?-V5S;1JBFJ(BToBArA+R z$OV($9w_rY62BubStUB`xygUnbC+7O7c0@p;?))Ed1u&$^fla=)Y0H8y zSx@`c1=sriYLl{!zSjB<2-919>}AxqA^4bmR`a&tW8NFV^YfDPy#Ncj%X@k7py#-X zcLaxgcQn5b`MsWx25YQW{QngUV*P(S7{!~N$AcAkckpD;mh0u)NN?8kR-}06XFU$g zBvM;a79nZm+Yu2ySl*6z-CsmHNuEb~y!;$#i+C#91^=KJ(o;2EuJE&@43I4fd5fl9 zG7XSDau(8@oL_O3eHGr~-D}?{=ZC+9^h;rn=Ldis@3~QyS1tFvD4(qA^87FU0Mu1T ze;B(L=~XpdNMEYC3hDaVdy#&$_De{EbuS{_S-0Fb z4EkM~UZv^1KKA$}&A+HA{v-+@9!-zebh)NonqH;py_!B3xJ~}G;_l!t1#gr2 zl}pNQlYNz=NFT10^4r7?FRA<%sBPEuZcQK3^f^r>%-Xo7&uJ=Ege=i?yQZU>-mU3F znm(tgR4ZjoM>V}$(}y&D&cGwYxm(lcG?l3KsOb_-w`(dfg=@N9(@{#RgL{Kl2R|F+TgMpoBdxI2 z*;0<^wi3~7l`KHiiobyqy`>zxnDA{#f8oCq>A%G8Li(#(LbgN>BkhQP0BL8%hmoEz z_1}z^k5HAhy99$zf|l)z5)9c{?!!xV+(k%T8?xkxU+Hoh<{cNZ!B?{ z3a20Vv)wp_s6~1i+SzhBTG(ou+_zP}gRe(OfjLj60&||kfjJNN z6J{el0hse-1~3=MJYX)61;AV&Cj)bVbO3XKECS{NISrT#WHB(?rU%))+5%t?N{tmJc~W6JYAk&c;Vv6BY*Mz-ujErvj5_X+5Mo=kLY`9;B@jc4ps(?7HLt8lKeIiHdYz&dK$pa|2FxJPCkX!~;sDJj|6< zgMD4w=gQfGJw3@CJt<_@uIwA^O=aEEhHQ5#o9ZqBu1M`%ksL_wNaomJBdXI~;I61K zG=|bTFo(zHR3B(;Oz!JjlS+0|ptXH@Wr3%~y`7!VeX^%#2;KJ$%%A6~1ex)qn$wAj zG{wfVE7P4)Z6IGHD@u!VL{JIm$%=Frhc%fU+CERtO>s<#qQgJ`wYp)&P=AU&A*(&k zCx>W1AIGnT%xkn>Ae%D-a0KHCaMJkTlgW^rwm#E6*ppf;yOX)j%-(c=CYJ`ctH53*?i`CvMkd*v|;DYTx#Ha*-?})z%M9*UjXCl$#f-+4JMW1-sCO}f>4Jm z_oLGk$5_tGWP7@oXL|cHeW|{I&U5;^G1BXk>AtPW9g@)wnOl?0_GbEq)}?nyZ>|e% zkl|=A!#%^@&U1ZoPwGsRSN3%;AIxS!j-{?-UuSowb4NCn%ne)uz-f!SWOX*#zdPL} zyPW5iq1-^Kw|#l0rw2oaam=-^PW7d-K*?q@1MBc_l&L_nD>cyR5MQ6{OYTZ_Z`}>b z-D|r+x2Ll+-IpFnCwuZh;;%rxBzw}k`p!!a>?YT)I2)4#UAsG1WcmiS>`v}YZOaU1 zwR&myC4;#E%~D<-BRFUOKSfzOykX|u5=1qZBF*Hp=;S&cBgj^OoYEK zvlrE`Az^`biV_=KD0~2-^=QKtsji+R+{dbPst0FJ-8+$PPWP(K$v#@%>(E}S!-?6^ z38RwDNhFzmI4?Yx_V>f@2%Wk!bGA@jvJsveoS6bNg4rf6AL~;CyHRxHaZ2=J98);? zK6vbWwHeT*J?T{6=44k&Xk0nqAgcqj0WxRP-6`47zZ^bFfWI4DqQ8`Mr*;hP(%iaC zW{+l8r1t6)USkFQKG8D$^lrlP*@MVz&6tb6Tar6d0!NyIfy+R;YY%usF7H%Lv1>4E zGBk2<28_+AUML=VLVkHqDw$oL?Ai_1GTDJ_GChzp#hsXmq_rxO-82a5=@gva-pn5K zne0iy8asRWT$R#C(SjjMbA^RM)^eT9QW1KMKjSR$?i;e=e;w+nT<^SLfe z-fX4^-U1BtnA%;%1v*FrrrR{Rq!QVJQ3tIwWa=Io$iN|yGMq9D3p&`D$_|u5(tR%M z9P~D{vJVb51*erwVKm{=)g^3&LUXGz4YkDiC^|Np>rU;|Ck0zJq*(+RY7nckMBTa@ zOr4b)+NmY3srka@6#N=gWUMdOxi^#UN+IpRa_+*C3~zcmGku*-uC%&quy;&@Tx!1y zS)J@(2YIAOHt2>P1E$D%L#B0&p}lGWt@A+5WG~r=xi>(>^L8Vyki26@-kEmGQZNCU znyxYDVg6?Jb(*DZd8Th?de2ihI?xh2`tB+X#10GBll~&Lt?BX0LV4$%xQwp%9xm>DuN6*mK^guD{T11CQ zI6};LuFqYtlOjU-M%iRHW^Hy)f!eR|u@%cR{X^OG zuHEBS_4X(Gh6-&Qf5JY|&yI8tCTyV=3*@H3)L=>wkeCby^;`_F8QwL?oGEb3UAHP* z(!KpXDXigp4c6w=rGqI1F5QTbwxlnED>2arvvfP05{RWY>=a|(H2G!f9}Sd!f*M!r z)K1YAiy2*Am?@%R90P&*MSumwsxS+Um{=_7K${cVjo&qh;dc^YVE0a1{MO_y*T(5p zS0%gPchs#qS@!K@={KD$IfiEYfDD(H2BmOfwKcSMxthcz;d`-SDoI>AaYPE=GFj$=Z(p(Jy<|tir7zKm|==s zTh!xdCOM#wlIRTHSAm)Au4JwkfejiI7)Grw_!?(2$domMJ$pDxduSSnx05}B{jte7 zn(NtMc5^+-FBr;X)0croplaYL*jc7}G)&2@OYI!MIOeuy(me=9k}#Z1_H3*O3eXLB zPmilkquiwcEXUrEfuV+kZFvjNwRZzfO>WHKuY}Qf;0AkjST$peL%U`pNovyH--8IS zH`V7bPA{}U^&!~$%Bo}>=}Y-DH&+1r)!W4 z$Wk02Sx@FSNNvNSbgbgO!j zyK*b{WAy2DW$f0HAtv@KoQp|>I?hQ3^gO}-+o{#iiQE)z&DHE#fsnKq?6{>YY_QM? zoJ=N*XwKQe6e`r73&k9_6ibPW{EE;f$wX5dbnyj0Ft}!&62H=CF=$4&qroVH`;0^@CrpEOysh!TglU7jJg<`IC zr`96s&tg3yB{T!L}46HDw)omZ95lLbb(%H`^`_l|3R<3hha%e>cVBKh~?c13#tBK}J*yLn; zccikK#g-cWL}LRjli+2kEN`8WARV%HvOd|bPiNd&q*GbmlkOLWV)>C*i2CqS5ZNw; zu&XY%S8T4(49Qlf1~dy>Neyi1qi@G{!^A>u%dtPt8b${D=|aH+ly3$mlikp#R>&%I zkbpq;QrXhOsVrHn(rIi$p-vWenFq%r#m$;IM##!)d@>1*z*iyWTsnZT+^umJZyq;f zIqW>>$m;CDE`JA(+^~1gx?au9QA*vZak5jZfGwC7LoPm^&T*kC7$NBZPCT$&n5Q%P zooiA(*zsbaLLA}b)hju9Bb8G)c5*n28kAsGH{EN}qZZB_jj5;t(ND=@QG9fuOs?ie zUvOxX!qEYnyTrr}9`x5jsOBWAP4l3BcV>vmeJ=3l1lL?A7j~VZU&i zqZS;#VY6A{kQU>Z3}--kp!*sGiwKQD)}sxY9c;*KE~K4~Thx7v**apeA&4;`LtLk5 z4zgA4CXfRP)g0@^E@CYdz{^W4hD&6!K_r6 z{#-$FX8-LLa%TSxWoz9Q?747ys5_TjA!^}-b6`7ofLXMSfzYN6=;w4e5sqn|{;DV_ zaU6&SD6*4b3QwiC=wTo7@T2)W;8=cfQj)?^Ssr>`7Q5wqDZe1(A+Y0oo@X$V!*$5ypv%qyC0(>&aQ#JJ zT`&*Cv>D{F>I`5T$4tpg%tvid%&~zimDQPNxqwmv!|K~p2c)jMyM6l79T=waJAY&ABh* zu7%UWn2Kx9;54(BZ~; z`@p_bs;_f5j!S`E3LMy-#hU<(_HLXRrZ(n=c4oQ;bGlzk_94Tibm;&$Pe{3(aMdyl z1F$MNK!d@{Gw!N1=EtPQVf=vcQASGHu;UVfIOQB~2!=&>B|YgqN|FFhK0X~BcFiK! zJ`>1E+Ib?_1~h-v-VXQJhw?bfjk`KvXxcUMA~`Zrki+b3^i2?aopTy)M9iO1I7O}! zbW=_-V;UKa_F!wMyzWl%2nRN1&ZHSruf@3v#xKv|=6pQfzOol!eS3)2hif%L;A|=f z?_k^&wj=|>S-dfo#i;{?#u}9AUD?A8-~ir5?M-JheVRY7hxdG8b=jECua7#}r z#q*UdJsG??Q1FTj%oIL#LmvV_8EsaBMc1T9wYC zupaL#ctC)6YkYCQ_*?dJ>%&z`aGtEM&k(I*jujmkE7$w^_HvKLq>ScDV>{StPi9{V z>(c&GHuG&*vzp7!ezUNwMTorLSQTBBDViB&@?FW?AWqkFz~YM%KKlxXTP$+nOXGnU zh0p!__wy|=HvQephTP*Z?O_Oh0B<(>1~%+ubm(~76lb26O}wsIPOAK}gSP?NzVN!6 z5J<6df2wPc@3GuH6X(@>T||3^uv!ku9A~iLt@(;>7hVPpq;_FL0_m9oeQOa#T#?SA;xgVmku6*B%~}tByKvVgjW4WrNgQAQV{4DQNJ)idP>Rb=+)B#gNt^-T zW1rx(G4%s7gzuM9z>q*YZm_hAtbVh!v-ryb`*7zkCHrM-f!-OLl_R{N1W!GH$8rDf zjd1PoQF$)f<5&}%C-K*Wdy&I}s%1*Mx40HxD5g|;d;>ITEGFfnW>8nY9^4E<6ZmlM z7`)y>UD;B!7-WmavDBz#t*KfDZKl8l)<|MDkHy?kS|2$Z^h;!_-L0+1$WleTB6(si zR*@WvQzT0sr$~lM(#gvaajE3_kFkD?4D~M77~adaLQ={pwdbN$8aBj{8-7-=CyMdj=mov+NyF(@(N!*wLCj2FM*@Zq*uY>Q>F2X-) zB3@R5B5j4d_Z0WCe4zzyal(*h*bpl(d*oI*!~f z(9dBmY=VuX;qz#J*74L&>FkQjdSKF1avo$wF#D5emy$*F?NxE1H|DI>@{~BV#kGTd z#PM&{;M5s)`%P_2Tt}B97ccVY3G}%W5cV^KTc}E@k(9=AqcyQO`Y+4@TmpgrU88=2 z6lC<>=YdpK8&iF4_-`8+8blWqg06+jRS*6nBV0)OaFucZ`F+X+a}*)2hEAev7l+Z) z8L=Ek?N0p1g@;bMRUv&2Mbb`dPh;_{+Vg?Ap{T8jRC~d=(9P(DCdj3jJR0#ggR<$D zDxwt9xCOjXiR8R609ZWEDAX8ZqMF?S$^o0u@s@aJvAlxIuNx2$FOFqB2|cluaWGu0 zX!b^%1$yIA9bd0pHt|wdO{P?@QhzpT_Mxva@J1KT$yTf*@xUw_v!K?Cb~M8tj4;QH z5V>?EAjWx8n_H3RNOdD`Mx4@^3ETsi+paJM)Y(4eml`POf?|psSO&sq=b$jkKH4}~eQ44g;lx7}(_ z@gy+8+aUVE#F>63u*m6J{4UeBOObP_8@rQ*6S+MX9|r(vzXNk*7n}w;gRmZjf%mNA7`t$}n)WfV3+6~Nh%$4{ zai*udR-bL?&A9n2dd)%dK72@;!B}$~Cgzp>^y^IHyrdiM)Ak#{vFp;Um9Nz^LnRYb zyRvRUzs3?aIEw)1!|RV6C2*GwS`N1WeUODq=8#yYPsBkIn5FhrJoX3^CbXHc^LpnTh7=B-6wU`;Brf=8E=^?Y>&+H>ROSU z!9S2@#*e(YBS?=xZ{m(h!P}7Q!pO?#ZFK%L{a$DAIaJ-c#0_8|x#$^JVjT2wa2;H- z+z#AWfsTuAj_WoRa2zmbd=!~cw%Jk9r4Wky9e^13$mwc!I&pl1Fdtus6svfuP&P_wxQb&i+-Y;7SPM(rji=1gScdMO^2k}m{m(Ap z*~BoV<{ii145!}dI0nH3jbNS|x74mcjd6mEos1h4Cr%%Kh-nDLx|ZV$ivX7rclkBT z6vLUgSZ9p4WSBiV7XdCWDg5mZMt96{fiuAmIY%7V%n|3f(*1Jb*n=k_loboZB)7h> z9J#@dM8?*Mj{%TOSpf>&uox3e74r^`>lrX`@|)V7;Elan(@Nnx&_5@TsUZHl$e@#rjpum!Q$s~ImY{RmyF%-#@(qDCvV49RFE zc-sI7Z69OX`4;?b^>bBME;sQ!Khz8t9$GzlV-k9Hk_uCWJHF54?8=C$!3TGjon#^kMPF zEh~t~+43P1iLe-EVh7^36&*bi_M?C&Q0!oB^dJkr_r@j0aC>r~HabE;SzNR(Ccd~t zNB>?P_h{oOXi36T!XXC|IXKf_8(nEd*ZR;w1^+ByWPM~)dB9T}*=9u>q7AmGZwP`W zKr!)~nna)}7}RVcnsA@?I6tO+!Zb_xY9r@Z6@GMIQDJK#2!xa!3{%3G#4H7}R{-ti zKzVfZLn_t^<K?kFU>}an|_9r(qR@*itPg_%=fDuhmJr!R*`a;C2s@9<0*eE7YP;6jV zMArKQ9#X`&uK?VN{~H2zUbPH>=O$Ge}EJ~-LfXL!}~n} z3x8%5M$54QpKXLrK{Cn~0DA*gw8rSF24wMhFzh(8zB&*Bq4z5_0c41F}LJ=uPnQwIz|^EUqMGHN0Rzl~WLLuZ(&b{O9j+hL5X6+L()48`&Z zENGe*2pOZj9)Dy|nT!mU38rRmv^O#s3si++@it|{4;TPjaZD4at0Iy#Q>FrX2z&g| zivsvwnm>>^Wrri1@S!Z_M!v%K2QeCyBM|3o9=#b{@Oe#SJ(R9VbOpvI7*Mp)n_)7x zRXtT`gI>){#Xnmef+q@D75JrnLn}x|Zw{kTk?vuG074OPEs-lN=yCK&C;$X_j~b4z zW{lT*__#o0Wc0D<=+~(U%&&@y3aS-CBLN6Mkgp;T_d;wqBg{zP2jd>3;R ztfWbe-p};P2=o)40>{XyguikN?N`&mkOI5{#==)^;Y(exA0539<3d&|13uV2RWf=r zB%=`5KuZ-0xdv8TQGu_*sly6<5pJMJ%i}ht7}~IN*zdteIS7p&#t32-VO%f|JQPGL zPf}h_QsJ*WNts;;1zou?ig`TxH8X!sj~?Xzbb})Puc@|Sh_q)q?{MVGLHrLN4omkURnv$b zZ1myZF?B}vZrD66D}d=4uGVP?dw`XP}@hcC);=>#d zm=+D}8fa@RRwcABnjd`-;zX{znWOEczSOjS?^OOC|6=|BYwv1)+bE*=Y~nN~aUFYQ zg+vOlpdtm~tZc`LT~H8F9MnjVv@{A3K1$-aBEoj0gfuD_yuNYhfj^-)B5^1OR4P%a zAPyXQ=m9RAdf|dVoN@(zzc>43$0(sOm5{oLcV~BI-kW*zX}{llYdTqUvN+dUe$cZ} zwga0eN-|;rdMA*3u*}UEF z-kfH$`cW8{sK&SKQ|O0Lp>i*J^W%3`M)UVSjVK&AHSjjWQ_`E_Zl{X5*9FKmfvFI^ zF?j*cWL|dTM%?SW?sXh#))@e zz0y_UW-SrNTR1p5A?dXUx^9Z6F?JUWZRs_Q{UHmi^e##UZw##{49H2Rxz21QF7;*% zL0Mdkr{Gqig>~Z>v++CT$0UX|ik48adxC^q`Jl7*B+MH2puBkXV3jcHvD~my!>o_< zgoJyTB0B6ucyN))2oo!4IkO3*k=oVdjGAIGIT&y^%?Lsa$TS)m=UP1ue`5%wcpBrWghx>X zk{9}L*EqoKSk!=b6CO_**w!!i48H-)@Zwh8$GO8mduwmUK)QZ|=|j{5 zZYa~Y{<6N?x2#+y2frWB8R|?SyPlcaC}bz53+uUwd?uTpDCWu=6WL-pmsu-kipAVz z>;}Loi#P4y4_}20HD)i)FZ)(;=@o70HiNhE6zm*|98dX?t~&^#GgHiE`7xHHj#O?Y+?o{4-Q9+vjMavIToW z4}i6kS_CxFZnp(dbB229$Z`;7p~0P%?G8m*FjT1%jc~ROW>Os}{gYHQNWLBV*MR`u zMs&VYQCh@$2zUg9U0{;lP8IEsSLChwl5A`yw&sAS0j_+eUfG2a zNi}Vq-(3fE4IrFl*iYAI>Tt9%K=O!Vd$3?Lg)-G1!^o347JW3~EcpwB>ok2*~lBUidqj+$I-YeoOZQ0MhbZZvXdv%IpXLgIBuDV57YY3lP1_Oq8l(UeKHb)YfJCQO}4? zmNa$6P-0)LXNIt`P?!1kvrzy^)NCKlgb<9)S^V(3Y^XUvIc?w}(-xrc!9e*}<8CnQ zGX-w@)I|~vW`E!1%1M~SXx+6~*%LcBMJ}tYTmWfo0k@unS)T^Rs`7uzrFXu*f#0g( ztNKt)PEz<-*y={X(N~x0_e0Xlu*gvG)~HGQ&|SiPPg3*&beg5Q405Hm4E5e2!LW%v zuQ}q`<|OO}*{4_=nnkxAiMIPYzXlI}X4neu!=byObZA^GYNcwG7-{XGsZtT+Y3BIr zSoAZ}601G%^|)d0QbNE0RcgXsakWs?{t)%d z;|zac5b%)JR8fQKfwUxnx)HexqL?}H+|ySdru4a_$)Mi)FAq%|WB^}(l!w+RYLJH@ zfra!lp*ZUKs6X;Bd78I^PA-L19zSZNVGktbfK@T-L#-2!*AWiGq$WCONU^s@nec;| zPj5vuP}CcGbf`tk_#g5gLHc%GUr@^9@wK5T6L=fi-vqr^!IvNx_%Q%yyj4SL1aBIs zlj`uyQu`Q?7IgC&`Ovc>h@x<={;sX5<9brTXJXHTZQW6K;@ zhT*!fZKw$*Hh^00k6POAc(TF!X{AkC>9n^@d%F}R&n#+5{c%n7zJx#?mCuvO16}Xy S_t*aR!UN@gl<9vifxiJ_x5TOd literal 59904 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 - - - - JoinInBedAnimation - Rimworld_Animations.JobDriver_SexCasualForAnimation - joining someone in bed. - false - - - - GettinLovedAnimation - Rimworld_Animations.JobDriver_SexBaseRecieverLovedForAnimation - lovin'. - false - - diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index 492ca30..77b3693 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -82,31 +82,27 @@ - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + + + + @@ -120,13 +116,14 @@ - + + \ No newline at end of file diff --git a/Source/JobDrivers/JobDriver_SexBaseRecieverLovedForAnimation.cs b/Source/JobDrivers/JobDriver_SexBaseRecieverLovedForAnimation.cs deleted file mode 100644 index 9efa508..0000000 --- a/Source/JobDrivers/JobDriver_SexBaseRecieverLovedForAnimation.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System.Collections.Generic; -using RimWorld; -using Verse; -using Verse.AI; -using System; -using rjw; - -namespace Rimworld_Animations { - public class JobDriver_SexBaseRecieverLovedForAnimation : JobDriver_SexBaseReciever { - - public readonly TargetIndex ipartner = TargetIndex.A; - public readonly TargetIndex ibed = TargetIndex.B; - - public override bool TryMakePreToilReservations(bool errorOnFailed) { - - return base.TryMakePreToilReservations(errorOnFailed); - } - - protected override IEnumerable MakeNewToils() { - - - setup_ticks(); - - float partner_ability = xxx.get_sex_ability(Partner); - - // More/less hearts based on partner ability. - if (partner_ability < 0.8f) - ticks_between_thrusts += 100; - else if (partner_ability > 2.0f) - ticks_between_thrusts -= 25; - - // More/less hearts based on opinion. - if (pawn.relations.OpinionOf(Partner) < 0) - ticks_between_hearts += 50; - else if (pawn.relations.OpinionOf(Partner) > 60) - ticks_between_hearts -= 25; - - - parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job - //--Log.Message("[RJW]JobDriver_GettinLoved::MakeNewToils is called"); - - this.FailOnDespawnedOrNull(ipartner); - this.FailOn(() => !Partner.health.capacities.CanBeAwake); - this.FailOn(() => pawn.Drafted); - this.KeepLyingDown(ibed); - yield return Toils_Reserve.Reserve(ipartner, 1, 0); - yield return Toils_Reserve.Reserve(ibed, Bed.SleepingSlotsCount, 0); - - Toil get_loved = new Toil(); - get_loved.FailOn(() => { - - for (int i = 0; i < parteners.Count; i++) - { - if (parteners[i].CurJobDef != DefDatabase.GetNamed("JoinInBedAnimation", true)) - { - return true; - } - } - - return false; - - }); - get_loved.defaultCompleteMode = ToilCompleteMode.Never; - get_loved.socialMode = RandomSocialMode.Off; - get_loved.handlingFacing = true; - get_loved.AddPreTickAction(delegate { - if (pawn.IsHashIntervalTick(ticks_between_hearts)) - FleckMaker.ThrowMetaIcon(pawn.Position, pawn.Map, FleckDefOf.Heart); - - }); - get_loved.AddEndCondition(() => - { - if (parteners.Count <= 0) - { - return JobCondition.Succeeded; - } - return JobCondition.Ongoing; - - }); - get_loved.AddFinishAction(delegate { - if (xxx.is_human(pawn)) - pawn.Drawer.renderer.graphics.ResolveApparelGraphics(); - }); - yield return get_loved; - - - } - } -} \ No newline at end of file diff --git a/Source/JobDrivers/JobDriver_SexCasualForAnimation.cs b/Source/JobDrivers/JobDriver_SexCasualForAnimation.cs deleted file mode 100644 index 285c542..0000000 --- a/Source/JobDrivers/JobDriver_SexCasualForAnimation.cs +++ /dev/null @@ -1,93 +0,0 @@ -using RimWorld; -using rjw; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using Verse.AI; - -namespace Rimworld_Animations { - class JobDriver_SexCasualForAnimation : JobDriver_SexBaseInitiator { - - public readonly TargetIndex ipartner = TargetIndex.A; - public readonly TargetIndex ibed = TargetIndex.B; - - public override bool TryMakePreToilReservations(bool errorOnFailed) { - return pawn.Reserve(Target, job, xxx.max_rapists_per_prisoner, 0, null, errorOnFailed); - } - - protected override IEnumerable MakeNewToils() { - setup_ticks(); - this.FailOnDespawnedOrNull(ipartner); - this.FailOnDespawnedOrNull(ibed); - this.FailOn(() => !Partner.health.capacities.CanBeAwake); - - yield return Toils_Reserve.Reserve(ipartner, xxx.max_rapists_per_prisoner, 0, null); - - Toil goToPawnInBed = Toils_Goto.GotoThing(ipartner, PathEndMode.OnCell); - goToPawnInBed.FailOn(() => !RestUtility.InBed(Partner) && Partner.CurJobDef != DefDatabase.GetNamed("GettinLovedAnimation") && !xxx.in_same_bed(Partner, pawn)); - - yield return goToPawnInBed; - - - Toil startPartnerSex = new Toil(); - startPartnerSex.initAction = delegate { - - if(Partner.CurJobDef != DefDatabase.GetNamed("GettinLovedAnimation")) // allows threesomes - { - Job gettinLovedJob = JobMaker.MakeJob(DefDatabase.GetNamed("GettinLovedAnimation"), pawn, Bed); // new gettin loved toil that wakes up the pawn goes here - - Partner.jobs.jobQueue.EnqueueFirst(gettinLovedJob); - Partner.jobs.EndCurrentJob(JobCondition.InterruptForced); - } - - }; - yield return startPartnerSex; - - Toil sexToil = new Toil(); - sexToil.FailOn(() => (Partner.CurJobDef == null) || Partner.CurJobDef != DefDatabase.GetNamed("GettinLovedAnimation", true)); //partner jobdriver is not sexbaserecieverlovedforanim - sexToil.socialMode = RandomSocialMode.Off; - sexToil.defaultCompleteMode = ToilCompleteMode.Never; - sexToil.handlingFacing = true; - sexToil.initAction = delegate { - - usedCondom = (CondomUtility.TryUseCondom(base.pawn) || CondomUtility.TryUseCondom(Partner)); - Start(); - }; - - sexToil.AddPreTickAction(delegate { - - if(!Partner.TryGetComp().isAnimating) - { - pawn.TryGetComp().isAnimating = false; - } - - if(Gen.IsHashIntervalTick(pawn, ticks_between_hearts)) { - FleckMaker.ThrowMetaIcon(pawn.Position, pawn.Map, FleckDefOf.Heart); - } - SexTick(pawn, Partner); - SexUtility.reduce_rest(Partner); - SexUtility.reduce_rest(pawn, 2); - if (ticks_left <= 0) - ReadyForNextToil(); - - }); - sexToil.AddFinishAction(delegate { - - End(); - - }); - yield return sexToil; - - Toil finish = new Toil(); - finish.initAction = delegate { - SexUtility.ProcessSex(pawn, Partner, usedCondom, isRape, isCoreLovin: false, isWhoring, sexType); - }; - finish.defaultCompleteMode = ToilCompleteMode.Instant; - yield return finish; - - } - } -} diff --git a/Source/Patches/HarmonyPatch_AlienRace.cs b/Source/Patches/HarmonyPatch_AlienRace.cs deleted file mode 100644 index 353a717..0000000 --- a/Source/Patches/HarmonyPatch_AlienRace.cs +++ /dev/null @@ -1,92 +0,0 @@ -using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Reflection.Emit; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; -using Verse; -using AlienRace; - -namespace Rimworld_Animations { - [HarmonyPatch(typeof(AlienRace.HarmonyPatches), "DrawAddons")] - public static class HarmonyPatch_AlienRace { - - - - public static void RenderHeadAddonInAnimation(Mesh mesh, Vector3 loc, Quaternion quat, Material mat, bool drawNow, Graphic graphic, AlienPartGenerator.BodyAddon bodyAddon, Vector3 v, float num, Vector3 headOffset, Pawn pawn, PawnRenderFlags renderFlags) - { - - CompBodyAnimator pawnAnimator = pawn.TryGetComp(); - if (!renderFlags.FlagSet(PawnRenderFlags.Portrait) && pawnAnimator.isAnimating && (bodyAddon.drawnInBed || bodyAddon.alignWithHead)) - { - - Quaternion headQuatInAnimation = Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up); - Rot4 headRotInAnimation = pawnAnimator.headFacing; - Vector3 headPositionInAnimation = pawnAnimator.getPawnHeadPosition() - pawn.Drawer.renderer.BaseHeadOffsetAt(pawnAnimator.headFacing).RotatedBy(angle: Mathf.Acos(f: Quaternion.Dot(a: Quaternion.identity, b: headQuatInAnimation)) * 2f * 57.29578f); - - Log.Message(bodyAddon.path + " " + bodyAddon.inFrontOfBody.ToStringSafe()); - headPositionInAnimation.y += bodyAddon.inFrontOfBody ? 1f : -1f; - - GenDraw.DrawMeshNowOrLater(mesh: graphic.MeshAt(rot: headRotInAnimation), loc: headPositionInAnimation + (bodyAddon.alignWithHead ? headOffset : Vector3.zero) + v.RotatedBy(angle: Mathf.Acos(f: Quaternion.Dot(a: Quaternion.identity, b: headQuatInAnimation)) * 2f * 57.29578f), - quat: Quaternion.AngleAxis(angle: num, axis: Vector3.up) * headQuatInAnimation, mat: graphic.MatAt(rot: pawnAnimator.headFacing), drawNow: drawNow); - } - - else - { - GenDraw.DrawMeshNowOrLater(mesh, loc, quat, mat, drawNow); - } - } - - - public static IEnumerable Transpiler(IEnumerable instructions) - { - List ins = instructions.ToList(); - for (int i = 0; i < ins.Count; i++) - { - - Type[] type = new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool) }; - - - if (ins[i].OperandIs(AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater", type))) - { - - yield return new CodeInstruction(OpCodes.Ldloc, (object)7); //graphic - yield return new CodeInstruction(OpCodes.Ldloc, (object)4); //bodyAddon - yield return new CodeInstruction(OpCodes.Ldloc, (object)5); //offsetVector/AddonOffset (v) - yield return new CodeInstruction(OpCodes.Ldloc, (object)6); //num - yield return new CodeInstruction(OpCodes.Ldarg, (object)2); //headOffset - yield return new CodeInstruction(OpCodes.Ldarg, (object)3); //pawn - yield return new CodeInstruction(OpCodes.Ldarg, (object)0); //renderflags - - yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(HarmonyPatch_AlienRace), "RenderHeadAddonInAnimation")); - - } - - else - { - yield return ins[i]; - } - - - } - } - - } - - [HarmonyPatch(typeof(PawnGraphicSet), "ResolveApparelGraphics")] - public static class HarmonyPatch_ResolveApparelGraphics - { - public static bool Prefix(ref Pawn ___pawn) - { - - if (___pawn.TryGetComp() != null && ___pawn.TryGetComp().isAnimating) - { - return false; - } - return true; - } - } -} \ No newline at end of file diff --git a/Source/Patches/HarmonyPatch_CSL.cs b/Source/Patches/HarmonyPatch_CSL.cs deleted file mode 100644 index 8345ede..0000000 --- a/Source/Patches/HarmonyPatch_CSL.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using HarmonyLib; -using rjw; -using Verse; -using RimWorld; -using System.Reflection.Emit; -using System.Reflection; -using UnityEngine; - -namespace Rimworld_Animations { - [StaticConstructorOnStartup] - public static class HarmonyPatch_CSL { - static HarmonyPatch_CSL() { - try { - ((Action)(() => { - if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Children, school and learning")) { - - (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("Children.PawnRenderer_RenderPawnInternal_Patch"), "RenderPawnInternalScaled"), - prefix: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_CSL), "Prefix_CSL")), - transpiler: new HarmonyMethod(AccessTools.Method(typeof(HarmonyPatch_CSL), "Transpiler_CSL"))); - } - }))(); - } - catch (TypeLoadException ex) { - - } - } - - public static void Prefix_CSL(PawnRenderer __instance, Pawn pawn, ref Vector3 rootLoc, ref float angle, bool renderBody, ref Rot4 bodyFacing, ref Rot4 headFacing, RotDrawMode bodyDrawType, bool portrait, bool headStump, bool invisible) { - - PawnGraphicSet graphics = __instance.graphics; - CompBodyAnimator bodyAnim = pawn.TryGetComp(); - - if (!graphics.AllResolved) { - graphics.ResolveAllGraphics(); - } - - - if (bodyAnim != null && bodyAnim.isAnimating && !portrait) { - bodyAnim.tickGraphics(graphics); - pawn.TryGetComp().animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing); - - } - } - - public static IEnumerable Transpiler_CSL(IEnumerable instructions) { - - MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater"); - FieldInfo headGraphic = AccessTools.Field(typeof(PawnGraphicSet), "headGraphic"); - - - List codes = instructions.ToList(); - bool forHead = true; - for (int i = 0; i < codes.Count(); i++) { - - //Instead of calling drawmeshnoworlater, add pawn to the stack and call my special static method - if (codes[i].OperandIs(drawMeshNowOrLater) && forHead) { - - yield return new CodeInstruction(OpCodes.Ldarg_0); - yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn")); - yield return new CodeInstruction(OpCodes.Ldarg_2); - yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn), typeof(float) })); - - } - //checking for if(graphics.headGraphic != null) - else if (codes[i].opcode == OpCodes.Ldfld && codes[i].OperandIs(headGraphic)) { - forHead = true; - yield return codes[i]; - } - //checking for if(renderbody) - else if (codes[i].opcode == OpCodes.Ldarg_3) { - forHead = false; - yield return codes[i]; - } - else { - yield return codes[i]; - } - } - } - - } -}*/ diff --git a/Source/Patches/HarmonyPatch_DontShaveYourHead.cs b/Source/Patches/HarmonyPatch_DontShaveYourHead.cs deleted file mode 100644 index fa5a5cc..0000000 --- a/Source/Patches/HarmonyPatch_DontShaveYourHead.cs +++ /dev/null @@ -1,29 +0,0 @@ -using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; - -namespace Rimworld_Animations { - class HarmonyPatch_DontShaveYourHead { - - [StaticConstructorOnStartup] - public static class Patch_DontShaveYourHead { - - static Patch_DontShaveYourHead() { - try { - ((Action)(() => - { - if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "Don't Shave Your Head 1.0")) { - (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("DontShaveYourHead.Harmony_PawnRenderer"), "DrawHairReroute"), //typeof(ShowHair.Patch_PawnRenderer_RenderPawnInternal), nameof(ShowHair.Patch_PawnRenderer_RenderPawnInternal.Postfix)), - transpiler: new HarmonyMethod(AccessTools.Method(typeof(Patch_ShowHairWithHats), "Transpiler"))); - } - }))(); - } - catch (TypeLoadException ex) { } - } - } - } -} diff --git a/Source/Patches/HarmonyPatch_FacialAnimation.cs b/Source/Patches/HarmonyPatch_FacialAnimation.cs deleted file mode 100644 index 9c01ccb..0000000 --- a/Source/Patches/HarmonyPatch_FacialAnimation.cs +++ /dev/null @@ -1,104 +0,0 @@ -using HarmonyLib; -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Reflection.Emit; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; -using Verse; - -namespace Rimworld_Animations { - [StaticConstructorOnStartup] - public static class Patch_FacialAnimation { - - static Patch_FacialAnimation() { - try { - ((Action)(() => { - if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "[NL] Facial Animation - WIP")) { - (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("FacialAnimation.DrawFaceGraphicsComp"), "DrawGraphics"), - prefix: new HarmonyMethod(AccessTools.Method(typeof(Patch_FacialAnimation), "Prefix"))); - } - }))(); - } - catch (TypeLoadException ex) { - - } - } - - public static bool Prefix(ref Pawn ___pawn, ref Rot4 headFacing, ref Vector3 headOrigin, ref Quaternion quaternion, ref bool portrait) { - - CompBodyAnimator bodyAnim = ___pawn.TryGetComp(); - - if (bodyAnim != null && bodyAnim.isAnimating && !portrait) { - - headFacing = bodyAnim.headFacing; - headOrigin = new Vector3(bodyAnim.getPawnHeadPosition().x, headOrigin.y, bodyAnim.getPawnHeadPosition().z); - quaternion = Quaternion.AngleAxis(bodyAnim.headAngle, Vector3.up); - } - - return true; - } - /* - public static List rjwLovinDefNames = new List{ - "Lovin", - "Quickie", - "GettingQuickie", - "JoinInBed", - "JoinInBedAnimation", - "GettinLovedAnimation", - "GettinLoved", - "GettinLicked", - "GettinSucked", - "GettinRaped", - "ViolateCorpse", - "RJW_Masturbate", - "GettinBred", - "Breed", - "RJW_Mate", - "Bestiality", - "BestialityForFemale", - "StruggleInBondageGear", - "WhoreIsServingVisitors", - "UseFM" - }; - - public static List rjwRapeDefNames = new List { - "RapeComfortPawn", - "RandomRape", - "RapeEnemy" - }; - - public static bool Prefix_IsSameA(JobDef job, string ___jobDef, ref bool __result) { - - if(___jobDef != null && ___jobDef == "Lovin" && job?.defName != null && rjwLovinDefNames.Contains(job?.defName)) { - __result = true; - return false; - } - else if (___jobDef != null && ___jobDef == "Wait_Combat" && job?.defName != null && rjwRapeDefNames.Contains(job?.defName)) { - __result = true; - return false; - } - - - return true; - } - - public static bool Prefix_IsSameB(string jobName, string ___jobDef, ref bool __result) { - - if (___jobDef != null && ___jobDef == "Lovin" && jobName != null && rjwLovinDefNames.Contains(jobName)) { - __result = true; - return false; - } - if (___jobDef != null && ___jobDef == "Wait_Combat" && jobName != null && rjwRapeDefNames.Contains(jobName)) { - __result = true; - return false; - } - - return true; - } - */ - } -} \ No newline at end of file diff --git a/Source/Patches/HarmonyPatch_SetPawnLaying.cs b/Source/Patches/HarmonyPatch_SetPawnLaying.cs deleted file mode 100644 index 1eef30f..0000000 --- a/Source/Patches/HarmonyPatch_SetPawnLaying.cs +++ /dev/null @@ -1,28 +0,0 @@ -using HarmonyLib; -using Verse; -using RimWorld; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Rimworld_Animations -{ - [HarmonyPatch(typeof(PawnUtility), "GetPosture")] - public static class HarmonyPatch_SetPawnLaying - { - - public static bool Prefix(Pawn p, ref PawnPosture __result) - { - if(p.TryGetComp().isAnimating) - { - __result = PawnPosture.LayingOnGroundNormal; - return false; - } - - return true; - } - - } -} diff --git a/Source/Patches/HarmonyPatch_ShowHairWithHats.cs b/Source/Patches/HarmonyPatch_ShowHairWithHats.cs deleted file mode 100644 index 3714503..0000000 --- a/Source/Patches/HarmonyPatch_ShowHairWithHats.cs +++ /dev/null @@ -1,51 +0,0 @@ -using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Reflection.Emit; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; -using Verse; - -namespace Rimworld_Animations { - [StaticConstructorOnStartup] - public static class Patch_ShowHairWithHats { - - static Patch_ShowHairWithHats() { - try { - ((Action)(() => - { - if (LoadedModManager.RunningModsListForReading.Any(x => x.Name == "[KV] Show Hair With Hats or Hide All Hats - 1.1")) { - (new Harmony("rjw")).Patch(AccessTools.Method(AccessTools.TypeByName("ShowHair.Patch_PawnRenderer_RenderPawnInternal"), "Postfix"), //typeof(ShowHair.Patch_PawnRenderer_RenderPawnInternal), nameof(ShowHair.Patch_PawnRenderer_RenderPawnInternal.Postfix)), - transpiler: new HarmonyMethod(AccessTools.Method(typeof(Patch_ShowHairWithHats), "Transpiler"))); - } - }))(); - } - catch (TypeLoadException ex) { } - } - - - public static IEnumerable Transpiler(IEnumerable instructions) { - - MethodInfo drawMeshNowOrLater = AccessTools.Method(typeof(GenDraw), "DrawMeshNowOrLater"); - - List codes = instructions.ToList(); - for (int i = 0; i < codes.Count(); i++) { - - //Instead of calling drawmeshnoworlater, add pawn to the stack and call my special static method - if (codes[i].OperandIs(drawMeshNowOrLater)) { - - yield return new CodeInstruction(OpCodes.Ldarg_0); - yield return new CodeInstruction(OpCodes.Ldfld, AccessTools.DeclaredField(typeof(PawnRenderer), "pawn")); - yield return new CodeInstruction(OpCodes.Call, AccessTools.DeclaredMethod(typeof(AnimationUtility), nameof(AnimationUtility.RenderPawnHeadMeshInAnimation), new Type[] { typeof(Mesh), typeof(Vector3), typeof(Quaternion), typeof(Material), typeof(bool), typeof(Pawn) })); - - } - else { - yield return codes[i]; - } - } - } - } -} diff --git a/Source/Patches/HarmonyPatch_HatsDisplaySelection.cs b/Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs similarity index 100% rename from Source/Patches/HarmonyPatch_HatsDisplaySelection.cs rename to Source/Patches/OtherModPatches/HarmonyPatch_HatsDisplaySelection.cs diff --git a/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs b/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs new file mode 100644 index 0000000..1c7a7ec --- /dev/null +++ b/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_JoinInBed.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using rjw; +using System.Reflection.Emit; +using Verse.AI; + +namespace Rimworld_Animations +{ + + [HarmonyPatch(typeof(xxx), "in_same_bed")] + public static class HarmonyPatch_JobDriver_InSameBedPatch + { + + public static bool Prefix(Pawn partner, ref bool __result) + { + + if(partner != null && partner.CurJobDef == xxx.casual_sex) + { + __result = true; + return false; + } + + return true; + + } + + + + } + + [HarmonyPatch(typeof(JobDriver_JoinInBed), "MakeNewToils")] + public static class HarmonyPatch_JobDriver_JoinInBed + { + + public static void Postfix(JobDriver_JoinInBed __instance, ref IEnumerable __result) + { + + var toils = __result.ToList(); + + Toil goToPawnInBed = Toils_Goto.GotoThing(__instance.iTarget, PathEndMode.OnCell); + goToPawnInBed.FailOn(() => !RestUtility.InBed(__instance.Partner) && __instance.Partner.CurJobDef != xxx.gettin_loved && !xxx.in_same_bed(__instance.Partner, __instance.pawn)); + + toils[1] = goToPawnInBed; + + + Toil startPartnerSex = new Toil(); + startPartnerSex.initAction = delegate { + + + if (!(__instance.Partner.jobs.curDriver is JobDriver_SexBaseReciever)) // allows threesomes + { + Job gettinLovedJob = JobMaker.MakeJob(xxx.gettin_loved, __instance.pawn, __instance.Bed); // new gettin loved toil that wakes up the pawn goes here + __instance.Partner.jobs.jobQueue.EnqueueFirst(gettinLovedJob); + __instance.Partner.jobs.EndCurrentJob(JobCondition.InterruptForced); + } + + }; + + toils[2] = startPartnerSex; + + toils[3].AddPreTickAction(() => + { + if (!__instance.Partner.TryGetComp().isAnimating) + { + __instance.pawn.TryGetComp().isAnimating = false; + } + }); + + + __result = toils.AsEnumerable(); + + + } + + + + } +} diff --git a/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs similarity index 87% rename from Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs rename to Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs index 8a38ca1..6426d93 100644 --- a/Source/Patches/rjwPatches/HarmonyPatch_JobDriver_SexBaseInitiator.cs +++ b/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -25,30 +25,10 @@ namespace Rimworld_Animations { Building_Bed bed = __instance.Bed; - /* - if (__instance is JobDriver_BestialityForFemale) - bed = (__instance as JobDriver_BestialityForFemale).Bed; - else if (__instance is JobDriver_WhoreIsServingVisitors) { - bed = (__instance as JobDriver_WhoreIsServingVisitors).Bed; - } - else if (__instance is JobDriver_SexCasualForAnimation) { - bed = (__instance as JobDriver_SexCasualForAnimation).Bed; - } - else if (__instance is JobDriver_Masturbate) - bed = (__instance as JobDriver_Masturbate).Bed; - else if (__instance is JobDriver_Rape) - bed = (__instance?.Partner?.jobs?.curDriver as JobDriver_Sex)?.Bed; - - */ - if ((__instance.Target as Pawn)?.jobs?.curDriver is JobDriver_SexBaseReciever) { Pawn Target = __instance.Target as Pawn; - if (!(Target.jobs.curDriver as JobDriver_SexBaseReciever).parteners.Contains(pawn)) { - (Target.jobs.curDriver as JobDriver_SexBaseReciever).parteners.Add(pawn); - } - bool quickie = (__instance is JobDriver_SexQuick) && AnimationSettings.fastAnimForQuickie; int preAnimDuration = __instance.duration; diff --git a/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs b/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs new file mode 100644 index 0000000..d328d2b --- /dev/null +++ b/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using rjw; +using System.Reflection.Emit; + +namespace Rimworld_Animations +{ + + [HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")] + public static class HarmonyPatch_JobDriver_SexBaseReceiverLoved + { + + public static IEnumerable Transpiler(IEnumerable codeInstructions) + { + + var ins = codeInstructions.ToList(); + for(int i = 0; i < ins.Count; i++) + { + if(i + 13 < ins.Count && ins[i + 13].opcode == OpCodes.Call && ins[i + 13].OperandIs(AccessTools.DeclaredMethod(typeof(Toils_LayDown), "LayDown"))) { + + ins.RemoveRange(i, 14); + + } + + else + { + yield return ins[i]; + } + } + + } + + } +} diff --git a/Source/Patches/HarmonyPatch_HeadHair.cs b/Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs similarity index 100% rename from Source/Patches/HarmonyPatch_HeadHair.cs rename to Source/Patches/RimworldPatches/HarmonyPatch_HeadHair.cs diff --git a/Source/Patches/HarmonyPatch_PawnRenderer.cs b/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs similarity index 100% rename from Source/Patches/HarmonyPatch_PawnRenderer.cs rename to Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderer.cs diff --git a/Source/Patches/HarmonyPatch_PawnRotation.cs b/Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs similarity index 100% rename from Source/Patches/HarmonyPatch_PawnRotation.cs rename to Source/Patches/RimworldPatches/HarmonyPatch_PawnRotation.cs diff --git a/Source/Patches/HarmonyPatch_Pawn_DrawTracker.cs b/Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs similarity index 100% rename from Source/Patches/HarmonyPatch_Pawn_DrawTracker.cs rename to Source/Patches/RimworldPatches/HarmonyPatch_Pawn_DrawTracker.cs diff --git a/Source/Patches/HarmonyPatch_SetPawnAnimatable.cs b/Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs similarity index 100% rename from Source/Patches/HarmonyPatch_SetPawnAnimatable.cs rename to Source/Patches/RimworldPatches/HarmonyPatch_SetPawnAnimatable.cs diff --git a/Source/Patches/rjwPatches/HarmonyPatch_DoLovinAnimationPatch.cs b/Source/Patches/rjwPatches/HarmonyPatch_DoLovinAnimationPatch.cs deleted file mode 100644 index c508266..0000000 --- a/Source/Patches/rjwPatches/HarmonyPatch_DoLovinAnimationPatch.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using HarmonyLib; -using RimWorld; -using Verse; -using rjw; -using Verse.AI; - -namespace Rimworld_Animations { - - [HarmonyPatch(typeof(JobGiver_DoLovin), "TryGiveJob")] - public static class HarmonyPatch_DoLovinAnimationPatch { - - public static void Postfix(ref Pawn pawn, ref Job __result) { - - if(__result != null) { - Pawn partnerInMyBed = LovePartnerRelationUtility.GetPartnerInMyBed(pawn); - RestUtility.WakeUp(pawn); - __result = JobMaker.MakeJob(DefDatabase.GetNamed("JoinInBedAnimation", true), partnerInMyBed, partnerInMyBed.CurrentBed()); - } - } - } -} diff --git a/Source/Patches/rjwPatches/HarmonyPatch_DrawSemen.cs b/Source/Patches/rjwPatches/HarmonyPatch_DrawSemen.cs deleted file mode 100644 index 2d291d3..0000000 --- a/Source/Patches/rjwPatches/HarmonyPatch_DrawSemen.cs +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Todo: Ask to make SemenSplatch and DrawSemen public - * - * - * using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using rjw; -using HarmonyLib; - -namespace Rimworld_Animations { - [HarmonyPatch("DrawSemen")] - public static class HarmonyPatch_DrawSemen { - - public static void Prefix(ref Dictionary) { - - } - - } -}*/ diff --git a/Source/Patches/rjwPatches/HarmonyPatch_JoinInBedGiveJob.cs b/Source/Patches/rjwPatches/HarmonyPatch_JoinInBedGiveJob.cs deleted file mode 100644 index f46f401..0000000 --- a/Source/Patches/rjwPatches/HarmonyPatch_JoinInBedGiveJob.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using rjw; -using Verse; -using Verse.AI; -using RimWorld; -using HarmonyLib; - -namespace Rimworld_Animations { - [HarmonyPatch(typeof(JobGiver_JoinInBed), "TryGiveJob")] - public static class HarmonyPatch_JoinInBedGiveJob { - - public static bool Prefix(ref Job __result, ref Pawn pawn) { - - __result = null; - - if (!RJWHookupSettings.HookupsEnabled) - return false; - - if (pawn.Drafted) - return false; - - if (!SexUtility.ReadyForHookup(pawn)) - return false; - - // We increase the time right away to prevent the fairly expensive check from happening too frequently - SexUtility.IncreaseTicksToNextHookup(pawn); - - // If the pawn is a whore, or recently had sex, skip the job unless they're really horny - if (!xxx.is_frustrated(pawn) && (xxx.is_whore(pawn) || !SexUtility.ReadyForLovin(pawn))) - return false; - - // This check attempts to keep groups leaving the map, like guests or traders, from turning around to hook up - if (pawn.mindState?.duty?.def == DutyDefOf.TravelOrLeave) { - // TODO: Some guest pawns keep the TravelOrLeave duty the whole time, I think the ones assigned to guard the pack animals. - // That's probably ok, though it wasn't the intention. - if (RJWSettings.DebugLogJoinInBed) ModLog.Message($"JoinInBed.TryGiveJob:({xxx.get_pawnname(pawn)}): has TravelOrLeave, no time for lovin [ANIM JOBGIVER]!"); - return false; - } - - if ((pawn.CurJob == null || pawn.CurJob.def == JobDefOf.LayDown) && CasualSex_Helper.CanHaveSex(pawn)) { - //--Log.Message(" finding partner"); - Pawn partner = CasualSex_Helper.find_partner(pawn, pawn.Map, bedsex: true); - - //--Log.Message(" checking partner"); - if (partner == null) - return false; - - // Can never be null, since find checks for bed. - Building_Bed bed = partner.CurrentBed(); - - // Interrupt current job. - if (pawn.CurJob != null && pawn.jobs.curDriver != null) - pawn.jobs.curDriver.EndJobWith(JobCondition.InterruptForced); - - __result = JobMaker.MakeJob(DefDatabase.GetNamed("JoinInBedAnimation", true), partner, bed); - return false; - } - - return false; - - } - - } -} diff --git a/Source/Patches/rjwPatches/HarmonyPatch_PlayAnimJoinInBedRMB.cs b/Source/Patches/rjwPatches/HarmonyPatch_PlayAnimJoinInBedRMB.cs deleted file mode 100644 index 5fa4cd8..0000000 --- a/Source/Patches/rjwPatches/HarmonyPatch_PlayAnimJoinInBedRMB.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using RimWorld; -using Verse.AI; -using rjw; -using HarmonyLib; -using Verse; - -namespace Rimworld_Animations { - - [HarmonyPatch(typeof(Pawn_JobTracker), "TryTakeOrderedJob")] - class HarmonyPatch_PlayAnimJoinInBedRMB { - public static void Prefix(ref Job job) { - if(job.def == xxx.casual_sex) { - if (AnimationSettings.debugMode || RJWSettings.DevMode) - Log.Message("Replacing vanilla RJW JoinInBed JobDriver for animation JobDriver"); - job = new Job(DefDatabase.GetNamed("JoinInBedAnimation", true), job.targetA, job.targetB, job.targetC); - } - - } - - } -}