From 3f8a7f591a0d33633e84d1f74b2673b8f82c5351 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 30 Jan 2022 11:34:52 -0500 Subject: [PATCH] Disabled Erekir invasions & planet simulation --- .../assets-raw/sprites/units/conquer.aseprite | Bin 0 -> 10632 bytes core/assets-raw/sprites/units/conquer.png | Bin 0 -> 3709 bytes core/assets/bundles/bundle.properties | 8 +++- core/src/mindustry/content/Planets.java | 2 + core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/core/Logic.java | 35 ++++++++------- core/src/mindustry/game/SectorInfo.java | 4 +- core/src/mindustry/game/Universe.java | 4 +- core/src/mindustry/type/Planet.java | 4 ++ .../mindustry/ui/dialogs/PlanetDialog.java | 42 +++++++++++++++--- 10 files changed, 72 insertions(+), 29 deletions(-) create mode 100644 core/assets-raw/sprites/units/conquer.aseprite create mode 100644 core/assets-raw/sprites/units/conquer.png diff --git a/core/assets-raw/sprites/units/conquer.aseprite b/core/assets-raw/sprites/units/conquer.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..4387c51df790bbc202ec979f146fc71f702bcacc GIT binary patch literal 10632 zcmeHtc~sNMwA_WQjzznORD%s(?{=FFM;o~qQn z_jB$|)wy-+e(PIze$dkTv*HUavF16X^@Wy}R-~r>*YdU27oVA0-)f%!9c72c{@U`c zzpU=k7|_ww?T7v{`A_DYG=2R;U;l%%?Vlw7-hEW^bW2O?%GF;q?OCr&nwI5zQPXZR ze%UhAfWG=Xw$BPQKn+R*(a1GIqtCKKn&v-BjHb6u>s%Nv3S+G4es$=}{}5?uX*6oI zBx0h%BC&s|{ZG=bw8G;fasMM(L{w~Szh<1<4ryr})dFa3{mZ{AFVQN|N+m5#a&v;4 z_I>>`q_m##<>mO-LEm|~?AR^ez0HcX^TgFg+>O|kSkJ_#PdZOT*8P|s0^PgokYTEQ zM$+n9aEtYa8h-$kWS21W`tE`Mu5;6ZlD6KR{?gpR|B7Sy`IJ2zN10WT2X%q>q}W5* z{1=PsSk0T;hi<_hn)gXKnj2Vzx>jApzS(`N@3h0-+>(0qN{OGV;|qo&!UPps#;sYj zcxdgZZaz=!V|xW0Tx8(C>py6DBPD(FE@ZnWM7wUj*>k?%YWX>sB8Sn z8ZPEl)A+O(pk=~#{Sq}X^e}esBg-7?`<8`F_!S?)-+6=7%g8}tkDb%RXm80pB%=76 zf}oq$6^tc9_hCme&fp*oZ16a6_U(M!l3kXiAP8%ta$d=MJAZk})NWnc4Ujwv>$0}*k)eG=PeRY;nZL)wuqFpZ+tY*2NIa7&({Hkl}0HaqCWTgFb)^)K-5 z7qPHOs#OJxw_{~UvBT+UcWV}%TgG}QWW@-v5Ec0 zEHu)2Q`sHw1l)`E<+X}Wm~G!1L2^1oy{Gg@t6f%nn(PF&ZxYuW{yx>^NKL@^F^`H~ zh4+n*EwYpQKP@z^mhMwwRG-?5R%0Z=AsJm$Wi(5={`jrYOX1m)8>*?C-Y`;o6R7u5 zGOgC7W(psaZ{QLzr1x0)`wEtihMWy2<=CWCbVTbXIr4bNX#3V`RR7wUjaXE_mAU6P6U38UcI>+^k^v|N zn2G3L^W2CP_hAtChktS0OE*lwV|gek_#Rub?zurt`Sparkp&&+hwXx-gsRPUL~J-2MhtK4>Ci{zCIBTA zzxrf#dZ9GN6g5E@*c5SNve%1uBz@x!o|Re3ng~ua2IUkKjsG`4Qi8L|BVu8sWmmIz zS&qY0sVC*jlLV@4*Kt8|DL(;qX;R;ByV{|BcLe*(D_f{_tor?n#`U&SAK-~mD8q;e zYw2O;-j31Ux~B-4lL0y|w90ZJ1zkY??p{CDXB}sdZ@*G+Ba5>{GGPP7bFFj8dt+Ez zV2$NH&_iaSFeW{#j?8obGgLn(o3!G+Jr1rkx|6x%rqpxl=AG4q4m z7xR;H3)DkvddYapjk+`FsSV!A#`^gXP;cPPx*cdA4QUgYRV|7+KKST4^IaOs0KG4S zAqc!}xfc!J$Vpb7`~>xbP3}h*cik6Q5zgzs#|Y&4aEI=|Z4o=rA|j%H+F^>dQF~LP z&@@5^E!v3VjrD=9OU9Y?RKJtY>U2ihCk+n}>qt=nHL>TyX_0L=Wm*a#@ zv7v@2KYWr0O0XHi0P_@(I=$A%AR05xX+k(XQvB52)7zp;_U>FvoXugGw3}GbZZ2lR z(lKu*fdvR)wMbaarM5i!b!YcduyBz4>e`<*FWRD8a$u~ zwj$x!@h>+Tcs65!k;Vx5Mlzx%JUeK7aWs!{uf8y^o7z;ljtmV6{W5{S8mvyD`lqjL zPRhG;D6}Rf)iKbSK81ixL7F^~fditxK#)LmeRHFCP*jU#wK$j3L}(veG#T>EG>%U7 z6vId0@w5@?T&(RY>AE2=dmVf=`yQS7_Lmop7@NSMKC51l-*zkKhoGFg#>!P*t+`>u z2KqQyv%HDqTgcl>qf-OI>-fFFTadS^Y1f<+jU_8G(X9xovv)M+C-}kjmYr2~n;#LD zHQh0b_PJZ{H(!a}mTuVC@NnwI@4=?=iCt{c&e&9ri~Q^36=qjexSkY@D+2!S2MMNdkDuU{dX4;D9B@+Jnl{tz5tyXcjxvKww= z8o6IA><)`d&W#ieg~tk9&L5|AQ9hH=?HCjRn^r#&{nyCZ=GHR3o_XVsoz!bF~J(h+%nAJEx>CK5X2hRo!Ar4pT)gaH0doKjD$)1?8kxF7) zrq$7Y(0B>6^a0l6CMd^RhWlykadgDsiff^@Z+o-w`7upY^zD!EW@LNH31ze=>;28! zGZSqXw`+0CvU{HXnwZIK<>w^NFQ=Wh8wzmI9}1iuemEe7#{oNwy9}cC#>JxI3WMAt zx{Lb^k|--yjrHzxu>R46ql`v-J}u^SEqX5pSM#85w(m-uziw|pmVQ^YfNGf|mNX5F z0BMFf318PmvKP&bxGYbV96f=F2YO+Wbo0^lU>#JD?KjZ{q?!e z>vZ58g!Y)fKyex6M}G5tl;2fU=GL` z#SmU%^quJ9NbU07l2ATE89bN|@76zB?XdFEBIDo^{~6myV=kM+q^D zwZAW!hL>{MTit+Jb~ohvj6i5(!nw_myX%%vS23=rEqX@r;Xh~7ukRM^+uHUsxIl^f z>T@#xg_gF~{(nm5*;@S1$^78&-(2wg*5y?F>F>9H*qg!rUN#*c7-S0mV%#~6B^A@B z(-G$;xzmy#e@sktV~YwP(jRLTiWYp0SCAkiSR(OLx(k!3tuF<_ED5nTE+8d=M%Nu# z4<3IZn+XgBR;!yE!zMeKZ3tgEHttnR7MjSeoDz@SPSO>w;eFVA<~JIJN@W?o6n#*m zP%3p(Itgw5pH;Z#KiOX}?65(T&74)J&!^vN$ub|9w%yQ{{8;OnKCSStY<;y(cLO&@IMLi#E8uOB}J{{QBG?Hrsc*wV`Nr>&jc|2gpdi`Jh1Ch&0oE$~d9 zf3SFF-&cQvO%{K_{ygyu`0K8cgD>WECNh4HeDw7_%0qo;*_*rvgBJcnrctgR{X;@R z=;G(4YxMSw4U_hXIHjm@WFeN!!yqQbFV_r|Omahft4U>`EevK(+NOD2q-!Jl%9bD37kFR`u=P$HtGx0XQw#Sm{{u z>zSMYgr4((NJ*Be*P)f)8?QUYsS^+Ej>Ozlb$rw}@Cj}37l??kwBX%aIR*DOvKE<{zN(ZZu1KKH2&P(Go$O4q2vz^;`a$1+X5{hPy` z_8wxnO2dQhB2SZ}RGF&I2Q@K(?%+CdB>OX)^Y#>ZuJx9E#4}sQwI4`}tsR~xLyKD; z!Rq1f?u!SK7(%`RIhEAsIiedn}f#NOL z<9Y~iJr!({6Fji_IwBj|Eg7F~{z$kU_ zWA@|Q$?GeF-Mt4%*;CJbMrL3bwB^y%NvG zU=(H5aW*#wnoH+zC75)s|6EO}C#O!+YbOe^&YioY#(ppr{vodF>fk_@c%mk-s>i=V zTUm>FpuB$V{64U{8aBFq9@ZE#cSN#nl@T*PQJQa}9;c?J?=9jy7Vi20x$wFfLcG}C zRy!JBkLe38I8dXTrKxY5Y0zQ$_%UiE0_A}XB06X3Mou9Sj!+~df;291wdQB8#}QxF zcc?B-PPeiq=YGj+YHf2TO(?T*vQ{U*4dV;NrR?n~utx~9bq5Tl;7jBbk7xw`I5(ZX zkrc%8C9T(b8_jc)tr#=Pa0p?ZX;;>+-CPn^b0AAM>A1hr*M9l!amnlOPDv*=O^)6b zS;{E3n=g7Z*URbg>c&@-QyDr5;Y_QQ>vrk4bR%o^5bn@gRwC8o&5;MpGf*nbLhKi$ z4=Kzuf2y06UtYvhrlQJUSdERq0+>PcyNOm@m`$iLKwIsi;MyN-EVxs2)?75^!*&JN z&EvM2$7Y~_i~8kO&tF_zicCB|+y}wQVk>3{h1Ry&!ti52BkBp#M2Idp9?5H@cu=#E zBb?rl=dB+fs%qgOPwQmIYXEhyN7a9pJ|V4UJB4m4=TQ`o}(z~$61`|NSE&1ZRi6mBKB7!me;^SAT9 zjQ^3%;0`Y>^i#ddw*Y>s)nAKI@}xW%azz8M6E&*0vUD~Oc^t0>Kq0}69k3aiVF465 z66jftRwdsJeaGb#6jdJZPR@hnsQXlscb$W_g}Sa34`C0YRpL~RK1MQRN0L+Pvl^~1 z7B|I51GT|iMC*-$xF1NV^G3w;1HWfhq~x_dVfoHmV3&S`HC9{=C)=98q8PtmMXnVt znOH@5*F8{nBw9VT1+@#-;D~RDjMS>DAC8#o17iUxD@c^^q62qVef*U8pnD?)X)3Ac z;NYgTo5>^nW8>4dkCbmdrMTQj=rv0U-&B{}hq6HQHNy91=7orf4T#yzq75QG@fjs1 zDzTkiv>QOlb{xp8&}Fn^A1z}xH-J{&-i??fZ?1fh0d>^JJ<#?7Qq!GnXXa#BH>w2= z6uY|n?-GQ_;CSi4Y4CF7+rPo68}DOtbPwD&b$d$w=sHKT?ai`F(b z22#X}X944x*Sc&7-h~JF;)emnm6&?EA2ooTN@27*_~7a&UJEzFItRG`+;Usjg6!#7 zmiSyeww?}1y&HLT8^90oJqrIgpGaFYwGwZT%;PpqR&;OcmiM-IuMc~D=31$IT{ zG&n#Pas_&>2Jx0|O^(5<57QVUFF2e%W8_#WN#x2l!uK~xgjt?zGdZiRr*eh$qoh@{(7;Zd-RaG7^g2R^NM zF3WG_Ahj>Xheb(k(VmyW+zP+PO{pqPDEOA)cVum=?eFk4I@KP#0q-oLG+DusOGPd2 zg+)z)b&8(xl{3%klgdaZVlIv7RV@*|(UJQ+ogQ#>LsJvWK3s%PA53rLtD5A21S)2JcdQ=LZ&4BkTS<04Yg<(?AzN58kN<`CZ|}SZB{o6l&Ayk+l~LAXXFf zl{vER+T|;9(1oZ&Ymf$vWvL59;~|=4jGrs&KEygis${vgXTW|GsAnn<+}5mZw8|%! zlX}X&N;N}-UZBGF`a$m_>Y+%Hhx5^yTW_BBW~sra>ZojAuxJY!eRMm;Xt@J_&aXcx z{W$glc;U~^@k@!hs`l;S8(VsbityF3o(MB?>iln*GR6L-<71p?sHokefRo#;h4&Ze z7vJc;+u_yN9S!iup8iCB6`SS@t(Io@otk?(xT{(i4d@1cx0&{%nX?&SB*|T)<>H%d zlh}p>^4i|qUe6?Q9u3o>>PXGG2tGC6gE1+{m)I90^j3p7nVq}P?sp7vvU1GD5WuTl z=7bu!J}!)ZEWf;m_}PXlK5YJqo4G%t8u@pQ&%9IlClmRv$r^0OE(dH)Aec}^$+z~n zv))I_W>I}nU1!~z5klAZik`6Xh&(tMJtnt!MxYIKcQ0|Av^|$!VjBs^6C- zV#J*e^33djO`<-R)90m#?LnlPL?jGyc7>0H^+gYpn%s0dZZx*po5(Xfsjj0@|N^EhqwP#)t&8gV{_ zG-W|41r|Ht8>4}vpc1f1cbqe@3!9b#MIy?u>b^fcq19|(zJ#aQDtgmEtn4)Ri+0O+ zxF&^-K8WoT29OL@kI}3~fh+_RdA^M~@LoO8*U4c?&OlOaj9G50(Lr1Oa*ojH?ExI=k z#5b~p{&veq;kbEWkqqjHpfc$1uP25p_p@_5?pn7FAfB*KkOBzugz)8=;*Dj9_U$6L z(ZFghD^gx@)rx!NnKwiK1j!IPx1c}9>B&N={N*Eu*#R*s5mz}FmHI! zHtWF6qBGx!&ZVx$^!v_RC!TDY5@L4%4g+^+hAk)#@dP=o&nY4yMTa; z1V8)c57!f|){SBsZqI@*z*mN6mDhXE3Op-{%<>DMGOIh7aODGVgbg|m-$J!FTfwZdh?VEr=GOq$8tv($+( zs?mLTfV*l=^6d*ID>e2|&wCD*UEy!Ii|L6SB)0vm1u%s48_N|_^8(}4-f`DzJiD~i zep+|wh}5)16uU7lFDp~4t|Zd65s&1yi7X)3^R*Wel`h7A%6?T1HKS!u&EjT==2YKQ zPFkT@!oZr_SJhkfnuD6E*I|KScutyoqM~?lgcLwMOJI3iPJku@^abL{YuU2Rcx)czH0vEjPaeeMCF72HLA_iA}I8a>7X)jBeIxC zO!RKSowBPNzWsi1fK#bDYtC>4(fcJH0N@!wERakN9x=vUv*Gtuyz|fn?glW%sG&_| z`4Q&_x~n1Cg=Hp2tVo7o)$zeE6HP{;^+8Kv4a4jz#r_SaJkCR%FOpD+P4mtgA~$6iHO5nhdbCJ;--+RD{O|E3~L_L-2W-Vw6aVi#$u z6M>Sc7wVYlON~S|Hft?d`yZA@%|DSa6Xs-X_K2~&*W_bhI+~Kt{6{}SN}`9?X#Qr4 zZK$!Fuk2c_{ENthCn_*=H!aI$qEnQ;>=q%{-XCR7bvh*Opm+;M*a$)MeOSHN5PVAU ztEKMiW=+CDmnrLcw_aSg6Zd(}uNAii`3omrz|?rSxHq865%qSBB1Qg#KtFSa)k&xA^k?#{-kSQjry}7C??&D>@Q_phsRg1pJy8D zTFsUgsE0o_;+t;q)TlWlE1$KLH*W%sZ9fLw(%h%nrn$%Ry%zAF zj9;MbJlE3Xqfmfz+HZ40 ze(9DU-k7u?5wAS&So!nZ^hRIeTcxAjP>8dz)Qi6ooSTlXtz<`-(Drx)KJ~~>m0oRd z!@JU(_Mif~0sC5npKJ9J^6oND7HVS)mG||5=)w&S96xZ--KxYJEhGdmcq)VNx zubLQ@f5|{XBC`L^9vUi!W|B0us88=oTqdKG!#C7U7JPL>+AxlRWEn`a9W^|c;k81s z@?*LlNJ^kL8%UM@2wl3;PpbKHJ_dQ#BhNbSVrfUC2amUGURFC2LV>Atddw-dYJ5#X zpol242-i(kqQ}T}{L*t}kkB;72kPw@*KoKE9k#V2nzK`pUPCfR4lDc|xAF_;OuLE^Pxg35tcaG@37IN5EconJ?~h zG7FXV5?rz~g{&FM{qiv;y+QYFP4Y&~;+F=&>Hq1J_v*hmagS`rUYTViVNQr`oTNYe zMRaS3M!~g5`6lxd$l|@&l5WyCejY2yW|8dCTohcvLq10i{MzyGJNjmny zr75}9*gxJFI}&^sOZTYjV{$3ek3s5tHgp{ZUU7~6pe|Ig9Anwy!6(?|t-m&;>y+c4 zzGC<;scC6I_v#lK%;)4FOi zW%A*7L-G5xioNr88EQW9L^n8d8hc@5kDH?S;fky5dn?;foLk7<^cf-O6AKKa@ zhS3P>2}QJU=!uY-b?wSX3r+m2J7vT^d(ko?1aEkW`HI5C8;hG|?*bL6bWBE}wTH2| zPPPcYyc{~>5KDusyev*)^Uh^$HJ#2#A-qqW=xLckJ@0g;ZXM;-&JMg%BOFbHj4Q8q ze{8apued`97qT98E;!o;hB^?a+Qw(f?%+tDO4b$@^W-a&{q6OY?L{do(II>J)-{*O z>x9jH=;{8cu~Rn%Yt=Z?;Ouy@GlM_%DroyY3n{AM=gSG*#x=0wmP4~W_9OFU z6W$Na#9YbM4C8|J(U9bf8r2;`kx`DKlCtkZWXkAJIo_tHX!1#ghw|KS`IBKa9!iVf ziYDKLa&Odd80zwMu!xMMFv!*sl- xI+Jnd#Gtm(_dAWs_S?IfCf+&w?%RStzB7B`;(PipkNDeXfkJuk!=JG_{|Z=5DD40M literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/conquer.png b/core/assets-raw/sprites/units/conquer.png new file mode 100644 index 0000000000000000000000000000000000000000..08e61695848b106760e2d2b737f2137534b39c1d GIT binary patch literal 3709 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 KO+Dl){=WbLF9fat literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index d0daac7835..644e336282 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -616,6 +616,7 @@ sectors.rename = Rename Sector sectors.enemybase = [scarlet]Enemy Base sectors.vulnerable = [scarlet]Vulnerable sectors.underattack = [scarlet]Under attack! [accent]{0}% damaged +sectors.underattack.nodamage = [scarlet]Under attack! sectors.survives = [accent]Survives {0} waves sectors.go = Go sector.curcapture = Sector Captured @@ -626,6 +627,9 @@ sector.lost = Sector [accent]{0}[white] lost! #note: the missing space in the line below is intentional sector.captured = Sector [accent]{0}[white]captured! sector.changeicon = Change Icon +sector.noswitch.title = Unable to Switch Sectors +sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[] +sector.view = View Sector threat.low = Low threat.medium = Medium @@ -1590,8 +1594,8 @@ block.core-foundation.description = Core of the base. Well armored. Stores more block.core-foundation.details = The second iteration. block.core-nucleus.description = Core of the base. Extremely well armored. Stores massive amounts of resources. block.core-nucleus.details = The third and final iteration. -block.vault.description = Stores a large amount of items of each type. Contents can be retrieved with an unloader. -block.container.description = Stores a small amount of items of each type. Contents can be retrieved with an unloader. +block.vault.description = Stores a large amount of items of each type. Expands storage when placed next to a core. Contents can be retrieved with an unloader. +block.container.description = Stores a small amount of items of each type. Expands storage when placed next to a core. Contents can be retrieved with an unloader. block.unloader.description = Unloads the selected item from nearby blocks. block.launch-pad.description = Launches batches of items to selected sectors. block.launch-pad.details = Sub-orbital system for point-to-point transportation of resources. Payload pods are fragile and incapable of surviving re-entry. diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 0324fd80be..42fe36b87d 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -100,6 +100,8 @@ public class Planets{ new HexSkyMesh(this, 1, 0.6f, 0.16f, 5, Color.white.cpy().lerp(Pal.spore, 0.55f).a(0.75f), 2, 0.45f, 1f, 0.41f) ); + allowWaveSimulation = true; + allowSectorInvasion = true; allowLaunchSchematics = true; atmosphereColor = Color.valueOf("3c1b8f"); atmosphereRadIn = 0.02f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index f21de9f30e..99befc6099 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2435,7 +2435,7 @@ public class UnitTypes{ speed = 0.6f; health = 9000; armor = 20f; - areaDamage = 10f; + areaDamage = 12f; treadRect = new Rect(22f, 16f, 28f, 130f); weapons.add(new Weapon("vanquish-weapon"){{ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 2da3ea9b4b..bf77ed5fc7 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -64,25 +64,28 @@ public class Logic implements ApplicationListener{ SectorInfo info = state.rules.sector.info; info.write(); - //how much wave time has passed - int wavesPassed = info.wavesPassed; + //only simulate waves if the planet allows it + if(state.rules.sector.planet.allowWaveSimulation){ + //how much wave time has passed + int wavesPassed = info.wavesPassed; - //wave has passed, remove all enemies, they are assumed to be dead - if(wavesPassed > 0){ - Groups.unit.each(u -> { - if(u.team == state.rules.waveTeam){ - u.remove(); - } - }); - } + //wave has passed, remove all enemies, they are assumed to be dead + if(wavesPassed > 0){ + Groups.unit.each(u -> { + if(u.team == state.rules.waveTeam){ + u.remove(); + } + }); + } - //simulate passing of waves - if(wavesPassed > 0){ - //simulate wave counter moving forward - state.wave += wavesPassed; - state.wavetime = state.rules.waveSpacing; + //simulate passing of waves + if(wavesPassed > 0){ + //simulate wave counter moving forward + state.wave += wavesPassed; + state.wavetime = state.rules.waveSpacing; - SectorDamage.applyCalculatedDamage(); + SectorDamage.applyCalculatedDamage(); + } } //reset values diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 0900558353..c686d97b1a 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -204,7 +204,9 @@ public class SectorInfo{ state.rules.sector.saveInfo(); } - SectorDamage.writeParameters(this); + if(state.rules.sector != null && state.rules.sector.planet.allowWaveSimulation){ + SectorDamage.writeParameters(this); + } } /** Update averages of various stats, updates some special sector logic. diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index ec6124f861..39adf83536 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -194,7 +194,7 @@ public class Universe{ } int wavesPassed = (int)(sector.info.secondsPassed*60f / sector.info.waveSpacing); - boolean attacked = sector.info.waves; + boolean attacked = sector.info.waves && sector.planet.allowWaveSimulation; if(attacked){ sector.info.wavesPassed = wavesPassed; @@ -243,7 +243,7 @@ public class Universe{ } //queue random invasions - if(!sector.isAttacked() && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){ + if(!sector.isAttacked() && sector.planet.allowSectorInvasion && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){ int count = sector.near().count(Sector::hasEnemyBase); //invasion chance depends on # of nearby bases diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index ae2d8de0db..7864cca54e 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -90,6 +90,10 @@ public class Planet extends UnlockableContent{ public boolean hasAtmosphere = true; /** Whether to allow users to specify a custom launch schematic for this map. */ public boolean allowLaunchSchematics = false; + /** Whether to allow sectors to simulate waves in the background. */ + public boolean allowWaveSimulation = false; + /** Whether to simulate sector invasions from enemy bases. */ + public boolean allowSectorInvasion = false; /** Parent body that this planet orbits around. If null, this planet is considered to be in the middle of the solar system.*/ public @Nullable Planet parent; /** The root parent of the whole solar system this planet is in. */ diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 7bbc93044f..52b2fc6382 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -412,13 +412,14 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(state.uiAlpha > 0.001f){ for(Sector sec : planet.sectors){ if(sec.hasBase()){ - for(Sector enemy : sec.near()){ - if(enemy.hasEnemyBase()){ - planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25); + if(planet.allowSectorInvasion){ + for(Sector enemy : sec.near()){ + if(enemy.hasEnemyBase()){ + planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25); + } } } - if(selected != null && selected != sec && selected.hasBase()){ //imports if(sec.info.getRealDestination() == selected && sec.info.anyExports()){ @@ -889,10 +890,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ void addSurvivedInfo(Sector sector, Table table, boolean wrap){ if(!wrap){ - table.add(Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100))).wrapLabel(wrap).row(); + table.add(sector.planet.allowWaveSimulation ? Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100)) : "@sectors.underattack.nodamage").wrapLabel(wrap).row(); } - if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){ + if(sector.planet.allowWaveSimulation && sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){ int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed); boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1; table.add(Core.bundle.format("sectors.survives", Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture <= 0 ? 200 : toCapture) + @@ -1019,7 +1020,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(sector.isAttacked()){ addSurvivedInfo(sector, stable, false); - }else if(sector.hasBase() && sector.near().contains(Sector::hasEnemyBase)){ + }else if(sector.hasBase() && sector.planet.allowSectorInvasion && sector.near().contains(Sector::hasEnemyBase)){ stable.add("@sectors.vulnerable"); stable.row(); }else if(!sector.hasBase() && sector.hasEnemyBase()){ @@ -1073,6 +1074,33 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ return; } + //make sure there are no under-attack sectors (other than this one) + //TODO abandon button? + for(Planet planet : content.planets()){ + if(!planet.allowWaveSimulation){ + int attackedCount = planet.sectors.count(s -> s.isAttacked() && s != sector); + + //if there are two or more attacked sectors... something went wrong, don't show the dialog to prevent softlock + if(attackedCount < 2){ + Sector attacked = planet.sectors.find(s -> s.isAttacked() && s != sector); + if(attacked != null){ + BaseDialog dialog = new BaseDialog("@sector.noswitch.title"); + dialog.cont.add(bundle.format("sector.noswitch", attacked.name(), attacked.planet.localizedName)).maxWidth(400f).labelAlign(Align.center).center().wrap(); + dialog.addCloseButton(); + dialog.buttons.button("@sector.view", Icon.eyeSmall, () -> { + dialog.hide(); + lookAt(attacked); + selected = attacked; + updateSelected(); + }); + dialog.show(); + + return; + } + } + } + } + boolean shouldHide = true; //save before launch.