From 617f8da51ece9c5595395bb0e37846bf21be7a3b Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 20 Aug 2025 13:27:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/WulaFallenEmpire.dll | Bin 215552 -> 228352 bytes 1.6/1.6/Defs/Effects/WulaFleckDefs.xml | 24 ++ .../ThingDefs_Misc/Weapons/WULA_Weapon.xml | 1 - ...n_Homing_Examples_Bullet_CruiseMissile.xml | 127 +++++++ ...A_Weapon_Homing_Examples_Bullet_Homing.xml | 110 ++++++ ...Homing_Examples_Bullet_HomingExplosive.xml | 123 +++++++ .../Weapons/WULA_Weapon_Penetrating.xml | 1 + .../3516260226.code-workspace | 8 +- .../WulaFallenEmpire/HomingProjectileDef.cs | 41 +++ Source/WulaFallenEmpire/ModExtension_Cone.cs | 105 ++++++ Source/WulaFallenEmpire/Projectile_Homing.cs | 325 ++++++++++++++++++ .../Projectile_Homing_Explosive.cs | 142 ++++++++ .../Projectile_WulaPenetrating.cs | 41 ++- .../WulaFallenEmpire/Verb/Trackingbullet.cs | 304 +++++++++++++--- .../WulaFallenEmpire/WulaFallenEmpire.csproj | 4 + 15 files changed, 1295 insertions(+), 61 deletions(-) create mode 100644 1.6/1.6/Defs/Effects/WulaFleckDefs.xml create mode 100644 1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml create mode 100644 1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml create mode 100644 1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml create mode 100644 Source/WulaFallenEmpire/HomingProjectileDef.cs create mode 100644 Source/WulaFallenEmpire/ModExtension_Cone.cs create mode 100644 Source/WulaFallenEmpire/Projectile_Homing.cs create mode 100644 Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 5806a8ca0c24d836d5a6693cc5597f2576c85ded..dd6f78242329a28be87cfaa76623db0ac41b6cbf 100644 GIT binary patch delta 102127 zcmce<2YejW)iypeyE|L7Dyx-t)hyYvB@bH3*x1;z0n5e|+k_UH3t*}#1_pL9A&f>V zS_+stz|w2zEg(7pOdy1WP9UL&ngmFIBqSjri0^sMooxp4=KcTv-zV_QopaAU_uO;O zJ@?$YqvzC)epY+t50=h-_2J7j|L;w$dt!|~UDJ*ZXqu^jjb|e~5#h`6*0cr*8=4m6 z7yf)SO?&gK=cm=JKP#Z^NHDPP37j=48DAgJ;`sg%B09WDM!&aQpBih)`b3ZRPSGbv zNt*PI@$S;QqDY}31MN8P4ZXYdQzYcyV*E3-kapAeb?vjLq3MN%TL$Kg?PTm2)C1n- z=C*kL!OZ4|3@z9*knSCskHENjrlFa+JvA-XGs+kX*<|`OEjc})?FNcbO-tlF;Ka;; zyCo1b!>U7}Mix|)Ig4cW7BY;nS0UJ|P|b1koMNmM@?H+NM9=jJF7o~rzEVHWyCiaE zW5I`Q#Y`G?)7fflDB7*-=X?9b9@Z}yn^JR=(Y~-c*RzXsdqx*}AJ!fh59pd6btXbu z>jK_Ub)VE<2#g-XUCML;cgfh1^;3fSXJh9k(>0N+RNPKucXU1(n0P0?l4ine3|T$8 z7IT-855w6Bv=S)7UEby06ZB=?gWZ?ucYAwJp0MS&i@fZNz_@ucdD#Rhdqx>!B_K$5 zIYK^-xWfCP8-%Q_&bQJCi#QOOmyZgL5rYzJ~cz>VLhv%f8#i`qT zyxmJAfp)u>@9AtG^P~1CMRjZ1=n&%X@b2l^u6-B4rOFkjw~*5X!s#yFWxbQVg}sZ~ zcdf>`wT!bXaHdA?2LOWHd+h1n{e${aZw%q~M*pCtWM8Rf^H3?#~Pr`T2;NDQ|+|Lmoj~MQ1L`K5)$%t_e zL|BVB2YOq~u=@C6?+K&cMjN7SoO- z^pP3+)cg{;B*Tet#68%Xwn^uX2ZPSI`FN2x;mSP-z(m;L%YuM2$Rim^MEVcYOn{k0 z>QacSfC!_x(ero1y{XlQ~nLT*sW_}yb$7c4{m3WVgo4+s$ZjavL zy}n7rT&0;P$k@bLc|GznazQMMI%BkNS4ExK;0x9P&oV?I2*Zq=Bxa2tJPC10rx_=2p#+Nx^S zh*Zg%LYi029g&uL9gEJ;myX@ED5Q6O2$|Gs(TIBrq+&)LzMQ2{pj33+{Nva&TP-o# z*HK_JlBXgtZhp+FdjrMq8C^FvbK95>TRMO7)C4)UKNK6ES(=EgUF99Kcq+<&>Eb)} zKYP0_Svco3q)#t*`3gIHrp67h8ISaD4y6n`rvqf&E)?GAsMWHMH)}@%I`-s}8UyX? zrR}y3Py8!#k7=fL8yK*s(yW|;RDtZ3Y3)d~@lVIL*yW=DIO^YH7V_Q~&!uDM?QyH2 z|IOQGMPC>eK4>~;df!>`Qa8*r%GJ_qBHiCvsEmO^CF3q55^Gxy&U^v>LW0-m?*zYLJ@ z0Tb}-IpDj1T!!$fu?G&gQ;(97{#fwpfak299Hmb1Yn6BH>K?H2)an);_`f@-3nDcS z9)x7Qp+mPr;!_X3&uB+)q?klE1t$MZCa)DH&mG(6@Dq*bm#hHOa4#DBqkX4g!~@<{ z**)~Dz0b3A@SK^O+5V#<3G^u-Q4;_OST>aNN8a(dB(ToSbsMz-@7~;TMtxvx)1#Ld z`dMT7W4et<0?25wH;!F@>KnF)2H=-t%_Gkm8!rTqT@LJW5dD+sFksEqHFM|S zPOuEn&WM(-9ef6c6Omri@zeW=;-KlooX_wWd5Q$tK%PWk+*|;PIn*u+{FHaZ@m-xn zw~s}mQpD}=BG_tu4vbb(>^dQ(Z|S}De#(34_||EQe14umB4o&ypH_lQ+ZB_$d~`t#nb6K8BrL`w_M z9K*^ftS6+vjPdiAAoI62gLEt%=-~f(?}`&sJxf^THE5F~&mn;b<5>j8&21TB0JUfI zxv|$y+zM@TY|{6yGj>_(v-&HbnIZQDzJl(Hc!4*5p;ytg@qjWAQPUw}ZDvRXOox~X z(V7JEXv5oi9j8pte>FDml%w?a-ymAp_%#CK<_=_Irm*pwvByr`Eoj6IZ^D_wMvXCc z(U~9WnT>TVnB8Wsc4R7L!OzQR#_)84_5`Taf`^&0_E6v%-fd^MH8B!WtqJ$nYDR7< z>e8L={r2pQnr0xva2Rdxhx{}n5a4gnJGGq+T0+uxm)sQp|`&9zNDz9WD zpGrmtAEHbX;Y7qb5II|`@kqvu;Z2#W3m=KtvSf`hJiGXvj2pvqN*}d`buenaXCTk@VS`;lr$#Y;pYZXHDG^^Nr^zkD%6_h5t?>kYJ3KUen|`TGI}azvO1fBmMuAEYBVEI{OHr#F%Gy7 zazBOy06)@u%gg8+d$s3GYCH-FYJ&lhYckvzwzA%WbJB=hcFu%+4v`jyNoZaXXD!}| zsC5ip_IL2e9m@#%!S;6cz#{qm=qtdZNov;qQ z0QbrIM1B9TmP$4l!^1$b;Qz!Db>rTr=QQe$7e04E2h|+X^YNP#&5&8W%FgxnKQ|X9 z!WwJDd;Q%0JgY3a#;`~6j;t{34JiwPVZl7|9Pl?l`|c_<)N`YXw)j)rwIC~19f7_IJHj7}82`R+UhQ!ebD zpM$%FAJjB=zIXq5?d{(~LhJi@7|s$D+x`K+RmFRMK5w`55ED2UY4~=b&K!uC&Su_T zg~?N;G5!z1#39Bz$tlghf`#`pjZr!{w9DWUW>Keujlut&PDhF=O}@%1&5WSZeDy(#@c*IE8mW1u%M0>| zGOTmJu_hA>hBgglK29u>vk;N!Q(`81l_Z;pDAGzgxr{=$!B;$^MI>!hyC25LVcHbx z+M>w&69}-`uU!wn57rriL65= zOh2$ytyLh`Bx;iJM7+PwN3IJt1c;46X|gs^3&)`@)HS}UA>@5>b~0oT3|2%`J$*1*>? zlLbK-v(Er`$%e)T={PHpjEU%#^6o{no__dZ2Cd`RA1PC}11h~iRXXcfGIK6rW|!gt zmP7|yG-Ko=3dvppq@%Y*FW_!TK8%r%%U~!^ySoVAq7*?56E@l~Xy?&0iUfB;Tr42Y z3Y?56YD*jZ0t{#Y)v;h+fZaI!Lr(e3h15`^u-cb_6^f7Mbp4QZIX+j!AmS^8MMI=U zcM-!eL0b`{jU63IMhxf5fR>LXsV`8jt;3*V;9m{?HR0bN{!PHYUi{k_|1z_MKr)gU zL|_3ZWH$CmWqP}xdU72h6S^v8hhJl*w)Op&G7Fq#yFcAR*nUpZIekkDN zMY30sYeWc(ia#j{#%)Qoq(mH2L+_)@yrZkCgo+u{Rjjl67crv zK@HY&yR(rh_x z28?4*D!OhFtV+{K)mQA`BhX$VJ7^5oblj1D8hQTSgF^uQZ* zMnE*GJ&892jPa3F2h|MdH5>)qOCJ3y-%Vv0kJLuzUW_DKpg$6@4+JV5F;#c@Q2(Mz zd_~GkS@(g^(MwTJYV@FFAF!axG4*UtH8t7$GCM7^@V_S!w(dt7^#qB0k%k649@Gv2 zmnW){?IR@_rkT%PfgYq$A8)3zgj3csWC;^QtCoG>YolmOv(F$369r^Y8+j4MZey2? zsiG*@m4069%g@KCMJ%uH?`5B5p)GWNvFz(0&^5*S2{;+0e)eUN@C0cM!;6_idb9FW zgz_0UbcIo1)xfl&sX9c2GD)?AYXv~tBHVEDezdeg>G%!%2TZ6GD5&KS5+@`$P-Vm( z08>Z=LnxG~pDJBuTMb2G<3?U(lSX`%XC+iTZB@fIa`K0Y)`LJ+3{2GCfn_+UQrVQl zyCNs82K`5^agb1QIu<#+y-X?TJ)ldb}B4PkSQmEqo`LFMl?HybN059VMEf z`=?4ZRc7@tvVth!4YVX$=3cOYC>%!HKP5Y@m8l*9Bn4a2mS{`1C))dG!=HW>utY0# zhz&d0(byqfn)oIgCbfSCTvWz@#stJSQ@K;{s`_ZQPXnko(Q2QLH|xl^(Nxxg zBqGTk3>kaT<4sM(lNLOsjnGr|RZ{ykGswXA?@x3jCL}r&U5SZ_Nr~>nF!4($j%qN8=0qxyPP8;7S`(Q>n>4+2qCe5zgg&5%f;N&MWvrPIoLC zH()B)YK?08xguh@OdVOT0x_0aj9%;-iC5(XS&@*#3aZ9uwQ^pclz#DjCac0ms_f3-*gmn&bn)3g;tV z7fRHK$Kb!BNh^{K=l@v7Xt2UdPiefhlruvURM2N0NhmdF+QF+qxUtsym|u06MM%^+OEAlUbq)Iy z@1GZSW5v7U;?|zOFun;kw3!HqPo~7Y!Nl2rMO>n3Ie1@j@$~$s_?ovPW{%#dZ>$|p zjY8P|5HL7kWcCT>{sx4e>}GHat%E?wg4-Q)|4v{611-b-hXh0JXM(qXHQqmcyy@ZW zMTp6SvX|lI{tIC1b38OJddZwTx^{S%aP@COtzwNgSHRo;H{;Ekj27;@#>jnvFP8!} za^no{Ex|7tT*aVu6*Zy{+nq2^g|^hUWiey~+7?N|pO1sg|WqH!*2n~kFs zIr34l3H%9xadR&=fm(3eGs+kXqq~f?npq~bMAEKjIhrzkm~3xguo*LO&CW{XqGq5{ zlM<0`6XU#m0;mH|L3T~!sZ+goE<0X7$UE@z-ueyd*SqlY&c#=vETZe# z=MhSnb|VsVSb&*c3tKK!*t!OQk(qG$HdF}OqDZbOc=i1$qc0s5mtoCb84Z zriF1T(r!gKmPs~hRvSVXeg(qTWo%Vg!?fA~8h951)W%cmyyh$Wnwg;t{`yB8B%-rW8;}%%N5daCoI||JuWZUsz<1C>yN=PzN~P^t zT&2_cZYeibGMn8BB&~y?1Zcg?IJ<&?LkQ^Gq%GG8GNUXZJ+x9savz!R>olA-jKTXb z|BV$|`97k@574Cd{WN1|BqjDiEE7OdR3CI5Ksju7 zjrADAtBY*78xdf-eR!#Cd*~tdS?=U|XYTm8iDLp{ba z(@dG*togGn2EI7S*RVlgb+Nv9odAJ5Y5C-drp<3rNRdQXL*- zz}gfa#hOKh7+MNNf%l0DaSlNd^48(V*qRMAakIFK=rH90)&x+g0XK#hN+^lX!TW5L z7<0R9lwh?Ur1)j6M2m`N*5-6@fzH($gVd!Lw=rQ9>jmWc5+p!~VcnhwM5e#zfCC5% zI@=B{7{nJ7++LkPGfX>#lrHnD$`vbyEFHQO%_D<~3BzX1D>mnAX4ZnJq}j!>(y%4# z$m_YbHB2OXZqVEM+Q~bkh$Us62QIp`1sz+jI3%4)W4Yg8$&@C`NX8FxY&Ekfdq9zT zZDT;FXBx9N%=hlSc9;CQq&kwLl#YPBQCBwGx4k(Y@k~3o*#eeIe{qU@H5;RX)*J>P0$;S4f~i_RE1@e{)iSHcub&tedzTJ+ zA77uIM7jDFkVqB9U=PU@Q*Y>8CI$gsI6RKI8vW)}4WvYx?bA(d z07XBK>KGzjZTAgS1qF={{umJvsW@z%9a)MD(#_T%IO!A|ISRtY+Ua&=2Mc$Gb0`2S zk|BEWxnM4$-1t}KdmG=>vaxdC)#8bGO}-Z&wDv&3#69mx6kYm#hnU8sD{p=7opV#) z^lu>(Efm_pT(-L}6Ar<)2XyUam}#!zcc4iACPwTisn3VKhxf(JR(=_CsU7?UFfdkI&M&N{41{F# zW~dRBwE|#lIarC8cuCFno(NitP}6F7l~$DkoV^e+OeQU8NG$s&4NC_qrJaSahF38m zqpVBua1ZA2s>e?!h4KeypAGqTmb>G`6iQ$pCYNEIs$->&L{Mv{whQ+KqhrZZNP&|J?;HttTfL zM(4ZKf1^`8L-%Ngt%E>NWWFIXUHD$z&TFgtT=Kyj1?5e{m=It*VNsvgdK{K>?Sww2-u+d7W`yeA-iN65B` zgiU{f3rBw~3lnmWkyj{hABBkYayyIH(T}6~x!++ns|`#$g{+^#j^gzQUe<$nAh&UN zBsmf@hDj>>8%Q=~VX1_^HK}I*ERdrWgw(Rpg(V!=E6({m2xhSyfZZM=SP?G{G8i-* zlC_UU7HW85IHYQ?1;B7fPPX2+se}qrfvsg)D`NuoF(pD;HUmD&(-1LaJsEQ-Y3d%Q zSW*a#o1^R+zJpXfql~fEdcVA_H-8~@F^E0Ih)|-njzI~n@8FSh04z;>1+-Qa?jm1z zABEI%!=#pS-69(OvE!BEcQEsS+lg1-?5+ki6rmg-C>nOU+Gt#PHiTe^Q@7R#$Y@P5 ztu83jIyD&!I}X+F@+w^gg=1w(&+%#B3XsPRmTtvIlJG)s9WeV~a2v#wOWGi?k!t)+oL> zjJk>=vAz?m#~}a*t|CM%`){q|fgr<*6Nnj0_k9GFK9MxALFgpBt&{N>`Cc)!&&c=7 z!5@@@?hg^2eh!8%p}~%+fNAMb0)&T}u!HSmLF<>Ske@*;qbK7t z>nFwK~ArUmgjo4IX zJ%ci{ck5q@!Jzdlzaj`c#{lP?F)!w?T(QE?(iP6AIOr{RH)3X6r- z^S}dd$mcBNGmt(*IkC^fcoesPfa9~h9q#PRqeF*JlG?QnrxKwM$8QZJRJVtO&@LF~ zaH@9jGdM4B_09nh7CmCx=OW~<$P2=6fS?rVyI_M3g6hv(wCoU+ZsH$eCVDU=(m?G7 zAft!R%+W^9#6X1Gd`8ZY_f=>Ox|Atk6@Xpb5zZOT@VI_4j>)M0Sny9j1XJh`+Q2;{ zXCis(to}|3w4T-9EPBW3dypXUU$TsW3Ob9BVg}qkX=2_}!WC<*aM#DetnoXRcz~if5LNusOvu zTaK^=#WV9p*l6OJO-9&E;+eh?wv2eDdxVW4o@pDQ{>L%GdK}eitoslqp(%F(s_HoI z9hIH~^Lg48-i&)@_gx5hJhM@ADwR{g&Qz+|4$rb)TNtZLfM9pP%&px4`ho*h0=N{=+Q`Udctx$t@x&Scb`_G^S7~W= zVR1OOE0fFn^pa);LFkt`as@~v!ir`D&F`CNDhZg{N07i(QW)n-B(<-?1Ea%?1B*aF zKz5jpV004_PUDb)-{0Ge(bdf zqw!ux(Diu0)yBXs+%_JJN9G*|XU=eL0NAu|WTgL*URL$lQvK=2ZKM)z5ZUVEqOctL zzl^f}$UFSL!Te32ujXCS#>mb1kcNy&e*|j>M}e2F%?uj~07U7{nv9WKHbBiR1KzF` zcpMl2Z$pxq>A>qR;Wg_rB-wzVH~0RLJOvHMO_sK%36_ z-h)3$$8Q5SCBR!hY0VRRP1^ z3e12rKJiQxlUd$*4}43%!+Ym}X-im!;d2>14bd*yHLR^61eZ)Hu1x@9|Cbd-gy9NWwPAa9+HgM_akyGc5-2gt?0qUv}nrKf8s?R>g;|SWfDWw04CnS z2VU>;RpjX!@2Q76>p0k6Tn3FlG{HOTp(!oG^>yId`ZpvpFvTy&wMdgOCGuKt{Gl!t zybi$$bt4aeAypRe>W!Y(^%?zI@8$Kqc>xfm7{{Q< zN(${mFD@foQVw2 zi-%kC527rPDwM0WO8$hW?1%6y)|;xA^$H(eO*KB@Df?l;@B0YDBq~bw6?AdsQ+rgd z?7yo(Vd`DBcPsCrpSE{Q--;__Ot>z9mg^Ul@>;jbd;X_0x2EP|wVv$*FX|eb^@0Vi z$h51;715>L%M}8}0le$^vL1w1p(xLu;4OV*QXUSJq{T}6jSQyToA_#SZ!SmN!eH9H zRYm-`9C4e9xSg-zF+7#TeG_vB!AUEcT-K}2t@Rf4!rOyV^_o)|l$%D{O@Kk$l za5Mo8&wW6^7?Kvj!w*Tg3!^6H1(fwfX>uRt%lavW-?vT0cAuk9LW!l9nWF6vmk|>~ zux;2rijEp<8UFD(f6JI*eSlWuh-9qaqU9C$fWF1BZ1nO`q!hBhOXXFux68*6VJUhd zEEN=iNigqFY(6pz?gypF3R&ty1*J|@Q0hblrCwA}s!#>*Efb^U&|aiel$;-=(DR0r zQ1)B-U=gK4mikaZsYMl(dR0NnyGU6oSb^!Go&Vg`txCwhh(6REfJOLu>W`_MDfd1G}HiL*;xjPuTwSpm*Qmh8IC1dRiZ9upp zye2cPf`hMP>es?lL$UxYns&RCUYbIz#*_{B{n#q~H?RJe>3nr_MoVoEtLB^x%bBf#8g$L2mMmjz3pzxQ zv`dKnxJ9b8SV&~kEw@v{dJW$rujApbb;ONG6Q?4~S_VRfmd8q^sjdo;8xDN?!h<}% z5;T;9n9RavJRQlc<7AS|NQ7(ypV-pvJcUTphAd$qu%z$?GQ}~W5c-zJsP$WZVMCJS zp$=24bJX6HCswtJvaxZYViNVM2HO0rpY$$%qASW8!w_ZoXWpYvbn8!fzkgz*zBfT{ z-p4$7Q{NaJPhEk2uQ>UlRF^H575S7m@5#w|$$-t<*K%y=O7%~}%Bx~K(TpM6mf(Ek zO+5U}ee}_XtN==gCcPoDkM}6ZM%Q30ENH&oy#@ZD-N|$!-MjR)(cUCcWhK^_PO~bxY;;~PpJ=kA&A1Ju6(LO(UPr+R`Q1Z<^6|X zlXxY4%zgUDw$1(IW_}#s6)3^ zGGOjJ_q$!OnJU4QT9V(WDkP$ai&m-zSB@(R!Y^?O9C1;gc!nwr1#H1T@5rZ{_84PJ z3{)1FX2q|a3Pop0G2h(e_h0mQ)ofY9dbbn~Nx?-iUwwMt{2kKD1J-+F0Gl7Mn1dd% zCXB;W>tJ9|)Kd9s5zVqVzXNVmp3B!9SOorFfP5}rWBmcI?zg5LxaA6Nx-3!fYeZO9 zx|M$)nAoqZs){XjdDYi4wE_7{nqc}KVQpJTHXxn_WWzeNs6{feQBS%FY03VH5VO5m9Wjmu-Z>9f?#TOd4giwGy(z;70GBL{l8g{CM`C}8!k$EWDAU}>;21~DhEa`dOjypD%Y7GU;?Tkjw&|)fs3GiR3}GAZ ztY0n2-^+x7ev^AFeHF&2v|h`;0Kds!!pV#jeQCBtWfRoFRUXWx<*UVp`m#~0uysvM zxj$2kILRCETf;s%#3e#vqmu{Qd=r%TDxDDCvD<*s%VN#u-yPkZ^p8Gjq!^ z1n%3~d-R3L(c{qGdV|^BxAyE82K2vrm%NZ}7zCx>pxRj!%$`le%@<+9oy7h@V(I`j zXNW+MOCX#HVK!^J&-m%u&2hw<*}-dqn=QV@DwW}5FLpPm42#4i-;KOWUu^kmu8+Mq zm}mEISf8?Js2aLeSRj-?quqUmk#Z#5eU`zr`#fK*?yn?b=FGnixi2u-)#<({AWd7p z!2PuZWiR|IJ`{W5UlqjC{`c1;CeN(g-!klPVZ2>7MgNTq`3K)@*B=(-!muaqn}Qr; z=gt8{P}>a#@h2j@fa^dhuv{!hbVBamLB*&Gy2FIRT&R=Qb*77rDFB4sf3RH{brJV7 zzSYs5|LG=$x0t`&q~PNp2x96wg%GZA%;F2igIqc+@_`j$xlW;`5%*pdfMsG@8^cDq zP9YMO%M{{`fk^o#g-FFk3PNxgbByJS6j=A11Dl9byA@Le756A$A`K0Es>G8am7XUW z%-3ba8O&PdY2Jla1zD?Y`kNmM9e}ZR|^-t6V%taO9$|Ib_LbuHIudlnyL53w? zcbmhzlCJtThdi!xcn@$H^7KHFV6Qk?EY(Nl{l9#dLmmcQ8`|J9hyRCnIdCV*S1xl9 z$zFx3|Ic?ha6iDQYCpinYCpgtsXsAIDu}t#Vm@N1 z6!axMB-FjymuEI(a|bV)Lf4?C$?8IwBJ*~8`2gCe;(Wn~QV%wls>>-Dk9~z2Ocm9K zHbSNnXrCq;n)Z+qMp6n=ee7Scf`tUtgUrRYN|X)m2O!v|^?RAtkT1je17LEY6dKc^ zyf1-BsoKmE4BcOappD@V0g#=|RICLnt;ZYbC0#8sJ?5JW0a4%~G}v=FolNE*ppTheIfw9^sh~Td(5d}FdqydhkMqySiLBD@%@7AGMF|76bKTdJ7ScwYyia4??NS*i4bHU=TZFUwHD zy3aM!EUWC$l(y5oP^1jezJtC-ltUFl>))i}!~Q~i1ZmPG5mH=!o+LgV%;HVQR$!(SP*^UJ$g5i<)DpIekjo~x zm_6`o-wEOd17&=yFU8OfGbeT9f~Ia^$o% z`w_b9X8*cI6hK@8SVQ@PW5{%vgq7+|yR=iK`{QU&I4@gue;nrU)nx4uVn&B#l<3lU z5wq(4xIaoCv0?f@5!KQ{^jkYsry^nvXq3dm%G|=db9NicxSUm7dpZ;o4I~nFFp116 zgB6`k-Na-zO)X#QBkcSYVX?He(R!SjfT@+(u+?IC&%WBS_@^odLvj!UQ-hQ7GSFv_ zC)c$>ZIMH0a3cdF9|!w|l+)hd<9{)MH~qBJ94zY0LuE+))`2WGw z^d0PLOqC+wU__zRf8(7?Y2SIRFR#*u znDzyThnIoz)~ETF=_hAGe~47M>4;M&$X4u2!1))D0?z01#6&T|81>_c=|*%P0p|F#}5=y&W3Ih?8 zg)vNd`Rk2omtymgFhffu%EyOb1{g{&D;QY!#2S+!7o50JltdMz1=&6V)#QC-tl#4H zMYPn6I3%3heii!osM6mKbk*FKM(bLurF8`{uM|q zAR-yVj&K!$D)FIBQ$AfchXHwm0E*tp88zjOq$VQFHbURv2oM>Lxn*+(4 zh>STX+4-dIZ1h&W+0jSVZTMWKgB2v4X?llvCg-qY$QxVH_dq`?heExp-<+X$c)xjb z2Q^brO^nGJuy3%zY5;reoeis_uwV(UI6v^M3q5sXUlsLJmLY1~SD zE_XpEks;-w?z>;$HT|9Przej9!Se(>bVGvo9C0viHPVK zWsEhc*m_v(h+O*jxcAn(vyA4DmwvA&okEWGD3Ic~OEPTZe)CwwF%55*_cHM`;znAC z&>Heid9T}O3wgJ^*SZOAW)*Lm&0s*w&W4RL?Ol+koE$Z+c9!BAeqRg$HCY`Y@1O6r z>%Z`h|1cS6Vl)z@+jAT5@(-Jh2_bL0-}M~uOIF5(QW*hvbFi+3ns%-WHtmd?O7W$Z zaXLY{)$Sr+n*mr+?h9D%e}em-QN~!uqewOCM(S|)=#GzU3lU%B9s9@4y!ziqH+q7i zG@KBO5-J=0tX!j6l7-6%iT4)%e(IDbi5-+n5P{lZ2Bx)`_Czqz-(WhE@V2`{-n!q< z%lDyd5FYA5d5;lpkG&F_hJ&9#lPM2@p*zP07;%SNTGP!TK0R8yWt4aYRz>qG>J)P83D5~2D5`%%~C}n!O*sti{x?HQoShr zAU57C<947WGr zz50h%8?%gw+{IF%L3az(2`*2ck5{o?zp;GCRD|>z1?MoOv^+n^Hdi4Mxn4YtxI!YS zr}RtYit{txPg=~%Pba}|NH<@lyA@Y~Oepdy`oA+=86oPbW4etkk z>N2)p>|Ot-X)_0ertHUn*Mr%bqQg>O4mL>XihH&$@)Dn>5*IR4}c%>8%Wo zMwVdphIjEtE%k{iHZCC>(_moLo~od>Ls1vFmuh1cOS#Uo(P83pEz?ODUijmQ;bM5& z$1NLQisa&l`Lcz$FWUeFalyhyf{-F%q97H-DbAviHTcBPEsi(&(3`abJ;SJ_{t| z9U}J-CE?1Nfer4;dhoyYkzN#KhHRL&uU7dklbGK zD^(Lg%TK;nkv=Bx$tbD?!t6(;6hg|S@C-|+v7Qu?{cYxLQU=~9f41_NNKfQ&g)Dwr z#jxihMNJcK%bSM)$2nX+!o`O29oKNFcn{=y^hdH;Hf(Q3LGYZ&cDNpAb9}(vy$61u zGY@&-_Xn_exCNl>-AIf!v`tGyqAn$`Qsi+UCSuPgAu!^f9Z^yKv;q%{4qP4;L9&P9 zQBq_vgd`)2iq>sQv2JkD@QY4}=ow{U~jBXbM!DfV~}4;`sEp_*OvE-oEl<2Y%38?#KYl;C)XMY=En7kdKs?~Jl zd@;=2EDb{?>@Uw?>$H$7?VxV+(}bgC<+t`nX_1pOqFtCz-(yB=tGa=zg-w!;c*t#K z(3(R%MG>!~iOOHgBEoUrgHS0e2bV7^o-4D#qnqxRnj=W^qu?VK`>fSvKT^3lp?NjT$(y z{@FGa-3KSlaG2EkJ}9C1N2}Md>a|wAj#01g z$jf1<a{}Wgh{ZY6>o~R6PZ?Bhg%56Y*8>;?9D^q0zW)C}@2T=!zOz*VaHcoI$|R zo8fy?`DTI9iHmQANm71d0-vwJCL&lO1$0kA%oqq&pQDpO8!a7cxR^e+aMBgq8Q`?7 zI3$S%g`a{Up=B;#IE$tTVmhiwu=lG3Pf`S>Z^X8jDw14%+C)+03+qZkF|*b%Qa#DA zOJE|baRXoJ73?;du0@(YY$ZBV5 zS8Y)>PDf@}_T+J(hf*76ld)E!`B694OB`-}l_)kLKdLSJu0*x_QNo2v)sYQuM~V~t zD7H2~RcCghM0Me)kWge5S$i_Gd{0*_yN!y4=O(d~w~FoQif0dF1}PDo|^}>W2P~ zA`@>`F+r3P6R~emNJY{1p<;@0Z7Qdpc4Jr?qR2-Io+>sN<-J)s!&KbC^#6!svXX|KZ` zU|P81aFVh>C!%I$!_nx_^nfX63r2_d`vg*aDymE4Sp-l$U0O{afqbGy>R=Iyl|=pq zK*}%=#5!Y{PB*r@j1EPXt@sK-c1{vO!d>-6N&oJfCDO3HR4i_$QthEFYYC*NQxy%Y zBfC_h&{XoG@f9tsGkciCbwzP7Tv0*`S*Kw9aW3#vgvYZ#Rq$HXZ4}{k->9>G+1XXP z>`{!o5(ZTin=`ROSCSc~se%JR^T3Rbo!!}gBP0A&1sSq1NUrWIDySYNf=dLK9k#;S z3&@A4Y*a4POj)eolKBXx_pL9R^W8iA2jXd$-GI^(-<+QS1lCP(Hv_38qDEwwgxkUC15_dCTXT|cT-U{D4xR-W_1x9$}5c>2t3=3 zRn@eV4AXX6XHh#2Lpj*n3gzLdc6gygwPHtLQ9JGtNIS0V$xBP`>B#mY#{jYj41kjTvL_5?59%tQnUDqc4m8bqIj72>(w`#UnUroiW1<43JzaWjMg)T zru|k#sC0+D3ukggyV#$|OfIj}Sx{-##O2D4A`@XQ?OXGbkdU%iUrMvrARnJ<`xy7M=Y*pLD?yc8)+Gz!mwLS883|7!~OmRlFCQ;8i`8*1fi3i!AGNIS1= zyDH#bW#Uw0H8CUGRyhO-$!+~25o`^c+M1JX$}n>zpe+maEqtz4nhwWbsTo_C&NhWJLwa)uwyvnPEm_sFzK?N`FWJdP;o*?p zGF!yV8bud%ChE9YCw`MFF2KYG_bID=r%|Xk_4dwTWQk#gOgv%zAwGzTET=ClHuY)x zHihq)dS{+Y%H;XTJ}4ph!?(3Bg6%15KfHQJmI{AH)b;8-qhOa+j#G!st%0rE6XzE`TtXs0=U0P;8*q&z&D!8{&^_&M&gf(W;8y z;3h6v0HR#?3hR^f;X*#Fr@|th+TG%3@&)n&4(WH?>LF)MJ zKvoUb)B>%EpR?04b74R^EEERfm^$R;mnv!k=Eqdru_#ESy~$crSRX;-9zj+6<2t4J zO7-38paT=m>4G$r2MWecQ1wI7Eu6<0201HBoT()o)xJ59=>}}UN?&LM$j0ennxKYy z(()H5!gSuD9_ZU5T2t-dNr=jBw=4S~Hb>QEx9YHIn5O5!o;Kfo2-7myK%`|DCewa5 z+nOc1>Si~@zoLjglSAqMBEkK|1RU-D7x=Fh@i}b$kNEkNl;HDXf>M`^;m&_3!N$A! zB`)>Q{~3S(B7UjA_VH6C5oJ#U4t`;l9Pe59Fs4tOLE;8#5tBnw@ydHMy6wgj=ehJg z3>@vJH8v)G1Owr2Uf8@wUyzng^IB5lWzjMDZS?FzyA`||y(j+;>sx5X45hnmn%p?7 zWnV`UYX_vjT4(LxsWe&6VbFH_a6AnA2s|AdkCicXUD&~;0j%Lq(4@0-clSGqQbL@P z3i9zV6#xHg+*tL3ZXBH`1 zB}FV?u9D6iy9Sl-^ZD+Dv08mE^F6SUyRnd})3@3_xd-O5tQ=Cg+rrSA4xivq=2Wn( zy)ELiP0O?+D~=uyehf)gto^A(PRuA=Tc=M7lY$d53eVK(&9z6f7;EvsWd2QsKiBCU zDjvv9_4+*hn8J?rdhf2`4WcK2 zR_O*&XFZ$(PPbz8f-TfqQ~2=x@Fg$;t!13dG(k(B6c+meYDLj|ZJLiuAf9=0e>$I-?ooyKx zMYS{z+kO{G&4_(GP@EI^=m3vvF~w=Pi>0m>7X}*jw8;%y{)x`TpN{}B#{wf z)Aor4w-KFd5EL*`oyN;_R63jq2=RD_RSACUECYx_}_>6 zznX#HI@p?~#QFi!y4$Kc;bF8%U>OT{_}QPW3-v?X*id+7BfXVzU z370<^@27*)7#q0Hur5KV83kgSA&xmao!sjcflCI%(WM#L)lfD?wxvk633KYgZYuUh z#IPeem+ho);d5_P&w=FuKNP!b7I? zM2<6SuoqIqirevVRT-G&Di*nP`9OFH!xWX-Hw#;EuK)^uf>-^L3F>5f#Q1fxBZ7VW zh0mazE(=Mf+ZTpXdP|;YFxNZbWzB%d`&+H2!MS~kC_)J=rVdUt{OKHg82l`ZByqQg z#9S=)Qt%{|#>Nr}XenNP&zOp`%cnG0Lz{#52igj%2NSCDlhbnfr3g~~tNiklAD0i4 zyN<7Ck*DQu!fSMA0J&U(WiyIB;G9~Rp4P4WIw{BQqPta_< z9+68-!-+ucL#ZL6U}=PcsV-ggCH64nbjTahQlazP7%6>!9-Au44YGlEPgVBNM}I^?!E}AL~suX zJs$)|&PJ3q0=rU4RUtSlc)+a)C!q?;_5jkPm&>dOnoOA&wn>#0Q`8zb6(h_kRyL%d z&dAJL%sb`$xXrB0$N6rC{nb63&cx9JViK2qs$Zp6^HV#ph#?2o?t8xp# zWX~vLESRDUR--VPr!GwPc@E)w;!dz$_$7%{?mP-=PoSeYu!_>yPNynMnge4hnuC1O z6tFG)u~g@(DNrlQO+nN}n!^2lQ(zsrd`MGxST%)5*%bC;E`C!ee7jAbVVt(SaB`bI zZHEI%lbt}C8}?GNVXwavs=68xvO7d#+sd(2YEjIfY>inBCbbdFx1cIl7xZ?$IZv8S z0p-T;<(-dL%Dw>4-Xa6=GWaVu7=~znV&dE=vgcy|K}aVaLQQ6A?n&^CpUQF%1rXOT zp9~!L5QNb$JAB&>fJDa4r+}9`4dJ$?CitR|df~JlJyN)&U0+)g6wYI(98R9hU!K%hsr_?m5-f-O_=s?jt|q z{tkVMJkv{8cLV~~T6S_BP*~R{U37Ac&uk7|CctiI)R73WRr2i~h6j|3XzAGNI7xz= zUR5eK9HRJ1rJuVSSN%X_jFJqTJhOH7hs7AcF9!(^`+^5lGcH^>o)R^37oz@pvNu;X z6!#(lzEuspn7|RtP6pje7*rI;%`8YtHMy4p>>fp~42Q40DnLuI0FzmOX89tMf+=hX zk7*8stJ#{cqSBQ4Y^|&YDz*;z3R^i0TPyj>D!%wqY_%5I!ruN$wumuu8H&QYQA!d7 zcN{U$lijr>whO?D;;JZ&qbr3mGv?-0u6(In+x%SLXs?h2qm_&COkrx5zL6-7s#>}j zq8%j{gGy0hSLCy3S1^d6S^`7a6>4qSt`LrueYhA;Lr>^puy`&XVpm=SRGKoUQ8=|8 zl3zgigiW~-t#~aEmEpJ?;xQa7q~ki9D-gz=>-?~LS+T!Ah#9rjg-)2y@5o)tm_ z=SNBu1ts?*pxB7zm|z>Z(z6L z>xFwJ>iywAi!_cYd^izqCyAh*4F}88L0)#@x5eW~9IcA+(iRC&ZP7u9Dfo83g9q9o z(a;uoZm^h&x=a+qk)*}8NQM|iAXWmbt68{f@NkET-1TpvHMl=1<$eQX*A*h_NiJQA z$8Z#YiR^2coYF;Y5Uiwr9iV8@2~hG?(;bnN>M4kMsUP;@-0eS1o6A;iI2AZVVLy&v zQ2*Mf>zO;-er2k0^Cj?JHUNfogJ6`{QxeaM;wVkHk#zFpaF|c)9B{=k5F1w~N+v9+ zsGEQ)KUrYkjF8kHV^wXm__guI4n=8F-sRNe&Ak`|66P9HDM^tb>u26+{Aot(b-#)T zSMBeW!raOFR8baHoos(nt*ZTH(P~8jhWIVst4?tbOyTsX6g=4`$nhts|cuWnw*$1la?+;1KaQJE}b<|C1+(Skk zJD#y=m-%9}uu-#w;I>xej;qSFjQc$zI(*XXey^bS=*`CKD+(<=de@LpX(>|KfQVub zh8OIaz1c5mlfO@Dh9fWM{h6c@m82*L~P(7yr%XtC?!X@?CN(rr3 zAZ!(vaT|Z>4%-0kVHD#EcCY@ReoA55RDHVn5h#zIS~y^;-aq|x5W)=|r{UFiC3add zkj3viRqV7PN_N6Z%(JAdQwr;+>Ma@B#vHJ3L4!-%x8iC47!Nf1Gk|N_@a(w4(ufk6T2Y);F4MsCjrxGW3|=f;o# zk)Jd2oWjYLK6Q(~E76=ss#lT>#;=qE#!P!r2&D+S9#bAQ8BF3>4G8gG+(O}fOP`-F zFfIJEVEH6DCN+O=1`mhSiubKKKF1 zred$pfwI675dq9yMCMQ}K?~EdoX)^%Q0(<2aM*-PvGzUS(!ChS?75hBaJ`@m6K37Z z*h?6j%YOmMyO%QTs3(cI6aunS5MsKNIS+#E+D)el@&2CIs>0)X6o$N*j=Bi;KM zPP;#0o|h|ZzT68K#_}Gy!@SO}MNVnNCEq4jh&QQJO^RVvfCoTq-gFKQEd%p{(07(= zy!m!bYgg7?3lw(Az`Y`MKQ_f!buS+0FqnTu`1xTI@`(`cTht6Zg-VxktdCb$U6{c?C_( z`4A7RPfOY|M15P(a@>;!3=|Y?1)Cr%5YyJrK+(M(cQ~>aA`dcWCCp@S)+ODVvK|9U z+ByTd5;17BRO1=gVoI(hXX|mF9xrC9CTFy?C|Zh2TXl5aXUoEFP7{OK^+P!G{|gXn zX|c{MW!+w#$jCjx>~11gj(U=laTAMXeoK222r4e^KE<&5P&{;$$%*`BT7qS)&~W)I zYxqA!!&x$=;Wr>u)^Nhr03rd^poWtlmk-f!{2ES0uXd^7+>Dt133%rbuveky;PvK& z+WX=|jBL8^!t5M$K!$S*;38&wXZQ};wE)UWqFQe1`8Df*Sv)@T~;iLZ2= zZbeSMn%;&WC*(NV*&ZfS4JvLee7v!~(ME!oYeli#F(z@;^LB(?a;s(kB%I$~SU6p8 z%M+fq&Qc1jKF(Gj<#bjXD$m-Hbxt|pvKM(0VccwEi<4I1NxF2KuTysjl6orCcA|22 z#C`_#PPM;-LUw;lOx(MTm*~1G0u>3iS0(KzCUvPkFvHXw_f94>9KIBhmTDrRJ)~Zt zJ@Q#}ZvTa0BSxRhP$>^ZTUH)nM9kv^;_9uW@rK6IazgW8J%{1gL*XLF%6Y13zPl|EyoJp6@5XQBOt6`U)w=x_1+?Wdlkr zMUDK4kWo)XW+Nek8$`+~$!JBVbptwCeJ`}`7s${9LPvhn zATnyNn_jsX_Mr0Xri)+KUU+bp9@if%JTXh3lV@7=h!2y5JjczMEVnd&Y`B0fDYz)G z3R?ZZ@OzG8qFGGzA_Qsu8jrN!pZrv)D;&e&mo)>3wgqi>F>{Pd+~EY02buIB#GcBy zpCLqR!ngYn9#AHtVbbFoHZ?yL9WtUAjwI!vdH@rU*sLX!9t462^HoGzd?Ifg0Kb*= zmifKgBSJ(yDT{FvCnBnPH^!A}pC5{1Yms8or>K0qX@zC8u@uBC6mJ})3y-BiI!jfd zBJx=@V%T>M8^+X1KUl40{Sd069|OLAkY$$-(T`b0{h*j}7SeqTF}{L4j-bCV_W%T` z7Umu+Or4|m=ZOYgcmgkH9JZ|J$q0Z>knhR-oaE9%RT{UXt9E2)G+e=Jsm7xtQ=+FF z89{4xAEV7E)01|@s0ta$CuPKO@E0N@=B;GJl9gp7MHU(1f(fzn%+=)sHvg9l|AJvI z>fxdUF6x;$zHN>^S=eJx-?r{)L|VUrDi46+rwb1((Yp#y4C>KN2nL(<)?%7mkMY;& z;5}fh!zZ0X znWN7ZcAcwF&pcmZ06iu@0%{qBizrOhUx%TrAiYw!b*|pB(XW``Rmu4U1UF^;i-Zke zOMn{ZZcqBZE_?#?SrzW`OThBg1GOxEh;sNb1)zN?VkU||hm%hX!hC6ixY0%%Yy$=+ zQkq>NpurCR7H_$w*m@1DxNqaL2z>=yE9g4{br|Wsi^m|Y(2-H%tN0jsUCKcCRog+z z^7~2dd-yblU&k|V;nE7+Lpk?{Dv;7J#j*xMfjodlHUt)fP zeExya4xioNWJszN8{)cYgP6vBnFwhXGq04C1(rjK$cq^2M&V(SR@Vw2xWF9EBn>iS=M-+_BCgBL^uK@r87QA|Z<=UH(?MRCG;78M6PAPCNa zB5G1;X=z#Mo28bO1Co}NmN}%Ulw%G#Ra$2MwbnksrT2ZG@B9Ax+{OOwwf0(T@4fbL z&OK+}^3s*|TH#w=3Xu|S1PmO0{1fkp>MfyhQ+RWa^Khk>z~Npg!2&-26i}`4yax3t z9)pL4`0ZuXimgjbLnT1IkyI483p&(5|lxb25lv`XZ&N<1l@R(iCQxzCvjVXr3kdV@aGPl2T|8 z{fxPlm&bUsXb>LkM9%;WroSOGlS%0AKZS-6bC~|b08Pw~Py%m_JtV=9nZv2j;gWuPG+6JGO8MFRe8&TIuaP5Cz|92Y^qES(NlB6bX zZDwAk;QpI*;fkpk^PeM}pN6hXkUp>jU`o%$o@cu2fm zzX>}Tq$LAyYZ#?9!+?J<_6SYAiZXoT+y}p7s5BtwlaTs(R2<))s;DOy)wT1IU33ZW ze33C)CD|yik{7WAA?c{`8M?agHzfSU`D08xH;=@In|Td=Xps3EJ*MeJ4;|3vnW{P! zkJO>_U=-Mj0B3CqYdX~uzvShKhZ?{^eClW%s2N7KO_UxV!^h4e@m=VDijzVmZenqh zhJS*R|a%K#v8PY#o)q4$7I0z&v?H)qw+kVj3-n@{IzBLgS)6BRFU$Spspc{ z^jB4y8*V!_T#$0UN*`2k@hCGa*7#f?J!~_&~ zyvE0+x_lhtWBldgH~<|`IdtS3i4Aak20LmZ#@@y5n=VI0iDDupkC7RS|E>MwM3=>*|?7O7$AkjMCr2V&&@qY6%rIlh>EE6V=zBh!>vRtf~x6JKS0on{%>N9y@pl3BeV8)rwQ`MT~(X zh}=;TMEzSCL6ol|Xp$a5)NdI?FoN)=Ym702`jevu&ta_+HFy`bJZkXv=f6jdn;tdk z`W4+*3Bqhqx9gF0F+oIYq=LhMezIK7$6IB_#s_Gw!Y2-G8J?7h@j_C3=|ve+YZI#m zrYL;qZw8*eKy6N9IBCqr&@3-Stxh6xJ{K*&^h(#8Tw@FK$@qNyZjEM8jDlhK)5#C9 zTW9p8uC91IOjgSAJTW7q3cK!2gX6iT3;zb*$klf$c;m3* z>cI>+KJ;&Zy)h=+#i0Rn(_y zQQn=Be-2I0P%SgirRfNxJQ%KN@Y-*PN#M?6HbxkJ>K%Dpnli zoa~4z4(ph?6b)wJy%ZediUwmkgN$M)QVu&nTdPn4S9qAyQF}Pjo$$NAYib=LW@9h> zGRi@2K0dmF+cY}FQK@=vUWV56lN|9DZnKPVEQWzWe>~|1d^5-5-(vB`uaH=C2C(!Mx($YF7-Ls{hijM@ytlW`Y~NZ zmuh%-rSeWnv|;@xT|}@JQ;``a`K-c!-revq_*ZNE6bG$h>p*>B|1!EthZ9!ZpCRxM z1?q;!W^yDBxs^>3YrrRU*H7pw>b6aA)Is1s>exm)+E&pq*f2j5m&%h{)}QDqYFWCl zo9zwj?{yVky)4wm_yPhcpN3J-XJ`a_IOf#C-C{F8$DG=jQ+^Q9AE?e|4mNl;!`C+c zT;I2wsPESiwehixj)m%Dp^1&3tzXkk)Kl-?SmpYUx(S~|tMZ}ZHIVt&uoDea|3b~G z$MLL8muB(Uj$O!2y3d7oJ2(@ESy#+6%*R1!Yn+J$yP(VZ2HizmZ2oS5`U?S`;ooAs z#H!ynZN~U1V`pMy!3KOAYjX1( zloMFviLVW`+@Vi=-5>)QbKv#_Y+iVpMC^IdL?^c*dMD+HuNl5iO6rTMM^nzbZ1Sts zl+Mp5x_ctYota(pN!gt@6Kg)G6#FWwvNQGHYL$_TuAf> zS97o#iiQTR@qnY%i0hg|`8%B{y)2E=Ei_8EkEc>S2awKrZHWH9fvBkg8_mL znDd|Zf1+X5R&Kh~M#OGWk3_Y>M0@)a{iq)`*XcggHfO7kvD+Y{59P?7lrxHJylZ~J z5bWdbL`QIyIy2oJNjhsM5^e8Ko#@)1N}b~ThRwgR}i8=E759UL?7ab4t3!Dwkg%?KxAPGy54dFNtW`6_?ufdh@(Vn_aYhCGlm-W zueD6O5*-{v1=e$Z_j;7`%_x%0=4k(mn>Qzy`aY)}_5IbPU4Az39Z8ZIVMOEnsXLtV ziDq)eJiJK5O0K=zbkg5Rt4=Du??o#5XHgH`<6$;=J&7I*BB9;v_3;*zzCV%jU+hXs z4|FCP+K%YE+-61GuW8{Vxo0JH;!^Iozk5*5_Zz8f>lC7|bE~I1Ys6UJk!ZC-QuMX$VHH%Cy`&kKpZ6G8O#?nIxpf8smU068=%jSrwE{d*YY_o_{F zbNkDob)dM2dUqhlN@``*3K$jrMgHGP9*K(PZobGn6)_scBI>4Xw|Ilb-dN)cAGQ zQO?R)lyfP7a&Anc>HGvvbZ(H-$R`=&e*!mS>?TszU>u2_oI!Nd8p;exsIEhpwg;LJTJW}dTqQZBkQqBqC*XiY0gcHqg_7KP*34BK3&pE|I* zk<4~UAfYR$!VI-|qHVH?a(d&4x4{XV^KtmG6Nk7?rCfpWY%-B&hzx8GGfc;Y%?92h zr~+H-5X~J)G?QsiOP>Fy^5oECH8H+nb&>3fA4aJeCN&`y*U-Efy6_4alu485bav+YdvF1@!H|(O!`GPD2#-&<7ScQ)hLe>Ig1H_CumU&=29Tr2crk0w zqo4%$7PzFbEBCq0=5YE7JL-Xh7WY4US5vWF?A=kO&P<~@B=@n3RBn~ex$r4&%xE@j z8AQ(c@r?EkEBWtu6QWaNM<-VO=}wnwit6 z!1N(x_)V_a_O+Du&8E5UuYM#G%>mehTkdaer^7t2c&(taZru2nxa@A8zMgTX%g!yTCRrj@*PZFsln0d z)QrC_rX}PHZp_*oL}f*!D3WX77e(d`7@o~6Cpywnv}`!l=HqCh(|DxZ;F{&}vXqD; zs1~I6rQv#H2+@-vG-$VTlnm#c@r_laQ+qUPjNJ@B@@2zFPs(~ch?KVHwQeUbyA!)p zPAb>()wv||H}4XhIIJf3xExB?J4Mxq3jS{gkGY@s?@)olYvhFtqU%u1u|qPV5l|h! zcfp^QvqNqKF+IVVnZ<}kfDitd9f_Vx$qQME$c@o{M5n+H{}a!1Lte;H@Q1pL+@kYB z9zcD3=bm`sI%)t}h@3<7LWHOfO_=vhP+mwFN(Ld)?9g)(nGb|eW==yi0^%Ty(ejME zkdL7UbYawLKwe0q=#7|6)Ic;@B;wT~p{cb=OJ5kus1(r%NWo*0@vBhi8kQHbPK?3p zNs|0~6-ka)NQ2s|Npw8SQA*NPF>eaKb4rpwAlfEo!V*R~cCs)NRxr}`ARK|dtmKBe*O!`fHWV=P^_h7g zIf&LW?{GsxbMXq8l-BE+7qS8!+sG(hN5zc(=%jeBF!JxL(5s9R5anRGZH!8_1q3yC z1G4Z%fe~24qmYUB1qoH3s?eJ(8jR?a$b`2Tr47pqxh1mUT}D3?5-$h#u%it!soYZd zgn65>f(Kw39AsoqAhZI1eTXVy4Ac}XW%y+dp;dSw2r+{b39W|D8AUWAQ~)O!UBtFH zfGzPAqpcx?*276g`LTpvgl`xPA4sSePIDxrq0V*URXD@Ej*ap(WWJ$8Gn;q|Pq-%Y z$@x@pCtP4OiT!>X&(I{^3$=*%4jxWNXjeBvAK;l>gkmwe58&;IpBNc^2M^>2@97Xq>`%PQ@H?Y}tw~E6-eDo$oBnwrG4d`vWi)F{UPuQ`{sPY#CiqcYq5<^9 z4kHnbKqLi4LIKwPC?W%+!#XmuOZGW3(Jms{9?C zS<5+e?I>tZ!OrkLGLNEX?u_c1|Q(v(e{jHAS#ef zq6?!fh}KDW(UnnfFgaRX^kCG4CNEiE^yNydZA-lRq960#!P#;P^7=CxgJ>HfZ6L!O zgdI?HFr&rj%=@yT7{X{WyVgjIVRWq*Nj4K>8M$`I3uz)k#W+TPGcQt1V>G*aUdVA7 zC#Ey%h*Q~dnIO^`9l=Tdpy(_XYYf|BEjmCKv7FJSR)l(sRg8M|pjr$P1&qG+B{W2= zVbml(FXWCGD%LWZhLL|w4i`m?hC~r>gm{tBY(&@ONKwovvNu^s6|V|>FxL*(-19>2 zWBp!ZW`oeYkYD8(v6a!E$g6FbB|c{KWKmv71H)WV%IL#Litf4M7^4$748slC;&Vpp zv41;2fjGlxA{tDUYs6VbixG{G>%>jL>)-qR^Fq$cH^nVxu0+&C92P$_dX9_C2*Y7< zmr-~2`>=Sx=mk$yYA6wp8FfZ9-teXPmC?p2Wd1ARgkL7w;hiRVA+roughkS5`Vph# zDBKe@k%#NwW$cT&h6fDounc=G)$maGa=|Ic%P^RvAEW9RdKj~^9-})L7lfKJYUn}8 zESocmN7MnoVQItYHqRv%8O10LN6botvy4V(aOVFRXY!-qEMo{lot6s4vS?W2ypWd+ zt}>2MZ$w)RZZe+HjT+R5Zn7Pt6Npl!yKK*BC3fKmM4cGTM3gE$WM{VUN;R_JA-gfs z-e%}2yR+yq95Oo$Ua|+H-x0lSs406gx`gNfc*_BdPGCS0N=7xfaAC(BMKpqWvK=CW zw;avrX);DWqEtr58_+c8Eypvusv#T!wd4ebI}v3VYRO5AVn%PCHbUZoUyPa}N|m8< z8XFv)wt3o7h>?pFYI|uip(Ttu>1ZjVYC2lRs4PKAE@!l*x<)Wou9SuVJ3Pd1hX}30 zS;`KL@J{$qXe-w;dWBItxsDNjhk?BIay_F@TnTlMFEYBpsE2&bL1&_Ti+K-mhj(YX|P8AUJ0R4{=uTh*_k5w7o!y} zq;!MC6JF3nNk2kcq{UF#X|G8*IJ zTTOO#5IrNiGjk$4b58bh;QcHII-t99hyjNM+~|Q{$%tR%F!aL?n^uxD4+&L-^JAI9 zI**u%_q!a$Xd_3E*`Q5gc#s>|%`nTMpqF7G^R{w9Z$lOvycbLc{S8Z*_bu1HiH?HU z?WTt1%u_A%f}zksXQZKsd40L|(S{c_h7GuZV+_R(qH%^-97GcguR8GB8n!Y|1!8-{ z8;sQ8>R{O6!0Tjq%K>#ZylpVU=!}ylGaU2#wU!yQ&XKPQGu-#5tjjC>k!=iF6<~&j zb5|Pi+L*cLn0th|uS8S+nD$hv^E^t&Or)}s(<_<2(fUoy+12cIT#CM)eX=ELYeF*n z0*N+d`9a=PcC^;&SF<}juXV1aJAB3TXQXC$voEnfZ(F?C3H;wD`Ng;8!Fzvm7(u1awo;0RwnRZECf;nDHr)nC3-^R|bZHD%2 zvdm5eTxU|@^D~I%Fm1Dd@<%oxx`A_ieJI_u56K+h#{6Iq<(zP*T6Xdx`l(8zHUUGK z&g?+xZb>VR0PXkck-Hy+dAACO z4|rub*ZtWcyqqgo>!noZ3ZQk!Va{;vynxECFRE`GF#RR77wrg41K3?$XHT90$a zn^-w*QKmuPx)@1O4XEYH9U_^C5TdIxDL$0U0@iavYgrl9d6P(J6c0HS=O-Mv77owl z+y+T&NYdKo-Rk8{UAIOjY-&%9XxAd5eF8e6Lyk_UR>@7Q%-@->*>NB(O6ZQF;}%f; zly}3|C1d`LfDuSH`Q;%!k)DV$j^?Q`&F~u61WYh^^al+DVH4-x;)@meZ=dHlupvV-41J%14vO+fiK&+~2cjAB-?VU_HtYSWAsL z4?D;VelL`v>)Er{VgCCp?>_HkOfO_QZ1x+NR?(BhIp*2BFee)$3FCixO;V&9ynt)7 zbKZVrD%S(7~jV9DU2z5!5c z+Nd$DdvO&IP%_88 zwGlez9I1mrP26#9xFhZ?CIcm$c56_lHM*ivWxVQA z#Rl+FThH9GW0WCEtMqG{E*(6mLMO1neI99s2DqG@p6(5O|4f{6abkrc~=b|ZF>QG=~m z%m@dWk_sc_G4+n`h%ND}*XyDs%$?Y+b-&Cnu(RBu+x*^W_%Ga6;E!;19f30Yx{g7* z6w~hT3vV}4+faM_6g&}~i*hF?q@Ae7>5iPP$!YCUHDU~5P!Ad5uyxWjR216qq{$t6 zxL?DKiKm@t0jHBV-Hg)@t5N<`PPfGTaQLMjmHG>J2H~)I*0mPy5H@2rI&qknv}Qx8 z`F|F+}%cXeuqsP=s?j;5w|YEu&v~nIsS(xS z>mJmMt%@i;wkgpenG|~ccxsAaV?B9qIISMFnb$0mY0UbgFdyT8W_?oel_#}CQ!X}~ zMb%hv96V~+IF1(@P6E7VEc*|G)^SJ+*jhw0%D>Gb+JBiwykOI)b1l8#{W(O{=zk9< zB^<83sRqwGQ(DExXm&c6tMN%9RYP?_6W-(gd-pkR>NT~icii(kh86WOO`@x@Q`+!M z@T4X6cV|wQ@@i?W@w)JWqggY3yr9>_nLg#a$U!VKhv|ph1x58wn!MnA?GI6MCDS2V z?N_nzB)**3l|-tuqMy~o{oo237mpior*Qrh?z1hiRQpy*v}<~~6Qyqykc{gZqI38{ z`Nu1T5>1)|k>~eJ)Fs%}3mu^m?p8I7W z(KmT}UcfYg7vGLa?_mr5icSbPz_fNTNnRaDWkXRz0G!7B09c8d17H|dBOL5?d|I~z zty-bh+6%ggjYuzv*N{fRYuMD=_*$ou3fLV+N{=t6OR6QFlzxNfxL275%-D%@;swht zq)TliQ!c*`b4VWdOEaFfB$FSb6>q1*Z1Kz1nitHKUs9IgOEmobLh3(72h=@>IkDM9 zha;_2`h$bgA2EH^={nMGHgc<-%Q>#uZPeM{a3ASH;~%KOE%`m{pnw_1NW9uiw;RyW}Ifxf0v|u56gL^J~q-| zcOhEdijF!jQ9kO#%Tt#8!{%WYO1>CN2}o)}yQaQKu_GGL4yP;AfEfW;_MsEC**YE<78go~yHcr0H<~SO5XIla zt43f5QZn2S4KEYTke)ZUYC}0~F&!g2wJE?KO!php@-8qoC~uWY)f6#GTOMkdVWU#z^5rv!fEvm9SOL4nf65E2;{rdl zrrNxMwJ{mDVorJCcQCDnWzVQ_Shx#P0YS6h!*nB}`fY~^!6n#2iS9(b?L^mcI+@d< zoc^sE<R^bvEbxhB>R?PjvB*R>mk& zXGN-_+Ixl@rr(I9_E0$+Yxo;_*Tox(kn0^dQQ&v0x2hmqgNSGOd`|T!od4_$OW~ak zB-*+jF|(k518-!G)6tJHql^+R>gYQ}2B=$KNgj>CS6^T%qf)3=olrg_W!?x|tDq+e zq4_#dMx6fwNlm$^ol%x$*X&a+Mo89CO58$WgzY+-7iU5fk99P5RQ)Iu#M2E_tdo0s z6GS~2Wm(#9SSU=8sSwOv8G^j4I{JCd3)pUT8{u08RNv_XW22nlL=%O+AJ!oXf6Iqn zRRYyA&akzaLi;?jU7g{8j+S{eH#tLNyeC{<31NZSK(>lq=iCnB$iu2NP{ek-{=stCv4Z5Q7r=SS)ks{ zNi@guMIj;I2tv7*6fl-O|T4zGVjI>fH z#5oM#r)ohaR0Mm%V@A2qfAv`O)U%c1(HN--g{=wY!mcbr&lqLF;03*$YC<}`heI9u z$>3g2-f)po5!`K(7Uct;ZHQM2+b0R|g>z9Xslj*dK^9*~ie?DoeF$x5R0>-#*nDB1 zjwslCAv%U6Rdf5oBu1*aeW8R=Dco)6hFVVOXsSIU$`734D$DtUol$|eM*ZXua}*PM zW?7U! zf$$9@)iQx_y$XU3RIZ#iS0Svf_C6NO)nRe4GhdUQ2{bRE4{bV0K45fZtdGs1OQ*D~z(>7VcJpAiOW}vS0$fsTTwT zb@UCs5ETTIbd+x*0|&t>g|LCILY!5)S*2a=itj!d|t5URO` zYMxf%8Sz_Cs^PH0-frlOjt*<1jKT1Cf8r@;LclV>5w%nZb^aU`0$O{9r9cI7u1q3P zr8E@YVx-iB!5&6g&_MhW6$Y0ac;R3e#3oSbZ&7%4$4KeK`#^&$bvB1?Ls*idBm(+r zRp1nbP|crF5ip-oDRh|)(Gjr5L9zuDGs*%B?(KN4BDYO*GF_uvz@N-hll2Q=q_^3y zO2m5sb`GsH-x8A=!4gyJkm}I{>0gOyPJDAyYuLx4s$gr_m_j_IG!kBAR032k61MAz z%0#Z*F}j7lvxTNIny zK|CX+v>g;P%7WeLc)0>$qp4geJez;9T03wVONb=5+S@}QAq_|KiatKk9bh;!v9~)4 ze4)@jjzm#SA3LICMx{_4w^yBEE2ARIxoH3B&Tvuj*qP2ycRZCN6Ah5}m{BQs_7eCA zYxG3oDQCLCv8jZ#EZEv7D7q`ePa~KG8JVr3yFrPLrVnTz-2)ymDuvylc$EY8=}K~3 z|3@ypD2e|{O}{no9^D&yF;7KFB8+BK3dBo<6206Pc*sp3*gk{GWoc}%4+PC5s2Z^! zL^Dza`$2aHUVlh(;Pr>K4!i+S?7$lU9%+?22ZA3XrE?&>qVqJ`A}7Ii2WApJXj@ru z5FB8n3J!ukvnzRnA(@fl4Tf=ZDtSX7osr@Vfkx?-ykuz22zeSdO)|`$SIHa-`HWP- zp-{Mhcv&!LUEk2gKQ-XwxV;dIF>`R;W>n8&mAG}u`M9jJm%D8#Wo z4ZK%YmYWU%RZx&4(%>}1QcLXQS<%zsk&fnd48WfmdBR8y%IUCRm2!<{fthfck?NS4 zaD`C`49OwhlGP+x0t0h0aVTwKq$Jbe-6}{sUIm_JR0Q#bdC_TL$tN{M(6exL^lXS> zq|~ItFh*IpRBeb(hlz|zArE(j=}@S6_!2guMQce*dAa3P&_|krsODuguJ?)d|9C(|NGMED&Fv3j> zUQOq~F&zcqE-432;=6*Rvv2MF<{Ws;Na@UhMjMEybS{Qg8ywcZ#SqU-bf$iYc`=OB zQQz9fqZh*}9bFv!HKJlhO6g+wm61}K3#N@^LOGfXZj7?v17iTLG(I{ib|Mss20+rm96A$YLs(1d0urJK?b4CDKv~Pd0rTwG_he)DCL=lhtoUFN1T8aQ&+{_CfS=xcUk)v!Hv8KciQ| zz|Dk|!BvpOsKAohQpT);d`6}4Y0>;z_^tpWrF1oPdlif6++qf*O^d?y?{=?cNy zv95@U71Cf=Y|WUpP~uRq2)?X>ZYhLgq<%~hJW&OK?gSLUf!D}j7R=3U60-pwGb)AB zHIJHZgw(B-&b$cIs-Uwv!u4-}?~8C>K{&FwId;Y*^7{~$F;ZReF%;^&msZ>1W9a?1lI+>Rgl~H+V5B5Jg~e4+ zF{3QYo`QKXpTbQYecnL}vV00H-XS%)mZf-m;Zr;vf|Xhl@utD2FiA(vyOQL;lq9yr zDC4JaQ1RegX8{Kx&%q_s~XEd_U6VolItB{Dswzvi74iZl}a|`kh6Uu@n%+sziECKTE792Q2 zOf_HKhVT+X%G2ABz(_^#Z5YO=Tyg;;W#TrR&=Kjp4c(8DmJ+d~p1>afjQ)&J4*b!Z zP`-AYpfYh6iWP#-dhd+63*rRvvY<=avltiAkdczCCi*F4d0IEfQca}k=uBPD*lMD< zisbDo=y4SUU-J5gcPYk1G^{3;d`$*R;r`58u^wVKBW2K2T&RMsRiLJ^p5iyX9BoW$ z2+xyB%bTmiV{3>d-&X3ZDNZv|I(@_s-#V;+KH^3NGb+{xziF#f<0~>5Wx@8K_OZ2v z-*<{f2K_~6Myg}{MSn)hgufV81&vkZtc6W`#QKY=h_L>p)?Eze=*$z0G#$-ml&2#@ zd|xcMno+K0T$fmrzc{FPmba$X3q)tmDAzVkCfAB}L@nwshM!futC@ph1H^qowEn#{ zz}ld`7=2DLoAnIIXIeJ=QY!l&mNg?X&W@7kdLRtZMFM2IDM5LD~=DoRpGz=H{IyyP)r-t~w;*Z2r zO&TGB7^&ut5N|S~+c$qSj1ccJQrCYi#K8*mUTh0t|EXNd!Pr)!DWg)2uW8$eNeaT{ z)#qc|h}Kt0vHOcD1P z6~Mu{8_`7n`=nIu^GApkI-(8w2ys$JZ{XM+DM}uaWEPkc0}$1Hq>u~#xWq`&`msWb zYvB4fQhdm;ly~+c#SJO*cPwEjTGA%scC(rsQIK) z%V<%TQHiB*!9t;p7V!*A;VAauXmL?7;lio_L{pwR7EEVUgumdrEpD{f=)g-AI~b`z zOcn1};oWCMtLQs%slxsT>CCbWU$s!AYGShvjeUYFsRG|C#DB_}RN=y?gq=whI~irc zOHKBmnyb2G{j5E4V?_KjDwhL0a9J6P3x`0Ig^SEbabrae-XkQPXBItbI#INigo+?j z`#f%v&{p7mUV?MH&zh!*D~t-@dg{5j>7uiVcqQVy)L-J}hy#qWpig}fpDreuiI)q# zSGmP!h|YNBL+D(hSG*=V;+bRRot7n%tDsAaO5w{P1A?-Ii-xz7$v4_WWQ%FIYcF5# zmy6zbAwo)Ny(nevOi1#3r!&`%OVg)0$!mkr_*;!tvbz&JKn)PCg>qH?V z)lKV!1@9b?PM5@(_;q4}7a^skNaQh6;ans(cwzjPD=iYk@jgBlw0t|beSDF~VN`+{ zT@Wp)rIeoS-6wv%*zBv6QjcyDj~U_p{IsF*#bUD`@sx>|#12O4667WEFCC=@Oo)F; zypM?1KX@{18p3^w39g;e<6jnl56Tmdu2xo+VS5AxLw}}w{N`pH@ zYeuxuE{xwHrZH0HcZe(igsEYL2{GrkSr0WtDvWPISuEe_!41h zL`qBHRQ7$VkzFV#QKIx{!7&lQNV#@QG*!rA9~fdjCR*ued5^tK zkBKfidM#;u=rJ*zQ7K5xUWsx8e<3#O1xe`_;%yy~(l5k8y&zqD ze}p1mMbI|(i};h`rjEXfJ*~xmBZ7m7 zsS184Iw^#Wcsc$%(T|Z@aK95PbVN(+cjE6VJX2124}<- z+(Oc5x-&<>SuyDag&Iynq=}pO=oB&S1jU|6h5ndIs4+fNLp(EnnQ~Sb@lg{(UknUD zG+alY)%-pFtXRM(7yOd~;GD?E8%!iQrrY!QbK;qfCMF3uFX|@fyzC&$d7-t};js*Y z>5NJ(GcgcRv>l16jyW%;F)D)L(dLBn;+&4s2Dv3%5XJ3DvIs7F*GTw5q+{R`s#% z8e}6zszZ%3NJrG7MrrE9Eu&fcE?<{ml&%VL9~z~nLRM;0qx92x3npwr$rK$?9~$LY zMyg5iH(D8~D&f!bFv^A$!%`ok%+t{lqj!`^?$agt`p+y&bY?zAw^@4jCEv1Pfh#_Q zDhDu9N}c3zop%Yhs!r0_ue`p5?2NKus0*R=3Z4m3AtTim7I|7nz8W@$MWziTH7dF- zvVc(;2b)E1RES%~A~)+iY8i{%uJb6^Eb_LFsAVkj5hLZcMLuJc4SyH~^5)`9sJclr zAuMF5e6vd9AYzsY>L;tr8B*z*Rc_HyiL*f7CybP%R#~bLJ8G3*>O6APD$nUWa?~n) zla&Q@R6}NchAL>RGFE5OFto{d9g#COd1WXUv>spfdV)>fREQ1QlHa%Tnd ziFTGHjIIm1LFFp%R`3WtVU!J>O@|X)HJLP=3@Q_Das;DnXk%Iu;U8;zKcHkyy#D53 zqnP!O{)|*x;7?&OQnmMxEvoQh7-hrT;wGx;;J~Xcd+R*A^W%i-a*d8=xZJAlDL3or zkmYeg4f)e(jm&35f$Od6Uh+YO8WYr%E~&~j3Pf*d*Adm;TmCYJdDeSN|4i_fzbnM` z^_I_d9@W=dTE;3ZuH!{pZ`n;pR9$b`cWlM_M<$Y)nGMHGWFkjL85ZKbrK2x!+VPe@ zGop4fAu^4tbks*$bVQE&$Pwc!9rcmp6=Fwym$>3CVA>3KhhC->LZUZ zQU-nGC7nktQ%hda5gDu{>rJXOSW7llhz-_~;X036rk0E*q~SzE25U)87bSzWWF8}B zu$J7a^T?pDys9HI=qtBQA%iLqedQrWW!y2o^0-25-dCQ~d1T&Ko@1mb^S;t|D*Me_ z17BI6kuvWqV|5;x_mlBDBJ+OIirZFdLy81H>8=nP^poB?j|}?Bx;l@l>nEowq_IIi zIftQ&bw8QSh|H706^ydsid^dBC$~EAYRk8EUb1DWPi^_L1Fw#Jtn&g*OMU9dwCUui zvfwW>8RdHO`sXi~GRy{()3z9YnXfa+d|g?r^Qxnoy7ET{UVyx<^8(CEA_Am+Mx}{* z(vOjrH->7W36#BcL=7A$ucxU7uD>+K7%1;4#0?xM zf7N-^z=6^@izP+$xaw^K`j8yFdrN)R{!|@*|moUtRwW1Cd%-7M6=7wz> z$PEq!8_KN}1qC#eZ|jl+WN_Pt^8E^4i?)sAmk#Bc$nzCE0ZrtOdbz3KtwlAF4|MoF zv}xN^{#_wzf*|QPTh)m|FIXn)h*~CC?wdQzodPf@Lp8D)NKnB%Md*L*z~!k@*nWc|oQ55ShxT%=*UCSW}3ctPqQszVC6P-uqLuKm>|2C9tq`vc5%Q|eqrnv+BXX2daxFqeF;cEY$o7n~;TLo*LLO(NTC|1y&Ox$; zyp+T1Up9P#m!B=t8mI!AM!=z-%LbW~2?ffpxR z>%3XWqo1n~_~y?)X-Wj;Z1ejkeH4j5PX&V#01sd7nT7W0MN$%Sq{NU=H=pty(@i|> zcFE5(;~NuANv7uY?;2_MxVM-}&fle51j zmHl`6v@7K&bCghoVf>c|8g;=3=tOx~jc=jSP)Q8%-Wn-n}xMmS(}ZuIkPqw*5;~f)3&5i^D1>|_~b7> zwZMaoTBW=@RGLE40PkQ&(BL6Ds5(*Aemyd&?=PlP3oY$sw;SQz47=R~+Xmb1W_TB= z6THoXym|_0UW5bK0Oz$#s=?<-O%O1hL}!MOXhg2vZh^XO$iSUgQeEGd(qnO|kr0El z+;A0j{|jxZGBiPvX01~7|5cF+Qb*?;(^c9PyV3{;gQ=3W#!)5bucAs?`q(wB~=ToExWxM9?fRA+o5)V-R_PDY1r|nI2z8i z+pFU-ZFYRw?i@VIl5|X~aNDq&^b8(N zaWEe%V1nXqr1Mp+Fa24-QLP4HA^jQ`JPnp8^xIhCZo!_9h-*md zp5v;hB=HEIjx>whMv8M^kN++ySc62JJpZd1>e^f?u-l6YtEty9o~cf17Q?lR=ktvN zNq#;~RtBD4(3QrOGU4c=#JB2+OVudnQdE^k7~0j4O;e+hMNRlZJr56@l<@UqoEhAG>R_wjkNhDu!L#ld z|9D^+{&9kk9yH;6g+c<<$X2c5*anW>L^U(Qsn(=uI<^5Gxm26V{?1dAn)w}FSMsX% zic6ym_dja-tfc?bGLz5k@gW}OX~5-*Vg(NkLBs!l8njWY;(E*fn~Li_sY(AFMWz0m zLuYV{QSO$CC)y!OILaG7-CYfrnexT4a>Mzba_Egl3A3`SnkfT+p&3)cbsNI>WhccO1ILPkF}dXW`Bq034Djy-=X*!%sYd5XE5&!=AFU3vzT`l^Uh-4SzH>P^KL*}{M^-$#Nww6 zKiBYy?ppY{iytril;P(Z{0v?3a~D4y@l%GMYlzz5hyJ(3PZ@r$;r^IzPP!vC;je>G z8t)ZO#9x6!YKKUs2~4{%O=PO!?|dM81k>?IYv4;(lrxuUmZE~x?M7M)_H+7>_zG{O z9OrMuT;Sv7L71ku|Bs80@wSa8+?)^%=fzFD7ZM<;tRKq+a()n}TW~sBW6+*KmLYKB zBIwRJ{WxcbF>vA**o{;GrFY;@i;%I=%$>yPG)_M-k<0?l$>E$8oG#?_cyr*yzhE~~ z{2df0lH9^{hY|1g8U?9#6HBqKSWBim#JR?`#cs%++fW>Wp!8-)>EWA0xWDTrraLtm z(p!`Py#aq7hRh!#wqmJCVkfLxu@GrYk42bsBy9<%ofev4D>|`C>|uv?a{eBmJ7I~U zrxx|97;mH_RLh+FH|`Lppilb`#Vw~TnV*UWP6MJ#Fuf$|8&p)c#&ygY+4>RYi0EhN z5Iz6%)Tyx8B8BBl$Lew?yMBnNkMQ5vLhcZD-&pA*;v+gE?Gn*PmLPYW46uCPV~RY1 zX>A-9liiAB6U*(DTV%LpUea--uQxa@PeD)b05}CNd6K6!FdZ&tXMZgtEj7Z<$c=J; z-ydXxW$%m|lJf7!)4J*&1<&P0s2>r4zZ~)T93R6Lu@FxRy9j5pgJ6sJJ?B*sAeOYQ zXGjzm`i#;HKE~PE;|*7_@O2T1!L`beWr-O0f-zB;`o$oP8Qjje)DoA}#kkQD=0C)k zX!032%4kH%Nx~?osS`ytJnv_VrA@Et#sIOU!5l2LwrhGXcxgmiZHcBK7k?KX}OKMvcAbSZvM>n^D8cUU%cxN3C4sD5Ph z#5fNEPmcd^k?a!y0hYpIyUE8g0w2;Xb6U2rrD?pe&fr)~?_JoQbGn})>D80Z`Cg{YJO_TY**bZc=QWvK|z4ois^>tCS3NA(`r28BwPxOLo5y( z@D$7l!>`wk*0F8OR%=O8y!jN|8HEGP;y0!kn4C@boI_?1v}&io>}|X1dc{>$Ew?%~{r%v2!%1CUR)?lcoaek7NA}UF4~;3!RplCKcy8jgSxRE1Vu! zYQtR}>2$yA=uk4A|FTq2cnWLC+5q!z>x>?EowP12I#1~)eyvVPPh8uRlDiTgsYFqChQ+#Y4dj_q&Rhy%9%V8+24+{g#W!7<>CR-BZFClX+TQo_tm>;trSQ`#0v^=$bvtgSh5Ob~z z{85CBA6Wdvd&wk2122dNUJK;XEEd+yVD%F;GY0Wcj21NQ>_?OS)@VT!jvvnf`(;Vs zLj3KR!f7Ga084yGYovpU`dIO4D^k?NvU<@t>kjFko^L%Q%kYWher%u#3cX`JFI}e` zv{L#w%EYbz-kL0EZr>rN;z8szmHus=q&s8^3$&%_>5iHGY~i+l<O$y`8CSZRbT z=q$u5o5C!EY(LcO;XK|}BTVb>Jl!@sJH>gf?auOX&RMot=+K%>Jh@w65u=xj0 zpG;froWsqy0$rRWmfEiL-R`_Xd^+hEn|JMOPOuu+&4`D904?a&T<(q-w(R(bP7KAj>V~TM2qI8Ch~RfESFoh zE-&P{lsP&1t#c_x^SCz326IlhJg`-pbIN5aJG2vHC>r)~44s0f`2nDvg2r8%o1WT6 z#6NNwfi3aG#fode->8BYT-yuYr(E1IXPkV1t6ZR~k8|&YVAlg;W@cB{^Oig9N4iEj zBiA+Dxo(Y_u5)c03REl3!}KL=(L;R3%Prf9X^U*MPQL8g#Xu*klsPrSg#M z=5RoDK{GgwFg*nW(=NDnao*DHitBhoam@f2Z)lKs3)4NL?zxUP(us!De~(aRU>dlU zaQy--5A%K8c3XaK+|=y^kC)S2*V8;Yx)|tWnDK_62TXChD88>r70~YaZge|uD9FYA zjMIwZZEil6^Pz9LJ+++=eb+4!={C3Nh9~u#8FX(l#+95-aH9u9G>wGXM45zHW+XY#Sa@7iLp_uC&uKir? zkoAK#53Bj1D>ShzDXeA>L<2bCpn)LRZ(Y3F7iY%ZHInSla3LOH-)~)oIXFxDjIn?~r%GBMO+vLxKbd zFNuJ#kOfxqfFvN1$7Zt$j{;&8yryCciVrMm)1qlwQ7E8BMTz2riY-)8qfm`X1&i(P zd(H-G+u!H+#}9J9J9p;HnKLtI&YYRudnc2NZw#h+;fUqQ`yLD%#Us840_{VXbgM_j zi%q;@6r|XojFRNZjFRLo_NeqDsd18e$R|%#oC@>Fq3wSPOE;ft-4ryLDJOHTy(+!O zBroV5blgl9cOHv7kBi?DJhXkey)F1(*{kg7GGdp{+7|rH(q@ED<@&7TFTHB=9H&Kdvu@zjb)346V_G<78^>(pn7t~! z9i@XthwKWjjkh`Ws?X&_2!-8w#W2M;)}eR}8zQzFuBb1&COW!VU@mLh6m%}QdEQ5k-r$X6E<5^yb9cxA2G$+}tJRg@ zhvx+kAhVV-U^jQ@x!@OXIjNlswv4ME&=)*r$EE>__2H;l!R^vJaB15Bi#4X=p#i7O zXU6Rx5M{lv_1OV->y#x22b?nhd&0s`n-AO( z5uR>+D|CaBXLu$$UOjC-a>wBCJgYMz0jZ`t(!z_ZBb&0r6$70lpcs;8+=einB%m1R zB!Lp^5O2#n+8OqJ6~mx`OOS9cUZZ&~I6mW~R%*TL*1B*PH&?mUzhM)?bo9U#S)aZQ z;guQp0g1JXS-Y6E%g_Nn`?%f}h9j$=2(PdnS^Zpiso`bU(QudbiGuF%5`^Ci_gFKl zy=TJ7AAL_oS>GJ>>;Q`)bKIqHi-AV@X|tii5V6v_r8v{P-*PGP9qo$DSP&P{X#L`r zO!EQO=YxzdFdk#1rATQ6VNJvVNkj1<;|q+(`f+r@>4+C3&>L}(K0r!{p#|KJwafX4 z1na)6uMl6hYqN5Y@v1`M7dU*3@qqkgA*B*tRR~|;@G-^%lKh5)j4v=AV>Ga!2cWR- zQ12;dY-8vdHXvu%fEZZDQ>?=WndlRyxxh3RnC25sy$ZYL4*iZ(uX5^DPW_HkU*Nn3 zmH1m#GEi2P43t47({zke!@Zmw!^tt69L~u;E4^-IGD|vH{(8sr0~(DLI5#~d-x3cA~nx#p!o-3EFRV!!o=t;Z1l#m1|HdW6mUpb}ZB zl3!NEvL~45KM)t0V4mJI9`UK8Z;Nc;_;aSGrml$WupW+E3w$%q2mBh?!yK9#Q2I2W7KxV>c(mk6a9<7dSjIWShXbCAj8da~zmM!wrjgOVkzX(S|KiQ7XNl_OxN% z+@E`q`2(m!kLYmii&8?YW4eqUjb5$LBie@_jIxBxob&sr7VaR#CuN%LA?*V`1f#nb ze;2il+a}%o>^O6Dl=jTr_~?X?#Y@wo+k$?caznJjdm@TPujR-Kc_y-3MrmVjcqn=& z=V}WwM?W3yZ5PdW3%4a?tN#0_F6-lk??>A?Tc1)2udOI#{Oy;bS6UW0u0&svN79%ilwIlK(HDq573-^g@nOjdZINxn7Ft zGTsfRjV7LNL)v9#+ZYX9?Og&tPW`TQ1Mr`vnrIKXEyEdGu0+pBj;#Qr?AZMwBjZQJ zmTM1G5WB(H%K$sP-J?{yCyBzla;Y#X(t~1V#d^3%kCrwSJ|p568@2?!_mBtirAfIM z3*@lp1?_2B9orkUd8v0TK1zo*#d-{MaEwQ*TDv*+1@562xbZz2y`jUSk?AOx0i;J$ z4eW%KOFAP2i)yTq?J{e|rPvC~-VI7zMTkAz9Ou&-a0ZG`yPQKf9>;C?v`2CD#ua%( zU1Z#mkks+9-Z%sMzU7i$4Plq@?el>nogWzO@^9!@oLKn4Qp9wD^%Z$%^vbxNkOS7$ zaor)Y8@zGHAZV3x43_R5p#+NH|5}!jhYQ}OoyZk7MoHh5=xYHrWhh&;7EV|Ji->0}LqT}sw z$X<;*7xK@YiSbmtBKkrM)q`Ww&G#jZ0L@>3yxO6C(Q+x;V(S~UBfdwZ z4$CytM#K?QN$@Ax9r5MThC@i&#jjgVqBgUpzZSnA#rzOoA)mKW%RLU!%ki66gR@*J zD}$VN*@>9_+KhE}X9YSd2I$>|sB`Aw1Jj%xT72%MXj-9VJ1asW!>1zKQ*h3xe)FB> zieu(dXM!yzr3UfZO?Vpx58YEdT-!A2KH8@HnUmH@4>|WMv2h2$^I04{RvPks!Se|F zaf(ETMkgqAXurWZW7v7|&ao$SXtQu|z!f=j@t}ls+q9`Mh@o>FIy5?|p+lpi)jBjf zR-;3sW7#@1I+m?NqazwRG&;MXL!$%PIy5@Ep+lo%J32Hv!lOgmJc`t_dFs))3+!cC zlo}{thxSXXEU=9g?|n6Hi+0Nce@LjX{1SRws_eV}q;{1_OO=PGQrK3I37v44oJc5D zZh7F#gd+8&rkjW4sbnAXRN9`*vt5XpIOGg#!xgQ{T{)!4=3U_#@(C1kl(@i(c}07E zTc-JpN*>X7pj;-e5_+-NIQ76Uh8WoR7z{L*TMgs|olyx(Y_zM1FqRw!1FvaVm5yk% z0z9J4!3hpWw7m9{+7a!++bO1R`{PQufy{FZV-inknT&;jd6GGF^N{wI+TNQmD6vO- zp#@WpM(-@QGEtI&oQqNY0+H0CxcG61A0;OD$CE=g6ZEuZsu~>{R>-;Laq2v#@3Dl_ z`r4wGzMQx+C~5hL#By8G^7j)D2r}(OUiFdH7jZ*g%>itae`~1Z%$0%6uxK(V%4*s6 z>;T%`)YJnn18pZY7-%D@ zUGCg%NM4C-VGx2|P(qeGF1cOavm1sMn-U|EuV|y%^0iXsLSm-5!~F2NXOpYAJ=SrR zTHrgKP2Ogpwp_>6D^efyZo8CRAxF)>3hcs&>G+CX z>t7$NkJ`<;6=hsda8lb1{@(jS_Zesk-VI6Jp$8yoW9Vt~CD%(S2My%2Zn51o>?FeE zxweZBYo;k}wzccy)pl7FH%2?a_2|{;ttdU(uW@czk(zMZ7b!hr32p3Z^%GkM^|HEk zF}9=qMuc{0&WLYPwn1F{+RJ007pxTFyBQo8!ZmmSa@`k7G2yAFwdm~|l+)U=NhzsC zMw)&~j31#rPHS&WDo!miZe2Yg^%!z3lW!RQy8f=zbn~JeKH$FiT}Vw@{u^*eTK+ol z%p~j|*yuedrCio213A6k3ge>rVQGqGD0U`YNEn#5-vgAXF@ApM^0YSNp{=70ZAKcj zUABc|XQq{hw8w8s^BKc7+@IENJd_O|$s2Siem4>_5;vulD}P%0NLn|V=wMm}rlMDX zZ&g%>ciCo*{XA{2@n^U6rIpCfL8Dlv4+`wy{vBaA!h4PSy5RIP+?8ioZ}uAZtq)H3 zVR09ezSnqbV{&>As+67nNq_3lx|`B37`$XC%0r%KM@rsX9bO>^Gj1M7;d_8RV(iG< z)9IU@CF$J;dI!pBTX8`Z!t`2|Zo?B%_+_W!*>QimqSmf!PydcB#8uY$KGUqF&!_J< zZW$XPqO5<$%DM+XWczD+ug$j6XXwGx&ZVEF_u0~K^}%A326P+WhHHGpNUt90F&6vw z#`PF~eH&EC_%l3w-eYtu*&Wwy9GLmf^eeVki~ok*uP~~cy(-sCG@4p zAsI^OUt3c%x{Wg95#fElNcK_J1tOh4PbH53}et_U^b8-EEvW z=~8qbmZ1wWdW?6Md4PUrXGX7e%7XeRgGTO#Rbx}FQSWve={z&?2~K2G$hHlc=3d*Y z4|F0Iy^f*+->$@~6`1eoOR8T6ziR3>{%YykSeNDQ0hhdxY*heZ&mLYYT))TV5n?X&O!FXOvUuC;^CQl&5Pgx_i$}in&_n=QkvtzK z+?jSQzP&NC*GQA{ezR6}JhM+3iprEL^u>c+##MiWR2og*US`zCweK^=dM4ncibuGTEPX zMcgrYbCz9}rGH?gDm|aIlZSTnToj3$lMW0MD?^7oU`E($z15b}7%G=V

pj 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 delta 89951 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

a;{z@v9m!?WX1@3ZImYD8}I(Gqn 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 diff --git a/1.6/1.6/Defs/Effects/WulaFleckDefs.xml b/1.6/1.6/Defs/Effects/WulaFleckDefs.xml new file mode 100644 index 00000000..49f56283 --- /dev/null +++ b/1.6/1.6/Defs/Effects/WulaFleckDefs.xml @@ -0,0 +1,24 @@ + + + + WULA_GunTail_Blue + Projectile + 0.5 + + Things/Projectile/ChargeLanceShot + MoteGlow + (0.45,2) + + + + + WULA_GunTail_Smoke + Projectile + 0.23 + + Things/Others/Smoke_Dark + TransparentPostLight + (0.06,0.25) + + + diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml index 9ccf10a2..f930ff49 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml @@ -1725,7 +1725,6 @@ true Bullet_WULA_WM_Panzer_Turret 0 - 0.1 5.9 75 1 diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml new file mode 100644 index 00000000..1a6ef9d4 --- /dev/null +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_CruiseMissile.xml @@ -0,0 +1,127 @@ + + + + Weapon_ExampleCruiseMissileLauncher + + A heavy launcher designed for cruise missiles, capable of long-range precision strikes and area bombardment. + Spacer + + Things/Item/Weapon/Launcher + Graphic_Single + + 1 + Interact_ChargeRifle + +

  • LongShots
  • +
  • RangedHeavy
  • + + + +
  • WULA_Cube_Productor_BIO
  • +
  • WULA_Cube_Productor_Energy
  • +
    + WULA_Synth_Weapon_Technology + UnfinishedWeapon +
    + + 2500 + 6.0 + 0.3 + 0.5 + 0.6 + 0.7 + 4.0 + + + 180 + 10 + 40 + 15 + + +
  • + Verb_LaunchProjectile + true + Bullet_ExampleCruiseMissile + 3.0 + 60 + 1 + Shot_ChargeLance + GunTail_Heavy + 15 + + true + + false +
  • +
    + +
  • Wula_Weapon_Init
  • +
  • CruiseMissileLauncher
  • +
    + +
  • RewardStandardQualitySuper
  • +
    + + + + Bullet_ExampleCruiseMissile + + + Things/Projectile/Bullet_Big + Graphic_Single + + WulaFallenEmpire.Projectile_CruiseMissile + + 30 + Bomb + 20 + 2.5 + 0.8 + Explosion_Bomb + Impact_Metal + true + 1.0 + 4.0 + Filth_Rubble + 1.0 + 5 + 120 + 1.5 + true + 1.0 + 8 + 0.7 + true + true + +
  • + Bomb + 25 + 3.5 + Explosion_Bomb + true + 5 + 2.0 + 15 + 7.0 + Bomb + Explosion_Bomb + WULA_GunTail_Smoke + 0.05 + 15 + + 180 + 300 + + 0.001 + + 10 + 20 + + 1.5 +
  • +
    +
    +
    + \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml new file mode 100644 index 00000000..60360de1 --- /dev/null +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_Homing.xml @@ -0,0 +1,110 @@ + + + + Weapon_ExampleHomingGun + + A rifle designed to fire homing projectiles. It can track targets and adjust its trajectory in real-time. + Spacer + + Things/Item/Weapon/Rifle + Graphic_Single + + 1 + Interact_Rifle + +
  • LongShots
  • +
  • RangedHeavy
  • +
    + + +
  • WULA_Cube_Productor_BIO
  • +
  • WULA_Cube_Productor_Energy
  • +
    + WULA_Synth_Weapon_Technology + UnfinishedWeapon +
    + + 1500 + 3.0 + 0.6 + 0.75 + 0.85 + 0.8 + 1.2 + + + 100 + 5 + 20 + + +
  • + Verb_Shoot + true + Bullet_ExampleHoming + 1.0 + 35 + 1 + Shot_ChargeRifle + GunTail_Medium + 9 +
  • +
    + +
  • Wula_Weapon_Init
  • +
  • HomingWeapon
  • +
    + +
  • RewardStandardQualitySuper
  • +
    +
    + + + Bullet_ExampleHoming + + + Things/Projectile/Bullet_Big + Graphic_Single + + WulaFallenEmpire.Projectile_Homing + + 30 + Bullet + 15 + 1.5 + 0.5 + Explosion_Blasting + Impact_Metal + false + 0.5 + 0.5 + Filth_Rubble + 0.5 + 1 + 0 + 0.5 + false + 0.5 + 1 + 0.1 + true + true + +
  • + 10 + 0.05 + 60 + 1.5 + 0.8 + Bullet_ExampleHoming + 0.05 + + 20 + 40 + + WULA_GunTail_Smoke +
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml new file mode 100644 index 00000000..b9314b46 --- /dev/null +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Homing_Examples_Bullet_HomingExplosive.xml @@ -0,0 +1,123 @@ + + + + Weapon_ExampleHomingExplosiveLauncher + + A powerful launcher that fires homing projectiles with explosive payloads. Ideal for area denial and heavy damage. + Spacer + + Things/Item/Weapon/Launcher + Graphic_Single + + 0.8 + Interact_ChargeRifle + +
  • LongShots
  • +
  • RangedHeavy
  • +
    + + +
  • WULA_Cube_Productor_BIO
  • +
  • WULA_Cube_Productor_Energy
  • +
    + WULA_Synth_Weapon_Technology + UnfinishedWeapon +
    + + 2000 + 5.0 + 0.4 + 0.6 + 0.7 + 0.65 + 3.0 + + + 150 + 8 + 30 + 10 + + +
  • + Verb_Shoot + true + Bullet_ExampleHomingExplosive + 2.5 + 40 + 1 + Shot_ChargeLance + GunTail_Heavy + 12 +
  • +
    + +
  • Wula_Weapon_Init
  • +
  • HomingExplosiveWeapon
  • +
    + +
  • RewardStandardQualitySuper
  • +
    +
    + + + Bullet_ExampleHomingExplosive + + + Things/Projectile/Bullet_Big + Graphic_Single + + WulaFallenEmpire.Projectile_Homing_Explosive + + 25 + Bomb + 30 + 2.0 + 0.7 + Explosion_Bomb + Impact_Metal + true + 0.8 + 3.0 + Filth_Rubble + 1.0 + 3 + 60 + 1.0 + true + 1.0 + 5 + 0.5 + true + true + +
  • + 5 + 0.03 + 90 + 2.0 + 0.7 + Bullet_ExampleHomingExplosive + 0.03 + + 20 + 30 + + WULA_GunTail_Smoke +
  • +
  • + 30 + 5 + 3 + Bullet_ShotgunPellet + 5 + + 1 + 3 + + true +
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Penetrating.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Penetrating.xml index 68126e7c..a0d739d7 100644 --- a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Penetrating.xml +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_Penetrating.xml @@ -68,6 +68,7 @@ -1 0 false + WULA_GunTail_Blue Normal diff --git a/Source/WulaFallenEmpire/3516260226.code-workspace b/Source/WulaFallenEmpire/3516260226.code-workspace index 2c8d6d23..3a0a3ee4 100644 --- a/Source/WulaFallenEmpire/3516260226.code-workspace +++ b/Source/WulaFallenEmpire/3516260226.code-workspace @@ -9,13 +9,7 @@ "path": "../../../../Data" }, { - "path": "../../../3256974620" - }, - { - "path": "../../../2953846705" - }, - { - "path": "../../../1635901197" + "path": "../../../../../../workshop/content/294100/3534748687" } ], "settings": {} diff --git a/Source/WulaFallenEmpire/HomingProjectileDef.cs b/Source/WulaFallenEmpire/HomingProjectileDef.cs new file mode 100644 index 00000000..65ba2ff1 --- /dev/null +++ b/Source/WulaFallenEmpire/HomingProjectileDef.cs @@ -0,0 +1,41 @@ +using System; +using Verse; + +namespace WulaFallenEmpire +{ + public class HomingProjectileDef : DefModExtension + { + public float SpeedChangeTilesPerTickOverride + { + get + { + return this.speedChangePerTick / 100f; + } + } + + public FloatRange SpeedRangeTilesPerTickOverride + { + get + { + return this.speedRangeOverride.Value * 0.01f; + } + } + + public float hitChance = 0.5f; + + public float homingSpeed = 0.1f; + + public float initRotateAngle = 30f; + + public float proximityFuseRange = 0f; + + public IntRange destroyTicksAfterLosingTrack = new IntRange(60, 120); + + public ThingDef extraProjectile; + + public float speedChangePerTick; + + public FloatRange? speedRangeOverride; + public FleckDef tailFleckDef; + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/ModExtension_Cone.cs b/Source/WulaFallenEmpire/ModExtension_Cone.cs new file mode 100644 index 00000000..3008b5d7 --- /dev/null +++ b/Source/WulaFallenEmpire/ModExtension_Cone.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Verse; + +namespace WulaFallenEmpire +{ + public class ModExtension_Cone : DefModExtension + { + public float coneAngle = 10f; + + public float coneRange = 7f; + + public int repeatExplosionCount = 1; + + public ThingDef fragment; + + public int fragmentCount; + + public FloatRange? fragmentRange; + + public bool showConeEffect = true; + + public void DoConeExplosion(IntVec3 center, Map map, Quaternion rotation, DamageDef damType, Thing instigator, int damAmount = -1, float armorPenetration = -1f, SoundDef explosionSound = null, ThingDef weapon = null, ThingDef projectile = null, Thing intendedTarget = null, ThingDef postExplosionSpawnThingDef = null, float postExplosionSpawnChance = 0f, int postExplosionSpawnThingCount = 1, GasType? postExplosionGasType = null, float? postExplosionGasRadiusOverride = null, int postExplosionGasAmount = 255, bool applyDamageToExplosionCellsNeighbors = false, ThingDef preExplosionSpawnThingDef = null, float preExplosionSpawnChance = 0f, int preExplosionSpawnThingCount = 1, float chanceToStartFire = 0f, bool damageFalloff = false, float? direction = null, List ignoredThings = null, float propagationSpeed = 1f, float excludeRadius = 0f, ThingDef postExplosionSpawnThingDefWater = null, float screenShakeFactor = 1f, SimpleCurve flammabilityChanceCurve = null, List overrideCells = null) + { + Vector3 v = rotation * Vector3.forward; + FloatRange initialAngleRange = new FloatRange(v.ToAngleFlat() - coneAngle, v.ToAngleFlat() + coneAngle); + + for (int i = 0; i < repeatExplosionCount; i++) + { + // Handle angle wrap-around for max > 360 + if (initialAngleRange.max > 360f) + { + GenExplosion.DoExplosion(affectedAngle: new FloatRange(0f, initialAngleRange.max - 360f), center: center, map: map, radius: coneRange, damType: damType, instigator: instigator, damAmount: damAmount, armorPenetration: armorPenetration, explosionSound: explosionSound, weapon: weapon, projectile: projectile, intendedTarget: intendedTarget, postExplosionSpawnThingDef: postExplosionSpawnThingDef, postExplosionSpawnChance: postExplosionSpawnChance, postExplosionSpawnThingCount: postExplosionSpawnThingCount, postExplosionGasType: postExplosionGasType, postExplosionGasRadiusOverride: postExplosionGasRadiusOverride, postExplosionGasAmount: postExplosionGasAmount, applyDamageToExplosionCellsNeighbors: applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef: preExplosionSpawnThingDef, preExplosionSpawnChance: preExplosionSpawnChance, preExplosionSpawnThingCount: preExplosionSpawnThingCount, chanceToStartFire: chanceToStartFire, damageFalloff: damageFalloff, direction: direction, ignoredThings: ignoredThings, doVisualEffects: showConeEffect, propagationSpeed: propagationSpeed, excludeRadius: excludeRadius, doSoundEffects: showConeEffect, postExplosionSpawnThingDefWater: postExplosionSpawnThingDefWater, screenShakeFactor: screenShakeFactor, flammabilityChanceCurve: flammabilityChanceCurve, overrideCells: overrideCells); + } + + // Handle angle wrap-around for min < 0 + if (initialAngleRange.min < 0f) + { + GenExplosion.DoExplosion(affectedAngle: new FloatRange(initialAngleRange.min + 360f, 360f), center: center, map: map, radius: coneRange, damType: damType, instigator: instigator, damAmount: damAmount, armorPenetration: armorPenetration, explosionSound: explosionSound, weapon: weapon, projectile: projectile, intendedTarget: intendedTarget, postExplosionSpawnThingDef: postExplosionSpawnThingDef, postExplosionSpawnChance: postExplosionSpawnChance, postExplosionSpawnThingCount: postExplosionSpawnThingCount, postExplosionGasType: postExplosionGasType, postExplosionGasRadiusOverride: postExplosionGasRadiusOverride, postExplosionGasAmount: postExplosionGasAmount, applyDamageToExplosionCellsNeighbors: applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef: preExplosionSpawnThingDef, preExplosionSpawnChance: preExplosionSpawnChance, preExplosionSpawnThingCount: preExplosionSpawnThingCount, chanceToStartFire: chanceToStartFire, damageFalloff: damageFalloff, direction: direction, ignoredThings: ignoredThings, doVisualEffects: showConeEffect, propagationSpeed: propagationSpeed, excludeRadius: excludeRadius, doSoundEffects: showConeEffect, postExplosionSpawnThingDefWater: postExplosionSpawnThingDefWater, screenShakeFactor: screenShakeFactor, flammabilityChanceCurve: flammabilityChanceCurve, overrideCells: overrideCells); + } + + // Main explosion + GenExplosion.DoExplosion(center, map, coneRange, damType, instigator, damAmount, armorPenetration, explosionSound, weapon, projectile, intendedTarget, postExplosionSpawnThingDef, postExplosionSpawnChance, postExplosionSpawnThingCount, postExplosionGasType, postExplosionGasRadiusOverride, postExplosionGasAmount, applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef, preExplosionSpawnChance, preExplosionSpawnThingCount, chanceToStartFire, damageFalloff, direction, ignoredThings, initialAngleRange, showConeEffect, propagationSpeed, excludeRadius, showConeEffect, postExplosionSpawnThingDefWater, screenShakeFactor, flammabilityChanceCurve, overrideCells); + } + + if (fragment != null) + { + FloatRange currentFragmentRange = fragmentRange.HasValue ? fragmentRange.Value : new FloatRange(0f, coneRange); + IEnumerable source = FragmentCells(center, initialAngleRange, currentFragmentRange); + for (int j = 0; j < fragmentCount; j++) + { + IntVec3 intVec = source.RandomElement(); + ((Projectile)GenSpawn.Spawn(fragment, center, map)).Launch(instigator, intVec, intVec, ProjectileHitFlags.All); + } + } + } + + private IEnumerable FragmentCells(IntVec3 center, FloatRange? angle, FloatRange range) + { + int minRadialCells = GenRadial.NumCellsInRadius(range.min); + int maxRadialCells = GenRadial.NumCellsInRadius(range.max); + + for (int i = minRadialCells; i < maxRadialCells; i++) + { + IntVec3 currentCell = center + GenRadial.RadialPattern[i]; + + if (angle.HasValue) + { + float angleMin = angle.Value.min; + float angleMax = angle.Value.max; + float lengthHorizontal = (currentCell - center).LengthHorizontal; + + if (lengthHorizontal <= 0.5f) // Close to center, always include + { + yield return currentCell; + continue; + } + + float cellAngle = Mathf.Atan2(-(currentCell.z - center.z), currentCell.x - center.x) * 57.29578f; // Convert radians to degrees + + // Handle angle wrap-around for comparison + if (angleMin < 0f && cellAngle - angleMin > 360f) + { + cellAngle -= 360f; + } + if (angleMax > 360f && angleMax - cellAngle < 360f) + { + cellAngle += 360f; + } + + // Check if cell is within the angular range + if (cellAngle >= angleMin && cellAngle <= angleMax) + { + yield return currentCell; + } + } + else + { + yield return currentCell; // No angle restriction + } + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_Homing.cs b/Source/WulaFallenEmpire/Projectile_Homing.cs new file mode 100644 index 00000000..93f38c22 --- /dev/null +++ b/Source/WulaFallenEmpire/Projectile_Homing.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.AI; +using Verse.Sound; + +namespace WulaFallenEmpire +{ + public class Projectile_Homing : Bullet + { + public HomingProjectileDef HomingDef + { + get + { + bool flag = this.homingDefInt == null; + if (flag) + { + this.homingDefInt = this.def.GetModExtension(); + } + return this.homingDefInt; + } + } + + public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) + { + bool flag = false; + bool flag2 = usedTarget.HasThing && usedTarget.Thing is IAttackTarget; + if (flag2) + { + bool flag3 = Rand.Chance(this.GetHitChance(usedTarget.Thing)); + if (flag3) + { + hitFlags |= ProjectileHitFlags.IntendedTarget; + intendedTarget = usedTarget; + flag = true; + } + } + else + { + bool flag4 = Rand.Chance(this.GetHitChance(intendedTarget.Thing)); + if (flag4) + { + hitFlags |= ProjectileHitFlags.IntendedTarget; + usedTarget = intendedTarget; + flag = true; + } + } + bool flag5 = flag; + if (flag5) + { + hitFlags &= ~ProjectileHitFlags.IntendedTarget; + } + base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); + this.exactPositionInt = origin.Yto0() + Vector3.up * this.def.Altitude; + Vector3 normalized = (this.destination - origin).Yto0().normalized; + float degrees = Rand.Range(-this.HomingDef.initRotateAngle, this.HomingDef.initRotateAngle); + Vector2 vector = new Vector2(normalized.x, normalized.z); + vector = vector.RotatedBy(degrees); + Vector3 a = new Vector3(vector.x, 0f, vector.y); + bool flag6 = this.HomingDef.speedRangeOverride == null; + if (flag6) + { + this.curSpeed = a * this.def.projectile.SpeedTilesPerTick; + } + else + { + this.curSpeed = a * this.HomingDef.SpeedRangeTilesPerTickOverride.RandomInRange; + } + this.ticksToImpact = int.MaxValue; + this.lifetime = int.MaxValue; + this.ReflectInit(); + } + + protected void ReflectInit() + { + bool flag = !this.def.projectile.soundAmbient.NullOrUndefined(); + if (flag) + { + this.ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); + } + this.comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); + } + + public float GetHitChance(Thing thing) + { + float num = this.HomingDef.hitChance; + bool flag = thing == null; + float result; + if (flag) + { + result = num; + } + else + { + Pawn pawn = thing as Pawn; + bool flag2 = pawn != null; + if (flag2) + { + num *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); + bool flag3 = pawn.GetPosture() > PawnPosture.Standing; + if (flag3) + { + num *= 0.5f; + } + float num2 = 1f; + switch (this.equipmentQuality) + { + case QualityCategory.Awful: + num2 = 0.5f; + goto IL_DD; + case QualityCategory.Poor: + num2 = 0.75f; + goto IL_DD; + case QualityCategory.Normal: + num2 = 1f; + goto IL_DD; + case QualityCategory.Excellent: + num2 = 1.1f; + goto IL_DD; + case QualityCategory.Masterwork: + num2 = 1.2f; + goto IL_DD; + case QualityCategory.Legendary: + num2 = 1.3f; + goto IL_DD; + } + Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); + IL_DD: + num *= num2; + } + else + { + num *= 1.5f * thing.def.fillPercent; + } + result = Mathf.Clamp(num, 0f, 1f); + } + return result; + } + + public override Vector3 ExactPosition + { + get + { + return this.exactPositionInt; + } + } + + public override Quaternion ExactRotation + { + get + { + return Quaternion.LookRotation(this.curSpeed); + } + } + + public virtual void MovementTick() + { + Vector3 vect = this.ExactPosition + this.curSpeed; + ShootLine shootLine = new ShootLine(this.ExactPosition.ToIntVec3(), vect.ToIntVec3()); + Vector3 vector = (this.intendedTarget.Cell.ToVector3() - this.ExactPosition).Yto0(); + bool flag = this.homing; + if (flag) + { + Vector3 a = vector.normalized - this.curSpeed.normalized; + bool flag2 = a.sqrMagnitude >= 1.414f; + if (flag2) + { + this.homing = false; + this.lifetime = this.HomingDef.destroyTicksAfterLosingTrack.RandomInRange; + this.ticksToImpact = this.lifetime; + base.HitFlags &= ~ProjectileHitFlags.IntendedTarget; + base.HitFlags |= ProjectileHitFlags.NonTargetPawns; + base.HitFlags |= ProjectileHitFlags.NonTargetWorld; + } + else + { + this.curSpeed += a * this.HomingDef.homingSpeed * this.curSpeed.magnitude; + } + } + foreach (IntVec3 b in shootLine.Points()) + { + bool flag3 = (this.intendedTarget.Cell - b).SqrMagnitude <= this.HomingDef.proximityFuseRange * this.HomingDef.proximityFuseRange; + if (flag3) + { + this.homing = false; + this.lifetime = this.HomingDef.destroyTicksAfterLosingTrack.RandomInRange; + bool flag4 = (base.HitFlags & ProjectileHitFlags.IntendedTarget) == ProjectileHitFlags.IntendedTarget || this.HomingDef.proximityFuseRange > 0f; + if (flag4) + { + this.lifetime = 0; + this.ticksToImpact = 0; + vect = b.ToVector3(); + bool flag5 = Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && this.def.projectile.soundImpactAnticipate != null; + if (flag5) + { + this.def.projectile.soundImpactAnticipate.PlayOneShot(this); + } + } + } + } + this.exactPositionInt = vect; + this.curSpeed *= (this.curSpeed.magnitude + this.HomingDef.SpeedChangeTilesPerTickOverride) / this.curSpeed.magnitude; + } + + protected override void Tick() + { + this.ThingWithCompsTick(); + this.lifetime--; + if (this.HomingDef.tailFleckDef != null) + { + FleckMaker.Static(this.ExactPosition, base.Map, this.HomingDef.tailFleckDef, 1f); + } + bool landed = this.landed; + if (!landed) + { + Vector3 exactPosition = this.ExactPosition; + this.ticksToImpact--; + this.MovementTick(); + bool flag = !this.ExactPosition.InBounds(base.Map); + if (flag) + { + base.Position = exactPosition.ToIntVec3(); + this.Destroy(DestroyMode.Vanish); + } + else + { + Vector3 exactPosition2 = this.ExactPosition; + object[] parameters = new object[] + { + exactPosition, + exactPosition2 + }; + bool flag2 = (bool)Projectile_Homing.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters); + if (!flag2) + { + base.Position = this.ExactPosition.ToIntVec3(); + bool flag3 = this.ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && this.def.projectile.soundImpactAnticipate != null; + if (flag3) + { + this.def.projectile.soundImpactAnticipate.PlayOneShot(this); + } + bool flag4 = this.ticksToImpact <= 0; + if (flag4) + { + this.ImpactSomething(); + } + else + { + bool flag5 = this.ambientSustainer != null; + if (flag5) + { + this.ambientSustainer.Maintain(); + } + } + } + } + } + } + + private void ThingWithCompsTick() + { + bool flag = this.comps != null; + if (flag) + { + int i = 0; + int count = this.comps.Count; + while (i < count) + { + this.comps[i].CompTick(); + i++; + } + } + } + + protected override void Impact(Thing hitThing, bool blockedByShield = false) + { + Map map = base.Map; + IntVec3 position = base.Position; + base.Impact(hitThing, blockedByShield); + bool flag = this.HomingDef.extraProjectile != null; + if (flag) + { + bool flag2 = hitThing != null && hitThing.Spawned; + if (flag2) + { + ((Projectile)GenSpawn.Spawn(this.HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(this.launcher, this.ExactPosition, hitThing, hitThing, ProjectileHitFlags.All, false, null, null); + } + else + { + ((Projectile)GenSpawn.Spawn(this.HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(this.launcher, this.ExactPosition, position, position, ProjectileHitFlags.All, false, null, null); + } + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref this.exactPositionInt, "exactPosition", default(Vector3), false); + Scribe_Values.Look(ref this.curSpeed, "curSpeed", default(Vector3), false); + Scribe_Values.Look(ref this.homing, "homing", false, false); + bool flag = Scribe.mode == LoadSaveMode.PostLoadInit; + if (flag) + { + this.ReflectInit(); + } + } + + private HomingProjectileDef homingDefInt; + + private Sustainer ambientSustainer; + + private List comps; + + protected Vector3 exactPositionInt; + + public Vector3 curSpeed; + + public bool homing = true; + + private static MethodInfo ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs b/Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs new file mode 100644 index 00000000..093bfa8e --- /dev/null +++ b/Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs @@ -0,0 +1,142 @@ +using System; +using UnityEngine; +using Verse; + +namespace WulaFallenEmpire +{ + public class Projectile_Homing_Explosive : Projectile_Homing + { + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref this.ticksToDetonation, "ticksToDetonation", 0, false); + } + + protected override void Tick() + { + base.Tick(); + bool flag = this.ticksToDetonation > 0; + if (flag) + { + this.ticksToDetonation--; + bool flag2 = this.ticksToDetonation <= 0; + if (flag2) + { + this.Explode(); + } + } + } + + protected override void Impact(Thing hitThing, bool blockedByShield = false) + { + bool flag = blockedByShield || this.def.projectile.explosionDelay == 0; + if (flag) + { + this.Explode(); + } + else + { + this.landed = true; + this.ticksToDetonation = this.def.projectile.explosionDelay; + GenExplosion.NotifyNearbyPawnsOfDangerousExplosive(this, this.def.projectile.damageDef, this.launcher.Faction, this.launcher); + } + } + + protected virtual void Explode() + { + Map map = base.Map; + ModExtension_Cone modExtension = this.def.GetModExtension(); + this.DoExplosion(); + bool flag = modExtension != null; + if (flag) + { + ProjectileProperties projectile = this.def.projectile; + ModExtension_Cone modExtension_Cone = modExtension; + IntVec3 position = base.Position; + Map map2 = map; + Quaternion exactRotation = this.ExactRotation; + DamageDef damageDef = projectile.damageDef; + Thing launcher = base.Launcher; + int damageAmount = this.DamageAmount; + float armorPenetration = this.ArmorPenetration; + SoundDef soundExplode = this.def.projectile.soundExplode; + ThingDef equipmentDef = this.equipmentDef; + ThingDef def = this.def; + Thing thing = this.intendedTarget.Thing; + ThingDef postExplosionSpawnThingDef = null; + float postExplosionSpawnChance = 0f; + int postExplosionSpawnThingCount = 1; + float screenShakeFactor = this.def.projectile.screenShakeFactor; + modExtension_Cone.DoConeExplosion(position, map2, exactRotation, damageDef, launcher, damageAmount, armorPenetration, soundExplode, equipmentDef, def, thing, postExplosionSpawnThingDef, postExplosionSpawnChance, postExplosionSpawnThingCount, null, null, 255, false, null, 0f, 1, 0f, false, null, null, 1f, 0f, null, screenShakeFactor, null, null); + } + bool flag2 = this.def.projectile.explosionEffect != null; + if (flag2) + { + Effecter effecter = this.def.projectile.explosionEffect.Spawn(); + bool flag3 = this.def.projectile.explosionEffectLifetimeTicks != 0; + if (flag3) + { + map.effecterMaintainer.AddEffecterToMaintain(effecter, base.Position.ToVector3().ToIntVec3(), this.def.projectile.explosionEffectLifetimeTicks); + } + else + { + effecter.Trigger(new TargetInfo(base.Position, map, false), new TargetInfo(base.Position, map, false), -1); + effecter.Cleanup(); + } + } + this.Destroy(DestroyMode.Vanish); + } + + protected void DoExplosion() + { + IntVec3 position = base.Position; + float explosionRadius = this.def.projectile.explosionRadius; + DamageDef damageDef = this.def.projectile.damageDef; + Thing launcher = this.launcher; + int damageAmount = this.DamageAmount; + float armorPenetration = this.ArmorPenetration; + SoundDef soundExplode = this.def.projectile.soundExplode; + ThingDef equipmentDef = this.equipmentDef; + ThingDef def = this.def; + Thing thing = this.intendedTarget.Thing; + ThingDef thingDef = this.def.projectile.postExplosionSpawnThingDef ?? this.def.projectile.filth; + ThingDef postExplosionSpawnThingDefWater = this.def.projectile.postExplosionSpawnThingDefWater; + float postExplosionSpawnChance = this.def.projectile.postExplosionSpawnChance; + int postExplosionSpawnThingCount = this.def.projectile.postExplosionSpawnThingCount; + GasType? postExplosionGasType = this.def.projectile.postExplosionGasType; + ThingDef preExplosionSpawnThingDef = this.def.projectile.preExplosionSpawnThingDef; + float preExplosionSpawnChance = this.def.projectile.preExplosionSpawnChance; + int preExplosionSpawnThingCount = this.def.projectile.preExplosionSpawnThingCount; + bool applyDamageToExplosionCellsNeighbors = this.def.projectile.applyDamageToExplosionCellsNeighbors; + ThingDef preExplosionSpawnThingDef2 = preExplosionSpawnThingDef; + float preExplosionSpawnChance2 = preExplosionSpawnChance; + int preExplosionSpawnThingCount2 = preExplosionSpawnThingCount; + float explosionChanceToStartFire = this.def.projectile.explosionChanceToStartFire; + bool explosionDamageFalloff = this.def.projectile.explosionDamageFalloff; + float? direction = new float?(this.origin.AngleToFlat(this.destination)); + FloatRange? affectedAngle = null; + float expolosionPropagationSpeed = this.def.projectile.damageDef.expolosionPropagationSpeed; + float screenShakeFactor = this.def.projectile.screenShakeFactor; + IntVec3 center = position; + Map map = base.Map; + float radius = explosionRadius; + DamageDef damType = damageDef; + Thing instigator = launcher; + int damAmount = damageAmount; + float armorPenetration2 = armorPenetration; + SoundDef explosionSound = soundExplode; + ThingDef weapon = equipmentDef; + ThingDef projectile = def; + Thing intendedTarget = thing; + ThingDef postExplosionSpawnThingDef = thingDef; + float postExplosionSpawnChance2 = postExplosionSpawnChance; + int postExplosionSpawnThingCount2 = postExplosionSpawnThingCount; + GasType? postExplosionGasType2 = postExplosionGasType; + bool doExplosionVFX = this.def.projectile.doExplosionVFX; + ThingDef postExplosionSpawnThingDefWater2 = postExplosionSpawnThingDefWater; + GenExplosion.DoExplosion(center, map, radius, damType, instigator, damAmount, armorPenetration2, explosionSound, weapon, projectile, intendedTarget, postExplosionSpawnThingDef, postExplosionSpawnChance2, postExplosionSpawnThingCount2, postExplosionGasType2, null, 255, applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef2, preExplosionSpawnChance2, preExplosionSpawnThingCount2, explosionChanceToStartFire, explosionDamageFalloff, direction, null, affectedAngle, doExplosionVFX, expolosionPropagationSpeed, 0f, true, postExplosionSpawnThingDefWater2, screenShakeFactor, null, null, null, null); + } + + private int ticksToDetonation; + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs b/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs index 03de527a..2f3b1df4 100644 --- a/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs +++ b/Source/WulaFallenEmpire/Projectile_WulaPenetrating.cs @@ -14,6 +14,7 @@ namespace WulaFallenEmpire public float damageFalloff = 0.25f; // If true, this projectile will never cause friendly fire, regardless of game settings. public bool preventFriendlyFire = false; + public FleckDef tailFleckDef; // 用于配置拖尾特效的 FleckDef } public class Projectile_WulaLineAttack : Projectile @@ -21,6 +22,13 @@ namespace WulaFallenEmpire private int hitCounter = 0; private List alreadyDamaged = new List(); private Vector3 lastTickPosition; + private int Fleck_MakeFleckTick; // 拖尾特效的计时器 + public int Fleck_MakeFleckTickMax = 1; // 拖尾特效的生成频率 + public IntRange Fleck_MakeFleckNum = new IntRange(1, 1); // 每次生成的粒子数量 + public FloatRange Fleck_Angle = new FloatRange(-180f, 180f); // 粒子角度 + public FloatRange Fleck_Scale = new FloatRange(1f, 1f); // 粒子大小 + public FloatRange Fleck_Speed = new FloatRange(0f, 0f); // 粒子速度 + public FloatRange Fleck_Rotation = new FloatRange(-180f, 180f); // 粒子旋转 private Wula_PathPierce_Extension Props => def.GetModExtension(); @@ -49,7 +57,38 @@ namespace WulaFallenEmpire protected override void Tick() { Vector3 startPos = this.lastTickPosition; - base.Tick(); + base.Tick(); + + if (this.Destroyed) return; + + this.Fleck_MakeFleckTick++; + bool flag = this.Fleck_MakeFleckTick >= this.Fleck_MakeFleckTickMax; + if (flag) + { + this.Fleck_MakeFleckTick = 0; + Map map = base.Map; + int randomInRange = this.Fleck_MakeFleckNum.RandomInRange; + Vector3 vector = this.ExactPosition; // Current position of the bullet + Vector3 vector2 = this.lastTickPosition; // Previous position of the bullet + + for (int i = 0; i < randomInRange; i++) + { + float num = (vector - vector2).AngleFlat(); // Angle based on movement direction + float velocityAngle = this.Fleck_Angle.RandomInRange + num; + float randomInRange2 = this.Fleck_Scale.RandomInRange; + float randomInRange3 = this.Fleck_Speed.RandomInRange; + + if (Props?.tailFleckDef != null) + { + FleckCreationData dataStatic = FleckMaker.GetDataStatic(vector, map, Props.tailFleckDef, randomInRange2); + dataStatic.rotation = (vector - vector2).AngleFlat(); + dataStatic.rotationRate = this.Fleck_Rotation.RandomInRange; + dataStatic.velocityAngle = velocityAngle; + dataStatic.velocitySpeed = randomInRange3; + map.flecks.CreateFleck(dataStatic); + } + } + } if (this.Destroyed) return; diff --git a/Source/WulaFallenEmpire/Verb/Trackingbullet.cs b/Source/WulaFallenEmpire/Verb/Trackingbullet.cs index 5ec0686c..f49445ca 100644 --- a/Source/WulaFallenEmpire/Verb/Trackingbullet.cs +++ b/Source/WulaFallenEmpire/Verb/Trackingbullet.cs @@ -1,6 +1,8 @@ using RimWorld; using System.Collections.Generic; +using Verse.Sound; using System.Linq; +using System.Reflection; using UnityEngine; using Verse; @@ -20,58 +22,150 @@ namespace WulaFallenEmpire public float subExplosionSpread = 6f; public DamageDef subDamageDef; public SoundDef subSoundExplode; - + public FleckDef tailFleckDef; // 用于配置拖尾特效的 FleckDef + public float homingSpeed = 0.1f; + public float initRotateAngle = 30f; + public IntRange destroyTicksAfterLosingTrack = new IntRange(60, 120); + public float speedChangePerTick; + public FloatRange? speedRangeOverride; + public float proximityFuseRange = 0f; } public class Projectile_CruiseMissile : Projectile_Explosive { private CruiseMissileProperties settings; - private bool flag2; - private Vector3 Randdd; - private Vector3 position2; - public Vector3 ExPos; + protected Vector3 exactPositionInt; + public Vector3 curSpeed; + public bool homing = true; + private Sustainer ambientSustainer; + private List comps; + private int ticksToDestroy = -1; + + // Launch 方法的参数作为字段 + + // 拖尾特效相关字段 + private int Fleck_MakeFleckTick; + public int Fleck_MakeFleckTickMax = 1; + public IntRange Fleck_MakeFleckNum = new IntRange(1, 1); + public FloatRange Fleck_Angle = new FloatRange(-180f, 180f); + public FloatRange Fleck_Scale = new FloatRange(1f, 1f); + public FloatRange Fleck_Speed = new FloatRange(0f, 0f); + public FloatRange Fleck_Rotation = new FloatRange(-180f, 180f); public override void SpawnSetup(Map map, bool respawningAfterLoad) { base.SpawnSetup(map, respawningAfterLoad); settings = def.GetModExtension() ?? new CruiseMissileProperties(); + this.ReflectInit(); } - private void RandFactor() + public override void Launch(Thing launcherParam, Vector3 originParam, LocalTargetInfo usedTargetParam, LocalTargetInfo intendedTargetParam, ProjectileHitFlags hitFlagsParam, bool preventFriendlyFireParam = false, Thing equipmentParam = null, ThingDef targetCoverDefParam = null) { - // 减少垂直方向随机性,调整水平随机范围 - Randdd = new Vector3( - Rand.Range(-3f, 3f), // 减小水平随机范围 - Rand.Range(8f, 12f), // 降低基础高度 - Rand.Range(-3f, 3f) - ); - flag2 = true; + this.launcher = launcherParam; + this.origin = originParam; + this.usedTarget = usedTargetParam; + this.intendedTarget = intendedTargetParam; + this.HitFlags = hitFlagsParam; + this.preventFriendlyFire = preventFriendlyFireParam; + this.equipment = equipmentParam; + this.targetCoverDef = targetCoverDefParam; + + this.exactPositionInt = origin.Yto0() + Vector3.up * this.def.Altitude; + Vector3 normalized = (this.destination - origin).Yto0().normalized; + float degrees = Rand.Range(-this.settings.initRotateAngle, this.settings.initRotateAngle); + Vector2 vector = new Vector2(normalized.x, normalized.z); + vector = vector.RotatedBy(degrees); + Vector3 a = new Vector3(vector.x, 0f, vector.y); + bool flag6 = this.settings.speedRangeOverride == null; + if (flag6) + { + this.curSpeed = a * this.def.projectile.SpeedTilesPerTick; + } + else + { + this.curSpeed = a * this.settings.speedRangeOverride.Value.RandomInRange; + } + this.ticksToImpact = int.MaxValue; + this.lifetime = int.MaxValue; } - public Vector3 BPos(float t) + protected void ReflectInit() { - if (!flag2) RandFactor(); + if (NonPublicFields.Projectile_AmbientSustainer == null) + { + NonPublicFields.Projectile_AmbientSustainer = typeof(Projectile).GetField("ambientSustainer", BindingFlags.Instance | BindingFlags.NonPublic); + } + if (NonPublicFields.ThingWithComps_comps == null) + { + NonPublicFields.ThingWithComps_comps = typeof(ThingWithComps).GetField("comps", BindingFlags.Instance | BindingFlags.NonPublic); + } + if (NonPublicFields.ProjectileCheckForFreeInterceptBetween == null) + { + NonPublicFields.ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); + } - // 计算水平距离 - float horizontalDistance = Vector3.Distance(new Vector3(origin.x, 0, origin.z), - new Vector3(destination.x, 0, destination.z)); - - // 动态调整控制点高度 - float arcHeight = Mathf.Clamp(horizontalDistance * 0.2f, 8f, 15f); - - Vector3 a = origin + Vector3.forward * horizontalDistance * 0.2f + new Vector3(0f, arcHeight, 0f); - Vector3 a2 = destination - Vector3.forward * horizontalDistance * 0.2f + new Vector3(0f, arcHeight, 0f); - - return BezierCurve(origin, a, a2, destination, t); + bool flag = !this.def.projectile.soundAmbient.NullOrUndefined(); + if (flag) + { + this.ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); + } + this.comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); } - private Vector3 BezierCurve(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) + public float GetHitChance(Thing thing) { - float u = 1 - t; - return u * u * u * p0 - + 3 * u * u * t * p1 - + 3 * u * t * t * p2 - + t * t * t * p3; + float num = this.settings.homingSpeed; + bool flag = thing == null; + float result; + if (flag) + { + result = num; + } + else + { + Pawn pawn = thing as Pawn; + bool flag2 = pawn != null; + if (flag2) + { + num *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); + bool flag3 = pawn.GetPosture() > PawnPosture.Standing; + if (flag3) + { + num *= 0.5f; + } + float num2 = 1f; + switch (this.equipmentQuality) + { + case QualityCategory.Awful: + num2 = 0.5f; + goto IL_DD; + case QualityCategory.Poor: + num2 = 0.75f; + goto IL_DD; + case QualityCategory.Normal: + num2 = 1f; + goto IL_DD; + case QualityCategory.Excellent: + num2 = 1.1f; + goto IL_DD; + case QualityCategory.Masterwork: + num2 = 1.2f; + goto IL_DD; + case QualityCategory.Legendary: + num2 = 1.3f; + goto IL_DD; + } + Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); + IL_DD: + num *= num2; + } + else + { + num *= 1.5f * thing.def.fillPercent; + } + result = Mathf.Clamp(num, 0f, 1f); + } + return result; } private IEnumerable GetValidCells(Map map) @@ -136,43 +230,149 @@ namespace WulaFallenEmpire ); } - protected override void DrawAt(Vector3 position, bool flip = false) + public override Quaternion ExactRotation { - position2 = BPos(DistanceCoveredFraction - 0.01f); - ExPos = position = BPos(DistanceCoveredFraction); - base.DrawAt(position, flip); + get + { + return Quaternion.LookRotation(this.curSpeed); + } + } + public override Vector3 ExactPosition + { + get + { + return this.exactPositionInt; + } } protected override void Tick() { - if (intendedTarget.Thing is Pawn pawn && pawn.Spawned && !pawn.Destroyed) + this.ThingWithCompsTick(); + this.lifetime--; + if (this.settings.tailFleckDef != null) { - if ((pawn.Dead || pawn.Downed) && DistanceCoveredFraction < 0.6f) + this.Fleck_MakeFleckTick++; + if (this.Fleck_MakeFleckTick >= this.Fleck_MakeFleckTickMax) { - FindNextTarget(pawn.DrawPos); + this.Fleck_MakeFleckTick = 0; + for (int i = 0; i < this.Fleck_MakeFleckNum.RandomInRange; i++) + { + FleckMaker.Static(this.ExactPosition + Gen.RandomHorizontalVector(this.Fleck_Scale.RandomInRange / 2f), base.Map, this.settings.tailFleckDef, this.Fleck_Scale.RandomInRange); + } + } + } + + bool landed = this.landed; + if (!landed) + { + Vector3 exactPosition = this.ExactPosition; + this.ticksToImpact--; + this.MovementTick(); + bool flag = !this.ExactPosition.InBounds(base.Map); + if (flag) + { + base.Position = exactPosition.ToIntVec3(); + this.Destroy(DestroyMode.Vanish); + } + else + { + Vector3 exactPosition2 = this.ExactPosition; + object[] parameters = new object[] + { + exactPosition, + exactPosition2 + }; + bool flag2 = (bool)NonPublicFields.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters); + if (!flag2) + { + base.Position = this.ExactPosition.ToIntVec3(); + bool flag3 = this.ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && this.def.projectile.soundImpactAnticipate != null; + if (flag3) + { + this.def.projectile.soundImpactAnticipate.PlayOneShot(this); + } + bool flag4 = this.ticksToImpact <= 0; + if (flag4) + { + this.Impact(null); + } + else + { + bool flag5 = this.ambientSustainer != null; + if (flag5) + { + this.ambientSustainer.Maintain(); + } + } + } } - destination = pawn.DrawPos; } - base.Tick(); } - private void FindNextTarget(Vector3 center) + private void MovementTick() { - var map = base.Map; - if (map == null) return; - - foreach (IntVec3 cell in GenRadial.RadialCellsAround(IntVec3.FromVector3(center), 7f, true)) + if (this.homing) { - if (!cell.InBounds(map)) continue; - - Pawn target = cell.GetFirstPawn(map); - if (target != null && target.Faction.HostileTo(launcher?.Faction)) + if (this.intendedTarget != null && this.intendedTarget.Thing != null) { - intendedTarget = target; + Vector3 vector = (this.intendedTarget.Thing.DrawPos - this.exactPositionInt).normalized; + this.curSpeed = Vector3.RotateTowards(this.curSpeed, vector * this.curSpeed.magnitude, this.settings.homingSpeed, 0f); + } + else if (this.ticksToDestroy == -1) + { + this.ticksToDestroy = this.settings.destroyTicksAfterLosingTrack.RandomInRange; + } + } + if (this.ticksToDestroy > 0) + { + this.ticksToDestroy--; + if (this.ticksToDestroy == 0) + { + this.Destroy(DestroyMode.Vanish); return; } } - intendedTarget = CellRect.CenteredOn(IntVec3.FromVector3(center), 7).RandomCell; + if (this.settings.speedChangePerTick != 0f) + { + this.curSpeed = this.curSpeed.normalized * (this.curSpeed.magnitude + this.settings.speedChangePerTick); + } + if (this.settings.proximityFuseRange > 0f) + { + if (this.intendedTarget != null && this.intendedTarget.Thing != null && (this.intendedTarget.Thing.DrawPos - this.exactPositionInt).magnitude < this.settings.proximityFuseRange) + { + this.Impact(null); + return; + } + } + + this.exactPositionInt += this.curSpeed; + } + + protected void ThingWithCompsTick() + { + if (this.comps != null) + { + for (int i = 0; i < this.comps.Count; i++) + { + this.comps[i].CompTick(); + } + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref this.exactPositionInt, "exactPosition", default(Vector3), false); + Scribe_Values.Look(ref this.curSpeed, "curSpeed", default(Vector3), false); + Scribe_Values.Look(ref this.homing, "homing", true, false); + Scribe_Values.Look(ref this.ticksToDestroy, "ticksToDestroy", -1, false); } } + + public static class NonPublicFields + { + public static FieldInfo Projectile_AmbientSustainer; + public static FieldInfo ThingWithComps_comps; + public static MethodInfo ProjectileCheckForFreeInterceptBetween; + } } \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index d93c48f6..82d1a4be 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -124,6 +124,10 @@ + + + +