From 5689a55e54d51241297d5bb5c03aace80b5d47e9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 26 Feb 2022 22:49:30 -0500 Subject: [PATCH] Payload cleanup / Reconstructor implementation --- .../blocks/payload/constructor-out.png | Bin 565 -> 0 bytes .../blocks/payload/factory-in-3-dark.png | Bin 0 -> 570 bytes ...nstructor-in.png => factory-in-5-dark.png} | Bin .../blocks/payload/factory-out-3-dark.png | Bin 0 -> 543 bytes ...tructor-out.png => factory-out-5-dark.png} | Bin .../blocks/payload/payload-loader-in.png | Bin 599 -> 0 bytes .../blocks/payload/payload-loader-out.png | Bin 565 -> 0 bytes .../blocks/payload/payload-mass-driver-in.png | Bin 599 -> 0 bytes .../payload/payload-mass-driver-out.png | Bin 565 -> 0 bytes .../blocks/payload/payload-unloader-in.png | Bin 599 -> 0 bytes .../blocks/payload/payload-unloader-out.png | Bin 565 -> 0 bytes .../blocks/payload/small-deconstructor-in.png | Bin 599 -> 0 bytes .../units/basic-assembler-module-in.png | Bin 599 -> 0 bytes .../units/basic-asssembler-module-out.png | Bin 565 -> 0 bytes .../sprites/blocks/units/fabricator-out.png | Bin 565 -> 0 bytes .../blocks/units/mech-assembler-in.png | Bin 1166 -> 0 bytes .../blocks/units/mech-reconstructor-top.png | Bin 0 -> 2664 bytes .../blocks/units/mech-reconstructor.png | Bin 0 -> 1427 bytes .../blocks/units/ship-assembler-in.png | Bin 1166 -> 0 bytes .../blocks/units/tank-assembler-in.png | Bin 1166 -> 0 bytes .../blocks/units/tank-reconstructor-top.png | Bin 0 -> 2664 bytes .../blocks/units/tank-reconstructor.png | Bin 0 -> 1427 bytes core/assets-raw/sprites/units/avert-cell.png | Bin 0 -> 460 bytes core/assets-raw/sprites/units/latum.png | Bin 1414 -> 1422 bytes core/assets-raw/sprites/units/stell.png | Bin 1059 -> 1059 bytes .../sprites/units/weapons/stell-weapon.png | Bin 707 -> 710 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 4191 -> 4211 bytes core/src/mindustry/content/Blocks.java | 51 +++++++++++++++++- core/src/mindustry/content/Fx.java | 13 ++++- core/src/mindustry/content/Items.java | 2 +- core/src/mindustry/content/UnitTypes.java | 24 +++++---- .../world/blocks/payloads/PayloadBlock.java | 22 +++++--- 33 files changed, 93 insertions(+), 20 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/payload/constructor-out.png create mode 100644 core/assets-raw/sprites/blocks/payload/factory-in-3-dark.png rename core/assets-raw/sprites/blocks/payload/{deconstructor-in.png => factory-in-5-dark.png} (100%) create mode 100644 core/assets-raw/sprites/blocks/payload/factory-out-3-dark.png rename core/assets-raw/sprites/blocks/payload/{large-constructor-out.png => factory-out-5-dark.png} (100%) delete mode 100644 core/assets-raw/sprites/blocks/payload/payload-loader-in.png delete mode 100644 core/assets-raw/sprites/blocks/payload/payload-loader-out.png delete mode 100644 core/assets-raw/sprites/blocks/payload/payload-mass-driver-in.png delete mode 100644 core/assets-raw/sprites/blocks/payload/payload-mass-driver-out.png delete mode 100644 core/assets-raw/sprites/blocks/payload/payload-unloader-in.png delete mode 100644 core/assets-raw/sprites/blocks/payload/payload-unloader-out.png delete mode 100644 core/assets-raw/sprites/blocks/payload/small-deconstructor-in.png delete mode 100644 core/assets-raw/sprites/blocks/units/basic-assembler-module-in.png delete mode 100644 core/assets-raw/sprites/blocks/units/basic-asssembler-module-out.png delete mode 100644 core/assets-raw/sprites/blocks/units/fabricator-out.png delete mode 100644 core/assets-raw/sprites/blocks/units/mech-assembler-in.png create mode 100644 core/assets-raw/sprites/blocks/units/mech-reconstructor-top.png create mode 100644 core/assets-raw/sprites/blocks/units/mech-reconstructor.png delete mode 100644 core/assets-raw/sprites/blocks/units/ship-assembler-in.png delete mode 100644 core/assets-raw/sprites/blocks/units/tank-assembler-in.png create mode 100644 core/assets-raw/sprites/blocks/units/tank-reconstructor-top.png create mode 100644 core/assets-raw/sprites/blocks/units/tank-reconstructor.png create mode 100644 core/assets-raw/sprites/units/avert-cell.png diff --git a/core/assets-raw/sprites/blocks/payload/constructor-out.png b/core/assets-raw/sprites/blocks/payload/constructor-out.png deleted file mode 100644 index afb61bf138431a4132364abfe10ab922cac804a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1&(N z#WAE}&fB|=euo`++#brG3+$9W&=$Pq^u7AVE7em%RYNXz+I~AS?bAL}!4v%~D~(fB z7#JEBTgI>ZzWtT_qZQ|-zmA>65%9pUrjud!Z)*@)CAZI|;qD)E5WB*(rjy}xZ=1eg z!pgM|y;&lT8P#+$ct^DB3o6V_{~^Q}R0(39J@Y}8X~_)PeJ%|fPJB>hYH?}T7fgsc z24WVltNi}+tBn6k$uExD^WQIAz3}#%@UD3boJxWm6H?5W7=_NdC^#79voPsA=yYgs zT_eb`VS*|XquA{(hlV5;4L3MZ_Tp>9#pnOe&;NYB?#8yQaR+1*Og4W=+S$gyH;?1m zdew%>sT<}6uv8>|IU~<|~U(~ zUHmZJW)_FR16jMz2^@wFk{_`iID;jijL zvH?8|M>!D028r82TpM+l3ZPII-t01D6mk)J%PAmo*YIGK1A~5!))DQ~QV;kt8m@<# z9q5jhesJ|D?}tzC*eYsknPnbaU~r#dazN3Jx1cAKS?0+#26sub1Bvr^3+Ci9%e=Vb kaIK1ose^&RVPX8as+o;3O2k44ofy`glX=O&!1%?} z#WAE}&f7a@eGfZ`xIPr`Hqu$jd?SEWXXRwokcqq{0w-$^unDLfoA=##ANTxxRt=|% z)|)n}H=ku-XgGHG@#Xekwr_4GxUnpK_?ufPgJ=JK#Y5lPPRk1y2N;x)WHR_u zb(T@0PTrSMqRxIbqeNYNH={&d{TkLzL5CiOB&gA0}LSB@Pr z1z%r(U-wePrKN7xe>Q=I{MY3l?p&xh_jBilbG4!_Em5h{7rJz4?&VMTdZl05aN{M0 zIaz;BG3oHm55D~0Yui$TKRdo`6KR`&IX9Z?aQ@{~5E;HtxAoy~oqzQXrwt|Gw2R8Po{c`7kmt?Eb=;qB}jpu(YO+fq{X+)78&qol`;+ E02o~HxBvhE literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/payload/deconstructor-in.png b/core/assets-raw/sprites/blocks/payload/factory-in-5-dark.png similarity index 100% rename from core/assets-raw/sprites/blocks/payload/deconstructor-in.png rename to core/assets-raw/sprites/blocks/payload/factory-in-5-dark.png diff --git a/core/assets-raw/sprites/blocks/payload/factory-out-3-dark.png b/core/assets-raw/sprites/blocks/payload/factory-out-3-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a9f9c5b31b45c1ec7a7cf269b282dc0ab42ee9 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&zr6yLM@we*@D@4i*ieUWW#!i5x5%W>Sp|!aXhu2UPY7au@{qvoQH= z6K`ZlLo#f$^Lq9z_x|7CcV51Bb8i0LhH8i9Ck}a^&*d;kP;q*HT__>oe1f}^;Dg3% zru$7FT=W)YlyXyckyGc`pj_qu!nJ|#=3IVV76WC6_Ac+U$}Bf7O4S`*+R4DX_;7l( z*TNU^cDIAnUP~I>4pNhp)VUqh<+|>@?RLvARR_YJ{AaG(BImz@eTLwH9)zO|ByR`x z+?bYhWSfZcwxtpqb&q!BYPwx4O=c1~p>s=EL34L<)7J(TyA3Bh`1Ag%gF}P~VuTH^ z?}O3k44ofy`glX=O&z$EDD z;uumf=k1-nzRZCFt`A>}rmlIyr?8NVW94LlRSJ!KI=S)_7?`T}zE4lP$5OqIL%`{U z+|7!&?Wzn66COYO_|o`y`Hjt0mOK4(^XGUH#JQ_II?pY;V2*K{)o3A#n`DhMV{ zSDxO@Ilbp&FPG{a50cnF|7Qf( zes2^xmcRMue@4^fPk;9FiYJ}qn9#!jBXW!x&gUH~wx8Byrg%IkK>tky*Q*)*OAj1- z8o~9e)RsrJY5u#{3`#!?Vmky6p8Heh__^i@?`)om)0$h)VtCyD sRiEK;|99zzkCQ(naWOF5SgQZx(^|V78@5kpU|?YIboFyt=akR{0ETD;@Bjb+ diff --git a/core/assets-raw/sprites/blocks/payload/payload-loader-out.png b/core/assets-raw/sprites/blocks/payload/payload-loader-out.png deleted file mode 100644 index afb61bf138431a4132364abfe10ab922cac804a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1&(N z#WAE}&fB|=euo`++#brG3+$9W&=$Pq^u7AVE7em%RYNXz+I~AS?bAL}!4v%~D~(fB z7#JEBTgI>ZzWtT_qZQ|-zmA>65%9pUrjud!Z)*@)CAZI|;qD)E5WB*(rjy}xZ=1eg z!pgM|y;&lT8P#+$ct^DB3o6V_{~^Q}R0(39J@Y}8X~_)PeJ%|fPJB>hYH?}T7fgsc z24WVltNi}+tBn6k$uExD^WQIAz3}#%@UD3boJxWm6H?5W7=_NdC^#79voPsA=yYgs zT_eb`VS*|XquA{(hlV5;4L3MZ_Tp>9#pnOe&;NYB?#8yQaR+1*Og4W=+S$gyH;?1m zdew%>sT<}6uv8>|IU~<|~U(~ zUHmZJW)_FR16jMz2^@wFk{_`iID;jijL zvH?8|M>!D028r82TpM+l3ZPII-t01D6mk)J%PAmo*YIGK1A~5!))DQ~QV;kt8m@<# z9q5jhesJ|D?}tzC*eYsknPnbaU~r#dazN3Jx1cAKS?0+#26sub1Bvr^3+Ci9%e=Vb kaIK1ose^&RVPX8as+o;3O2k44ofy`glX=O&z$EDD z;uumf=k1-nzRZCFt`A>}rmlIyr?8NVW94LlRSJ!KI=S)_7?`T}zE4lP$5OqIL%`{U z+|7!&?Wzn66COYO_|o`y`Hjt0mOK4(^XGUH#JQ_II?pY;V2*K{)o3A#n`DhMV{ zSDxO@Ilbp&FPG{a50cnF|7Qf( zes2^xmcRMue@4^fPk;9FiYJ}qn9#!jBXW!x&gUH~wx8Byrg%IkK>tky*Q*)*OAj1- z8o~9e)RsrJY5u#{3`#!?Vmky6p8Heh__^i@?`)om)0$h)VtCyD sRiEK;|99zzkCQ(naWOF5SgQZx(^|V78@5kpU|?YIboFyt=akR{0ETD;@Bjb+ diff --git a/core/assets-raw/sprites/blocks/payload/payload-mass-driver-out.png b/core/assets-raw/sprites/blocks/payload/payload-mass-driver-out.png deleted file mode 100644 index afb61bf138431a4132364abfe10ab922cac804a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1&(N z#WAE}&fB|=euo`++#brG3+$9W&=$Pq^u7AVE7em%RYNXz+I~AS?bAL}!4v%~D~(fB z7#JEBTgI>ZzWtT_qZQ|-zmA>65%9pUrjud!Z)*@)CAZI|;qD)E5WB*(rjy}xZ=1eg z!pgM|y;&lT8P#+$ct^DB3o6V_{~^Q}R0(39J@Y}8X~_)PeJ%|fPJB>hYH?}T7fgsc z24WVltNi}+tBn6k$uExD^WQIAz3}#%@UD3boJxWm6H?5W7=_NdC^#79voPsA=yYgs zT_eb`VS*|XquA{(hlV5;4L3MZ_Tp>9#pnOe&;NYB?#8yQaR+1*Og4W=+S$gyH;?1m zdew%>sT<}6uv8>|IU~<|~U(~ zUHmZJW)_FR16jMz2^@wFk{_`iID;jijL zvH?8|M>!D028r82TpM+l3ZPII-t01D6mk)J%PAmo*YIGK1A~5!))DQ~QV;kt8m@<# z9q5jhesJ|D?}tzC*eYsknPnbaU~r#dazN3Jx1cAKS?0+#26sub1Bvr^3+Ci9%e=Vb kaIK1ose^&RVPX8as+o;3O2k44ofy`glX=O&z$EDD z;uumf=k1-nzRZCFt`A>}rmlIyr?8NVW94LlRSJ!KI=S)_7?`T}zE4lP$5OqIL%`{U z+|7!&?Wzn66COYO_|o`y`Hjt0mOK4(^XGUH#JQ_II?pY;V2*K{)o3A#n`DhMV{ zSDxO@Ilbp&FPG{a50cnF|7Qf( zes2^xmcRMue@4^fPk;9FiYJ}qn9#!jBXW!x&gUH~wx8Byrg%IkK>tky*Q*)*OAj1- z8o~9e)RsrJY5u#{3`#!?Vmky6p8Heh__^i@?`)om)0$h)VtCyD sRiEK;|99zzkCQ(naWOF5SgQZx(^|V78@5kpU|?YIboFyt=akR{0ETD;@Bjb+ diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader-out.png b/core/assets-raw/sprites/blocks/payload/payload-unloader-out.png deleted file mode 100644 index afb61bf138431a4132364abfe10ab922cac804a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1&(N z#WAE}&fB|=euo`++#brG3+$9W&=$Pq^u7AVE7em%RYNXz+I~AS?bAL}!4v%~D~(fB z7#JEBTgI>ZzWtT_qZQ|-zmA>65%9pUrjud!Z)*@)CAZI|;qD)E5WB*(rjy}xZ=1eg z!pgM|y;&lT8P#+$ct^DB3o6V_{~^Q}R0(39J@Y}8X~_)PeJ%|fPJB>hYH?}T7fgsc z24WVltNi}+tBn6k$uExD^WQIAz3}#%@UD3boJxWm6H?5W7=_NdC^#79voPsA=yYgs zT_eb`VS*|XquA{(hlV5;4L3MZ_Tp>9#pnOe&;NYB?#8yQaR+1*Og4W=+S$gyH;?1m zdew%>sT<}6uv8>|IU~<|~U(~ zUHmZJW)_FR16jMz2^@wFk{_`iID;jijL zvH?8|M>!D028r82TpM+l3ZPII-t01D6mk)J%PAmo*YIGK1A~5!))DQ~QV;kt8m@<# z9q5jhesJ|D?}tzC*eYsknPnbaU~r#dazN3Jx1cAKS?0+#26sub1Bvr^3+Ci9%e=Vb kaIK1ose^&RVPX8as+o;3O2k44ofy`glX=O&z$EDD z;uumf=k1-nzRZCFt`A>}rmlIyr?8NVW94LlRSJ!KI=S)_7?`T}zE4lP$5OqIL%`{U z+|7!&?Wzn66COYO_|o`y`Hjt0mOK4(^XGUH#JQ_II?pY;V2*K{)o3A#n`DhMV{ zSDxO@Ilbp&FPG{a50cnF|7Qf( zes2^xmcRMue@4^fPk;9FiYJ}qn9#!jBXW!x&gUH~wx8Byrg%IkK>tky*Q*)*OAj1- z8o~9e)RsrJY5u#{3`#!?Vmky6p8Heh__^i@?`)om)0$h)VtCyD sRiEK;|99zzkCQ(naWOF5SgQZx(^|V78@5kpU|?YIboFyt=akR{0ETD;@Bjb+ diff --git a/core/assets-raw/sprites/blocks/units/basic-assembler-module-in.png b/core/assets-raw/sprites/blocks/units/basic-assembler-module-in.png deleted file mode 100644 index f8427f0ba98993527d66ff96c50fbbe399178ba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z$EDD z;uumf=k1-nzRZCFt`A>}rmlIyr?8NVW94LlRSJ!KI=S)_7?`T}zE4lP$5OqIL%`{U z+|7!&?Wzn66COYO_|o`y`Hjt0mOK4(^XGUH#JQ_II?pY;V2*K{)o3A#n`DhMV{ zSDxO@Ilbp&FPG{a50cnF|7Qf( zes2^xmcRMue@4^fPk;9FiYJ}qn9#!jBXW!x&gUH~wx8Byrg%IkK>tky*Q*)*OAj1- z8o~9e)RsrJY5u#{3`#!?Vmky6p8Heh__^i@?`)om)0$h)VtCyD sRiEK;|99zzkCQ(naWOF5SgQZx(^|V78@5kpU|?YIboFyt=akR{0ETD;@Bjb+ diff --git a/core/assets-raw/sprites/blocks/units/basic-asssembler-module-out.png b/core/assets-raw/sprites/blocks/units/basic-asssembler-module-out.png deleted file mode 100644 index afb61bf138431a4132364abfe10ab922cac804a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 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 a4_?WC*?OgH*2c_ukcg+NpUXO@geCw-{Nl6# diff --git a/core/assets-raw/sprites/blocks/units/mech-reconstructor-top.png b/core/assets-raw/sprites/blocks/units/mech-reconstructor-top.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdd4951b611d0dd56bcbcc95aa7880adc5f134e GIT binary patch literal 2664 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^TM^gUf1Ln;{G&av%?36*He zj|qy<*rdpE(9KswJce6vE4Rj?&Zrd%9UWaP+Jd(g{J5e;rH=-&N{jwE>U8j&{Dwe} z3A{Hr7Bz~xcr1>rbi4QU%}LAWzt8P`es5-PWx|Y|#_#7^KCgZD{oLHh%4aukUK94W zGu{1tANwphyMHhK3g2Zt@;ZOd-mANm*X5_)-&ebN|M|CXzrByojS>&9Tj;Ui&$6d1 zYh-ri7fE~W)4jg1oo zr+Dp*(sS&q(KHs_`n3IV65knBoAqqL3`KEVO#Ra)zc|rpN40^&qXQ= zLw_Es(wY?l@$8hAke^DbihA)&RJQ2JvvEJ*o;|Ifi9_|tDe;9ZK|hs19&Zskrg8ss zQ@$Njf)3}N2StCyJbt|Tkr*yE;lppncsb7V^7YGJz1_<0|MP(mL$b$%yL?ZJ{;J09 zTwIblYxnw>yUy2n#fyD2TJb5}(%MI{p0RdtA*+ zLry*2!fN>`Y+c)&7R9ICb6Qe0<{O@4Wmp=dw_Nwc#O+0=KR1L8a1iCpO1vtp=rvvla`zU@2ikO`_+Dxgr5- zON(xCS6<`(T=-K-b>Vr7)vOL0isAb>RF|9*x8$rX3vX;uys!R6jKSu3u-&WVbI~6!oU6f+dD${>Ry}9U(1!HBD4F`{k_Ip81>z| zd8?aQ9sHV3iOX@WEo=6CIB~%zS3jrjPYXL4I#iE5?Vi+Pcv@VQv+$?Vv z^f-{5Z63lacF*Q!Uio*!1s86;j-A19YRy!Kd0(^CEm`O7U7zfA|3an27Y>F~OG5mr z70*}Q`y-;Ws76AEL1S`|<=a-9*Oi}>H?079e1VVG(=Fnk);vGke^BXkdm2-Nk>=FP za&cC>mtS9}vo=9o_-*dP)EC8dKEaFyM`QWVulxTv+)r#_%|Si=n#0SUYA&d`+ZTRl zb9~8X-oB{ytiG%-tgp!H+h3Tf((<%hQ?=zOw>Q&M=KBnru1>$Ko1x|a%9J5Llejon zesTrHg|4cJpulwfB+jLuj?NJBdfFY~6tgcwHE}~j%ugpFo2T7|Dh7Vp{bq`sJ3qN{ zb2hUWX!0&&5xQ}EVcRsJ8}gmE*Wcv*v^KxiUO-Z7;dTb!tkV08o5S}VdmPKRbk;+L zPiw^Igz`SV;uXjFrvC`H?$fNhGTGVe&wmSkeCnqcyl8quMUX1zl=X~=NJ&0a$mPxS zR6E;qLCwK)F|{fo+$VgsR26lQBF;5yj*_~fPW%&)FYSa@u|!Pf0wwM#o-3oiIn4WN zbMumgtBzvmz7CM+R-rpgdnP+Mt%OG8`nx5~JKuKbcOJXJ8wB#R6sI2JyicxY^IA=X z=I#D+|9a3i(~W06w~IUd)Y-hfHQecJ#YBglciLDj&u2GjE?D-*?)Uc!l@&D;CoTBY z>h3iEW02OVWs}x))>YCD`_>|jgX^if41$Voto?J6_)d+fRIJI7J%7sO6UB_pBX3<$yb8vm0 zoPBov`~YsDb1{4E>J`_wG z(VTlf7G^om7mv%RJh=7KvWAVPt{>3hoU(q6JJVC`d{7j&Ioh>n>|~YWT-I={`O!Ri ze?3slO##K+oR$qWhHWgb0}WO-g#1*RHbE_YKpw);O*_<9b^4 z#6k44ofy`glX=O&!0PMi z;uumf=k46Rej$z`$Iq_|2)L2Zp?LF1+Qu6!((w*UnUfX2m5EH4!RvoOSU^hmO%2oI zW0%&8ZB<+ch3E_Z~gmC z*IzrGycH!k>CoQ)v1L0M7;YVY>}+ARNYtQx#k1vYXP25WIII+~;L(wFy8S0mipB4- zSDQij-}4`S2rw`dec^Pxak}#I zuuxHmU}P|1ZWM~=V)43hN8njaeA};<#fu+)H8p&-ZjI8Wvc>uGbrTOcJ{Q!y@!<0D z7umbDS9|_#-^?blGmGh3jj(vw6a&l4-np7h3^|X&Hb-}&M(|H^()hP3{BnUsLI%72d>gsP9C69VmU#=9Gx^ma5!gorC3YWO| z8gH}Yy2cRC@^#jO(-mjF$0W}3;TKN#*)M#TeMgGIku;v*29eLRefpK--A*zvFx1uj z@7ZOyjA2e|j*{)VKdSa^`>LxQxQ=IT2&r0pk#pyKL$6hgA)oUn2OZpG;;6Mtq+tUx z+QYC*d-c8PUbn4lzw!9au6f)rp`JmG;cB@J*THoYe!AKHU&D~IewOH=9Z6@+i+-9j z9{4^lUNMFuO8 z$nt+T6{e)sE&rVGCO$7wQD)8EKe4SB*ce{#Ijz+qbhiKJn#`k4D`w@VC~Vocr|RY0 zufN`W{h`$U>e2I{GwZd!=WsWCw7Hu9Y*&5hLhHnns`CxYce?l*96I-aO~H=U)8T-G zHe+Lwox`Ez3_lJL=VGS?v-k~IA2*07tIl2=AZ$hCtM7>DklQ zE&TG}f0_Q}4^~nR|9mrI(e)MN8zxJKe7mKY>o(`?i=eaY8}emRqb6PZ zb?n*KxA|Fz4s5&_m}%-5H05RIGPRJ|9}OAy9dP4nv@;h;xU~P#amMYjTn-Uv=-S!c zv6l=FOkGjzocqtx{Cyv1j*0g(=|sgHe?I5kljY(unEg!psMCj^&)+h)9dFO7b5P_s zxm#`3tf@=_(~wY@P($P`#iL8F+`N9$`gz{_FP@JZ1#I3Kx(UB5^r=nHY}#O|_^j&O zt*b6o{`2gXr=|Pk)H>ua8n8ZXxZqNC+q!m}vrZF(!STWtE(b#sRwv-Up{=UyM$e^=W+*H$0b|>22}o+KM>gE>?yE u$uXYKq(c=&co`JV9uPWfZY1!JG34)KsYUBI{AXZbVDNPHb6Mw<&;$U0B9GPp literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-assembler-in.png b/core/assets-raw/sprites/blocks/units/ship-assembler-in.png deleted file mode 100644 index d411cbd4cd4ca868a197c1a080dd4536e62b33a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z~bTQ z;uumf=k49oxwjoe+#cFHof3G!_ojFChUx2!PcP}pnZ(DlfzYqW1R za5C8`SSlyEF)@IE1E>D_eEF^C89!Tjx^z_eon}{Z;a&b(zC&Q?+-v(4oTiirFK}tm zc%IiFB)F*OEQ6|2%l^9{a{XZtIe!6&?0*0v_pShuYhQrKxl2G~?-K@9C6|3`K;*nP zAku0wh?Lq4B5f{%NSV(d(qcM@l-SOos&vHgI*7FU4kEWHF?zXl{O)4a5LC<)g&{;M0h_~?PC=@w>F~T`=e+ZJKK7JM{~MZ zc8K3MRhrXZ-LUYZZbyOMLB?ZkQ+}BX37%8YIH0;@#)6>7(E<-;_?TnbMTElgYPgkT z?&mc`E52n-6TRQWaeSH$$4>ECr6BR}YZ^bSEY|-JbFo z;P1KpLD*r%L;qClncw~0ob0}QX7s9iR2=?F>t+~Cq7vP}4* zOGm`j@0^(rBUZF;PYejX$S||y*sRQk>g`8wBzVbkm(FDMsPRY?QuwGi^`z9r=nj7O zGhrv=mF-##?y9Fa)^JP}Nmwm>>d5u^FBqbE+kX5K5lvWqP#}K)sv1%Enur}N89QgE zot$eKIPdl;j+mzcP1_R#L>U*Y%4GWU`}z0nx1Kjd2eWw8yp^(Zc$9tn0;5p;?utHEW1a|-`8dikEETa zGYZ|e*u_2J$FZbMZY3+HuIk9QNn8D-+TEij+32qN5pAbO(%17Eq8+E+IXLOZv9b!* z7U6<#&)FX}FY#jh_v>f#4~3OZ4M*Cu zU71zv)`)UX_)*|Lk)e}6`VO;--J3$*2|o&s=sG-d=9tdV$-nRnvx?mj1KtTg1WxNX zJaXom%+Sfdauc(P-IEhs6Mjt4wsd&Z+`5FJlRs<`vx;3r7uSRz3Az>zkDA*TFm&?A z@iD8|Rovp8@Z&+QvBM*0&T?iIyD3G&3Lh6P(PtEr_xjB<;YYyH)30y4zbyt801ONa a4_?WC*?OgH*2c_ukcg+NpUXO@geCw-{Nl6# diff --git a/core/assets-raw/sprites/blocks/units/tank-assembler-in.png b/core/assets-raw/sprites/blocks/units/tank-assembler-in.png deleted file mode 100644 index d411cbd4cd4ca868a197c1a080dd4536e62b33a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z~bTQ z;uumf=k49oxwjoe+#cFHof3G!_ojFChUx2!PcP}pnZ(DlfzYqW1R za5C8`SSlyEF)@IE1E>D_eEF^C89!Tjx^z_eon}{Z;a&b(zC&Q?+-v(4oTiirFK}tm zc%IiFB)F*OEQ6|2%l^9{a{XZtIe!6&?0*0v_pShuYhQrKxl2G~?-K@9C6|3`K;*nP zAku0wh?Lq4B5f{%NSV(d(qcM@l-SOos&vHgI*7FU4kEWHF?zXl{O)4a5LC<)g&{;M0h_~?PC=@w>F~T`=e+ZJKK7JM{~MZ zc8K3MRhrXZ-LUYZZbyOMLB?ZkQ+}BX37%8YIH0;@#)6>7(E<-;_?TnbMTElgYPgkT z?&mc`E52n-6TRQWaeSH$$4>ECr6BR}YZ^bSEY|-JbFo z;P1KpLD*r%L;qClncw~0ob0}QX7s9iR2=?F>t+~Cq7vP}4* zOGm`j@0^(rBUZF;PYejX$S||y*sRQk>g`8wBzVbkm(FDMsPRY?QuwGi^`z9r=nj7O zGhrv=mF-##?y9Fa)^JP}Nmwm>>d5u^FBqbE+kX5K5lvWqP#}K)sv1%Enur}N89QgE zot$eKIPdl;j+mzcP1_R#L>U*Y%4GWU`}z0nx1Kjd2eWw8yp^(Zc$9tn0;5p;?utHEW1a|-`8dikEETa zGYZ|e*u_2J$FZbMZY3+HuIk9QNn8D-+TEij+32qN5pAbO(%17Eq8+E+IXLOZv9b!* z7U6<#&)FX}FY#jh_v>f#4~3OZ4M*Cu zU71zv)`)UX_)*|Lk)e}6`VO;--J3$*2|o&s=sG-d=9tdV$-nRnvx?mj1KtTg1WxNX zJaXom%+Sfdauc(P-IEhs6Mjt4wsd&Z+`5FJlRs<`vx;3r7uSRz3Az>zkDA*TFm&?A z@iD8|Rovp8@Z&+QvBM*0&T?iIyD3G&3Lh6P(PtEr_xjB<;YYyH)30y4zbyt801ONa a4_?WC*?OgH*2c_ukcg+NpUXO@geCw-{Nl6# diff --git a/core/assets-raw/sprites/blocks/units/tank-reconstructor-top.png b/core/assets-raw/sprites/blocks/units/tank-reconstructor-top.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdd4951b611d0dd56bcbcc95aa7880adc5f134e GIT binary patch literal 2664 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/avert-cell.png b/core/assets-raw/sprites/units/avert-cell.png new file mode 100644 index 0000000000000000000000000000000000000000..2eecb72f3ffdfebfa26274790181427a4374116c GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1V2I;jV_;xdY{@Lbz`(#*9OUlAuzwqgP!ex`2vD2T*{w>`( zr6yP9^o2{w2V<1Ik1br9{BVx4_p^obITud8(f%${=+1QB%!Uh>>P`qMc`rMEaZ<_L z=T|p>IsWp?>&IbF&VRo7X_k)q)*IcnK`AF~wp{7E`$#5IN@2^F@|^D{E-5Tr`u2vh z%QQAF-L=X6LXu#Y?rA$S+4bu38K?ef7S}(#sNQXK{8o@r#_M-oToWv>&HHlp=BxOJ zt1Oqam38bnG0!_HWBG~hGnRYZYcAj84P{@u)9uZjmOB^Mc3R1moV3{_u&qRYX?5-n=_=_w)_+1~%_+ z&z$>n|J~bnZ(B3Y^;>@VWr-D-+VSb6Oz*q>b`}2fzt>gd)Jrul&*zYd*JTOfeAjo^w0nb!Lvuj5P~G4zc*#q%B@MebdLJNp2>b!c!{FxkdYL`gmk- zW5l7;Pq`Qjc)Ck(?v5^JWQe|=u5~}C_GEs?_7&^S6(5vz*v^8V#U87D(BeOOj#4$HGRdircVyu+nXoNxRky! zk58_0N>6f4<*e^sjzL!&bAJW6RfSe*853`E2{s)txhc`+d^P z_1#+_xFz&V`Sy2xRiP(do(wG#H(9WX?%fq&rP{E@BQPmKX=So&$Mmbc{gM0_m%l^dl(pM z{=d1|TXa^}YSYu4KbtgL-n(?%u;dq4644S-`Lky4eaUQNv1IMgXuV8}0DW!I;7^W6 zYChguT6sxjTfTbyr2bjb=hJLUUjJI->GR2PNmam)x%J;R&JFRu`s>1jI=%R+Ijd#6 zOw->#G-iwo`5N#t$DM0S$e9~6Cob(3nJiN6tK)EZ0>5<6-&d+npX8TTF6?W3l~tdR zTe)_I!_y^So`&CFr@r*)^Z1n4?R%AY=A2r}QdFn<@MYWPD{T7LfBgNu-hTP~DTf%A z?Djpd|GR#r)9I&Lx9X+Cri*9S|A}8CE-x?JmD^(2@}a`p&7Eg**0ZvSQ*2ZhEqzj-Icb`*2=CdZ zw(GK*2Mii#%-E@V>Ep%3vRsMJg4;Cz9!NZ+``Z7|lJ;jzmbN=jbxB4mx9v-QJ0aKW z${p1cPCf?;PAq4-WaGfy<2tqGlhNCIHloc_XEb~?4f*U-!zZLMRi!q(YVl#EeKJ@3 z7kt>7apK%NZH8S5OA}Ycrd+?3^{9SzWHVFmd9$T1SB=^iSY{n%k!r8;KHTu`*r_Xa z(ZyN&+ODxZP)u9>KFpBu@Nr4+wtB6HmlU&~o(5SxZ9B(`XTQw9n@%=9y}EM}hwh<> z-`R=Vwog3VqC08(xA4Hqf)>aSl;+GwvjO<3r`m#Xjet|8g! zhK$F*KQ)gH;WuP_zP~G2DQm`pYwM1+-Hv?xuY9&irx)k5H(5DJWz&2FVdQ&MBb@0ARni AwEzGB delta 1382 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 D`YPDG delta 997 zcmZ3?v6y3mPrY-{j42ae1gz?Cf555al6p}wkWHX(fdeN$<0R>IJyYC0#Fu+qJ9GBz znR9Q}^(uW^eQvk4{r&Rd>fP0BD0$ zNeMI9yG&49;PXM%^RbP9{lgnIuKm1{^3f+#McQ{xmLM<>&~bA ze)~6rjp4(y(>pWuPIam(u4dZNvZbuYVP2fR(zLb}4D-M7-*}SLxV5ftgPK#8j%GPe zD1-LTy8XweDNT=f|175G_*c(V|Hn(a6u2HJo{ufwZ~Ezy#MyLC!I96bFH47_F zw{ci_SHUkOe{Jk0OQnG5H@jIX8xGxmI6-0V*EF=hev#WslA#nCxG6 z=z^KewasQ8Coh)jtZQ7|(C~PE|LKVOnsR2#&OKr8Vpx|b{C3e`^O@JQnk6gx*UaS+ zFJ>yZ%iT}(p0Ad`DN@bCaI4=@r_kzR<{^eH^6f!S`5&xlc=7Vo{v$f&yuy7GkJ}|b z(LJ6Zk;d5cID(;X&z5=lY|0aD(uIYu%~Eb#Ic0_O`G+iONn5=)E-YiM4L-~ZY1a!a9Xn%q7%hKe`(KeI~08>VP% zkNrEl;*S5E8k?{){Vgw44DZ~U`896et1XYMPw3_wF7fJURMyv>ZTac!;o6e;1!a%! zPE~PwbHchoSnMbW_%zw{Us=6`N&F`Sri{^!GAO>14|b;rKh-N4e%@kP(;Ta^5B=dPJWKGU}F zZRq&$Gkj;Q*w@f58;4^~9>NE`{{4EDbF`{TxMrFP|APu{j|Ij%OeMYU2x*(nQ`?j& zo8YT8b&vWq^SHQcRtIL!5Z%f2ZfeQ2sm=pCUW*_(SLA|>+Pp4qeX`PN9co-PpJYOv4Iojcp}3gZq21_lOCS3j3^ HP6~~VSR(Ai(^Q|oVPRgd&M|P96j$9m-Kt9;3MZ56O;~l^`sui^A!EW@tY-a zKR*<|Th2Cp+W(X##Crng3n3p(N2P?R4qBWgjI~V~DgmtZQ#cMxa}fUU^!1jA z!`|0I+ix-F<*nMks88)hvV+cnqdz0B8JAT!m~gi^COIbG*F400K>OtS1j!Y<_U7r9 z7uL01{FUw4J?(^;ljXy3&D-L$8k%pGB+L)z6xk ztAb%cSl*ud|9)8Xw>#SV+tu?nEbpFMpz!DCW9z-OL5v&s7x7G9AfO=4Qhc~v_qKRv zL&$=Y8xEyN%zqy$^deSg>&%tx^Y8aBdVkyEU{h3OUd3Zol?z(iWbYh1b~#|>2e;TJ z-Ok9%ic2s3`gT=iORKq$Q?31h2@1D)p0=@1TNE-|v9sZ(^jYiG4&oQoJDiw8>m527 zayU&GAMa*e*C*DS`t1ASCs)#AWOWVpWv^S#FT$AE94vI`fhOm}-8!5{mrsqa-hJ`t z`D_24J$@eYpkSFtXLWT^)RwcZ+TN|^+rF7c@BWh#vGw2UDN_{o%H(p-k6xy-%lKgV z?kSsUC-yL|bl7%l^?UK2i%(x}PG5Sw;gRiv`g;fR_dkBiJAK#6)cn79FFjAP44$rjF6*2UngD-;Ku`bx delta 670 zcmX@cdYE;BVSTNqi(^Q|oVPRgdTBdKwB7G8pJ->sxR=8=LPjxZi^v`hC=Uy-WE%jPw-cJeCAzF*}m@`b^fAenS71gyWbY?y5z)u%ho5h+=VOx z!dkmjyYedbq_-~k*Kt(Lc;AmFOU3uZ|KijQ(e|Gz{?DBwOY}6?y8H8|cb(*}<1kXa zCdIe1d!be3{xj2~c$S{vcHO>2w@rhw$K2w(PE!>_u8V}?3bqN(4%RGN8Q9L(8{e6K zM(easT-C*e{yXevCVq&C^_LE5o3?xJ!#h9r*KPQ=ut#6+mC9d+`Z=*F`T5_tYAX-& zDt=qPTk*)ed3O|3*6OI~uaRGK)$Wt)_BFMoMQskYGHWOM>rNKFr5%vRCw=wu?!6pw z|F5iXc+f5|dHT(H`{M-u2$)zoP7Obh`(l3m{)c9}gYVwha(!>Ovs^$7@2=ks2mY|R z``oA%`ok=;_N`%*x`tC|x6IFVufAxQUkOxj?a}0)z|63U-*bk#Q`4(yGw$>6`0>0x z^wX@{k6+DR6sovnL9LmCy=2y*>6VgAv)T_#VDDgLc&WJI31bn1LoJ6-pF diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index c8f6915c5c..9ce33b575e 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -136,8 +136,9 @@ public class Blocks{ additiveReconstructor, multiplicativeReconstructor, exponentialReconstructor, tetrativeReconstructor, repairPoint, repairTurret, - //unit - erekir + //units - erekir fabricator, + tankReconstructor, shipReconstructor, mechReconstructor, tankAssembler, shipAssembler, mechAssembler, //TODO maybe making it 5x5 would be more appropriate, seems kinda cheap. basicAssemblerModule, @@ -3664,11 +3665,45 @@ public class Blocks{ configurable = false; plans.add(new UnitPlan(UnitTypes.stell, 60f * 60f, with(Items.beryllium, 100f, Items.silicon, 60f))); researchCost = with(Items.beryllium, 200, Items.graphite, 80, Items.silicon, 80); + regionSuffix = "-dark"; consumePower(2f); }}; + tankReconstructor = new Reconstructor("tank-reconstructor"){{ + requirements(Category.units, with(Items.graphite, 250, Items.tungsten, 120, Items.silicon, 200)); + regionSuffix = "-dark"; + + size = 3; + consumePower(3f); + consumeLiquid(Liquids.hydrogen, 3f / 60f); + consumeItems(with(Items.silicon, 100, Items.tungsten, 100)); + + constructTime = 60f * 20f; + + upgrades.addAll( + new UnitType[]{UnitTypes.stell, UnitTypes.locus} + ); + }}; + + mechReconstructor = new Reconstructor("mech-reconstructor"){{ + requirements(Category.units, with(Items.graphite, 250, Items.tungsten, 120, Items.silicon, 200)); + regionSuffix = "-dark"; + + size = 3; + consumePower(3f); + consumeLiquid(Liquids.hydrogen, 3f / 60f); + consumeItems(with(Items.silicon, 100, Items.tungsten, 100)); + + constructTime = 60f * 20f; + + upgrades.addAll( + new UnitType[]{UnitTypes.stell, UnitTypes.latum} + ); + }}; + tankAssembler = new UnitAssembler("tank-assembler"){{ requirements(Category.units, with(Items.graphite, 600, Items.beryllium, 600, Items.oxide, 250, Items.tungsten, 400, Items.silicon, 500)); + regionSuffix = "-dark"; size = 5; //TODO remove ducts and crushers, replace with 2-3 high cost special blocks with silicon requirements plans.add(new AssemblerUnitPlan(UnitTypes.vanquish, 60f * 50f, PayloadStack.list(UnitTypes.stell, 4, Blocks.tungstenWallLarge, 10))); @@ -3682,6 +3717,7 @@ public class Blocks{ //TODO requirements shipAssembler = new UnitAssembler("ship-assembler"){{ requirements(Category.units, with(Items.beryllium, 700, Items.oxide, 300, Items.tungsten, 500, Items.silicon, 800)); + regionSuffix = "-dark"; size = 5; //TODO not stell plans.add(new AssemblerUnitPlan(UnitTypes.quell, 60f * 60f, PayloadStack.list(Blocks.berylliumWallLarge, 20, UnitTypes.stell, 2))); @@ -3695,6 +3731,7 @@ public class Blocks{ //TODO requirements mechAssembler = new UnitAssembler("mech-assembler"){{ requirements(Category.units, with(Items.graphite, 500, Items.thorium, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900)); + regionSuffix = "-dark"; size = 5; //TODO different reqs //TODO not stell @@ -3711,6 +3748,7 @@ public class Blocks{ basicAssemblerModule = new UnitAssemblerModule("basic-assembler-module"){{ requirements(Category.units, with(Items.graphite, 10)); consumePower(0.5f); + regionSuffix = "-dark"; size = 3; }}; @@ -3758,6 +3796,7 @@ public class Blocks{ payloadMassDriver = new PayloadMassDriver("payload-mass-driver"){{ requirements(Category.units, with(Items.tungsten, 120, Items.silicon, 120, Items.oxide, 70)); + regionSuffix = "-dark"; size = 3; reloadTime = 130f; chargeTime = 90f; @@ -3768,6 +3807,7 @@ public class Blocks{ payloadPropulsionTower = new PayloadMassDriver("payload-propulsion-tower"){{ requirements(Category.units, with(Items.thorium, 300, Items.silicon, 200, Items.plastanium, 200, Items.phaseFabric, 50)); + regionSuffix = "-dark"; size = 5; reloadTime = 130f; chargeTime = 100f; @@ -3778,6 +3818,7 @@ public class Blocks{ smallDeconstructor = new PayloadDeconstructor("small-deconstructor"){{ requirements(Category.units, with(Items.beryllium, 100, Items.silicon, 100, Items.oxide, 40, Items.graphite, 80)); + regionSuffix = "-dark"; itemCapacity = 100; consumePower(1f); size = 3; @@ -3786,6 +3827,7 @@ public class Blocks{ deconstructor = new PayloadDeconstructor("deconstructor"){{ requirements(Category.units, with(Items.beryllium, 250, Items.oxide, 100, Items.silicon, 250, Items.carbide, 250)); + regionSuffix = "-dark"; itemCapacity = 250; consumePower(3f); size = 5; @@ -3794,6 +3836,7 @@ public class Blocks{ constructor = new Constructor("constructor"){{ requirements(Category.units, with(Items.silicon, 100, Items.beryllium, 150, Items.tungsten, 80)); + regionSuffix = "-dark"; hasPower = true; buildSpeed = 0.3f; consumePower(2f); @@ -3805,16 +3848,19 @@ public class Blocks{ //yes this block is pretty much useless largeConstructor = new Constructor("large-constructor"){{ requirements(Category.units, with(Items.silicon, 150, Items.oxide, 150, Items.tungsten, 200, Items.phaseFabric, 40)); + regionSuffix = "-dark"; hasPower = true; - consumePower(2f); buildSpeed = 0.3f; maxBlockSize = 4; minBlockSize = 3; size = 5; + + consumePower(2f); }}; payloadLoader = new PayloadLoader("payload-loader"){{ requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.tungsten, 80)); + regionSuffix = "-dark"; hasPower = true; consumePower(2f); size = 3; @@ -3822,6 +3868,7 @@ public class Blocks{ payloadUnloader = new PayloadUnloader("payload-unloader"){{ requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.oxide, 30)); + regionSuffix = "-dark"; hasPower = true; consumePower(2f); size = 3; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 95a3786495..9376b85acf 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -1471,7 +1471,18 @@ public class Fx{ }); }), - shootSmokeTris = new Effect(30f, e -> { + shootSmokeSquare = new Effect(20f, e -> { + color(Color.white, e.color, e.fin()); + + rand.setSeed(e.id); + for(int i = 0; i < 6; i++){ + float rot = e.rotation + rand.range(22f); + v.trns(rot, rand.random(e.finpow() * 21f)); + Fill.poly(e.x + v.x, e.y + v.y, 4, e.fout() * 2f + 0.2f, rand.random(360f)); + } + }), + + shootSmokeSquareBig = new Effect(30f, e -> { color(Color.white, e.color, e.fin()); rand.setSeed(e.id); diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index aaa452b3c2..e6b9a02f75 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -135,7 +135,7 @@ public class Items{ ); erekirItems.addAll( - scrap, graphite, thorium, silicon, phaseFabric, surgeAlloy, sand, + graphite, thorium, silicon, phaseFabric, surgeAlloy, sand, beryllium, tungsten, oxide, carbide, fissileMatter, dormantCyst ); } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index effc96170e..5abc7ee9f6 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2830,16 +2830,22 @@ public class UnitTypes{ lifetime = 40f; trailWidth = 2f; trailLength = 4; - shake = 0.5f; + shake = 1f; recoil = 0.1f; trailEffect = Fx.missileTrail; trailParam = 1.8f; - trailInterval = 8f; + trailInterval = 6f; hitEffect = despawnEffect = Fx.hitBulletColor; - shootEffect = new MultiEffect(Fx.shootBigColor, Fx.hitLaserColor); - smokeEffect = Fx.shootSmallSmoke; + shootEffect = new MultiEffect(Fx.shootBigColor, new Effect(9, e -> { + color(Color.white, e.color, e.fin()); + stroke(0.7f + e.fout()); + Lines.square(e.x, e.y, e.fin() * 5f, e.rotation + 45f); + + Drawf.light(e.x, e.y, 23f, e.color, e.fout() * 0.7f); + })); + smokeEffect = Fx.shootSmokeSquare; ammoMultiplier = 2; }}; }}); @@ -2857,7 +2863,7 @@ public class UnitTypes{ shootEffect = Fx.sparkShoot; hitEffect = Fx.pointHit; maxRange = 100f; - damage = 30f; + damage = 35f; }}; }}); }}; @@ -3034,7 +3040,7 @@ public class UnitTypes{ moveX = fi * 0.3f; moveRot = -45f - fi * 17f; - moves.add(new PartMove(PartProgress.reload.inv().mul(1.8f).inv().curve(fi / 5f, 0.2f), 0f, 0f, 40f)); + moves.add(new PartMove(PartProgress.reload.inv().mul(1.8f).inv().curve(fi / 5f, 0.2f), 0f, 0f, 36f)); }}); } @@ -3044,7 +3050,7 @@ public class UnitTypes{ lifetime = 30f; shootEffect = Fx.shootBigColor; - smokeEffect = Fx.shootSmokeTris; + smokeEffect = Fx.shootSmokeSquareBig; frontColor = Color.white; hitSound = Sounds.none; width = 12f; @@ -3093,8 +3099,8 @@ public class UnitTypes{ engineSize = 0; setEnginesMirror( - new UnitEngine(21 / 4f, 19 / 4f, 2.2f, 45f), - new UnitEngine(23 / 4f, -22 / 4f, 2.2f, 315f) + new UnitEngine(34 / 4f, 31 / 4f, 3f, 45f), + new UnitEngine(35 / 4f, -38 / 4f, 3f, 315f) ); }}; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java index 520b0bd78f..b54128376d 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java @@ -1,11 +1,11 @@ package mindustry.world.blocks.payloads; +import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; import arc.util.*; import arc.util.io.*; -import mindustry.annotations.Annotations.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.world.*; @@ -16,9 +16,8 @@ import static mindustry.Vars.*; public class PayloadBlock extends Block{ public float payloadSpeed = 0.7f, payloadRotateSpeed = 5f; - public @Load(value = "@-top", fallback = "factory-top-@size") TextureRegion topRegion; - public @Load(value = "@-out", fallback = "factory-out-@size") TextureRegion outRegion; - public @Load(value = "@-in", fallback = "factory-in-@size") TextureRegion inRegion; + public String regionSuffix = ""; + public TextureRegion topRegion, outRegion, inRegion; public PayloadBlock(String name){ super(name); @@ -29,6 +28,15 @@ public class PayloadBlock extends Block{ envEnabled |= Env.space | Env.underwater; } + @Override + public void load(){ + super.load(); + + topRegion = Core.atlas.find(name + "-top", "factory-top-" + size + regionSuffix); + outRegion = Core.atlas.find(name + "-out", "factory-out-" + size + regionSuffix); + inRegion = Core.atlas.find(name + "-in", "factory-in-" + size + regionSuffix); + } + public static boolean blends(Building build, int direction){ int size = build.block.size; int trns = build.block.size/2 + 1; @@ -164,9 +172,9 @@ public class PayloadBlock extends Block{ updatePayload(); if(rotate){ - payRotation = Angles.moveToward(payRotation, rotate ? rotdeg() : 90f, payloadRotateSpeed * edelta()); + payRotation = Angles.moveToward(payRotation, rotate ? rotdeg() : 90f, payloadRotateSpeed * delta()); } - payVector.approach(Vec2.ZERO, payloadSpeed * edelta()); + payVector.approach(Vec2.ZERO, payloadSpeed * delta()); return hasArrived(); } @@ -179,7 +187,7 @@ public class PayloadBlock extends Block{ Vec2 dest = Tmp.v1.trns(rotdeg(), size * tilesize/2f); payRotation = Angles.moveToward(payRotation, rotdeg(), payloadRotateSpeed * edelta()); - payVector.approach(dest, payloadSpeed * delta()); + payVector.approach(dest, payloadSpeed * edelta()); Building front = front(); boolean canDump = front == null || !front.tile().solid();