From bcaf5e4c3d2f3599b4f499788f44edd46cddb702 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 24 Nov 2020 16:33:36 -0500 Subject: [PATCH] Campaign balance / Smarter power node placement --- core/assets/bundles/bundle.properties | 5 +++ core/assets/maps/saltFlats.msav | Bin 19192 -> 19191 bytes core/src/mindustry/ai/BaseAI.java | 5 +++ core/src/mindustry/content/TechTree.java | 2 +- core/src/mindustry/game/Waves.java | 6 +-- core/src/mindustry/input/InputHandler.java | 43 ++++++++++++++------- core/src/mindustry/input/Placement.java | 27 +------------ core/src/mindustry/type/Planet.java | 2 +- 8 files changed, 44 insertions(+), 46 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0ba749cc57..8149f4ff3c 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -593,6 +593,11 @@ sector.tarFields.description = The outskirts of an oil production zone, between sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +sector.biomassFacility.description = The origin of spores. This is the facility in which they were researched and initially produced.\nResearch the technology contained within. Cultivate spores for the production of fuel and plastics.\n\n[lightgray]Upon this facility's demise, the spores were released. Nothing in the local ecosystem could compete with such an invasive organism. +sector.windsweptIslands.description = Further past the shoreline is this remote chain of islands. Records show they once had [accent]Plastanium[]-producing structures.\n\nFend off the enemy's naval units. Establish a base on the islands. Research these factories. +sector.extractionOutpost.description = A remote outpost, constructed by the enemy for the purpose of launching resources to other sectors.\n\nCross-sector transport technology is essential for further conquest. Destroy the base. Research their Launch Pads. +sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology. +sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure. settings.language = Language settings.data = Game Data diff --git a/core/assets/maps/saltFlats.msav b/core/assets/maps/saltFlats.msav index d0f1a672c4c8729d1ab7c99f9e6ece6def99ad93..f01aa3a0f3c991f45644042effb3d67c40ede6f6 100644 GIT binary patch literal 19191 zcmV(zK<2-Aob7#Sm|e$J;CcJf`>s~2)veanvemYhZf&t6%a-LWjuTr_drk7x{Up8k z^^(`!l4Xw}mIHyrlLQ6`1LPwx8HV`+Nf-jd7UIl=z$8F`gdqVYe83Pgz&FG2gZaMj zgQ-(>>QvpO?z^x1wYqKezOVbehYuu~X*(APtcJedve$VzqQ_xiVLV z!~w`(EnO+ghtz@F4nSr}JkCPf!KtZZhmIUMGIjXq;bV}VFNp$$rBZeIVzsoq1i34f z^3}zKC1@KzK6&i61N$crAGz(oKFG~4%q-N(OOUx(sxFlwTUuGZyikMA)8*$%i}MRt zNB4}LnqPUg3>j>92|n}G3(MCQ%O_?_moAlS`^)pQCyujVru`=OsQI# zzjWeIX#UatON*r$%s{V zp%IR@?}UJK5ziCm&=t)mzUK;rnXWoFJ%wEuv{+9 zEuDDb;E5Mr+<)lA3l#x#zOr0CH8;0#V!5_be(}ZqlEU&~e`$HSH1q7k3$tbQyduip zjqN_RST4^#yi#4RELJP!n&{k=toNAi_T+&BNQ0~MODBRub?|^0mHp+57t1rtC*~LC z%bJukwbIop57DHmV~vk!tTeZCo<4btk9d;%ikpc<4X~zK1ow zQ*}q>NN9KK5oz*Zh+G{GZET^oEcD5eu6Q7%;-N?;@-%#SN~su|z)@r4#hO^~aNOEL z^HrW-m=EH9C?@VUsi(ra9^L-)<$0s_qU(n?@5O)WaERiJ22fhAm7de2KN!l?@u_ds zKM>7prTOKRxeK+DW>Tx^$vRcNT|RywewUxwUtK88F03pIJt-9N+=-cm#YKU=E_~pC zC~~!2TD~mQ>{Bo3yQR|n?9%c=ZEpWuW&TX9{H~Sq{LHlz$B&8%`{zo}nWTfqCs7%T zVy9PXrRB;3iXWBYl*wa9M9R#m2udWG3m;f681EWwg(aip=GwbG*hcA zVyA@bQbd=fT*Gphn_DW2LAkgf4KH+jH4o4USw(P2SIebYD9n|YOP8vpr6tH;s+ATm zi!p&TQXA4U3#F={2HN?`${gg-MZuelXtJ~@pjWCDVY_9kOH`2rSe3nT3xs%{GvtS^Gqx*%tHGGtT8dOFt;d1eO9r5tJS&E-bZM?6Z`FY1HDpN7R%*f%np>HL z?5q$>F{T+Yx?+&i5=MGScwUgIh{p2b--LY3EL|>D%K}$yT_A@}m>M#9UqG1Zwnf2I z4-$YXfnapum3dB8eO0$r0+C(1TwA%YBwD~mJ*_QP=F0?2-lpaMj;qL;6T-@sCuWgz zizWfuRLz;{$`X<^cVS_rIxB8kB^3SCrrI)@h?stAr#|tsA~!z^r*mmZqbToNP;{yj z7pn`xbMLVpCT2@wXmEO9Cm!-X9`-&?K`V~l#A0c_T%9=Rc{=2II_!Cx^gMZ?9D$;I zlI=ilv3%izaEejC&Ck{#? zM9>BOWP0czB{8uyS4L+ZI(5QKZDpn+5Q6lxmFhh786_h10@fCEC4C~yz!e-psYw`C z$4u?o!o})JWp-k&@*EDD)+6-XqV$Y<$WpDsQhBi?iXrsb%94+p@^Vs-hqWlNvs9ZCqdjX<^6y-kpOJ>NLm02wOJ$SQ zt_aD`S;3l;0V^V*hI*b7vNhq^AS(&R63lX81rcq-o(M6&I&n!TbZB2eBADlvIl+Px zvZn&A#nLr&knFZ8g+O=Am4!W+uLw75VsT||5n5^s!h~E?53T4e&FQS1fHJ#MS%x;j z&8h?Pv0YGPS@m6IS1a#ADbm=}qoCQd&_NGOopwVVf~|=oAB&3%SA_t~i%GQT4c`;X zkVmkL>5!SNV5!^%G4C$du0b2!P}yFg2QCQC5sgk0)Nm#oK@r3KNF(w5L=J!t;c@>MIB6i-&>goR$_=T2)ZP^DIdAkUXq=7bKK zp@bH}dx8Y?p!5+HmG*z4{G9Oq6+_RU;=H0TU8qz&SyCwrKVTNMk+{Ezj+1m|p;ac# zugp}-D@%~MQW9XGfKinaDk;dX%p(J#uQ9u_ApEu&NoK*tqTb*>6|!66ey@e0ByUlKwrypiRlmHEa^B`#Sn-r zE(oU%+C_&}L@%$=bE{(VrG*utpEUblS*XkkGa)88I-?*TWV#kN%F*IRb*j}Bq0-x8LJuWiV2TMb5Ry27PW0BW3`JomR!c&l71U01Pn^FMz1N!167yxL zTS_xCa7e=K%|fr>vlwFfPKE(nd_(&LDP>U%Ff=3$Ic*>KD+H%t=co9&=JZh#O(gYBix7 zXR|PdE<8@~g$s(agS?LQpdgnQ}*j; zz3`3a7lfa_P`xJZ1 zzV%{lLEwHymKV0YvVaEnjBxj>mE~(@n$=cYsmw2|EIoEvhUPo3Rzzc01%)3FoFi_9 z10)sd?86wT5O+(^MH*UY;YU`M7Z(Kl;>DHuOQq^taI#gzAs0wp6=W+2jyQv(E|QfM zIdI_UG2wxh(e5mlAFW&zszoaCQtck$09VV;K^IHlSz+^pQmD2;QV?%t9yM@HjPwE| ze)%5~`xEkNxbXEyOI|_S@$k44P=cB-gR(|t&DSm>kcq})UK{^4(~Et1JrnosV<0a z>AK6@^RswYz`GRZ%5sBvx5Vud)jT!8OH*05lY1o7hVbr+x2}Yj@IoH8>gs9}4C(<) zD{=?H3n1Y|W01SBRWYH4l4B?jat-7IF-Acs{dhOPP;L!jy(uQd5T{Kryn=T?dlVz- zzFqZpKf}GuD7FnU!w}b`}AB*$qv9@=f(+9G3>WXO|@^B|^Wxxaa?yOrw}89zhu zyq9Wyc!#nNqs(wdaHg3BfYVO$U4i>C#PD|VC@e7s4{^JvxE~4b?+C+t4AWYHl+jt) z^SgPpPI^T{);(kiqP`nooDsm;3`0q>@<=nh1dC8RkC72X!c;&>Xd0-yQ{2WInfVhu zP!iNNZ&y>?Bj7s;Sr*yK*bg)0!<^Q_Jx?)To#xzQmeSJjWE--V-QZEVay-s3lHb8~ zC4Q35w|U3cS7R^do@4IJGM)Q5cc-^*8{U1dmy)vGH}LqL;n9Cz2*r&gcku`&nJ%WT z;id}K1@8!+WSrZ%?i(1>pX9nm0*t)vXH2V{_Vb+f&q{cFuhp z-@S?N@?7I_uJHut&T@}Z+@lmT;aj=JKCbZrFE!FEM?PJAmMQsZuHoZYla`2t(&put zN5#K$63P**o8w+4ytGR3-R%rzjML5|6v;V95lU9^pO)H3xyBVNCv%T0oW~TpXOmn* z(%>NA$QiEj6py)tEZZCEr$H?Fr?7TR2|$_)Q1`RAcu$C z^VqmVBcbjzYKaikwuyh!#@oy@znE@inAft1q-=c1%adt!r#-Ed7u_^x=peV2V0hz0Cd!8pJjOtL~T4H=W##i(`jFq$^xknLth$}l6D)}+$Ejk}d(reW$_5yowUCM7Sg5DzwKX2;S>X0^-+ z(&@sc-F7C^5Q~dZ@P;vS3h`iTQVfjol4+e<46L*f#Wb44NyeaqF)+$w2V>C6r1N2r zU<`}~?qs@bQ{v}nEv-aX*Y&kA7ScwJ+vsMR4l9M?XrqP3=$ay z(52X0H;&j(r}W)jq4 zvJAi=)Z?Xr)S@zekHk4kGx{<0Pm=RIGuL_WV%5%L)TfG!p;e=5(`l9&szJqHV$bzYj;7r1`_)T zZZ{EfC#4Z-HEq}of*70!Jt!6ciT!8@E(l6Z6kB-Ad%d`%6aX#f#%TjEUhcRe$utGs z$5}#kU9b?+xNPN~AJ&qr;sW^){U@1b%1aFl^G#({v}dc8aCetS^`dZVT%d#L9}uonYxnYV37f*#l)O^PewfDLH2w^G1TpVF#5J z>S2B{lONfdjDQbl-q0%-o{8r+mP-VxtVXw&LdG_l>H3Hl`+gX=7tANPM<$KdAaxr( zs&Cr(pHsXxuH1cVS$mN2+sgXBhxtX;Ju6qZ=8)beefVQ=1#qApV6pwT#_rt6-NO*U0FO6)C zGQV_j8re(jwPg6N(@UYdn47vd_b#n%m85iO`LMX%UOz|zyskln6?gB7L^rA7O`Gsy(u($IK9JRxEl^s-bKKP& zLm{uv6EmXdjPA#e^B~`=^pzGNGajZh=;Em9&BwT!R9YRZn^N9h^2)NRc9q*T`z<=T zoCMX*pwb@BR#TaaTL)o*i&D1_dXyuRGG0~ z<%~x(A*Pcomu40tcd4`}3#*xnMAuWKm1V(KB`mS~JA0MjYfQl{?Ly~HlE zv6fDBiZN*8T#i^P04BGlXPI|*T8A<6@7|VHv?;i9HN~;(0o!sf?SWn7@mT{$2HQC?5 zx$|Ijoz9i;_9!`*eWSZ`CRA)T_^j|Cn`ND?V1lwiC@Jf4++GSbd)lPC#q6lvBi&y! zr!$)RxT_yy3K!jd{C6(RL)Og_YWN;QiOP#?;lUeV@Q-`Dx(DH9xF2aRC>+}91WQGS zS2)c+GPAEL$Jm=#z0@kZEJ}`%&hF@_ao-Gn65TD_RfIgvR@|bllm)r}Z=c50 z?B1E?J(X6CJ{Cl|QjMp~j)BP{!7pB8wrqJ1OAbvFC2bbn3EQZmx8mN!4c9p%Am zVFA0{OSMrAPqiWUfl3v5r!oZNG{xKLZR0K$Q)vixdvi~5-;8g2hR1S&@w+!9_ZL~M zpJCenGN;|IBv0J^3a6Q!aWekA!%Nfm@ZDiAlpT5mRqii(bNjs-bD7JX0~=M~&_9LcOboQ0N8jX{y|7Z}7(Hp^V;k4_gts4EOf|DDK-#FEVaQpQ4@tis z&NVulc0OthGTiPNuKUZNO-Bclq{}NzpWxgRxD=oAg32=}V<6wfB$*OEEy(QyE$U7S zn5-c+za;jDxNaAar*PH`ykWfq46lvh61mgNqnyfl3~H{ zxWH3fw}sKQBfUW(9`Lpyu{z`)H<9~JuCa&V4Ks(`V)+Log9>pISGkkLWiJDGP?1E( zK#jXVT&L4a?hi2$_p(-bP|LJhsx|S+Ry`Cd$njoA(pT5UU`(;uv{`^}*J5uXm8wS% z@F2g1$^HO$KgsZXJ?hXyan83H#Vr5a&J1F>tqfyrl=T#25-|f4uQ2~WvFZ4X@t6UljnGG*J4}ALvnG$r}}c1stW2H3f6eK zZ_M#d#`!cGbve>~N=)@)aT}MLU_q2iF7!&^8J^gUtA6PH0v_cd@6xR0&1TCE?mn-` zo-;EWV76^%G^DK37M^k5Vt$6-ZZOm^2#s5tm(=4H)zxwGiwy=_xU~Y1qMbI|gH3Bi zje!Ag$&A^OVQ*5@PL^zPf*X>c#zX&%Nw@T`9Mrt7ye zb4m5E+uOKrE>ytAbC!V&VvuH5Htn`^Ylkek)O^s!?b5oWCY{-~Rpd@5yoMRPgfQ!B zIqtrkn9$328ledunO5fKB#<^!!hS3BxP*sqa;YrUJ@iZs9aZlB1fO z{@A8;Kkn1mThj;j7*!i5!J~okZ6`Guy^VV$C%mIPc)q&8Y=IFG^kP@2H})+43+>4(V~GWRZJhw(H2rsC+M9ZfdxbnL5LiG!aO- z{o)PYejEWkeUOFU${E|Z@clfX3z2Ek817;|EqZh1oNk!KIj_<@sF}6$y{a>wZS20f zb9mRw47Vqw4O;xukj=`9tTCjBGsgQ`g4N8HT%#Vgs&N~)2g>+J=1ng1-m$TqCN7ob zx+Xq(zczAb+4x(lc%59=98e(NUhYuhGDeFf@|`ZTFk*t*MzxrYC$o&2ImZE*uxG(m zX|l%Il$VI|?mY~}Y{x2wz>_a$nYzCBM0`-VNoB^24KOdQ8P)ta_vk41GNGYZShcY6 zGGsE|`u8)jfoqt%1mn`eJ$ejmEoIGdiu_Jezvc}cSk=_EtDPZ@-p7o@*8W_AGt7IWQZ#;yT zH=f|SW`DNv+rNu@XJ554VnGrE1O^v!zDKeFZgXJ%Gu%0CN6m^?<^OfCOe z^>@q;%1UcsmaG4j7ndTJ8(;wDUB-V6+BnR!NdU(A{mj`WnsS!QCAo1kh5t_GI->=q zxm=RbkdRGW#pq6o)97+Wcbb*?8b#Kl6otgu zvjT1W5<@k~TyJ9feUQtId*xTwc#!ckKEK)YGr%?WF(otH#!)UuN3VI<`xUNhRtk+f zeLr)~t(;~i4JH(8xM|XB91O1+j*z+1MoEwH7S4UrE8?g4&Nxa3nJvb-apUaV#Wf0? zdpp-K2M#^XHBNH(&C67KxicA7prbtS=G6d-SxyO0cT!Mg3M%3{Ag<+0qLcrFtD zV3ki;?Fg*)?K1KO? z2@@nOk^mCdBh=0*#$EOGZ8U}js}A-nL*t9M9H4PJY4NqLn<9GRwJ7NTQnm((=0yPN zr@CeckCQwW23C^$uV8GUv}zMPcpjY+yG+zM8oTBt5w@1j1XhAFTRsv*?nLvZ>&uNw!*i za55x2X)2#1cyFM7y@Tp+rG8}y4vyO(J!8AAlz*D~Q=)o zK>g2=tQM$zg4)x(m!a`ZTK!J?;AJd4iWc9sQau}9n#Sv1>i^S(kLLMSrjwE5Ho6v> zXI0*5AB-N711kNG>MTC1(4}& zgi5Tw=42y4cG&oK+E38^PKNkJ5Q0FGA4~?TbKt`pH)32c?IfsI|+gA_emFSneYsgc)e+f*u$q2>jV3SC2D8DI4C)O zR_fs{vK&bgrh|Y^aa8~-z&#&jen|zBIvX4$6hM>lvYnA^mcWgXhE0+V8nk+tq8_43 z*a!bvl(+w|KVKGC{pZCtem7j=FeWD>L5%Xm@+0uO0%#HLd0KTUA)Y~wm%=b1^yukt z>pcAZRv7XL7*E{uY0U!(cpscN`ECovdnV2Omp7cdBWSr_I;|il*(Zr!X`-^pONk|xL4!5b~KT0zapQKUv7oWZt*I4hnuU5&JoiPk)$10+dmES|g$ zHHQMX(7hbe|@A2c}u}30j90RE^nwSxd0g9%BBB;qT zLVx}R`ffOfx zPJ$}TFcVdMXl9)PPSACF*FwG9MiT~GT=vqOY>1|f5tOgfv*6!q@x6uc%*j*?au}7p zi$-GmCc<|g=rDCSzR1}lYsNPQ=L~Rx1bhfic?(7K4&b9AbBHrj@cm*6`vc{B}f_7rDokW6RFi}Yr67dP?uZhS015U@8$+bLE^<0KM!qTeLVJF{e7bW|7f+v@12|DbK zzm$amx~1EwSl-;x``QvDSa!b;L>%nuDa|LIeVy^v<@92_!IESpwstB zdGnYLjE+|8)dyU;>?3|1q4>uTsHpz|7g+s=o3~9YO-Bzi61G9H z1z8!C4@&K90sml~3ahFVf>a3ViXpQ^twExao?T87wYHG39&r(-4jr7 z2!&8Ikknymdc+V7a9;?97MIjf5JA*JhcAT5+bx$y3y@ydZw0e&U?1Q{=rt;QTL+ji ze5-|mX6rsM+ky5(u}nxWS3#J^tPyD?6!an<^3E6luR@(`UZgY*^V^hq2dGsz9Hi}p z)^t!f)^4xx7cJ@0kNB-OwI6AaJir}*n;C7vjicy8@W7qNYH+p?=q#})ZUcF;nL4{( zA1h#1R)G*2A;!&0=NZo(aE|O8`PN%$G_}IQT(wvR@VnGEETdyGI{4a34EZONHbDM8 z{{EQip;LLpdhVm=KczbOe3W3QpGo_MRsI{~WgQpy|AX#N&^@ZNJE;shxu@t}ZO=1X zh<=0mcrT@)hxU2$NAQhZZL2>ouJ?oS;y!QX>*q6+pOtXcv(_01;|qX$CO~fIQz{JC zQ*dPlbGX{%V4aL&;1={52L4Xo$~uni=HE{()tz#j~bMbesj zJ35%MYQ3bgax~e_f!eXEev>r6U+p->abADON_tu2X<6GO!?f)3Y7&EUiFb$9h@WVo z7NBPr(Nn7;y=xHF)n2K7aX~SJK8E!^9GftXfo@82yzY*QZtaqhEsX9v9RI-3|8N66 zjQ$I)r1k^vB(%nZ?SCY?{d$Am1VXNnr9sBt$6SQRQ(OZ*OvIzGgQ5e($LKQbpmu*V zT-~paq%}gEWROwy&RVcs0L($RXVmIXsG-E)XGGH0I@;z%AVKNiT z=wgf*l|+UH7$cxxlF&cn9-UsQgw7KNkumP@JFdd$4R%?DF`E2kSK%DdEe~pkGTQKQ zc6S|>^hP?Y+)u>b2Wlhas}Qo%YFF0L=q#v>v^dlIEIE%kS0%j>Jq`LL6V;MhqmHPA z1rwllDr)pHQI(R^r-XD2R7?Mrgu_`03l9(>j)7WP`@N{bx`pH9cKm)6I(=051gORN zScUJ5QxM4Eb{5nxRA9lAQJsoiFinh>pr)M#kv}>K*W0K93d@heoYG1kB~hJAK+Gg; zeGQezT&NbvDM(rjw~vUCqCU3~>Ja*;FmvTO8}0uA7zGyW1KuGuY~auEbWShs=^m0GVQ-n|^Zsxq;<*4rk^I~I>oR;UBJJVca zEFL#h8r3SEU9(nN^Fh~MkH1fN?8@PV>R3uKew(aQsyD;_9&X~ z2IY9P`)J+VSXX2;qdm+aj8FbXG+iWmku2|frzbXjcY)g5*47|>T_|lrCukEU`pkdm zoH2sWV#Mzoljh{QI1r67xx+d-{jJq#Wp=@G=`Th09KnFG)1s#G^S8GOcW$Xoz#9AVQskKzjuBGz&^d~fM7at`Pl-vPI z?lIc-eGN(TI_XR&lQqs<>t#S25zj_=V;&b5y zxp8s)P+fB4nh#yHsRyZ9&A(41eYYLM{3rOBs@4u0@rxwI_0^Cfyplt;Z!jOKs2VDg zVOc>bmLJ?O^Xv4ijXsRfTVUxX|N8$%Ol*y!OSzPl)<)~KOqN(j*y#}1F6Ge-yj{{5 zR{(9PTQ8cZQ!h=B^uw!k8j|b6rAGNu;^*KeRnEpJU#H)Kh`!H4^q<8KuL<~!!1%@^ z8=u5xjgDAlvjp5c^Xewf*Xt?4HTwEqTvruTHq3P0$4uYc5N47m8~NR!zuY)UY+8(S zRipEIPJI0l1#3f&ZUl=ZX{XDC>7hD8J8oyz(PIqrbmPLV?=dz??6#O8niOLbIS$F#;6m|+GbbiBLQuy&@XKY)qS7j9qRuqK7f# z!}N~Ece)_7|BGh9jkBt8*$6CFfmO2u#yz)z`HBag*@y3kJ+_wBfR=DHHsLV8zF6nA zl87JJjicWJl&r(Z=u+rU*^H8YI~x(Kckn4rapS4qJpr@v4fq5uUF!;&SmM0B-g~dk zUgxRTt(N#=uS3N*dT#s3Y620Dgew529x7PMYWrGLOg`+0hc&?KTb1S%q+-pvok;&^ zNX)@S?})v5hD)8qyd{FQyCU*d*Vi4O&gH`N5!%``?W*A147x9j{GU~Xx*oQimvTkO zOr;=oQ?3YEF(`bYd)C&7QFx_LjCxn)!Qo)oAK^n#Pi(N&#b2Xaq`O_6bg05jXv~`C zEnJWA7L?$`<;}PPVnUe#Wtv?>b1v?04$Gr=+D9yZ$_;6C@6ni@AB}P*nxuG6!$iG_ z)g}z^a;$I5HZpIcpi5}_LvMSjg1$Bl4p0?5(E!%6^W4dMo zw>qVu9p0{HIjBDR1?M22wnJChpwBbf@F=MhbJhN+E*h<3oY7j(H+dtd;;gYPreo}Z z))H$P*Em(vV7@zxujF6=G~js(0yoQ9sk}qLrabH@X-K`j%SKqM@`Xd zzda;1XB*UIO?(A-btAQ2o~CmcMnQjGCXN&3P|tP8B}sCo$K|c-B4=Uts0lV{HDhU; z<4xlwY!;MmCT^<4fIh$oQ_k|AlCHvOpL5bpX7$0ymu7HgE_7qN1=n1?E_AaYb_3b9kW-AaPyi-l&}SWUy+Ld^y{Ic)Ai?$iY`d{ z?7V_?+#fz?>72m(qy49#txUna_57#sN=`bM;7Ah~yAit=DgrldH6zE*Oq30%UCpV(7Dn4oE zYE_XopreJwj~qSdB74#w>M`5Md;{t@d<7unP?vQ0@W=1LYhj-W?#EaSmuqfmv+lP? z>*yw&Cbd2kND|(-h<-p^&(sNVe2%6&&S*ws{Ma}PMl{{%{AZ11_GY{W*MS2kW*N9dL-J{3{Iw+a2lKb(oq)FCsp;y_-8_PI622Tn%Qx}HNwoEh8N&fcuxNP zy14&!Rm&_W60qlW&c-Y#u37YA&x#uvEvE+(f17gXgsIKdU=MsuWsG_wB}I z{%XXTfpygC+7@x*3#tx}=EI|cb%nAksGT;aYnFcq~$cnYE_fhAp@JehStE~PUq-pkvI%@Gv_DZ z8vKd}o+x6!+N}s?wqHIkir@GdTuiiMh|x=R#K?JMc;E!ES2k`!t9jIY*w^<8#NpcI7gh(IkCUhiaK9nQU-J!=rWcBTRb>R8_w|N*Qq< zdB<eU*gQ1h5Wk23QKK%&u>5wZl9oY|mObGS z$W((u6#4a-#vK@+$fa+f2Vp*jQAhM5c8$dsAqo@UA08%t6Gf&5WI%L?J-QTp1HK@4 zO8q7L7hTB_6pgvxOP{TtCB7|MWXMv)V?=(DR&A%cD>_(~h_yzyMjlJBCN`eb%K?Y? zH#WrKjpRq?;)V0I-<~*u$QHlO)v?WHe?ReN;?2a@N22>h#lPE-DOmjAp2IKDdOSmK z19r;~gX0-BN_Y3lQp!iUBP4hm+%t%K9qVs-O|Y_Y>*AU)S{r@dcJz{$)8sd{wB=Oe z&O^9HZtO)?yU?p^k4rrvg>PJH@9_J94h+yh2Ghkv!^pqgI)PSE?0r~jvF6 z=U6wc`<)rP!ZR8RaVF>$Bmby1XFr+G;%>%~$~L@xwJ~0GW~8FG4>lgJ2MC1wLL$t* zq|iBaj?1Oc;4O~tw{woGJ9VCBf#S7 z2Dy0nZHDbt6rq_RS|bw@u*CgYf1nX4xYUZ#3w7UT$dSs>S5z5zdhAhgf6Uc$$47{o z^sf4vj)IG1?Qs9zJH)H>0URsCk*}0DG~rku19d&pK*ivo$hW@|bj69-5Y7D2Rvm)X zFjp*{mx_0sT?C_KR?Wwo#wBeMkKW)z73(C{WBX!|tvecM-7AoFv?eYF?4W~Vj&FpP zOh%u*7hLalp1l`JjL@~p{wRrwC7jOpsN!>RBN6`SB>{<9qXN-Tgvc4{3tibz@!F8& zx?J2`cPX+yw}DL^~uvqc5MPyBi>E0 zYl9I71UtvhIcv3Ty0g9msFnru=Pm4e4=U1LIGS)y4Tj`oEc$)6Mwn(b%QxL}@kC7s z#{@q60e$v3OJ^aQ4A*86wruQ2DkA*px{hL_RClcDn1Cyl{y7~5*qB8b_fY_!6o}n; zoXnejQk`Y|33ZSE-DEMzP?2utRM4S%{Coa?6aFZC&wsD=?jROT!T*G>z}LhdZmOf7 z+579$U5%d9x;kIAoirG}Xt-0Law{ke7Wqxr^)zl<*6|ZA5i{l0P%n0!bq|5B#aWFY zOI;6jRdN||uxRr%f-?g}^K&%M@r&oz;OjDU{1y1`x_HrwFJqykEb!N&2>(LlcF>aB zgp_*zX|8RWJK9E{X~>D|E+N7DVBKb&+gusW!%JcW*Bu^bcmZFlzBz;68FkLX8k?D} z(a@~Y`ZzPT`#H{ktn4=h`+id}^Z$~6#L5Bh=vz8xBbTF_c`k!CWkoV&x4;I)9V5gf zuqogpLgf%bH~yEnLAL6KB}S`13u`!M);CNmG%d#2yl~NaBu30GHVuw96JMi= zAYYi?QO`hhge-v%$I2+Y5H;zNF=Ryd<5EugNLy z*Wq_W?cWnn=+_l;j?iDjSFMRN)H^`&TkzFQae!hd+78ATp{1Zmr~Ke+_g(3miLa-` z8>+ATDhCzDZ|aC`olkD0f-Zvkt~aW)WFyB1`t|}gx`hwdg0|O}Z%4-XjiYwN>le<+ zdk4Lbl!&VYW1Jn=i1G~XM#GQUsb~l8k{To%o}mvhWa*v16kSIe9*|VTZt{=7AKrXn z;%4G&Bk>0B$KHg~-t|z3xsZtQpGl9`@|E=_;jkkTgD&l#Y>FciUv|-DbH@n)wvrjZ zh4&PlpP8UfD)do2uyuo3+IudtCu1Hb@DFy^&NsZOx={-yH4+L(8rzl zacuM$v6N#+Qypfh^C7zUuK+lY+S#=HZ%WZv zPm8fdNWxayTbiIRoF&%6zgg#AQ6qA$y`+&6<*L-Ez^vj(!aBPaU2+vdow}~>Mu}L% zdpYY;CA?CknRI@>DXwwwbFqtOLQj`9FDwMNbva+usaGk~^Z+*R|}XA0p1EB^&IF>>TAUwtF5aT zrtYv@(j;k}P)%A-LYt*o>?0=Y%TL^9H0=BuV7oMv;rt-%a1n0&^|D6g+q)=bLI0&h z@Grt=%?37Ze+~XDeB*X1B+mC&a#i~e;LmjV9DPzN-z?uREl+(`-|7Tf=E#yi=;!IU zjNB+wIZXa$2^7En690t|*&~U28rA?Us}Xkl|LcO?7* zd~*Y6Viaq^sg(o!*~}@R`dgv;%+aoT6QWhhw1%G{aY)PSBnqw|?ou-k}PTi4@`LWd9;aIDchFHzk zvjAHCP7%d%gJMvTfMsJM70Rk~e4*a!(ZgXnJ^r~;|3VV+MMkp+7&DT>k^WowMfh`F z!14W)^=Ec%ofCmw%DCa{kKk`~VP`N)as3*tsW)TQ+g6mI;1st%uJaTBIF9u`@GqWw z<#40ot&w)K;?@B(M=N`R?{EIXMy}Mftebo^EkN*+U-fSq{d2R6H;HjG@y2pTV1CrR zMjDyeH3HQiDMnM85vH_{UOq|3iz7H}r-tfO+HK)A?WM)wev0nKchx*vH{WR!W7z6d z8z<~%=y{*5;mPTk0n>rlZ^qV{IjqkqzY%MMQ*uoZXFB7cUU`a`;jGz3UoW|eaOFbJ zHjm!Hu(gQ?*>zd66n8WAjgWyjU-pAwQlLaC_A#7ckLEB}!N(KwFh@HPrfb6s;QM=-h@pElZ*^(E{kb#9PYm3~8|0 zaZSgH$|jWhO_+G|RGrsLqIV?*M>7e(4u6XquXKU5wPzO#q=dEkTe+b08Tdb{NW3Y3 zBgVpy(-%c^h?l#DcXP2p^a}#XFT>yILdiAh<(Iq}0Bck8>klsETgQ`fL))4I4L6WQ z(Vp~5yp>&PBYTptX2v@jRP;E@insPYY_-w|3rA#R!oJC2#__s$9Q|v#UlH8=MJ)@f zV>n~{c%YFN5^4Y;-{#xPNn~9CN60h57+nV*C zy;=Ho?W-!Ktd;HP4N$VWm3=-*v zsoW83XMU6VX~2anwnm?(9{2Hj!;c}~=B>A86|zuVq!pwBF(S}4#b;hlQCm}TRRf6n zE!H7p=m2h^@`LmS&WYxzkF>SY)@t47WwVof1$qe;(K$ot;X9;RLbG2oSJTnkPR;AJ z7ewQ&)I65U5p{a0*{y_z<4xY1i8m8(Cce%S*Pw2OEp^jErV!tf$dmHTTj~bY%n)h8 z%m(+UgKz$wYNG)Ob(8 zUe)*o;vVt3-W6QBH2!*v+@z!E(n-?%CZdOSy-<4Fi7s8_RE*Md%0(xeF#2A<4ZU@p zWI42~>1&ru0$Svo7^d?enZ?^_B*J#`pq#I(M0{b*`MF<3lEH>LT4&D=ZaQ^fh_3eg zd|kuqHu7B~yXNQU1To2$XeOvD8BT0*LhuThL(n=2OLX+xHlx~#&<{$_+^BIzdHw*X z@y3$+JdG}*;Gksj#&B_Vt&R$Ce1a`z`Agw;`{_S?UCsicKF|bGH4m9*h(EOLK7B2>Pm5%RN200lnuH+KP(ZdcjLVIY2lBI@pc&U{da_(-@4PhW>7)*diM+f(SKHNw(pjpHT zFlkA{A{_^_ok)U!hlnw|2-5-qF0fGRb2TDZCP@v=iw1_M0sBA>-B8NMIzZ)eV9ZB~ z8rJ97I2+cq#)5OAVe~IX0hiWQ1D$kjCArst3vmGI!K}~+y>@~ML}v-Gmg#m2u;cY* zg#`}S1&f35i={h2IeeN0(>|d7mE}z}qtj=`PQlwncWxo#4-~ZYi8&(iim{J8&OAwR73!R~5oSqxu?#UAB1}dt%+yB6 zNL$yqD;05APu`NrX9zcah|V_9XG$r9WaFA4937$+bnDkAAfS}WQv%_38g{+7GC=xT zhx>boEl238iQK}XzaIEC!pe=YectMKlGfX>-{|XX1;tD#uH7_Xy5BZaW+3te_(=Az z^Nt0Af0EEik`WrB=C!KE_jtAwdPRtw1+VWBKvVEIp_n9;cY)H&=tgPp5jmy}j7Wgx z2^1j4t1z)%PC>$*C);LYgEp-nl;4Gf({83-rdl)qHiecs!u~iJP{eu*sJLwp(N3#4 zW%9${zs2!5K`>B42SM3OJr2DVtP~i>=t(l(=2$$Xc6SqQ+h|<3P(AI2Xs_W3YoSmD zW|Zf*hw$1?aBd;KNzt=iZyP9ARM$g1AER;^g7YMmPf_`tulzY#PLP{o2If^DtjG(>7rk)OIYQzR6b3wTfK+cUZxdEOmC%rBEH|I_JFRKuQaMM zCGVwic#&N6l$DO{eg`ds=V+YHQu?d({3zvr*3$6!{0PDOHF0gD_K>b`7FXnh4^g>2 z7T!qzHxd3H9?4%S{Yh%)6!lLp#U3O&juZSR2*10iT!GSWr*b=qE{{{WlLWWO^Du>9 zhAihO(REsu2Qfng$?ICy6M^e_AsTo8C-s!HKLB|T$_lZMEshggQhQDE)cqvA z`1O)rB+DK{EC&LKCkYG?2FOQXG7R$tk}w2@EyS4#fk}V>2}1%*_<$i~fNzH32lIX5 z2UDl&)Tz2l-Fsj6YjxY`eP8#zx0X| zsRK~FTE0?|519kE9e~`Dc$|UOgOiiT4jnmiWb*LQ!^a>yR~7}Dmddr|i?#Cd5)`gf zD_0lhm!Ng*_{6c>4(y*eeB`zR`=Bs4KRv%#S%Tcfa&4&s`SQy0<@rVEI9++Jyf8O^ zb!5-TskxPBE0Du>m*6u`y|8?3p>krTeCbkUaerlQ=ERW~_j}SVR4!HLPE77!nl9I> zbC*sW3e7*de`%pSjroVUSDRNe3?of;gS=kZdea(Rx*9_O-?R@sB{ zcj(1u1i6-x9O)Ncgu<-oAd;!DGWV?L=^V68&(AF{&ev*{nX>}0pyEoc2Bk}txr^1> za%EA}drE+~uu`qfK>Fwr$j;8sP~z3<%<^T(96oRW@|P>sOP80`LvC@UR$0m)eqp&% zo?SZe!od?Sytx0+i5IE@=3I5Ta%y&V{>1X)O6A2D_e%=PhyCT{MKKIDj;`I=6HpI8+A@m{HkZxp=WMy?kPB zey*ZPIlWlETH_&_P<5>F5sj5+=U3*I!>bEkTdYv!gNIb@Bc^s(6%S7wJjla$$ZGUx zSjE}$bcI<7TRMCogrh>y^t5>_tV!L=iI|oT9g|H@gf$)7U90ZIWKw*sN(T=e2*LNT z#&4yS&!Q&GX zm{y%Ty|P$duFj+QQ7KNDICey&OwZ5PW`qekaq#Go7wyQx{9^gS zVs#ptmsS=pRmRJ;+Wa-)7cB^%XMACP2HGxQjq&OE*#$A`Gs4xnh6A%)Nx?rrrd(YV zZJ;rQ+;pva@gn4<@jpn{Lv%e%*9p2#()9>kkJ9xRU5`US!8xFB4(gjj`sT2{nb0?r z`sN5U%~UE2SIfdDLB9+yt;^-=+;U}RTs`*9loy{x;*ERLOEOK}w{aQuoLMf5!C0!5 zFUd|%SI}D$k^%)mW$FH8r!R{l`3q%qETM3DUU*B>&x)ZdUz#n;TQy)s4H>dC)kWb6 z&92NqentqU7}J~>T`|a62_w5CJTJ&pMPo(rZ(Kg+mM)iT6@e?ZE|5bfObwa5Z$g;r zwpqbc4-$YXfnapul{rpTeO0$L0+C<3ytr~V$t=8tC*C-LG7qGUVE9nzq2Cm=; zN=?GB+NT$<&0nmoRAaw4xM2QH7`5oq7=PHG)a?L&EW@nIM7W|xO~ZaY+jldEh%jYoz{cqZ!KSom9pZ=>a4KP%lzD7jRmUInh@l< z%F3+JLDQ7bEO<|lfF6`SqN39Nk5`@(-oIk#X;hq76sGglnkP#tW#I?Rpf(cs7twK& z&MdUZgt?XJT4iMka#zX%3^ZX>rHo1niYs%-KFL7lq`ao~+f%&xtx$g}mU938Q!gVN@;&Ar{`q^3uv&dA17Kiz^t&629m{ z4Sknu(=~KrN*6KCby;})S4E`-A-Rh}T2T|vQ0!-R7R@j!SJVub7O`K#f5dKIgJ$6i z@1r8te~W-xc4^4x+zOmT)ctADw&yckxe zWl>lRfylzVaO$8WnZGVuGVHn&g8_*WyMwTHL5k zt+pa`nqur)yg&K88!3*UHdUij(rwQJ&D@El}C<1>QT0&s4zDu!IptvZMC>RjQDi zpB3|Qfk{nR5J3vTYGRsF779TWLqZiGM^lyTqEKaODj}l)L%*FXjO=4zSQmp-C zWpQ3jHO|N&e9Ohfd4c;GSzg%o>O30UGs4}kRhO@sX;$mvN_B32W$CfYGBn?DwJI9B zDk%Jb;2d!)93ZJsXCB5#g}7USPSVgq3qP{5yf81|moBc%T`Je!f|IQh4!J<;svujF z;D|Fg>LOWLkpl;g9uppD1?|pq<!yj$XSiE5r2;H9ao+rd4OX@huo#amaxOL-v= zS#@=_aR&7Orj@vZ;02KKqA|c-*s7RNLn$zn2e}6Fff%D8ls>%cXDGLZu-+sSVvy6u z8D5ijK)V$q>Aqd{c0b3x%qg}FGQ%L_V(Pwyg`~h~1s>XM+}Z+Tm1f8jjPn4d<+;B_ zuDg}%mKZ-n@uHV%y?BSR41%T5|@?8`6W02wPJAxJSTu60$6^m9ZaU$cH(tnR}jLzBq`72op1Awudl{l&OOK6nP)opaqdoU-B!H&UN0qOyKms}J;S5_z7UEV zN$%tkOfy|fUBgXPtP9=|Jjpn>aosmCra#GbjRY8Z+s~NRIPK>-?VpthX=adV+qv9N zacfU-Yi*qSHokik-xayW<6Pqj&Yj^NWw=KfX2Q2}jeT6>172!mS&n?V_$*WM(_F*H zu_i4Q38mG`FOQ0U=OmOPShv8vOnGUQ;k(-z$|$FuM<|kWjv|!2;y*35k8+JGSWf01 zS2&L5(>2(k|;Psdhg@Zehq} zgqLNk+PQ|Y_J%l8uSsVNeFjUz-NxM1#9Sir>-6?5$Kz)7c!8n3ks;@}##21z60&T= z=!iaUqvX~6S;o|0AfY_T@QO^yLC%#nxr;fw;HBvs!6V(>-qs#x$OVSHjdQm!E{3{! z<{Tq~XS}1(q@+f!u{ToVrWLxQH0#KF1u?}) zwlaQ_1&pFF3ciSqOEgmIPNS9zL2aA(H)XudBJ+#sR*rcsk4VbK2faL*Rd?Fc%6QSu zaz;VptS~LrgDEySWjug_B9q21rPx;U+JG9UQSy~fdT_D$PZIVv9@-Yy(2|=M#LDn) z%8OqXNMoKgns9FjRuY$-cWBLABkjeni$^BS5-=FjZmViH*rai&y14Nyt0kkj_wyKa zare<2Pi44n>u-eK5>*jWMFpCawYbk~|#t4PA zYcz;a|Gvqn?Bx*mcMlS_pv6EDRvL^0+`%*}6w{C~shx~k7Z0OpLk`()W~3Z5l4(sU z{oA-(X=Z9>R@IL-ZwJxqlfCrot34sDrMb1OSod~@l422;t(mD-$;+a9Rgd=b3`mdG z-jLReXbgln81n8`7X~Imb<8Wo=xGV{wVya~+|_QHdufE^7H&7ih6;F8(|WX2yTeK` zdX$^NV9*PI92*BNvPb=_zH$l|ZK#Y5$S_~EF~xW4)|5$2xjJ275|?1iHfU1viVE>y zlV)}-tz=%yj3AvZY}##OG7Yl07zJ+_v!D1m@6u6Bprs5Lfo+8yC`i(cUzWq~!Wq@1(&GQ45# zd4_W(U3x&z>AJZ`W+qZnb+vFBUZZG*#-N4MTJcW0TOA=7+{$S<@M=cd!#wGe8Dy#R zM%5ec?B|g&{mrqI`C>QyjPrKJV5=$@#GqaA)hJAnTxtvu=y}5yS?*RBceR7rXE!(0 z&S_0*K!ZUdqX0S;d+Wv#`>Bk+JI`qfp`5zY2n{eA#(%*;iqLSH_Gt@oPh^bw@4PSC z)2(SRl~z0%g;1UW7=*gLG>}?U#_y3hXK6-1s{ToGo@eGd4_>U=c#L{gkx{g2RBbBD zGD9_p8P3z}bClw&a-?w*EG+h@3U{c&MdtRj;;=E*)hR}8Dra#b4b=Gzw;`urgWSd; zO=s;cXxBhuKhEu@LhhtABCVzjn?VqR^PmUC0wA#;3Bd(Hsfl7Uk9m(5my80S<=i-J z0LIH5QzV(9p!*n0sIChZLK>H?-1Ea)l2u%w7^43q(@c7)fnmO>oTlkiN{x&*>W1|U zA&fgc%Is*Ya|`o$TCt-CD><_%vMlUpcqX3RqQ=}qm#or>8s}XwYCEKccg=dmK5jRo z$H;1T%o2#;U6$`kO6WYen0b$he&iGl^r&uQsW6dG$q~0OzohjbD?QoCGLv%AAj8xp zhg8#EDup5N%tW%>^Cm4HkD4%_j|N3YMr)9|jc(O9ZT!zEUK>;HzO}49!1!%tec#ReBI};#x+l25dlgoqMn0r9Uk!OD zy#f^Wse-yATvX2ue#bfYR_1Kp7NF`HE7{?N@)*~>gW-)ZzchiiwOPgO8v6{7bO-mt ztTae?cXBU{Y>hC#baEQmOYODf_^!iCp}UxyIyv_)t!lObPH$$Zk(qSLzWTdJd3zg z()Vk1cs9$50w>>UaRbL=%D7;?x;4EFV}gpB5N0ERG4Bs*a-PlT{+>0tyLo7V+wJ6b zGc1yCg|Wb5rGHaYUbQQhKy`6 zW!9%9t)5_<+j(;KkivA-3b$FbZ{lerYO`}WhHRE3%_L5a{;WUDGDcezB*mriFDY@+ zkWqoEC8iG0Cc!K~86!OBpLdVZ5>AF0-Cz$)A&SO(CdRx>bdF4i9+?Wa+Z58;y-fQI zx0d1_rLC#HMlA;(%Vhka(_Vy_f%W<{`5>wbt$y&j1`$@=y(<#kw1zij!i#Au+N1eE zR$I0}X%R1QR|^b<7!fAwX<%@czek! z%c|N{ZrAL$=-_e^R2zfJdN^B6WiE2HQ;gL;Y5;=OhPYaqG5D6ZaL(H;GjsSBcPqo? zOh2}=n7&(Zk)DIyM+m)%+emZWVerghIf9|**xL3yz#W`mc+yX#SkQgcw+C2d7{9Z~ z{cU0VjQ{cy!%Hb~){hdDbR0$)wH%|?3S)ubfZ6(j3#v++-LH(7XM@iUhSJASUgma< z_U>VLhd?_|lGtYTLBjhk(0b?rE@#ZA8EzTG%6U5ttV^UENtgH_L;eb<9RQEjAVpzM zebwFjfZR}J#(tGE9?^uDO0!&=S&ZDJ(yT13W-bz4Pmvau1z(Z0SAM^T@3vW@F{%Je zWmrp@x?lGayTry?I?)-%pp|nuVyys}+$PR#;oKP>kN?0$(i)WBx}iyu*246tu@%0$ zpgUu>eSjgS;mJ2MlrApU%xOQ0X#-lAR1MP)IcItYjM=>VDbViao7qz^UeM35_&vmy z$+zjkco}la_({-S)kBJN#N8)AyNIVPrSGwq+dwab|11NLQEa(o_zv#i9BAM14vS2> z+|Md)=0Q^Kx{`}cPkVW{o!h{Tq?Y^kUbb}78{WxCO1HvT&NF=Xpm$JOypZqYPCv(b zQZBTNDW$5({szvS1EcG7u7tNo$+_$s-JLU`Vza?#g$LOz>ud!Rlnp}3SdU}&QmEO} zCfzM&N9`Wz{+c+}qVX2rtL| z$a+EH&`zaTD%!omY4(wseN_d<-o)yqR@r4ya+Gv-A2+$3`F@G}X7H2fZsD#X5{_8!@i4*?*<`Yhsp? zk%qLq`5Epg4_-41*zI1bjc9nP4Y?0gs>nN)AsC}6-cD~Dcd?jCL$KSMdy4yJeA_cT zmh+6?y&<{3$ZGuz)Bcw^?S3VB;_g>C&FqYm@#h_0n!bnc4tt^O&?BgFf6<%U=hc|Y zT<#Q*{Z-{8{eF)5z$_RS=@YkYMqJk6%)Vdk74=W=aa&P*O3X0v#X%RRxInB#We ztn`7#UbgXR7_)aP$#Q15tJ#JADJ*AVplv+*CfDqRl{&}hNh2TIxW*^E{pe(>nQZ~m zM*R#!&a-?-`gL=z(b=@~QDczfcF%C#Uj}VD+L31+kwF;)`7S2O zr0{7$ZXak?cUr(?4XODhu|LFhJApifvu5B8>m6WttqiZkqT9ppjAJ;;Y_Y5r_t`uP zlbIrSDcydC5HG1}9^OC$WbJh};HC4l5CZ;)f_I;dDdwIt%aj8QY6q(Vv+(eCteewY z*HqNm1RErPW1LHL8M9-w9OplmXT2tyl=$sp?BA}oq-iL?)ZpRvYs@=ChN4*yp1-v` zcQE6n>D#%X6yMRjOj9ivLiUr~IJp%boPBpG1zscB!Xz=s8#$z;5sVXk4)wzE=2e|L)Bdb`hVD7x`yxFO?rj&KLf{%oV0 z%qpJUq@n2;k<-Klp5nUAjIJH&4GM9;w+)HaA@{h6+;?(~Jq&M%IqVk8KOh-Yh?}^| zoh&YU8Nh>zBsvCa+y&w~on~@>h>5tDwaSB9rqxodiBGoZp-@4N_cD^cx;6%*ip{3X z0(_emdlRWtJ$ir#`7KQL2e|ubhUe>1yB>;jzRf6R`R8_K5VQ5P)q|fk3ioo6l(+FT z-KJ!#CV|hhlpPXbC@wjr4TfDo33#PtR*W$UHeWW)TNs|$BVlb+e#jiiyJ=G zSFlu7Q0Gvv#?yUcj(0N7r`f2>k?vJusuzn}x!gDlqFi#JR|3!Q#BNOWL+=;xC=Yp; zWi4+uTefrec}4b|nb`odZ5yK@WtFz@jPVxpGyHagp@u81R|#svlgA@ zVH^O@>X&c2emgUlR1dqojr-<8P1tzBGLS(Gvdqe+-8OFRkR_Lz4_dihT9?$MGuyUG z-076pFoTy6W?iko-Io&+dihQxG|nT_!u*^D(q>B7Z)F~r@bFD8wFLk*gPf#KF>zGg zPA1bWoF++fRFl&m+m!CdeHwdf`oJEeYU3n$G%&vHq$Z=cagXGLcZ3JeR~MKqFe0K} z41Q3zX0>bTroD9wid8)CG)N2{P=c*%Ji_=LRdhC69>&NaJERhkDi zvsS)Wb;h%e-B))O?|PWw_Jp)Si+>ujSy_=a1{HBed0$Jgn%Rej0hoPA5Sfvnn^5ra3*Y}=?4+=M_%$TtO=A|{GnjhyL z9pzr8G!zS~W;R}iOvYRPekL|>4Re=bT$;H@kAbbFtT~Rndne~M^Spa2<7fKj>uQ=2 zHtYFcD4T7rUErHXhF?bIzL?$_1{mmq%LSl2M#v7Eg7# z4>CKN1=r6fbY)p-FrgNHSrhoBBfbkGF|;cZ@XQLZZ9i+v)=QMY&rj#nN^zd z&w>#qk5M;M%YRn=9kqk9(i)iM>VM_MrNrg>8Gw10@n3^B4s&c0fN_35bGC`5oaJ(9 zZrn`azmvJnXn`p%mu561WD{30x|8BGx}4FSW@Y|3cubp2Gg{z2hG*7iB)l!&c1_(= zTz8bqnfGho&pn#qv^1A{A5+M{dk5xj<8r>8>924Nc>vUL9tGLP+b~T!!v7cVhM6wr z@CDnFIS%XFjEk}2CT?N25}Nay z`j}uZvZBavx%V=r-@z7}ck(_;YfqkSJ?1c~S9y>PIg4D*ywvn@uk^^=M;I4lkKV=B z#W=l2k##FYA#wJsKpVfrP)#z|o0xtdJ7CxxdwA*eD5RdMYX z*Di5Qg`{_iE0#wpWyJMaaUBxZX)4z)uANjKsNA5qUZDIoaqXshTgA03uEUhxE3WS( zxM^|iqI?Y(^PdFl;iO324HbOECr{vD|=oE)o7OTf3zLVl!_2)q< z-(=ChoBA>6E3f;JlMAovTJ(+EAhjdxrR1w7!ncj;X9(Us#CHWsFVMJbqjrVwDe=n_ ze-sGMG_{u^dfzRc^VGj0)yMW9r}5VH^RmAvFOzVGMdPAHD;#s=tr6lK_A929UTOp>|F&?y9eEqcLo<>R`WeG`@(-0UD>17GLYS8KNg% zOOg&CWov+FUIL(gs%wt$ILTvSV5PbL3dR;n%h5Pwh_7|sbfB*0%L&=usHB_1t;y15=%m98b`S(SI%2cw(hK+ArwCD%i&LluAAW7S2vwG*D*R7XKlIu6sHr2J;O zc9J|`Tm95VAHhX@Q3tjWJ=zF<50%$^-c5bL^5?0(l7~;FQX=)95ixm4f%<()+;#j*ZhBbOiD*LuEz#I&T)QoxJwz`XXaoAuOigx? zcxS+s;_A)FCBtPqW(1z(K>0&N~D7{V68JUmQF)^IntQEYF0!R>>#o>fib-q z5&>kNEQyg41(4~jgi4~m7GxtpcG&oK+E38^PKWqK5Q0FOM7tAu#4XMU=TEsv*Rro4T+4fhHnrfqbMijgfA!n~+d`jn~hKY_LED z@)py++h*GOl9g2iiGjg7Po9hRaJ5%(nz#$d+T0FG`(oMs7RK*37&k1@LxmDNEi#5I z@lL@HzzOjDo|YMDmN5SxNY53C*~~ns`mE|H$!ns1w~-L&exG#VmJ81?iPsyJh&_Bd zwLY+KSfX|YjDu3(XQdwQBFm8`VLAxt6xRf>Cb;LL%rBW>Qb(PGgaT+XUbZvRjS{#~ z(y(dLK?7C~Gt@&=3H#tbi}Lm#_UFsus{g#$Chvwz97g42B#2RwSbi9OR{$-+Jx{An zrNlGH@lqJ3gdRQpZJmd|-wH!M1!JjuKCO8m1@D6sC*N(Mc+Z5n|MG@&cLXi>OQ#j& zB>N=MD@*jcjpzkF8bys}(Zw{O?K>IlR?_4cJ9wjoRtu;(If~RUgfrN-5NE~HrmK+_ zGSQl6bbusHjU|)U!NySF78)3>NYGWilaS1k_0&;selDCw-i8lLmx2lTr@kP!aUNgQ4IH#Wrq~Jqv%3CO+cK{z1nS-2} zf$tYn*dGvouMiYK84e-A4ifk<60{ME?IaQmfr(10kcdx6e@#60rSEy(OPRYrjsHKu z`k3;f3I~M0bJc1iZT0%yeoN56gn+$4+D@`U8Y7V?68$D<-kB%!qNBQ)-x{O41AXjz z4VarW{Jco&Wk*6XxMtsa`sR+ zX&pL9@WrAi~ISBrs2i@!cFD_!_I zQno>{1z8!C4@&K90sml3g;iAwK`I1w#gKWT)&NmS&n_p3T3bk1kGKdE z!-sdt=Huz2{_vNiTy*c%AF$BnKyCfdTO7jr7SS2pkhAuoj~?Z8Lk3i{KdL$GT#vXO zrp^wKl6J6tk|xYphLlEfM~kN!m>ii(EvkcrE6(PpT=+SV3XF|uCZu!|nW(I;v2gy+(y^>i{!`Z?#a+Y~2fHJJ6memI>+QDhTtKH6ks9f?mW!-WdhpRj6}~iZ6HrJQfJ5Yu?l8o6$qhWV%)rRp7GoP=g7{IZ@ra9Q!6aYRf}Z+ze|0?GCC%s zgRd>bkbgpH{p8={?~kb-I+aJP=U#gLQ>uf{M+t`dnY3?M<-b8*)^TzFKj{7h-J?3Y zlgglzdy4MW_B^wN=r^d3_fi^qXrCv41mD=zw)*qpdOsL1?(SCuCMf`41hr5;O!UUIF9B|I0{DCC_upI3IZ3xk zNx=|ppUh1BG?;A!2`5(ZP&W>m`*{pviUt)Q(m4o1ppqYR4&w^ZG+p(#sl8%i5+Hre&8` zlNg*!ygRH$@~>@U4y8u_Dc1O3yLB1F|7CD#DsASbVHJpb$3K`YnO~{ zVRYZ&_y>mmhwJEJ^j~NtwI6sVp*0q4|0B`u#|?S|2)Ra<1{r%FbrBv^+WpONb-zB6Ru6H~K}OX(Yr%2>FbCb95vxC;h7y0D5lLIqr>}c3mFg}f zfc&b+_pD`v$xI@ni!owU5;+=RjDUVgLjR0=bb6=~I!_ox#<;`pxC)~;*l88UX!4g` zg$qQtBB&k8Xv4?Y-E~yb8|koe9}#;WsEv@XLdZ(1U0Fw?^Po1;;!N+eE+N$p#)2>L-S#kwuU#q!$mgz8jvQNex2oq zndb3GCMAnai`Bw*^*Oeq`aKf6qi9FIuW=^)h9$nd`A}NtZu(w9@VjfbfEm!`=y1SG zURQ)b1>7j#W2pDnUWfZ;{3S|Uvs*mrA_#`CZUrOCSF8zFx=xSY)O2*#IbyL>git1K zCgN(4FV>8kf6jrwzbQ7IHL)r?)B9T4U+Vw z*jOT`<+;YrG}jo*NIC-XoLvt^>mM(CZ^GGdU1NbIwXR%A%<;j9#A-q*tD<(IhU??! zmNiAnJfz(oMf2UD9FI01ts5Kbii~Eog*k-D$zPAAi$pJy<$dq;B&P2!P!hy> zrA_DrZNfyK`462lM(|mJ_nR70HmSpcKmwZkYLXde%lCM(8cDbd!JmeRXPpnb>UK@d@1pB@RKTMW0bGcZ$U)gXCeB} z;)mB1d`4h=U zH|Q@nP7)gy<6PC~yq*(Ze*}3=_b7gS6gPU|u}`6!;%?l$AZCWPs^;sM7dW?#IxTj0 zceSRL^uEb6MS@2Pc>f8iM~L2j18EeK-Q(# zi>Gqabz8SYZ$`kd0$V#{G~ey54N+Nm3|2pz+BE#JP$GW{KdrOVo+d)^i1dnR5c3Ib zb}4bW)rcO(j1SX08sF)H(DpBy1vk#BCS@bASOr$i4jA{`2IeascxE5IANJT@*GeLOU^j_=3s5qKkBF?OY06c>xfyg{82LY| z2z5PdIWOaikeNzB>SkOKvQkj^Lien#5u@-*p&0e7%7eqfus_0wpq|)ZtBb#Sw@7!n zI_Xe_o6wjw%v-n~;Vme^Ny?i^1;m6h1IjeNhUQ${-x!uh@3fa#{*)Wi>fWO zOf*T!oQCnZiPa_y>#TEPAnyB3_*s>+adGJI*y3Lb#BRnGJ&7La*s?0w9szZR1D>|h z6D`|o*<-q91GhS*pdH@MMmeZH`UU48pSD9+`Jm4;QuipS6LZ!6s7@NKQj*bH&o_A^ zsN$@#EumxVf!3U88dpD6vtYhEi?8H%5mnEv3;%{DuIAmF)zE!#V;%pVBtuJ$bo0>w z^^RwTUPsN)YrowjHD~M8Wet1K(3z%`4aZYFpD< zyvBlyWQjC}r^YGJ-@JDeD1tez9!H^_lb3icqJztOmL(Dj9ri23l)JIx0;b} z9KW0!X228SaRIJak(c> zJoUH$Ex0}8DwwH*ert9J3#%HzO=IRa3rZW~;?&QjozbTo%A^K9dJodS?k$nvG4$NT z?c_!@t%^??xms1C4d`fL@gqkMy2zgPhkDF5GT(qY4qpKXIn*T^KK#jh@LJesg8MO6 z!{wS=TCMx-(K@;Tr%A031=55!E}|b0*E2C8j?d9_#~ID2k00x2!HA~oo&T(n%-)RG z;5u;Nr2KmN9w8wCP2C=hP!C7@n!(9b15RVpUpmTz`lPBp8UIYk4kzb0M>9K4xQ3b8 zv+x4E3eU;EUl;eku4aRwe85pBh*S3h0Tu^m*v=|;0j1|hxpmy4vlGkWCbsVeM5JOlb0dr7& z{SUkj1jupHl?L^(W&Od%7LvC6>XtV1{W$x4`G_ddT6SZt-&DIZB&-$;PvIJ7T>eb~ z3wuvF;FLP1gP~?5p>v~VR{A?8m{W{X&54z5s1#u{J!GqT0G-?VAO#H5<_S)Rm9ykH)m5rOwY94hT z_Vv92xs8};JKoH-?R?}*H#ZZV@heUYU4&4P+R$W&_Vcqf!T&q>oGP(#Z0&S2nn@!& z)*a(_C}=QnFiUIbwg~l&$)E1;;SWu3U~Y8l2ye+D>&>bg(RyXpL@-JeFcj zY&@x#0}k(RY>2}f$&b#(3+HRU-AMwG&3>J$W1Efse&Wr{uZDg4qXEvST4&V!g>Tw*5`PWJecI|QB>UU3 zjf|(}>IhIex@sl@5uY^11jfqCM`{SDhf z7*L0?LAT90*7fUtXU4AZjQT>HDSE}oKWdHHPv*0@n{lM_b#Gs-k5`=;ndt3<^~dW0 z0^z=p2(vFKbdKiOqqas>5wkRvqBnQ#H)MczbKeQx6Rhgp#FJd!97?WU-fhT^i2AvF z_c}Qv&X%JkoD!uK-k0$<<4_2ZHeulO!RNNnP z_1y6hq6WRIzNVw#B3V1!zxNLDDt!RQ%5dZ><#kOs*2h3yk2FvTI4JV%uM}NzA~r}f zf3#JHU^UE@Natme9cLH8D7jVh@uqP}8^ohG_)x`|#5lGu1=+g2j@G>b8KX6EF<=KB z9CLglv}8K^?7iT6xAW}1P-29xRrWx5K=WsS~mq@aewE7(d zpAi3>E1{P6ZvR$G_+QH{p-M_x$%*?+#+o4E#^{3Vcoc z;ifwJnZ3V0-Bs^Nt*i4@+em}qi-tP|Dz}2tV3FT+T~Fh-WgS1^5;0R=4fPV&S@#h5 zTAbAgvc!6*tCGuzgGC#s5u6z)nxCV2j$b^#249z<IR+Wr4pIMfevY zw*!{krli#KPjhX<+|gG0OhZ9jcL@pJ2kSQL+~&$~9$u0lxbE;c!wdLY_01Xl&Zu)9 zR^QBYjfQ5G*2kH#-Oq9UV`aZ7*!P=)ng5skBUTQ0N8i#p8@U|a$a5LADJzjFy9G8V z?ie8^flUD)5h{ley79l%4YE}?EHPR=#GQQ-7uImjtZ$fBXjqK1ap9u%NQ{_WY#JPI zCcZ`!LB24(BhEmyhb(~)CDHiKw^i0dxZ~tFIu!M*yffGD+n0G_U{QO^y>^cN9eENtJcIB;to*!7JPM69H1DAwu3Q-X(=euDL?qyeOLNs z;_E5#hUzQ7%0Y$kn>u0}^T~}&&_z(+^+t7;uIKnb-(J9axA5Uw(Dr!wc4Um*IBG|{ ze&L+Fx6}JbsiaCU!P#;3D9_+-H2j#Iigw^GsR6R#Ir=(0m(${CjSWh z;msE&ZYI7q5^wN+>`gfBT@Qs=2#FZ~ne=!qUs-Pw4m%<-=+gelrZ^(;WfxsGcbouV zE13aYc+b%JnJN0DLNCPwTQ-=bz2_o(G6oV((3~8Ze+^1e2k)X^-yulC)D79a>+}u> zeB6m2$3~A4OF4El#V||Ehv<^O0^mGqXVdbN17ioE(6Vj(v6Yb3kPVB&Z$icD+QV!7 z@G#bHU;V~WB@>0U>^zO&s5L;{>4G{K#itRX7kA!T_?bkTP!^LNALkHG-N$y4NQd6u zl%lbo7GsN$gsrre>>a+S*C(trSp8P>S zPbX#MdYQ^$@;6JM`1P0gFNDY*N!(Mn254T5u-hl^V_Z1uaEmN`O93A;mi*=D-ajYH z#tq@7v5)JK`1<;&QN$)N2SfS|$uGfQg&UG4i(gaF3HLs)tKjdq60mZz^?_b;+q&uO z5G<O5|;@wO|mZmN63AQg!M8Bi9mRwnOWhrgwOVON z)NGsu(CT-RD2^KxgNg(!8xyHeR;A;c;$Dv)3e)My&z1TYl87%dnmxdnkrs~h-@-4# zpX&mS@1Lwcvuo>|3hYwG4PSo*f1?XKgIS8}*Jw?>8LQs5q67t}xP3{TpXA4JtoMO` z$=oZ48j>Nj6y=!C^Z!RHxEz4X^SIKv*ziJVz$n$#ylhp}IJO86B| z=Zwl;uA7wS9RW@JJ4qah^c~8cI0>zHevt`@?YKCx-c!lCqc;rWx6P6$tMz5UT#%Dm zf=9Lv(Xy#tK8^h}M?*f@HYtz%=^!3xqAx)9#_?OdJP^A#V$(QWHxoBiqLN_ntrbv# zO^ELr6U~C95<9bC`FZ%84gWx1oDMV*9#R^w>S*7M$2{bag93a!B@c776G84is6PWd znJ=$9I1@-s$sKh`KyH^GrjIxUF!+fWhyE^-p~%pxL4nR~DAKYdIup%+-b=Ej{Em3S(Yj`&o8$`b#ko+?Ioi3DKlU{zwn*p#kHNXDgLcVo8Avd(GInZze zSrqL_kHlNql~%GRDQjlDqfSMSv#exm??YBA^{{Y6MlS4|9A+G^d&kkgmiraK&0o~A zusUY)gG2%OBP}GW2WikxNi5^R1?Vs+##w(syHD=hSCh|n9`n}<-`-5D&y{%HPTSV3 z|Lo1uuWMgbDP^r}M{bC+ZSY+0x~o>wjD};^PP4EQSx^%~RC~Fa#kHSiZ+k$UB7-yX zo`kcty$S8;@z>&TuK(1%esF>Qx6%j~<&0i!0nXAc?UJ|-&`!R+px)WRRn>0Ks)DLN zEbEx`iNO09!UYe1A0u{0R+7Q>xAsL>Ya!p?42hYy(thdp6|dVuNHajB z8=`VYteyD{>Zbu0ve+7ZntIa5>vcbde496J%_?M}xI`;RO~i;m*9@O|IZ16z%2f>@ z>Ni`5jG+U#g~|`m8#pH#qdv0MN?VI{UzE*G@D=DKR7B?tp@;8~<_XO{$y^ObZ#y-w z*Ip2fw^H+1u0Yi3p=P%d8jd%4ZzkSMyqWkqPh5k#8M4$(GnqnsOQJ~1w`i#wR5OF5 z1#=tRPvZd8$lLl#wMKWg(fBoB;yRFg}C+|;N?~)A$*CBj=ZuR^HevL=ej9r0 zI>~ZqS<}}}mjpD+H!)1-K{AWC(@2Evo)RTBfIA3=oB%@mS`r3l?*4gI3aii%pqtUge5xqt(#G8Md$~mXKvIuqdb2A z)Oce_eV#@qQE))Aczw7yyB4DY9G_r|+#%qgZfw6()K9#AA1Dq=S@iFelO)yu=6K{| z2SCS6`qzaU73ZhGX^%|Du*3fbltIf;#TM#l2^z2n5-Y`7Qf2$1Q8wuQ0HKR2wUyA_ zV)1Jp)Z6R2fdb|21AVB5gC=Oaeuyd{kY)-`>c)F1o{%T~)oNkxIBZP;{V=F^4p4$h z6#CJ??gV|F@uX{aqRRZYp!duwAU%MgHHFz764Qvv&slHSVt4itkX}HcFg%Vdpn1RF z2Q=O##J*nP<4V+Zuhr5XYN1Ho(C_%RN^ime6bZLPQJx}oW6(k~L!-2ZMoj~62X&&c z6I&d{MT;(71XzDEMGrgB2<@R6N}d|h;iVR8$ho^oH-v$lAus_R9Ua^Q`fwxFfMyXV zz_cX|3v?XJb|MJ^9wf%>ButwKa1#r)K35}xWzy8poM>Q>8n6%K&<$mLtOHc80LFY| zs9}AMjk94*Yb-b`8b<$O1aN6xHPAuV7Lt1nxG4!hJ(yMcpw~`Nf#^H|)-v5@0d~B; ztgyfVyI^q;ez9~1D2Gq8VAcoJzp}ikW_0?@*hzT1=*}%f{2}5`edvE%M0b1u8*+k& zCO68nU0?`3&Kv57F5M`b;ThkZfFYgrh^Wf^Pl#1O${)c}gJMM#HWbSNcg` z>u`TJvE?vbHIbWH^w$HwdRVzWwl7-!PSbiD_8Wbjt)Q3*#kGqDO!wPn${a+V03XTz zG4EI)_$LXSG#Q~mYF?{qe2-^4p;v;)S@8NE0W=AZ6N+g^JLp>Y|y6lf%3bMaN5n(%T#OT--gh#K-eEA1BzI00Ts9HCfaEg zr%ZnM`?okACkO^g=m02tsmGzmf|UW|7(GeG+Z>Ch)b4J=Z5xg27OJP+5bZTQVJ#G@ zz>Mum$&it2iZ=VMeZM{u5`@);^$@RdI&%c(Nj7k)aVj(#mJ zE$I$25BoDiWwTT^Pi3zIFkSSkbt$WSp2}zGb*uMK+sm{fiRmrWPsI1z)E>|k^OZ(b zrsTae4lk06p0U!g-S41f@B)p~SxSGEo*$+B&srKDpC2K3zb3A&)E?6H&EkrD@F6O< z$HE)w|0cr!gS?~9SPU%pAhq)W-sL$#W?9vLkm&LX { + node(waterExtractor, Seq.with(new SectorComplete(saltFlats)), () -> { node(oilExtractor, () -> { }); diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 5958d5f22f..c8667e7e76 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -340,10 +340,10 @@ public class Waves{ step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty)); } - int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.5f, difficulty)); + int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.75f, difficulty)); int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); - int bossTier = difficulty < 0.5 ? 3 : 4; + int bossTier = difficulty < 0.6 ? 3 : 4; //main boss progression out.add(new SpawnGroup(Structs.random(species)[bossTier]){{ @@ -411,7 +411,7 @@ public class Waves{ } //shift back waves on higher difficulty for a harder start - int shift = Math.max((int)(difficulty * 15 - 5), 0); + int shift = Math.max((int)(difficulty * 14 - 5), 0); for(SpawnGroup group : out){ group.begin -= shift; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index c2ab8423c9..2df91588b6 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -47,6 +47,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ /** Maximum line length. */ final static int maxLength = 100; final static Rect r1 = new Rect(), r2 = new Rect(); + final static Seq tmpPoints = new Seq<>(), tmpPoints2 = new Seq<>(); public final OverlayFragment frag = new OverlayFragment(); @@ -1164,27 +1165,39 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ points = Placement.normalizeLine(startX, startY, endX, endY); } - if(block instanceof PowerNode){ - Seq skip = new Seq<>(); + if(block instanceof PowerNode node){ + var base = tmpPoints2; + var result = tmpPoints.clear(); - for(int i = 1; i < points.size; i++){ - int overlaps = 0; - Point2 point = points.get(i); + base.selectFrom(points, p -> p == points.first() || p == points.peek() || Build.validPlace(block, player.team(), p.x, p.y, rotation, false)); + boolean addedLast = false; - //check with how many powernodes the *next* tile will overlap - for(int j = 0; j < i; j++){ - if(!skip.contains(points.get(j)) && ((PowerNode)block).overlaps(world.tile(point.x, point.y), world.tile(points.get(j).x, points.get(j).y))){ - overlaps++; + outer: + for(int i = 0; i < base.size;){ + var point = base.get(i); + result.add(point); + if(i == base.size - 1) addedLast = true; + + //find the furthest node that overlaps this one + for(int j = base.size - 1; j > i; j--){ + var other = base.get(j); + boolean over = node.overlaps(world.tile(point.x, point.y), world.tile(other.x, other.y)); + + if(over){ + //add node to list and start searching for node that overlaps the next one + i = j; + continue outer; } } - //if it's more than one, it can bridge the gap - if(overlaps > 1){ - skip.add(points.get(i-1)); - } + //if it got here, that means nothing was found. try to proceed to the next node anyway + i ++; } - //remove skipped points - points.removeAll(skip); + + if(!addedLast) result.add(base.peek()); + + points.clear(); + points.addAll(result); } float angle = Angles.angle(startX, startY, endX, endY); diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index 1d713f7f75..59af8ac517 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -241,35 +241,10 @@ public class Placement{ } public static class NormalizeDrawResult{ - float x, y, x2, y2; + public float x, y, x2, y2; } public static class NormalizeResult{ public int x, y, x2, y2, rotation; - - boolean isX(){ - return Math.abs(x2 - x) > Math.abs(y2 - y); - } - - /** - * Returns length of greater edge of the selection. - */ - int getLength(){ - return Math.max(x2 - x, y2 - y); - } - - /** - * Returns the X position of a specific index along this area as a line. - */ - int getScaledX(int i){ - return x + (x2 - x > y2 - y ? i : 0); - } - - /** - * Returns the Y position of a specific index along this area as a line. - */ - int getScaledY(int i){ - return y + (x2 - x > y2 - y ? 0 : i); - } } } diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index b4917e519e..f12cdb5c53 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -187,7 +187,7 @@ public class Planet extends UnlockableContent{ } if(sector.hasEnemyBase()){ - sum += 1f; + sum += 0.88f; } sector.threat = sector.preset == null ? Math.min(sum / 5f, 1.2f) : Mathf.clamp(sector.preset.difficulty / 10f);