From 396cbb8c56999a908db0f4000b9547889922c20b Mon Sep 17 00:00:00 2001 From: c0ffee Date: Sun, 5 Feb 2023 19:05:01 -0800 Subject: [PATCH] mc for onslort 1.4 --- .../C0ffee's RJW Ideology Addons.dll | Bin 10752 -> 10752 bytes C0ffee's RJW Ideology Addons.csproj | 2 +- C0ffee's RJW Ideology Addons.sln | 16 +-- .../1.4/Assemblies/CRIALactation.dll | Bin 25088 -> 24064 bytes .../Languages/English/Keyed/CRIALaction.xml | 18 ++++ CRIALactation/CRIALactation.csproj | 5 +- .../Defs/HediffDefs/Hediffs_Hucow.xml | 36 +++++-- .../CompAbilityEffect_ConvertHucow.cs | 9 ++ CRIALactation/Source/Comps/CompLactation.cs | 7 +- .../HarmonyPatch_FoodUtility.cs | 8 +- .../HarmonyPatches/HarmonyPatch_Thing.cs | 2 +- ...Milk_HumanCompHasGatherableBodyResource.cs | 12 ++- .../Source/HediffDefOf/HediffDefOf_Milk.cs | 1 + ...HediffCompProperties_LactationInduction.cs | 2 + .../Hediffs/HediffComp_LactationInduction.cs | 5 + .../JobDrivers/JobDriver_MassageBreasts.cs | 21 +++- CRIALactation/Source/LactationSettings.cs | 93 ++++++++++++++++++ CRIALactation/Source/LactationUtility.cs | 27 +++-- .../Source/ThingDefOf/ThingDefOf_Milk.cs | 4 + .../SpecialThingFilterWorker_MilkBase.cs | 2 +- .../WorkGivers/WorkGiver_MassageBreasts.cs | 8 +- CRIAOrgy/1.4/Assemblies/CRIAOrgy.dll | Bin 5120 -> 5120 bytes CRIAOrgy/CRIAOrgy.csproj | 2 +- 23 files changed, 237 insertions(+), 43 deletions(-) create mode 100644 CRIALactation/1.4/Languages/English/Keyed/CRIALaction.xml create mode 100644 CRIALactation/Source/LactationSettings.cs diff --git a/1.4/Assemblies/C0ffee's RJW Ideology Addons.dll b/1.4/Assemblies/C0ffee's RJW Ideology Addons.dll index 4d922012c0c6a8585109c43a143962ce4610b302..31b3bad782636f9cbf8a1a4e92014c275a2fce7e 100644 GIT binary patch delta 2775 zcmaJ@4Qx}_6+Y*_U%wE_;7}|h#0@e-C#?)?|HYyeN-Dk5!nzSe1 z@15`b+;h*l_r2%zs`RQud)1$eJass;zmn%?MjrG2Wj@hz!qrSvre*@g`Rj@D!6(5m z(+P;M)5-PR;_T*Bxqkr+xE{g~q)~4j(U~$Lc6^g(q}C*uXdqcZWCbe$@hU)wsCcSE zFS>DvQl^R0&~P;@O1uUb236vIND)(s2XY#r1QjA(8iyxBCxW%oQs5HBB@r<`B!(tI zJ&aXgw$xG-% z3qjRdV0JF;iu?T>Y()NunavR4T#0V-?4+g`oGD%EoQzf%3C*v$o3zl{IGV_ULkV`}*7sCtslm;#gSW4N6XOV7qTp1lp$4q0lA~TnbSryU4ytwRrRSm1sX#ep=w#D#7<;un zq|-?uH7_7ar%U=_Qzt*HIvrpsH@b4SveU5WdCYIo-+(qfo+o4L^0pyYlCD^mv%sn? z@KQ^zR1!j80Iu1OCbugVW zUt*np0A!j&Bfw?QxBF2vWy)g4X=t8s*-^S}UB;7C7?8H3v{zilmN(~^p7&GM= zO){N6&#}1v78}I1u%!@a@MSWoOwwEmi~3x4lnU}bWQ#s^+0$hk4W#}Q1Xt)=z zJsEe6-?Hi@!$H^~^-VI(%XF51iN&1d)F9uaWAq09 z6aC(3+(QNDRGrKD9qk0Rp+O6>kAJT=^5;A(n)nV+@XTTs7u06pRdX?{H`O9|Cah(= z&+VT_oTlaM6R%rqIqc4Gmb;OqTnrf7xIrjdihm8y@4%W!A#9eAZEU1G`hpv&n7#s5 zP^D<3TB-w1p{2lSF3xdrk*i-uZP0hPnsqL2q$o5`(LrF6zAqNh5Y15b;0-lbc^P;@ zIYZy0KZ##J*4012`tS@zVFymld;z%L#S<=`aq+5)B&5~v;)_(l9lW1S`N^U6oWm>inXEbKe{G zTxo7Qa-hfjVD#cw&hIK~Qf*$%&uq6TeypX$-obWE^`q(FmEciu(@)Y+OfcAk8j+no zqRXK45fd)y-E6lSxjQBk2-fXRgM_d}8^n0csaakYGb3*rGCSUqer56^qJ0ThneCbbwo1)d7&2IC0Nww3rAXM3H_~Gqi zw>h_~Y6=vCO*6Z`^ggGmdP;+82-7SoVs^FFC@;#@_=cg_Tp=-2EVjVOWb6<)#|vPoI=k-|myQ`xP)^s}aPhwqh&SAMe63ozkVcl zQ(zpz=)$MG%MW49B|l4JuazAw9UmV{Xs>(LEjd!rbffrY?7Tb@Ewj5iwnlrlJQCZG z=t=D8N=ni*Fp%up7~irb-ruz{w&k&SqOZ5BE#51Yn>I~~Mw5}mliMS)-e|lpzIjKa zr?)rWpX`cnc(Q9{v@hC|jCMKeOR9VWy&Gs;?ysg?Or!H`po0C*NFeI?Cm$a5PW)06 O%?n0-lRx9kRQ=z_ul4!> delta 2844 zcmai0Yj9L&8GhdHT=#6U$({`%fdqCNLN1$NN-`ND)U+$dq zobSDS&wKgaJ-gY}+120KXIAyw7jg$HnjOC<_600opc(@+tl zR6}r|)W|!*qmn6qnL7Ph%v-@ib~5mO86d&R)Qn7`Nuit;0pjQ(cK414JkPGJ;G?UO zfO^^!O$Kg-4D?gRuy}TZGd9}%9(8*r(97tWNGxze?L}&ht|S$WuF;j^Gc98aBcW|T zvlz7oU?+zgf9(=>O`Pt{ft8;V202!+yN;qHVLw;C*zM$_L=eUs?3rt zx3Nmq)^UGB*{AYm>7kOzr=^t0mT4-JHIOdRWMZ4kj+>e+SZ+)!pih(uHaAck^c%Bk zlB$bgy?iH&M+Du@uqT?64PT1jvQaGvhKF*aNq8bGN2Ocy;lecY;bLlgGktj``GaFcwFu6e)f~Y3ITMF_ zJ)V5E+HJA&(VlY5@;&8XD4Izf)k8ue?{>rJlW1~qFM>+z3oUve4^Ty#IEqy59J(?l zckYBSB8Obef+=i7X+e4!RGS+dwI;Z%I2j5*x5j12;*MQg;HtK+d&x3vCd|0mcp_~e zjry;t+C@|{o89`XR4vQ!c5?vCdb^$p*(jpkW)`YXJ9zd&8u?A*nsSsevD6M&#yKG#xzw6o@s-x6DA$r{$t~-oJ91q9H@8O?el4GGxl7{HesFeI;fHI&BlB}XapX5`-zLsedqTWn(t^&_^FH-pl&Q1XW4uePWd zc1#X7M`t?v7eJvkI1!y#_$afod2i>vE4UP0ml?n&XB^HEQy3!JxQ+y~xB(r#0CT;m zT$e<&W-gLWL#v8h{hh%@)zli!Nwn$w4%-bOiA;UT8V3cyz?HramWmw;r%k+Gf)}9QvwJ6=j zDTuQ1Q;-Y(=7r#*R(T6og zKl-uGc$WAp<21en%lHk~)#iJ&wyiM?3FtIe-Xd-Y@dqKE4)JP;P}-Udu?-vX90o8= zy5*#}`p*M4L_EIpPDYAU&=Z?!?Z9j~6b!_w%3hKu^z_on#KB~7HWWDJPZpI0AI3^r z%)BDRm*l$U3P&`+KE0m3y61syz1^K#9_*R3xuc^Avpcu-&Y9lPac8iks3EFXQ_=mv zj%`y14-`!(DBd;cnJ15}-MRGXcN;G(?|tKV@XGj!nUygsDdMj*k_e1N*w#CZ-N|(<&#mZFNQ)HqwNx2G5pBiQgUrIdn7g z7>6Onqrv>vcs8et9qlxapq5hbeC6kqBZHSKSEyiqvfO`u pdbonly true - bin\Release\ + 1.4\Assemblies\ TRACE prompt 4 diff --git a/C0ffee's RJW Ideology Addons.sln b/C0ffee's RJW Ideology Addons.sln index 854a7a7..b37d2f8 100644 --- a/C0ffee's RJW Ideology Addons.sln +++ b/C0ffee's RJW Ideology Addons.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31205.134 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33103.184 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "C0ffee's RJW Ideology Addons", "C0ffee's RJW Ideology Addons.csproj", "{D46BAA34-7459-482F-B152-321C071DCE18}" EndProject @@ -15,16 +15,16 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D46BAA34-7459-482F-B152-321C071DCE18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D46BAA34-7459-482F-B152-321C071DCE18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D46BAA34-7459-482F-B152-321C071DCE18}.Debug|Any CPU.ActiveCfg = Release|Any CPU + {D46BAA34-7459-482F-B152-321C071DCE18}.Debug|Any CPU.Build.0 = Release|Any CPU {D46BAA34-7459-482F-B152-321C071DCE18}.Release|Any CPU.ActiveCfg = Release|Any CPU {D46BAA34-7459-482F-B152-321C071DCE18}.Release|Any CPU.Build.0 = Release|Any CPU - {01BE0D84-9292-4F89-90FC-647B66771C61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01BE0D84-9292-4F89-90FC-647B66771C61}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01BE0D84-9292-4F89-90FC-647B66771C61}.Debug|Any CPU.ActiveCfg = Release|Any CPU + {01BE0D84-9292-4F89-90FC-647B66771C61}.Debug|Any CPU.Build.0 = Release|Any CPU {01BE0D84-9292-4F89-90FC-647B66771C61}.Release|Any CPU.ActiveCfg = Release|Any CPU {01BE0D84-9292-4F89-90FC-647B66771C61}.Release|Any CPU.Build.0 = Release|Any CPU - {212ED289-C5A3-4807-B482-A53F36B31F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {212ED289-C5A3-4807-B482-A53F36B31F23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {212ED289-C5A3-4807-B482-A53F36B31F23}.Debug|Any CPU.ActiveCfg = Release|Any CPU + {212ED289-C5A3-4807-B482-A53F36B31F23}.Debug|Any CPU.Build.0 = Release|Any CPU {212ED289-C5A3-4807-B482-A53F36B31F23}.Release|Any CPU.ActiveCfg = Release|Any CPU {212ED289-C5A3-4807-B482-A53F36B31F23}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection diff --git a/CRIALactation/1.4/Assemblies/CRIALactation.dll b/CRIALactation/1.4/Assemblies/CRIALactation.dll index df8d0f84aaf32e5568d556787ebf62b4280542f0..ad8ad1727487a003a621d374ea6ba3815ee69c32 100644 GIT binary patch literal 24064 zcmeHvdwg8gasS-MKC~;XwX3&nltrwDQ9s*-qmSkIC`6WMaY_hDSD{1j+uY7l9 zTPQY?NeBc=;x?g}ki;gT2}v6uA>k1yn1T~Gq{VI16p~UPar^TpO%s~t*OH{p?>lqv zUG2&?N%P4spWh$9wRi5!oH=vm%$YOivAgPd&qqijA|3Bv{fg*GJo&X!;Jbqf6o=+K z9iqpJzBTtrW!<;tZW&5uq9c|$XeEZDeTj71%tm(`QEN0EO{Sxr8+xO|X1~!~QW99; zsNUE`v`*1TIrH4hZfkGQyl7BqA=(Cx*XI6w6wfH$6L=Gq3a;9AGs6)hdL9J${L<*A z53nfzpL#kZv+(*X^lo5eg6KYW#PruOqGIsg$P!&Oz3koSD3L#}+z)zf9^ITZ4nU>d zN0dol9lM#$uPD(?%~rEV9*d{&i#v9cUtET zA#mTN$yU{|w4h0@Gw)k3zkDs)#faJdWM*EI=H=|LD*!OIh%=pbvXOYHu`9v7mHlts z2K_QTRWZ;F;%e*D%w(rk#Q+;_<<3~&WhP^eBsXVyG%y*nnf0}5tc_cIVcz{mk1m%X zo>MOV7Y|LizFILMT_C!*V}e7r{=I7KYE)ET@v(i^06n;j73KIy8q@gKihNOyzntaE zT2xxYeZ+j4p~O~z7w|TzmGxe8CGe(**KFr!z-zAJCzq7RI)FA70qJCfd9gXjos3m+ zpSr-V7awk)uDkI%uda@-hCmGM1{$x)kw_hZ#zwnrycL$&Z;T~pPN7V1DfZWyoAH#fyus`R>bDs@Buj&S8BgK+%qo;Nef{--uhHu> zD?xk@!K7f_P-#6~dlv;@D!C3CP-9ylqP`Dfs9Q@A8kLn2K&VrOe!Z84@lwaPLTt1K zn#Q*Qt83C1mN!(5!?z9|JcN9$SH_Ug1C6oi@*;RB#1bY;GAJ zhr?~#oW%}@jj%aUU4o>k`Vf>~uq||q`$wiW_ z>=ngcI5_9M5Bg!Rqu=(o?N>H1;B5?^*U9`rVWFU}G3cA}L~I{;jrDn*vVOt2Xg}C? zJ}mY(2K`eN5N?Qq{BRSWYlJwLm#0yw*T)Z_zRcd{5{KZ~yQE8tMG;qx*J^e^U#@B6 zV-PiO;r7m{yqon}Gjtl!%yF>nWbQH1aeKQKI|z(J{}4ZCS}P#R% zD4XE2Rj*+6$v1n|E7gUJ^_Xx=(0r30$mKxn)%ps??$PYDP@~zYFRa-quSk=Wht;;K z{t8u-1QNqG)my(>Gbhn*qfavrbNdpTvykJ~!Apqkux95tdpjX{-MkGY!G;R#gWnIV zSoMplM!l-!^;uwk0L-ShUJoH^E1_YQy@XcQ7uDNqXf@5dnh-p)hTab0`uDh93OZe~ z_XY5Y^h$E>=ePo1n!Tm*RmMKZRW)_|4m@Lb0yO5BGI~u@}`&($|1+^ z0@u77Ag{(BfE>RE;LwL%ti@ODDwrz$$W&>KT{_c#!1yC5lfBtzZPQ6>)bv~%dZCf_ zT9-3YFEmmYBRR~f8hkOfbzx-_LiYcb>3_(k&qI2}PJs6mDqV>_AWelU?e$_Dc}tJ| z5yS#hONVzylzM&C8r0m~U4!C`lj{z|+ecAp{9^#-z1#})vi_xb7IVB!D-To#8_KZ{ z`(w!R!BF<6zN#C7KCgKnc#FSZ1^c}8GU}_Sugew-+g~h|mw59MT&bO6(1yE%;w>+W zEyx$U*p5s#&A&!^DkE|()V$5hyyj8Z*tFDZ-p|iQulaF)F7U=4;OA^_WmRSD6F?io znm6`IAXOFRp4g{=U@ERY6oIw6@MFiA2R9z)=W~d4TABR}+<^Q(pjKkFA%wppReqHU1RkhyDy;-jlVS<(1|afvW0w z6bqgE_2>0-Cx(7A4?S$1 z8v2>y@_HOvI1*ItATlGiN?!qSu#N@2?wD;-__BrVViEX}cUVDhmj-(gS=50ypPsSP zsj#(Vu19kRFJ*<}HsmS?IY^Le101JnRdwtMZVMAxSF5C6m8&50Bua|?RWYQQhJ|=y zs-lYMg6oN7{QWlLoOc~s%Y2QMJp+(q_vF~m=Cju``_I8KpUY=&aHY-XnLX>^34UOM z#~nE5-N?l+fK|x`JXaa}3*Za=hd|lqPj>D(Z!e3zh@!d)E;;xTP}OgDvbwO7m6&Mb z-23{OnUfH^#UdekCyUi_ChtZVD7?>9sR8YTbM4suVLPV!Bh3XGe3i1$1f&nUxev6e_qtUIA;9oL zAke<0%`MGKT9&l7F~>ug@boe^YxA+gx~h`sqcef`X02p;5VH_vEw~!>fVZ`m7GN6z zzta3QTe~~)TnajhfSkW7Wui5CsjzzcoCkwN;M32QB?O(^`u%ug3M9G`L~EY&xy?$!4E^5mp-Od7JKPz>E<#o-KjDB349x% z*QBl4Gq~MvRx$jH^!=R1_)8TGzbG zrHtRFuvKrW%=ugq`)5-P`=qkwCnW)Tu8jHTq;w8S1N1ud2WV70e7K0M{gT-Hem~<6 zOJDlo4KFV7v*irSXEJ)!d7p)iAstGPSg}_=!L*eJt`sAV5!w$+#a7 zoBygNR1qM*NIrsEmGs>z?&I?{tUprC@RNv*0IAZ-9MN`-z%LhbTa|*pID_Nl+ZF6X zqm1QWL*xW#smA=XCCpz5JV0MYsh6$}F=s8jgvm;cGEF)EOal8x@N%UKIR7i92P1D4 zcLP&}%9OlSycM(DE7T*^Hsuql6=ge6<`?QZP&a}q66zz6WGX1sGblR9aL& z6?dUlSg3`5o2n37zF%Zhl~V6C%AUeHT_x0Gpq>R)Es}bGC1=n~p`Kv@3cgi*3Ch}pss&XC>KdUE zkmRy!g_?stv?`Y%BlD2mr8a%ZcV!7(y zfWM~HYPO_8JLso*rT^uWZj8bWbfo&L;n$&eNT_@1XJ!A5@>k|@*-0A2oWZGZK2x_> zKZ-R%r4>Ti_3*(-LD?Mz)Ug8UNuf^CBdX?6DY#%tr%vTU*=0H%aHu&o*P;DJUYMQM z{j^l5lhlV2KW%iVb;?Vio-UAlL8yCaO;Nz(rxzVct*P-8)8p7n5#38_&E=jjEx=AD zjU4eTqNnoe)zb-~-cMTt_j&5+OpZF@X`r7v^{y_u&(lc$Mz;F>v^sFa(?laSC9&H~ z2ZTCF+(I*bSSZ`qm(hJfy-4dTKIOTL)-_G_y@j?2#buxMw2-fPs%$aM5bB?m??oQ- zET(FqY%PmvXP)E|>J#cDy%BiEvxE*f)Z3v`o~87pLv{FH@mxV4;e?9$x7z=jr;Q#I z%C>VEeLhFsr7feU9m&HrFCk-o)1kcO$3gwAP`0m^(?8|vd2t^77ol#$`u@+J<@C$E zvK6FbS50&qHDSG5L0cT^CZRs(P>;~RdREW~Z;T=N11Wpjq5hL5QSYyWvRhw4uL))M zVFkVANR}!84lQSMWeVzPykO9q%CpFEE6MLrMb#~!j3rW5^m65Yc~;V}O)0e%ESYu6 zwpF!*dY@DFv(j^re9ob63vWl+*M(wR6i{zEW!zpn{lKBPy>_~cFRbXzqEMCJ+fG;7 zl(g4Q%bhZAubtL8Wo_XQByV#lZm%606#7ItLtjN{sY>&42AGcX+2Y@DE3D9IALDo7 zD5LQ`8_pVL4f7wvZcL@GmocA9by}qHse@${dRj`EuTV{pCGjmC;I)vkwJG!_WE8qu zWq9L^La5T`Q0siY%h?NUD*Y`i)M%S%wmCtaYuS)>BC`vp8q2Xl`S6U``Hr-1^QUZ3 zX;5_99M-JR-VpohmssO%8&qg3E!7;3-FiOf9`T;-XTNx?!NYa2D$*il0U~_?y^XgQ z@3VOS2q(S>-f!a_!uu@VKf=C^qaqCGr5eBhc0rGZOK}2Z*e0-DV7I_c0(S^Z09H^^ z@Vx@Z1Wp2CH!4t37!L!^B*y1bLO4eN7tv|u6-42y3P)ctjaDrKel4Q=Rb>=WR!$Fw z*JEZph^RU%wPuUV0^v`pY~h`1pe9X|>MOx4&I*5AGzr*I!SK=W2k3};dG#OAQApw> zq5etnQNRxtJpg#D_&DI1&;#_a`nvvEdQ4SAUj)3T;z@c+{jT~Polp<^U!qg$z2&E% z;o0C{1CG!54xJYMarJL-GCQJPTKzg5k$uCf>URTg0q3?J7FeTvQ~Td^Ry|twD|$>g zj}hZ1=)IvLlk_T$&3u5~k-fw_ zG`sRMu;F;o!%Ca>)ABDW?b=S?mz8&<-BWZd^n%i@g=c(2*`zJU*$8Len%9)M%8r^h zlugRnva?DjRh0c)*`a)+%ByzLe<>wuw{pf;rtZ-0m~n}k&@R>It4Zx->80vk8N0m- z_kB#^-NTr|9vBn;oyr4Bo0?SryL`ENr^3A((?Y)0z}b`STF}2;J)%7vI7&ygpZYAd zO*`wm1Mr;h0re^E9q*%RQW;bqR~7Y)?`!HQYASnPJ)s?|nh*SP{U!BI;&D8!8QM41 zcSL8A#6yk1R^_Z{rr-!Ij(+9Fla+SOq# zpq-*0%m{05Yxh^Q&^y|rrInhZAD&UG73tm8a{>RCK38iK4c!96`VXt?wQl8Xs70&M zC(EwT=IX=hHQFvJDc%Zruh={(QSoVkKCHfr^!F6+)LQjT)d}qc-BWS1Hl_uAme!`< zu1shN(YzP%E^V*+c;pYYJ7omB_3(^OXzluDjNK;v_L*Nm-8TQDu=&0jU)6T#KgNEt zReyiQ*T4yteO*iH??hhK68gr_X>G4wg&q2s{;%GDLTQ)JqfhF$>p}e#JsU37@6_*6 zD)b}zb4sm#RNqtFpdZ&a`LEHBi*JwW{~2rm{~xsm{V|=R@wjrPqz9$10rpFL9#>|C zc7pSlC4+#Qw6vZQ{t120j9c`qBlE-HeflYA@X~30Q2m^);%59szzRS=jnH$zzb%|M z1^x)I87I$}w;5-^R=`=b5pX{30BoQX;1Yq?2<#C4^<;tHE1aDI`{+a9?4id2Gjzh+ zLF4pDQHOFDV4w1Fd=>OI<c!r*hv)z$3n!089OSQaS?+diEXd>`KmKXSjKngM^DsZL1n*>e>JSOlB zfmAG#0#^#WN#Ho?N}KWw4*N@0Lw!*Fton+&Q0vrwsGZa1=@06U>I<-r)Df0anqOIs z3&DpfYXK9L^Bi2I?I=}o(((YtamH8ieU&1tGM~pTY61NzPRI-Bi&#Y#(4+AB0{RkN z4){1eaa%xN#kx{QPeZbfo`GZ?{W*4Tb@V(W>*xhY*3paD8P#D&*oM#0y68qSD6M=< z`GoTC%B||Zs_V7QdPe`Su21lam;ZXJ*uJfFd0*8JihzRs!&}k$*W3K1Sh=UaO0kaf zdd~mc*G8vp9nieU)66Bve1$z0$e;7=d^iPU+3e!0Pi}grM>iTc>gK0$GHjdGuMz4DMYtX!dIlr{P&-cYk_d0RZ*8gHRx?IRRLdyMtQ{w-!Qm0?M+))?7NBhzOkN3uyX-EIwLmiJ4+@~fcf z{3@-qdNkd4Q!A|>O{EgMQwGrPuJq`zVNIj5rp0CJl9?<&)7d49&sR5{g|-*lEi9&O zMjv!cmw?$z&eyZlcEsZN<>!|Pb9oyI%>L1ov79H+Pt+6jZ~@ndUV{+OU#+G-zbwPK};KIx%SUZyBO?XHiVf+`z(g~R@!E)}F{}0n@yzq6IMU1GW*9iCammc z10&N@-LDv3WF|O%5Ad#zu^_FdiJtM5b0- z=CH%zvDuJr9~`vI9>i24g@&_6d%AxuLK4G98!e;H7|F&rn;tcti=Em1kZpTAdnA_Ol^wq;EF%@hpMY`i6wR9YJMGMK$p4 ziDWk3lSsnGWSZy8C<|aBN$g^TRwq+g!@>aXF|0TT?5ad2ry|c?&9>(Zdt%ZSE0NBm z&}R+Xb6yG%fjy5={aW2pG$t}c$9!L(3!lVlp=dS~~ zy0)vN#%3dxI3QT&eBDk4I=`U992v8cNIe%S8Xifc$EFILNx^NRo!!Y4f_bVG6NDX! z2pF|vcvaHO8hu0dw4{zidb5!+tbGO{`*s=w8wRL%PcoIVQKWEWUoqb)17Tx4N0Ei? zT9PTi=lQrgX=So&jsD~Slrhi78N<(g(u0h+O;BM2WZNR`t>bJevUZbhT#81dFw+|A z+J_0wG$xykICGnM{dgnc+l|X&_ipU*pe8;N@cH+$e<3wNocdNcQk1k!{|eNT|(Rq z`R>dVZkxy>jI3>rY(Q?tx^ba$MAV33Ws^qc!jgyuE3cw6*ExN5+u0T^I|~G@Gl9GI z#5=9gK@Jx<-Rj}A#@==6XGB52VaCNr8VGHec*BEF)}y#ARj;zQvG8Q76`hJ*=k(9=56VW;(|h zX6}WJp9+L7q;1h2?=^X?x=4k0ExdrXyii-8z*-2!Y3C{3FtL<#dRdp)ZJcI9i7aYy~;2?bAI!QNV?+lQz?OoUgi}!W*Du}J7vo_PvXrH-%750;vY;W=w zqX)am;nCsT652DG$*wZQ=@N15J6`H+4#$KwjOpHyuoC+c>FI59iyJJ+?3Sg-?X#Kg zHL|=Z!|o`Vrd0;EA~c*hupw>O6NEU2V`puod67ca1lFJHX{WO~R6l0Hh_e{;fZ8e1#;h^SEJ2-QCAc$6HtuZJnmT%i5*AeQuAmQ&%497ZqWDxK zYs)B#?4#SdWO^@gdc?R7S~v}?N?6p3ql{q@&KZE*PtMl%Db6D7U*ItsGI-|`A2zXt zNP@-y@mbMwY`1atYaAum?e=k*(CveUOT$AhDn)B$Nhx4SRw&@`W{pQQ<8p0R+j;z= zd-K8sNG#3y+KTt`FPdQ+j&(^ybbPIm!s1La=Nuf91nC`2bfwecT6RycOb)F^fSLh`{D=cW>*YpY#HxZ_;BCMp|l)l z?yPf9@juof$6wry;Fcqu{S7qbSuw5IW{xjv?vuyO=I)H!na*TlFwMuhz8uTldEx5B zz+R{qTiYZ~z-|qy%(R8cP4>LOnZmJ<lIEX3a1Vu8n|?KgGu+a6Jd0o2 zJ2xEMpQ$S?%J6m{CSs?B#U~^2ms@Hwgx`tVa{_@i#ud>x$41^(J?GuL+ZtJ+dBx4; zQf_vH=VAt_&_QH#!a0J+BSU?Fa`EOSOE-0hHhYE1AgA;rb7XK)ftw1RKJG457Ub?U zl1+aSF_*y_Fok!T+i^i+?&p3=VW;UjbXvjG1a{USdpD4onxi~ z!x;x$uBAH@W0~G0&ME7#kFvL@Mk0%}<;no^pFMX-7fFP%_nzp|Cj@Jd^Mt+{uJAVqfaXbg;9ud#j0yfDA`{ znvb;{{q_tMss|SV>ka%}4HR$TXYPEoIkBHFRguN92yaUo`|VA69&O#cpD*0T)|vbH zSlp4wj3!d4FR1o<)Ethlz~~$0vxj@( zMe>=53`cjSH-&krQsk9A)G3wv)s&^ zlR*;b+6xC_(z*+(d%TkygE*hHx8fwg0`>sAlylTVLg9m#%gwEzE+cQfa#_3>xwx!E z>}i*gx7*6NJSPlYvS2c}OlNpp5}uFuI_XGmJaUA67VH`xL67j7)j^x7o4*T$&;I%- z3y6G2CZ&n4xp-MK4MQ@6e+e4I=XxEeVd9q${eb(quIFls;-@&jy@pO`#nMdF`))dr z$HnFp^%U5Xp{=ljdy=|P&vyRqb>{5tdNSg4k5-X|9SXcH?rR3W4`4s#b7;w0WRf1_ z$Mt~S80qVgFT3y!{jH!F>%?=IRzT^^qr-c*A6#lEPn6yp`dS4YB|O2a+jO{(fu*^FW_ zYZHDd5}w=Si7$whl(6|BV4+aR7uCX>LdCFFV}Rvo`pAs?9nTQc2RgD-Gk)#qCM$zPC5q?wL;YJ&>J^uUm2{JXZ^^Igc?F zW4^FBceto-eF&t;b)PMVsjVBa6Ja^`r&T&7z>mZ!(ZV9 zn{v4?%3Yp(s+4?iOgI6S-yfMgp~4wZ2os@Z@}**w4p)RHUPW8~SWKFj4@XX(_Pg9N zgaFu+r(H&5@>OmP{#+&Sd$ul}^4269%Q%mAqQeJ{mgvFhZYVaC{!=ghZW7I_~B2#-_K1QE@5U^ zf*r0jihLMGMjRg-FdVIU2u?Np5;Ll*LMI$F@lXl==nwnKb`*Y-1*b(OPJ|Qow7AyO zg6|nixD@;BK^X4tKGR@Wi)O72fv4_5MgFCU*egS_{)K-W(mBm@MFe z3LoAoQFodv@8HS)CRYz)_*`82c6f*G4IjP{fe3-(azcBjZ4EX@#oxsc4E7h5^tKoziLh?aPgyqChOo>_WZYd9Ic;dMGmkk~imC=U585fw%OZx#O(9Zva1i&3ib)(|tO%Y7;Q^Xci_mcELtx`^lqcBaT&{@j z;~6nr)iA#}%KqiVi*~seXa_B@9>hd2s&Qlqj)24r#4ux6WU$W&Jk4{%&gEP-+2qjd zni!JFX)Q*xfr0ib_^KJdYWWv^Thz+!R$>I7mE~^z@%18ee@20vDsmBpN(w)AfkU~Z zN})*Z^Ze)w4@aYmTNdLt3yTz5(9*iwXz9OdX;a(cw#7|L2d-*sYHJzjYr10TmAkLF z;>s&q`>udwF~08Kik~*)A5phLGn?0UZOMJlp^>j_acO-me*SzFObwOiik$DV@i`^J zb)vbFC}d%}7)b9^sL%Z>QFGowt1;@H37uR2#;Ds?YcmuqZM~|wwQcc|%NwH|xShdm z^tEYYG>eb!8lxNWg`H&I^~Ts1bB~d}HjNLy$}aGMF%kX}!tbN;3g_&WDg3OPChqwC zv_A)(?=HBlbPRDWD~Tp1em|B}$^8%x=WB4JhDo{GQd+K1TR{jn=RTE~cH`Ml_^n9! z0wUp$N3Jide!**-_<5g$H(c}!l}J&TK|>0?hXc=OmQ(ugI4u44u;7b!?yI)PqT z#Qree)uVWCXU^0MKb0wXZSL*tZT`#St2&QAvF@?6)=$g+z8e{VsPpPwy;&nMjITag z32ST@KJ3BAcOxU2UAXMVcOrMW6K@wj3}7aI%QDl1+odM{urFl}jx{Cv`|+97t^(ig zGI!s+3!hivb84foq1kGfRh)BSUkWbO2 z^jCFIGOgSEt6KO5!D}mUp`BTftK*=&Jx9)41#y@)6h7))kkoWMt*w1gk zjy^8?`qlPd-KA&sAD`nD(0+4m#tGkVwqH6Pc0zU-cy!{eKx+c0meq0wGN3apXE~Ny zKwN7JO8NA|XPmsd7Z#vL^#`C-flXOR*{78AH60L{7W{(Q{iG56JpUl=Jl%iZ%j+c6?%Cb=Vm@Wszp1UvW_=B~}# zpxuHE&ixYVw&Kjyl6$kyB9Lb<@j2MSGXcL$S$6TZnsFXX;UAAP>sW{SgHoG4FoOQE z<%2lCX2s^|yeK`4K#Ss+-z|9akNfJOC0~y{QvJ}&Hx?F7w5~Vtx1puY4Ne<8Qf#-| zZ>DU|{wDS>6TfeSE)#v?`=V@~2j1P^OU2)Xb*FoMy3enYI_>BUpMHlCJ@#4t*VTiI Zet)kK`|p(e^77wblmEY^|93p_e*o8(?HvFB literal 25088 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 YKiq2oyH@n}!m2-9m;c?<|34P^H-cq5*Z=?k diff --git a/CRIALactation/1.4/Languages/English/Keyed/CRIALaction.xml b/CRIALactation/1.4/Languages/English/Keyed/CRIALaction.xml new file mode 100644 index 0000000..237b660 --- /dev/null +++ b/CRIALactation/1.4/Languages/English/Keyed/CRIALaction.xml @@ -0,0 +1,18 @@ + + + + RJW - C0ffee's RJW Ideology Addons - Lactation + + Massage Cooldown + Default 0.3. Time between massages to stimulate lacation. 1 = A full day. Changing this number will not update existing cooldown Hediffs, it will only apply to new cooldown hediffs applied. + + Total Massages Needed + Default 20. How many massages are required before lacation starts. Progress is saved as 0->1. Each time a massage happens the amount 1/total is added. Changing this value will not reset the current progress amount. + + Hucow Breast Size Increase + Default 0.5. When turned into a hucow, this amount will get added to pawns existing breast size. + + Hucow Breast Size Minimum + Default 1.0. When turned into a hucow, this is the smallest that breasts will end up being. + + \ No newline at end of file diff --git a/CRIALactation/CRIALactation.csproj b/CRIALactation/CRIALactation.csproj index 5c849ac..b29ee35 100644 --- a/CRIALactation/CRIALactation.csproj +++ b/CRIALactation/CRIALactation.csproj @@ -26,7 +26,7 @@ pdbonly true - bin\Release\ + 1.4\Assemblies\ TRACE prompt 4 @@ -45,7 +45,7 @@ False - ..\..\rjw-mc\1.3\Assemblies\Milk.dll + ..\..\rjw-mc\1.4\Assemblies\Milk.dll False @@ -70,6 +70,7 @@ + diff --git a/CRIALactation/Defs/HediffDefs/Hediffs_Hucow.xml b/CRIALactation/Defs/HediffDefs/Hediffs_Hucow.xml index 65055c7..314e344 100644 --- a/CRIALactation/Defs/HediffDefs/Hediffs_Hucow.xml +++ b/CRIALactation/Defs/HediffDefs/Hediffs_Hucow.xml @@ -13,10 +13,10 @@
  • - 2.75 - 0.5 - 0.4 - 0.65 + 2.5 + 1.5 + 0.7 + 0.7
  • @@ -25,22 +25,38 @@ InducingLactation - This person's breasts are being encouraged to lactate. This is a long, arduous process of breast and nipple stimulation. It causes feelings of soreness and swelling that ends once milk begins expressing. + This person's breasts are being encouraged to lactate. This is a long, arduous process of breast and nipple stimulation. HediffWithComps
  • -
  • + + false + 0.01 + + + + InducingLactationCooldown + + HediffWithComps + This person's breasts are being encouraged to lactate and have been encouraged recently. This causes feelings of soreness, swelling and discomfort. + (1, 0.50, 0.50) + false + 0.3 + +
  • + -1 +
  • +
  • - 2.75 - 0.5 - 0.4 - 0.65 + 0.9 + 0.9
  • + diff --git a/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs b/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs index 65b38f7..cb7e980 100644 --- a/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs +++ b/CRIALactation/Source/Comps/CompAbilityEffects/CompAbilityEffect_ConvertHucow.cs @@ -30,6 +30,15 @@ namespace CRIALactation base.Apply(target, dest); Pawn pawn = target.Pawn; LactationUtility.ExtendLactationDuration(pawn); + + //let's expand the breasts too! + var breastList = pawn.GetBreastList(); + if (!breastList.NullOrEmpty()) + foreach (var breasts in breastList.Where(x => !x.TryGetComp().FluidType.NullOrEmpty())) + { + breasts.Severity += LactationSettings.hucowBreastSizeBonus; //this could make some big ones rediculous. + if (breasts.Severity < LactationSettings.hucowBreastSizeMinimum) breasts.Severity = LactationSettings.hucowBreastSizeMinimum; + } } } } diff --git a/CRIALactation/Source/Comps/CompLactation.cs b/CRIALactation/Source/Comps/CompLactation.cs index 56706c5..1af6397 100644 --- a/CRIALactation/Source/Comps/CompLactation.cs +++ b/CRIALactation/Source/Comps/CompLactation.cs @@ -22,8 +22,11 @@ namespace CRIALactation public override string CompInspectStringExtra() { - if((parent as Pawn).health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation) != null - && (parent as Pawn).health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation).TryGetComp().canMassage()) + //if ((parent as Pawn).health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation) != null + // && (parent as Pawn).health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation).TryGetComp().canMassage()) + + if ((parent as Pawn).health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation) != null + && (parent as Pawn).health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactationCooldown) == null) { return "Ready to stimulate breasts for lactation."; } diff --git a/CRIALactation/Source/HarmonyPatches/HarmonyPatch_FoodUtility.cs b/CRIALactation/Source/HarmonyPatches/HarmonyPatch_FoodUtility.cs index 7e98c67..b287ba3 100644 --- a/CRIALactation/Source/HarmonyPatches/HarmonyPatch_FoodUtility.cs +++ b/CRIALactation/Source/HarmonyPatches/HarmonyPatch_FoodUtility.cs @@ -31,7 +31,7 @@ namespace CRIALactation { CompIngredients ingredients = foodSource.TryGetComp(); - if (foodDef == ThingDefOf_Milk.HumanMilk || foodDef == ThingDefOf_Milk.HumanoidMilk || foodDef.defName == "VCE_HumanoidCheese" || foodDef.defName == "cheese") + if (foodDef == ThingDefOf_Milk.HumanMilk || foodDef == ThingDefOf_Milk.HumanoidMilk || foodDef == ThingDefOf_Milk.HumanMilkBulk || foodDef == ThingDefOf_Milk.HumanoidMilkBulk || foodDef.defName == "VCE_HumanoidCheese" || foodDef.defName == "cheese") { AddThoughtsFromIdeo_Patch(HistoryEventDefOf_Milk.DrankMilkRaw, ingester, foodDef, FoodUtility.GetMeatSourceCategory(foodDef)); @@ -39,7 +39,7 @@ namespace CRIALactation } else if (ingredients == null - || !(ingredients.ingredients.Contains(ThingDefOf_Milk.HumanMilk) || (ingredients.ingredients.Contains(ThingDefOf_Milk.HumanoidMilk))) + || !(ingredients.ingredients.Contains(ThingDefOf_Milk.HumanMilk) || (ingredients.ingredients.Contains(ThingDefOf_Milk.HumanoidMilk)) || (ingredients.ingredients.Contains(ThingDefOf_Milk.HumanMilkBulk)) || (ingredients.ingredients.Contains(ThingDefOf_Milk.HumanoidMilkBulk))) && !LactationUtility.IsHucow(ingester)) { AddThoughtsFromIdeo_Patch(HistoryEventDefOf_Milk.DrankNonMilkMeal, ingester, foodDef, FoodUtility.GetMeatSourceCategory(foodDef)); __result = ___ingestThoughts; @@ -58,7 +58,7 @@ namespace CRIALactation if (ingester.Ideo != null) { - if (ingredient == ThingDefOf_Milk.HumanoidMilk || ingredient == ThingDefOf_Milk.HumanMilk || ingredient.defName == "VCE_HumanoidCheese" || ingredient.defName == "cheese") + if (ingredient == ThingDefOf_Milk.HumanoidMilk || ingredient == ThingDefOf_Milk.HumanMilk || ingredient == ThingDefOf_Milk.HumanoidMilkBulk || ingredient == ThingDefOf_Milk.HumanMilkBulk || ingredient.defName == "VCE_HumanoidCheese" || ingredient.defName == "cheese") { AddThoughtsFromIdeo_Patch(HistoryEventDefOf_Milk.DrankMilkMeal, ingester, ingredient, meatSourceCategory); } @@ -77,6 +77,8 @@ namespace CRIALactation { compIngredients.ingredients.Add(ThingDefOf_Milk.HumanMilk); compIngredients.ingredients.Add(ThingDefOf_Milk.HumanoidMilk); + compIngredients.ingredients.Add(ThingDefOf_Milk.HumanMilkBulk); + compIngredients.ingredients.Add(ThingDefOf_Milk.HumanoidMilkBulk); } } diff --git a/CRIALactation/Source/HarmonyPatches/HarmonyPatch_Thing.cs b/CRIALactation/Source/HarmonyPatches/HarmonyPatch_Thing.cs index 8180341..86dd42e 100644 --- a/CRIALactation/Source/HarmonyPatches/HarmonyPatch_Thing.cs +++ b/CRIALactation/Source/HarmonyPatches/HarmonyPatch_Thing.cs @@ -15,7 +15,7 @@ namespace CRIALactation public static void Prefix(Thing __instance, Pawn ingester) { - if(__instance?.def == ThingDefOf_Milk.HumanMilk || __instance?.def == ThingDefOf_Milk.HumanoidMilk) + if(__instance?.def == ThingDefOf_Milk.HumanMilk || __instance?.def == ThingDefOf_Milk.HumanoidMilk || __instance?.def == ThingDefOf_Milk.HumanMilkBulk || __instance?.def == ThingDefOf_Milk.HumanoidMilkBulk) { if (ingester.TryGetComp() == null) return; ingester.TryGetComp().lastHumanLactationIngestedTick = Find.TickManager.TicksGame; diff --git a/CRIALactation/Source/HarmonyPatches/RJW/HarmonyPatch_Milk_HumanCompHasGatherableBodyResource.cs b/CRIALactation/Source/HarmonyPatches/RJW/HarmonyPatch_Milk_HumanCompHasGatherableBodyResource.cs index 2294cf9..2335544 100644 --- a/CRIALactation/Source/HarmonyPatches/RJW/HarmonyPatch_Milk_HumanCompHasGatherableBodyResource.cs +++ b/CRIALactation/Source/HarmonyPatches/RJW/HarmonyPatch_Milk_HumanCompHasGatherableBodyResource.cs @@ -13,10 +13,11 @@ using System.Reflection.Emit; namespace CRIALactation { + /* [HarmonyPatch(typeof(HumanCompHasGatherableBodyResource), "CompTick")] public static class HarmonyPatch_Milk_HumanCompHasGatherableBodyResource { - /* + public static void Prefix(HumanCompHasGatherableBodyResource __instance) { if (!__instance.parent.IsHashIntervalTick(100)) @@ -45,8 +46,9 @@ namespace CRIALactation p.health.AddHediff(HediffDef.Named("Lactating_Permanent")); } } - }*/ + } + public static IEnumerable Transpiler(IEnumerable codeInstructions) { @@ -75,7 +77,7 @@ namespace CRIALactation } - + public static float AdjustGatherResourceDaysForPrecept(float resourcesIntervalDays, HumanCompHasGatherableBodyResource __instance) { @@ -92,7 +94,9 @@ namespace CRIALactation } } + */ + /* [HarmonyPatch(typeof(CompHyperMilkableHuman), "ResourceAmount", MethodType.Getter)] public static class HarmonyPatch_IncreaseYieldForHucowHyperMilkable { @@ -111,5 +115,5 @@ namespace CRIALactation Pawn p = __instance.parent as Pawn; __result *= p.GetStatValue(StatDefOf_Lactation.MilkProductionYield); } - } + }*/ } diff --git a/CRIALactation/Source/HediffDefOf/HediffDefOf_Milk.cs b/CRIALactation/Source/HediffDefOf/HediffDefOf_Milk.cs index 94dad92..b147fa6 100644 --- a/CRIALactation/Source/HediffDefOf/HediffDefOf_Milk.cs +++ b/CRIALactation/Source/HediffDefOf/HediffDefOf_Milk.cs @@ -23,6 +23,7 @@ namespace CRIALactation public static HediffDef InducingLactation; public static HediffDef Hucow; + public static HediffDef InducingLactationCooldown; diff --git a/CRIALactation/Source/Hediffs/HediffCompProperties_LactationInduction.cs b/CRIALactation/Source/Hediffs/HediffCompProperties_LactationInduction.cs index dc3e8b4..a16e6e5 100644 --- a/CRIALactation/Source/Hediffs/HediffCompProperties_LactationInduction.cs +++ b/CRIALactation/Source/Hediffs/HediffCompProperties_LactationInduction.cs @@ -7,6 +7,7 @@ using Verse; namespace CRIALactation { + /* public class HediffCompProperties_LactationInduction : HediffCompProperties { public HediffCompProperties_LactationInduction() @@ -14,4 +15,5 @@ namespace CRIALactation this.compClass = typeof(HediffComp_LactationInduction); } } + */ } diff --git a/CRIALactation/Source/Hediffs/HediffComp_LactationInduction.cs b/CRIALactation/Source/Hediffs/HediffComp_LactationInduction.cs index 462dd4b..c46ce03 100644 --- a/CRIALactation/Source/Hediffs/HediffComp_LactationInduction.cs +++ b/CRIALactation/Source/Hediffs/HediffComp_LactationInduction.cs @@ -7,6 +7,7 @@ using Verse; namespace CRIALactation { + /* public class HediffComp_LactationInduction : HediffComp { private readonly int OneDayInTicks = 60000; @@ -23,6 +24,9 @@ namespace CRIALactation public bool canMassage() { + + + return tickLastMassaged + OneDayInTicks / TimesMassagedADay < GenTicks.TicksGame; } @@ -35,4 +39,5 @@ namespace CRIALactation } } + */ } diff --git a/CRIALactation/Source/JobDrivers/JobDriver_MassageBreasts.cs b/CRIALactation/Source/JobDrivers/JobDriver_MassageBreasts.cs index 21c9a07..1630207 100644 --- a/CRIALactation/Source/JobDrivers/JobDriver_MassageBreasts.cs +++ b/CRIALactation/Source/JobDrivers/JobDriver_MassageBreasts.cs @@ -13,7 +13,7 @@ namespace CRIALactation { public class JobDriver_MassageBreasts : JobDriver { - private readonly float WorkTotal = 300f; + private readonly float WorkTotal = 600f; public override bool TryMakePreToilReservations(bool errorOnFailed) { @@ -47,7 +47,24 @@ namespace CRIALactation Pawn p = job.GetTarget(TargetIndex.A).Thing as Pawn; if (massageProgress >= WorkTotal) { - p.health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation).TryGetComp().massage(pawn); + + Hediff induce = p.health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation); + induce.Severity += (1f / LactationSettings.totalMassagesUntilLactation); + //0.05f ; //20 times, 3 times a day = 7 days, give or take + + if (induce.Severity >= 1) + { + //p.health.AddHediff(cooldown, + LactationUtility.StartLactating(p, true); + //remove the other hediff + p.health.RemoveHediff(induce); + } + + //Add cooldown hediff. This has the pain debuff so i'm going to add it even if you're now lactating. The last one would have still hurt. + Hediff cooldown = HediffMaker.MakeHediff(HediffDefOf_Milk.InducingLactationCooldown, p, null); + cooldown.Severity = LactationSettings.massageCooldown; + p.health.AddHediff(cooldown, null, null, null); + return JobCondition.Succeeded; } diff --git a/CRIALactation/Source/LactationSettings.cs b/CRIALactation/Source/LactationSettings.cs new file mode 100644 index 0000000..57df2a3 --- /dev/null +++ b/CRIALactation/Source/LactationSettings.cs @@ -0,0 +1,93 @@ +using HugsLib.Settings; +using System; +using UnityEngine; +using Verse; + +namespace CRIALactation +{ + public class LactationSettings : ModSettings + { + + public static float massageCooldown = 0.3f; + public static int totalMassagesUntilLactation = 20; // severity += 1 / this amount + + public static float hucowBreastSizeBonus = 0f; //size increase when changed to hucow + public static float hucowBreastSizeMinimum = 0.5f; //smallest size breasts can end up. + + + private static Vector2 scrollPosition; + private static float height_modifier = 300f; + + public static void DoWindowContents(Rect inRect) + { + + //30f for top page description and bottom close button + Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f); + + //-16 for slider, height_modifier - additional height for hidden options toggles + Rect viewRect = new Rect(0f, 0f, inRect.width - 16f, inRect.height + height_modifier); + + Widgets.BeginScrollView(outRect, ref scrollPosition, viewRect); // scroll + + Listing_Standard listingStandard = new Listing_Standard(); + listingStandard.maxOneColumn = true; + listingStandard.ColumnWidth = viewRect.width - 10f; // / 2.05f; + listingStandard.Begin(viewRect); + listingStandard.Gap(5f); + + listingStandard.Label("CRIALactation.massageCooldown".Translate() + ": " + Math.Round(massageCooldown, 3), -1f, "CRIALactation.massageCooldownDesc".Translate()); + massageCooldown = (float)listingStandard.Slider(massageCooldown, 0.01f, 1f); + listingStandard.Gap(5f); + + listingStandard.Label("CRIALactation.totalMassagesUntilLactation".Translate() + ": " + totalMassagesUntilLactation, -1f, "CRIALactation.totalMassagesUntilLactationDesc".Translate()); + totalMassagesUntilLactation = (int)listingStandard.Slider(totalMassagesUntilLactation, 1, 100); + listingStandard.Gap(10f); + + listingStandard.Label("CRIALactation.hucowBreastSizeBonus".Translate() + ": " + Math.Round(hucowBreastSizeBonus, 3), -1f, "CRIALactation.hucowBreastSizeBonusDesc".Translate()); + hucowBreastSizeBonus = (float)listingStandard.Slider(hucowBreastSizeBonus, 0f, 1f); + listingStandard.Gap(5f); + + listingStandard.Label("CRIALactation.hucowBreastSizeMinimum".Translate() + ": " + Math.Round(hucowBreastSizeMinimum, 3), -1f, "CRIALactation.hucowBreastSizeMinimumDesc".Translate()); + hucowBreastSizeMinimum = (float)listingStandard.Slider(hucowBreastSizeMinimum, 0.1f, 5f); + listingStandard.Gap(5f); + + listingStandard.End(); + Widgets.EndScrollView(); + + } + + public override void ExposeData() + { + base.ExposeData(); + + Scribe_Values.Look(ref massageCooldown, "massageCooldown", massageCooldown, true); + Scribe_Values.Look(ref totalMassagesUntilLactation, "totalMassagesUntilLactation", totalMassagesUntilLactation, true); + Scribe_Values.Look(ref hucowBreastSizeBonus, "hucowBreastSizeBonus", hucowBreastSizeBonus, true); + Scribe_Values.Look(ref hucowBreastSizeMinimum, "hucowBreastSizeMinimum", hucowBreastSizeMinimum, true); + + } + } +} + + +namespace CRIALactation.Settings +{ + public class LactationSettingsMain : Mod + { + public LactationSettingsMain(ModContentPack content) : base(content) + { + GetSettings(); + } + + public override string SettingsCategory() + { + return "CRIALactationSettings.settings".Translate(); + } + + public override void DoSettingsWindowContents(Rect inRect) + { + + LactationSettings.DoWindowContents(inRect); + } + } +} diff --git a/CRIALactation/Source/LactationUtility.cs b/CRIALactation/Source/LactationUtility.cs index 0071f11..bf4a85b 100644 --- a/CRIALactation/Source/LactationUtility.cs +++ b/CRIALactation/Source/LactationUtility.cs @@ -20,7 +20,6 @@ namespace CRIALactation p.health.hediffSet.HasHediff(HediffDefOf_Milk.Lactating_Drug, false) || p.health.hediffSet.HasHediff(HediffDefOf_Milk.Lactating_Permanent, false) || p.health.hediffSet.HasHediff(HediffDefOf_Milk.Heavy_Lactating_Permanent, false); - } @@ -28,7 +27,7 @@ namespace CRIALactation { if (p.TryGetComp() == null) return false; - if (Genital_Helper.has_breasts(p) && (MilkBase.flatChestGivesMilk || !Genital_Helper.has_male_breasts(p))) + if (Genital_Helper.has_breasts(p) && (MilkSettings.flatChestGivesMilk || !Genital_Helper.has_male_breasts(p))) { return true; } @@ -39,8 +38,10 @@ namespace CRIALactation public static void StartLactating(Pawn p, bool natural) { Hediff lactating = HediffMaker.MakeHediff(HediffDefOf_Milk.Lactating_Natural, p, null); - lactating.Severity = Rand.Value; - p.health.AddHediff(lactating, Genital_Helper.get_breastsBPR(p)); + lactating.Severity = 1;// Rand.Value; + p.health.AddHediff(lactating, null, null, null); + //just adding to base body, not to breasts. Just in case the target has multiple breasts so to not confuse + //p.health.AddHediff(lactating, Genital_Helper.get_breastsBPR(p)); } public static void StopBeingHucow(Pawn p) @@ -56,7 +57,9 @@ namespace CRIALactation public static bool isMassageable(Pawn p) { Hediff lactationInductionHediff = p.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation); + Hediff lactationInductionCooldownHediff = p.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactationCooldown); if (lactationInductionHediff == null) return false; + if (lactationInductionCooldownHediff != null) return false; return true; @@ -68,15 +71,27 @@ namespace CRIALactation var drugLact = p.health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.Lactating_Drug); if(drugLact != null) { - drugLact.TryGetComp().ticksToDisappear = 1800000; + drugLact.Severity = 1; + //drugLact.TryGetComp().ticksToDisappear = 1800000; } var naturalLact = p.health.hediffSet.GetFirstHediffOfDef(HediffDefOf_Milk.Lactating_Natural); if (naturalLact != null) { - naturalLact.TryGetComp().ticksToDisappear = 1800000; + naturalLact.Severity = 1; + //naturalLact.TryGetComp().ticksToDisappear = 1800000; } + if (ModsConfig.BiotechActive) + { + var hediffLactBT = p.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("Lactating")); + if (hediffLactBT != null) + { + hediffLactBT.Severity = 1; + } + } + + } } } diff --git a/CRIALactation/Source/ThingDefOf/ThingDefOf_Milk.cs b/CRIALactation/Source/ThingDefOf/ThingDefOf_Milk.cs index 6964b77..27a8272 100644 --- a/CRIALactation/Source/ThingDefOf/ThingDefOf_Milk.cs +++ b/CRIALactation/Source/ThingDefOf/ThingDefOf_Milk.cs @@ -20,5 +20,9 @@ namespace CRIALactation public static ThingDef HumanoidMilk; + public static ThingDef HumanMilkBulk; + + public static ThingDef HumanoidMilkBulk; + } } diff --git a/CRIALactation/Source/ThingFilters/SpecialThingFilterWorker_MilkBase.cs b/CRIALactation/Source/ThingFilters/SpecialThingFilterWorker_MilkBase.cs index 958688d..f64640d 100644 --- a/CRIALactation/Source/ThingFilters/SpecialThingFilterWorker_MilkBase.cs +++ b/CRIALactation/Source/ThingFilters/SpecialThingFilterWorker_MilkBase.cs @@ -12,7 +12,7 @@ namespace CRIALactation public abstract class SpecialThingFilterWorker_MilkBase : SpecialThingFilterWorker { - protected bool IsHumanMilk(ThingDef t) => t == ThingDefOf_Milk.HumanMilk || t == ThingDefOf_Milk.HumanoidMilk; + protected bool IsHumanMilk(ThingDef t) => t == ThingDefOf_Milk.HumanMilk || t == ThingDefOf_Milk.HumanoidMilk || t == ThingDefOf_Milk.HumanoidMilkBulk || t == ThingDefOf_Milk.HumanMilkBulk; protected bool IsHumanMilk(Thing t) => IsHumanMilk(t.def); diff --git a/CRIALactation/Source/WorkGivers/WorkGiver_MassageBreasts.cs b/CRIALactation/Source/WorkGivers/WorkGiver_MassageBreasts.cs index 6bd11c6..d7e2f89 100644 --- a/CRIALactation/Source/WorkGivers/WorkGiver_MassageBreasts.cs +++ b/CRIALactation/Source/WorkGivers/WorkGiver_MassageBreasts.cs @@ -43,8 +43,12 @@ namespace CRIALactation Hediff lactationInductionHediff = pawn2?.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactation); if (lactationInductionHediff == null) return false; - HediffComp_LactationInduction lactInductComp = lactationInductionHediff.TryGetComp(); - return p != pawn2 && lactInductComp.canMassage() && !pawn2.Downed && !pawn2.Drafted && !pawn2.InAggroMentalState && !pawn2.IsFormingCaravan() && pawn2.CanCasuallyInteractNow(false, true, false) && p.CanReserve(pawn2, 1, -1, null, forced); + //we have the cooldown + Hediff lactationInductionCooldownHediff = pawn2?.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf_Milk.InducingLactationCooldown); + if (lactationInductionCooldownHediff != null) return false; + + //HediffComp_LactationInduction lactInductComp = lactationInductionHediff.TryGetComp(); + return p != pawn2 && !pawn2.Downed && !pawn2.Drafted && !pawn2.InAggroMentalState && !pawn2.IsFormingCaravan() && pawn2.CanCasuallyInteractNow(false, true, false) && p.CanReserve(pawn2, 1, -1, null, forced); } diff --git a/CRIAOrgy/1.4/Assemblies/CRIAOrgy.dll b/CRIAOrgy/1.4/Assemblies/CRIAOrgy.dll index f8c3265f53f929a78ad0c3834202317bf65ded8e..4465abc171a0f23a5dd061d09fd2bbcca580a8b6 100644 GIT binary patch delta 714 zcmXw%Ur19?9LK-s+`B()Ywg}S|4nTrV`<)->+*xH- zS-2sd-*&!VyxG8hEIt`#w++TxEFW5dqsD$7GUBX-?HF^cD3yb#j9wy#1)GM%yNXR* z*$X&=2e_bk%z$?N?II>f86b(eM6RQ)ONJs-C3V@St4MSo!LC#j589O)l911? z*OE@xnW!h|egdU8kc3}+cFWkU=5&hQ2-G<~aY3{wO|%yTqYgN17>L1L`pxgKx-$Xl z1J`P8LOr#kRaWn?EzB8@#bU7&Rah2=(16!M0{8F~DZIomtauB*m_`{hJWc)<&tetd z_$7QqKq%k~_6SzWeJ0Fc1M~F#oLLhQIB}Qg#Y3VWZ-~uQC4x4r5f4|`Sz$NIA+q|h zPK;HovlWiw7daEy$0Eoh!~&Fd9C2gS((IY1*c=QZz6P56OQKa3JtwTTl|$=0z4sri zEDc>zt{YiLz$@DXpLB}LgLa=3H$@&a9yt~`hjGODyyn7b*RolOE)rL1dg$RiE*RgP zjm2oJC-(Ck8`xb+^(||`TN{P$EqY7zbf~e5$wX#gd?c6171X@BNMy5lbyUw}^eHtu zo*CA2lbSlHYo?h>C6oDZE`2#Xt|j$JeXI~pXqrBiSG%Kq$4=(P3aUPmR-?(uWFnvZ tZ+Z)ntTuvI|Nb{R7;A>)^0TrLcD0sbt`=5uyZ;D$v!f)*+ibDj_80SDq=*0j delta 588 zcmY+BO=uHA6vzMbW;RJTZL_;+*S3kWrL^6qX((7BsNg~TLW*F~+7ChWU?GPfqKHM4 zcn}Xo69)Xa_9lpj<{(~_B9z*j2SG&&9)#$@Uc`fn`eyawJN(}N{pZc&F;fkzVf~hB zU-#ZMma^hx2*lWTiHx`_~jGNFK;&|?@1~v++n0yPw)bSHXNTrs@bBuqIWi68#jC6vX6IJh^jSg z$s78fs#Nx(3(N8tvUo1f;sGAvJf312F{~n^N_dHDRAT=NUBD}Rq|11VKwiZMbjTRr zeJroz6Yg+-&CEmrN$xHnjb&zrrxY-N4dy7`Fn31W6LCK_@@yT&CUYvX<|3ZMH+D)0 zL;)8uCIU?05N7qNHQ>~Fgb4wKrNF5+zgqLkY5hp=y0Y-%$o<;l?bn|te0|0ay3%pg z?VccSGSThMnB+~8)^?rZLJuaN@DE49FZN&L|9!JD4;mdb`h8K<&)P>~zXuV(X}aEu SXm)mfmvm}37h9q+9{&RhDr@cl diff --git a/CRIAOrgy/CRIAOrgy.csproj b/CRIAOrgy/CRIAOrgy.csproj index 542136f..0589e04 100644 --- a/CRIAOrgy/CRIAOrgy.csproj +++ b/CRIAOrgy/CRIAOrgy.csproj @@ -27,7 +27,7 @@ pdbonly true - bin\Release\ + 1.4\Assemblies\ TRACE prompt 4