From 8a4c9342155b2c1034c59e099eca5582c95b445d Mon Sep 17 00:00:00 2001 From: Platinum Date: Tue, 28 Apr 2020 23:37:12 -0700 Subject: [PATCH 1/2] build --- 1.1/Assemblies/Rimworld-Animations.dll | Bin 47104 -> 47104 bytes Source/Settings/AnimationSettings.cs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/1.1/Assemblies/Rimworld-Animations.dll b/1.1/Assemblies/Rimworld-Animations.dll index cc11b8054178651a14df226fa2a843fc5d50bc9a..9fc688a0e8ee818532eea56a8241d046712d6697 100644 GIT binary patch delta 70 zcmZqpz|`=8X+j4J>+VnIH}>dH6%1xbWyl5MJO%}Zd=NSL;}&6N1qT1kkEUK@6__bf Yp!bE#z^(U6!Ft`3%NjSIm~9~g0IES7K>z>% delta 66 zcmZqpz|`=8X+j6f_3q`38+-Jp@)t9tGUNhr9)kiyK11H*!d`L4{LPQ1USkzlb1G#= WqUv3bt&wXc6iZ%Pw)w Date: Wed, 29 Apr 2020 21:34:15 -0700 Subject: [PATCH 2/2] build --- 1.1/Assemblies/Rimworld-Animations.dll | Bin 47104 -> 50176 bytes Rimworld-Animations.csproj | 1 + Source/AnimationUtility.cs | 21 +++++ Source/Patches/HarmonyPatch_CSL.cs | 86 ++++++++++++++++++ Source/Patches/HarmonyPatch_PawnRenderer.cs | 2 +- .../Patches/HarmonyPatch_ShowHairWithHats.cs | 3 +- Source/Settings/AnimationSettings.cs | 5 + 7 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 Source/Patches/HarmonyPatch_CSL.cs diff --git a/1.1/Assemblies/Rimworld-Animations.dll b/1.1/Assemblies/Rimworld-Animations.dll index 9fc688a0e8ee818532eea56a8241d046712d6697..8f9427ea7b081323452e653894d0bceb64aa3f6a 100644 GIT binary patch delta 15472 zcmb_@33wD$_V2k>)zw?l=`Edf*6t436B71SB!qQXGob8-2nZ2ELs%3-=wwh)#8E6o z7#BcM2W3Vvj_9B>pyKjGO&oPb+(2a%aRf#k#8G^|bE`uV^?UF8zwaeq|LXqEIrrRi z&t2+Pb<%WNX}Vs$<@!i!kMEl){&SQfA*U!OdKv=V6n=hW^Fx=qwjLpx$bzFpFR7cu zey5-W(6x|f7-6Nvm@e`ir~eF52%o2ojiOlm#dt#Gi)W1wL?n0^hWs-cAB8NmbrI1g zONfNgytiM=B;_Vu%rri*WsA#=^R^N(*C@6R67!4&_Oju#5X$6!t1oG&`fCL*vmvs>(UNEh`?}%LppYg6EM}&e{jJpF6>&&$zS;F;r)1a2#|i)6kKko=U@bkQIsOVG)rr z%Gsxv2Oa_i6Cj5BOi~J15Je^(4U-tE0MTDdwW%wZY&_yjEt~>TQN2=-4D$xm(UgYX z!008AufWJCMMFqQ5(SqUr=6uEr$XxVih^mlHV%ZHx&l5$bUJwId68fn@F3@2jn06; zr+Kx4nJ5I#i$r@#2`Ov2%G$BU+=SeLT`W@03!lYfDM`IxgKD`GB1BCWPrHr0JS z6Vrv?IFVQ)x)}jimKbaFag7ijqrtUIWE%f+WqN(cqeCCCk<(x%+Gr|BwUtchOo}g% zps_M3HOG%i7&bd7mIiDYA~ zdqIC5@rKKhxQ6+Fl^90hKd%;xfYZu7k~5-1A6*C|jxpOv_Y{hNF~XA%tn;KL$f?7f zMjgZOL^Kwl8$ml}iztaG1p(t-SbGfBTLLWi=GfT8#`fjj6raev0>t;a zw_8zw<3oP5MKc=*;Gz_SAfY0;K1#9V5Dxmv-ZOnU9%-HeyMom+lz>s?V~6#=hk%*> z8-ct1*8?Xd2Q9_9TyIixk;#qQlKY`_IC%yzKTzeAeKMCr%lbgFg0Q!xz9!}y3xk`* zRO7qgMb1u(#Tb@0T-3E}NUIT0o=AUETy<-=RO8PXrWhJtegX~U*6&qlY4md*kKFoaI+e$CDn~n& z+d7p`bSkTAho8(&d@;0=wmgVo3Le z!O~C;(A;wh@nk3-pb>p{X^bZ zk6LKo#3o7%=uLs<{&jn15QrZ^~#OVpm8E%)D6l{!QBeCOjFayYP~2+DOhAYJg89Q7;g=_ zL-aQ42G0?FjMoNNioS;TqG6(+amhtPUHwsW`Ja%<#-V7!IB-#Fds_=+Tk~XF1C7@& zsuY6^-;n9JZPyLS&#H^J$ofVG+2V3Yi@GmgWjr>d_n52M^)PtNZMqT$1=v$@YBTTa z^>-kr%m0OTTQQ8H;Chtmw?pRl7Ys+0RzKfYrSw&&v3F={@r4TY!30`bFbYQXV^R8f zg&O10p{Yhzg+nnCj4ci##eCsYXY0 z|E@9$EAmrhsM!1|7ojQ*%Mgo0A7L}Pk4P~ZD{RAftrX`L=k|XIh5mde>hHty@4t&7 zr~s~HxCIa>Qj#0l0V%C>FXX+&_)A5)c*i(WQL2nm4EwM`#V3s3!-}1i7i`WLR}L$P z`IrA1aW&S%gA$aEQrbN#>n??=6;nLk_5Y%GnKzZdLvElItJfUldvjA-arm~yVrW?nHjW*U- zdW<2JK2tu!l+UWnH~v`ZHjK)2oID??9H`v=gK@Gl-Og*YAJUj-c!uZqZNfC*wY3tR zZd?J7GyOV9G1G70sl|83j;ZAb@1?;|1;Ur2a?MWWpDJyajb+|YuT?BsFh4JCgjD!x`lq58lA{S7f zB;%{$xo$ZF|B3ly&cH^ax}r~P6;H2|41;-kUEV&uu-bkyy*j3O<8Po;IxYEkpevYw z@n~Gn8l?f**7yWp+;|NOQW~%2OP~??*5qWyE+{pj1{OspqOQ`wZVM*KBHLFxtpko5 z2S=22nZVzU=ob5hIhxU)zW+aSR8G;(vvM5*!eZgHq|E2lA`{gAKbQmYu5|RIq0_uY zZ%VR$W}!52qGVrjT*Yy=C$%T(f~|4c$gEg#>;gvxnJ3e`Is4%q=PXnXm>K?=aifeo z-HiJ}*u{l-x-bWzBWlw$ql@Wyjl0J~Ql=QVz49r(%*KmHiN zEvtbWElOKH1mUe|r%04>U}U-2WSkk9oOr9b@NVaYx51b>JQPF5&28H}$lcMg=vdRf zZIA4{;_8yxSKKQo#aEo)&$~=~&ArL@L`GJY0O)JE(Fcqr?R@EfuC zwIUrSLmT}AtE50~-ZvQeBT8dfoY<5BazExeUH9Wo3+A`%P-(znHoh!y&*JrP3oiX} z%jPUgQ3Ffj%YiG&DS~zI5ll!~SA~$`yZ1)i*mz}eyK?)MLCf8;wbO>rD{~5JnS1L- zu9N!HI{$CWDfU0v^MAIUWF*0^k&rnrf0BqsX`1#EQ&M6wR|$#@vy!u>NN(maJ}VRL z10OgapOfsR)0~u4p5yo)QD_b;OtR1SN>v(o)aCg1a$=NZW*x=W!1Aq_m3$ZB#|md7 z52w71++$cr6<%}=&OkYs`loSi%|Utciu&3m3vikuIxw1OiW{;^CX*kJwy0i$kIehl|YD#Hieq3!rA#fKkUW@3iuxYpowhQg3hGpy$ava0BbY>o;Z~>Agb_ZS-jeu4!iX5i$V3)-B^FB@FV$MYwW$1& zlX07rEKG1D>C`_f-=oucvC870T6KfNLGLIV9HZ#AR3aA*cdc={=zL&}Q>VkqDvOI= zPvr9NMZU*HANbZdy)-kjI~=929YismTBM_=lGxF=9>(k38yq^l=;YWBDO~MQKRdlR zi}6*Jv0CCMvN1|yNj=J5+8)>)c2WOGy{6MC2M1b)OrVyVC8O*tX-l~?16e`4dW;6y znKUQN2zse+3Rj+Nsn=Z8E@_SP6#W?oVi(OqK3ufUw#J!8^L<|wLCRPPRZ>E$rvexQrqlv%mY zy2k0C{HzTQ7d?-177ex!NzS5!Vo0)=j>gh27ANu2y; z=!c7Th8d$dj9+JPsyF3uGpB7F#M)%eR)LetuLSBfFTDiMF3OVwG*=Ga0EvG8M%dgM z*odGj12HywH^@#`BRY(4-j>?F=`6Y4$)P+W16_g{ z7IV>evN!*fIM<9C3D@bY?EN?gyXcKst<%hG&c}Ay?*kb;pLfcMrpsCfWiR{KWDYPW zIvqqWT{Pa$l0qq;CTGvP={&2Ruwojf+brC4aSmISVfymkcpznF#!X-xr<--^^F*In+39$?NU{daWJ4v(Mm^S5%0MRum`$Kjl6@+56DT%D(my4e%3sNf6EjUV zR0$z1BH6f%nHjUiB{YpxG|>~iu7GAHsbM4$tD%CX(j2LK2#*dG(9D-?xXP@C>N;80 z(n_hDCA}=7)tz)vT1zo*;&$m~88vlMHqiC5;w?yW1vS#9PPz?rTPNKOv=s|9ls3w) z(=+Le%QGhcR|L6SmEu={$sYkvySThYXMEbu_8(b-?!}{$8TZ z!jgwH#%Hw{UpBZH_ed;E+lcZXWCNetZ$@`&`?Aw@NI@;()#g z?0_WK&Dzny4T_*@bU;uUG9jR4d|o0#k7p{r(N#w)|>gU-5$?@Q$z|71ify-qs>w=uisc=FvDM2s#lv_<4u`Te^FCdtj~z4AzBEdE6?Fx@ z0X!_xqP$@jwA0C5Iud#h^$-kknlxy~G5SOZozt%2eK-FEnwlWbL~9yXgKXndwH* zU%KdC?7~_l+d?jHB|7qZJkSwsp+4R!hZ>`DK3z*%AOUA(|d8IX4X60 z^hKPFNebhxAiqJP>ul4LlEJ3&t%90u|Fm7@@X*pYd(giY>?X;sqpXx>upJlJ^$st^ z*5W-I`b+nCZ+7@-YbmoAD8sE&3JvdW>i+KA>PVsA#aTjdwiH3v45jpFv;rHrbuN?MensiuGao0v*>_`CebClp~Wtz4$SSno;#p z2TUb1$3By;?826JVQVFOfnLRKnn|a-=&b$O=kxSh`V)>!O6iX$+V;`Tr0!DLj9X+F z6-UR}50YIHXZZ^2R>avcto}@TGR~G^Ye9pOy+BPF2hc>`fQ|;UsIO#ZC$eb#0G$80 zhs)4J7A=sUnz0h!qn-Yh$yhg;o*rkiagk={6k0f;oo#YnO1&qxv+d5A zbiHIR&SCDdRo2-wN75H)U*>%4Wi+XZE51O_M;fiw zv_LY`O*Ji*Y(15#4?C-A*QIQ^o}K`kLr=!pDX;=z&CjKWB)cv( z##`xJYKfaVXs%^0y%c9}fz6}VICCj;E%WIg@rs911zka3Np?((!t=rc`ZmtChQnab z&*0{d*|S1>oeSu&$;2ESz9 zaf1tKc${&A3+dU}9Sts||79}S;6iGP>mEUS3+cVM?){Y5KIcNpzO19cg_JLunW%-- zOENS03u&-q>+xj3&1=o^y&I$9A|hEv~%>ApDQTWU_X_WfJbsTAwhQ@UqXq48+83!7r8znOXjnW;G znSn-Whh%1;Q3}^~1RAASFG-BxN#Wy=Q=8IR!`Q$e4*82fqH|B+O;Tg4IF?bdMkX8C5cs8H;Tog3ZtdKZHVwJ?{5^I3TR4dENB(9cd7woMTm`1C`4BRD}1ux$OdM(r)1&EhpI zQ$LO~7gKDr*o<|#O;$T7F+-Ymlj#ZA%Q(xES4>*d57u+j5SkNYNB2nFUFrm?tHR zWqFo#y;$Nwi7SAUM4M6@xfFO!c$GM&43FF>);=HY%*9F%b+c`y(nene)+(!&+Q4s=pi+f50AW#%H|Yb^ z$8$C*yC}=EO(~JsLnOtl+m!+0x4u6qJ;VZayRun17upZWbKbuyg`!{fel+t68r~x- zJT80iG+k>wrfieVZx+{G`-9@M1vr0V(`E+#$ zUcbzujgb^!mM4~})~Ky|H+6uh_7|(m)I+H~)Ya6V;tccHj~q zKjS}7pQfj%H>jID^VP-D(PB8tR1eY~=Q?$>>P=a%ZbqOtsN2+=6K_!qF{=a>ia$BI zOIz_|8dPjq+thRPaAapp4GMnt*{NRTeoWmB+z$y)q5)!+>jQO+;CDk6Qc@$f*pH(; zBJ)f2DV3jYcFAdVSWc_Ma$1d%mQ@nl=x<3D?V$Qi(4oDo{%8wRmCA1k+DNsAsf}DN zpB8(QUezPoPNg*y?ovQUYPmtHP_Ikeiod?QF?>JDV=OIN zSQ`b;J7daVyhzz8CWpC!x3daSZGih}t%tfi{34vL#B1c8%DoQQD1Gr7sfQYgyrw-R z8!Oa!{ugR4yz6KaKU(`)dT4t3V9NmQvD6C7JHnnZ(o(3l`6pUFk+bKRIOdsaIVLJF z0}93GNwtwrrnev-uHuYo7T;}zhS)wV?H^k(HF_i}xiHdSxZg*MHOpNY#-oS&oqrfc z-JZNjd56A{lPKHCl0%p#ZFGn8d;MkYg&bjR(^k23>oILlqHdk8mZ9!DRE56@^U&H>igPGt+G*ct5# z`${yt);-L+SK+6(y~u=4PXVi}Pbs6*Ct6;Xl5^U9p83|7l}Gf&z}@Z@R$&>M)M({B zv>B3LC2z2v(|FoGrSQYt9@*pR>MFcJY@-~p^X6=Si#Qe7`_55fZVENjY zXsfWin3!T)CP#Of7-=g;d6BIgcsE`>FB56LJ}5hY(=FV+8cXb`Yb->?zNxllmSGe+E!bhvEF2BhUs=&v(l3E03;(F`)zh5$I)m#BThP=wYAY(kr!>-EL=V( z4r8A%0sMY;jKIdqrH}Al(WE-ZWcX= zCJU8~wzIaUEbm4%`(Ddb^{lN;afDqsW!dq4X#&3O7;0DWoxlj-bfA|;h(XYf0d~hp z(w)$qd=vzxQ-5F%RRD`=2C$dJK@uw|#)`2t2RK=ZW=fn(S3|Oh?gcKVM-tX6uh0(( z_ep$C;>XIz^ps0gRng$h0e(#PzCERQv7&{=@eiaESk7;JtoTa|%mx4scF# zlh!~##1hu?CE-4a&q@4PqH1Azj>Mss^`sU94c{+#3qU4mRgB(BsNLhA@P93 zqo&-$mOCUKl}KJ$SK?5Kb0m^a$|cV6r88-gWQW895|1((eXa<{F4D*AQ}j9d0)35s zv;MIDj($QfwT`h~X8o=8R_lw_*R6wX!)&u`hiyT7wmlbrfzIC&^0_%5PZq^EGneA< zX?{O=%J&(L<<`u90cR)u8~C~HKfs6m{{=3|h9RBJ)`1twF_1mkjth!kE-N@it9WAI z?=}_8eEv$)4^$`_D@MV0%>0e$LVRVZ(3SWX2>hP_YA93>TLlm8$-ryz!dJl`wg!Ql zv2GN)6E8Dk3f)cF=+9v+qC9#H-(}`eEBcm4Z{WC|M{lB!dGt1VnMeOXKlAB5Smx6Q zu*|2U_~g?^u*|1VV3|+@O}38Ehr&mos6LzOg` zmSUgG1!lptltM5qr3g$*@mG`mfO)Viqn@xVqu#JAqrR{#qyDfgqk*t2qrtE&qam=& z#b0Vpq-n;91%qOv^n=!Kt&45PZCVpQC3XJkkLOXXlc1;l$IdjaIgiI&t|{opjGj|W z;m3I5`l+`EWZkYUd^3yxhz1GgA3XobpZ$1Z{%OM&%o6{{@TF_8)eM7sk|larZ;V|Cga!mx_2&K`PAWe zJ}senz7w z*ZAMBsbI^YS%F`cE&vOm91Y-7Bb}@S4dHIm3xgqAzP!Ci#ebxo`P~p#HBExa3V2>f z)WdMz*{$1TkQ!Pn1Eu6iXm&ncp4QUURE_W^(>VUWiHbY@BQDTEm8e~dD)XfA5{xQG z#6F|=T`a@kzK5jS8rg3%QZgp|?iw-1xN%#kWx%#%VZ8CXe|qRQNpJj>5*{9YTdVTj z&HB3i#!GijEV3ngn+^$YbFwwryOOWYkSe@Qd-1k#V#~yPHVa1>wVPL?R@nG_dsKvt89Oc!yILLvI_y@>+qBtRt|*4(-Z!B;a&JZ9 z^}1E@HqTc~mo-+j<#H=7TS)aZ*SHc~YKUCezg#Y(^1l6ItMTJ~+2SrEdslf{ustS@ zi>rH^gZ_{OXw>fNp2kv_#S!nw2)<(1LtDwl-d#ocdn{IT>T%tw*%X^1$gZU!4<>m)( z7upa(1B~eIa4J?_@!+nDQZC|_$nNi~-UCN?r!jwya5=O&98eA)F-Gov$p}4hO^fTX WuT*=h`KNzh3~cc{aY}41xBhQEodRG0 delta 12615 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 + diff --git a/Source/AnimationUtility.cs b/Source/AnimationUtility.cs index 9563ef0..df9b5a8 100644 --- a/Source/AnimationUtility.cs +++ b/Source/AnimationUtility.cs @@ -161,5 +161,26 @@ namespace Rimworld_Animations { GenDraw.DrawMeshNowOrLater(mesh, pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, portrait); } } + + public static void RenderPawnHeadMeshInAnimation(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool portrait, Pawn pawn, float bodySizeFactor = 1) { + + if (pawn == null) { + GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait); + return; + } + + CompBodyAnimator pawnAnimator = pawn.TryGetComp(); + + if (pawnAnimator == null || !pawnAnimator.isAnimating || portrait) { + GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait); + } + else { + Vector3 pawnHeadPosition = pawnAnimator.getPawnHeadPosition(); + pawnHeadPosition.x *= bodySizeFactor; + pawnHeadPosition.x *= bodySizeFactor; + pawnHeadPosition.y = loc.y; + GenDraw.DrawMeshNowOrLater(mesh, pawnHeadPosition, Quaternion.AngleAxis(pawnAnimator.headAngle, Vector3.up), material, portrait); + } + } } } diff --git a/Source/Patches/HarmonyPatch_CSL.cs b/Source/Patches/HarmonyPatch_CSL.cs new file mode 100644 index 0000000..fb6ab64 --- /dev/null +++ b/Source/Patches/HarmonyPatch_CSL.cs @@ -0,0 +1,86 @@ +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("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_PawnRenderer.cs b/Source/Patches/HarmonyPatch_PawnRenderer.cs index 0a1c753..a58b1e9 100644 --- a/Source/Patches/HarmonyPatch_PawnRenderer.cs +++ b/Source/Patches/HarmonyPatch_PawnRenderer.cs @@ -64,7 +64,7 @@ namespace Rimworld_Animations { 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))); + 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) })); } //checking for if(graphics.headGraphic != null) diff --git a/Source/Patches/HarmonyPatch_ShowHairWithHats.cs b/Source/Patches/HarmonyPatch_ShowHairWithHats.cs index 87e59d2..3714503 100644 --- a/Source/Patches/HarmonyPatch_ShowHairWithHats.cs +++ b/Source/Patches/HarmonyPatch_ShowHairWithHats.cs @@ -6,6 +6,7 @@ using System.Reflection; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; +using UnityEngine; using Verse; namespace Rimworld_Animations { @@ -38,7 +39,7 @@ namespace Rimworld_Animations { 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))); + 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 { diff --git a/Source/Settings/AnimationSettings.cs b/Source/Settings/AnimationSettings.cs index b37e614..b563e0c 100644 --- a/Source/Settings/AnimationSettings.cs +++ b/Source/Settings/AnimationSettings.cs @@ -43,6 +43,11 @@ namespace Rimworld_Animations { listingStandard.CheckboxLabeled("Enable Sound Override", ref AnimationSettings.soundOverride); listingStandard.CheckboxLabeled("Control Genital Rotation", ref AnimationSettings.controlGenitalRotation); listingStandard.CheckboxLabeled("Apply Semen on Animation Orgasm", ref AnimationSettings.applySemenOnAnimationOrgasm); + + if(AnimationSettings.applySemenOnAnimationOrgasm) { + listingStandard.Label("Recommended--turn down \"Cum on body percent\" in RJW settings to about 33%"); + } + listingStandard.CheckboxLabeled("Enable Orgasm Quiver", ref AnimationSettings.orgasmQuiver); listingStandard.CheckboxLabeled("Enable Rape Shiver", ref AnimationSettings.rapeShiver); listingStandard.CheckboxLabeled("Enable hearts during lovin'", ref AnimationSettings.hearts);