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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| diff --git a/core/assets-raw/sprites/blocks/payload/factory-in-3-dark.png b/core/assets-raw/sprites/blocks/payload/factory-in-3-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4c7faaa2e8bd04e47951480fb4f5372ef6cf93 GIT binary patch literal 570 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zzj(ShhE&XX zd*`h0VFwY{hvMBvI!l>v1hDF?oU9r$k+($PWbFYq0hMF(z8ml3o}bUE;dIe@(?<2? zvkVLk#|}Tf-2Th<&CLWimZcAWb1P-=?BB0==v&)qd4a@e_V)+k~_~R+cf_ z!YOMf^9;d-K^hH`f~#6UOeZZMbJHcpGaVBGg%}E11e6;j7>{r$xG`*;#GrHG=-rh1 zgC=v|etUPXRQ|)iGNl{SuLv6WK40~HWAsA?p8akb42Rc0<~#5qdnc2@pQ^Kr5_R&v zK*D}CkcjUF67_3XI|Utj7?Pkyhn2gpkL~JveDUiq%j$nM312yO$P|2i{e9g_5to*_ zS^wDt7V=-0f4Fm@-rUcf8_v~=y0k>4PG9KKp}Cho;p>%tX~T_|80KXCImM*IJ3sjH zf3Iyz4gT!-vQ4CI{^i_guEY74Q$b|-KHb)bzjglAJDfI%{D1zTn-9VX917bc8m^xG zcWV361Itfu6WQ{5n=WharQ1Ohf;Z{17A`y;pmc@vKD)p|w^wdG9F;Ghv-Uoo$Zn?k z;X#<;wI*=j7&3K$J!P{aR7bYq;qxUx-|s14Xp2`CX?S?OkUinY*0gYE$xmhL`WV{w sueE2C`1h@j$)HBi&WDkKVfPo#6y50&hNU%qz{J4d>FVdQ&MBb@02o~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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%zZ+f~ohE&XX zd)M2K*-*gsBKzx(BYX*mv?e8fvv)XUcZh>?Ysc+%TF)cD*d{Zr(0f^vlf=ou@F3&d z^w)on{`Ho*`m<=Sw-6&wU7Nn(gO_#u@k$4RbKCU=7u<<=&Qo+)c=4e(i-xe|K9>d| z5Yyu{PrQjDjQXz%hqtITraqEy|{rJW4Ciw~zqdo6qsZ+AOL z?X{!U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v 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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| diff --git a/core/assets-raw/sprites/blocks/payload/payload-mass-driver-in.png b/core/assets-raw/sprites/blocks/payload/payload-mass-driver-in.png deleted file mode 100644 index f8427f0ba98993527d66ff96c50fbbe399178ba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v 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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| diff --git a/core/assets-raw/sprites/blocks/payload/payload-unloader-in.png b/core/assets-raw/sprites/blocks/payload/payload-unloader-in.png deleted file mode 100644 index f8427f0ba98993527d66ff96c50fbbe399178ba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v 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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| diff --git a/core/assets-raw/sprites/blocks/payload/small-deconstructor-in.png b/core/assets-raw/sprites/blocks/payload/small-deconstructor-in.png deleted file mode 100644 index f8427f0ba98993527d66ff96c50fbbe399178ba1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v 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!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v 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 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| diff --git a/core/assets-raw/sprites/blocks/units/fabricator-out.png b/core/assets-raw/sprites/blocks/units/fabricator-out.png deleted file mode 100644 index afb61bf138431a4132364abfe10ab922cac804a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D%z-+Q_^hE&XX zd)LwLumg|VL-})ooze%|g14N$SKoN0dP=Bj$i+_EZ%3wm+Gi?wqMv1@af%89L&IXr z_;ug6zmk8n;@tGtv6DCg9vIeiGVK0s4I-=L_PI3N{bLSdSC|6H)4gr_f(a|vKJ;dZ zIA#PC@Q!HL7gU&={zHf{s1n3Hd**{G(~=poK#dzt0GTZ=K+%M#V<2V$yUOoBzsmT( zl>FkTJ^%f})eCRG3GbT6z^Nq2F(Ji_iBagRi-LnuJ`0o1gHDGA*END18z!hSF^b*p za%f0m(QtzkWiP%qTzvlj{QS@7>uzk@8h1c8!DRD?q@8UHeDgT2tygWBoVsCN082&U zmoxIbH-4{BI?!N#=*)dirkojjh1YN-2;BW?-~=?y;6%lhJx&e0iyx-j%;GS3AZvF! zNa*apXPb3X4No`RoVKYWeM647r`hM4?J>nbJJXH-%O@EAsy-we(8F+)13_$%xE;i` zQFo~T3U%SlE<;8k7qPdT0wQ+}4^}xa=;vr1(LOEpfG?xrdYIXP?r7-;SC8_3`1Fpg zqPCV<=D`I9_ZcP!6zzBmdP13Ho?K&amoz(&IFGkrPA;>|i#rb2s+gEM7#JKD#-FR2 W*%+gAOca<77(8A5T-G@yGywpo@9rJ| diff --git a/core/assets-raw/sprites/blocks/units/mech-assembler-in.png b/core/assets-raw/sprites/blocks/units/mech-assembler-in.png deleted file mode 100644 index d411cbd4cd4ca868a197c1a080dd4536e62b33a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmW-hdrVVT9LH~gj`Aq9r5z5cv;~n2d2GxVaw1bt+ve?u~h2eJY{8bw|46*t#j_Y<+aZur!`Ev;1)_^a5-j!k3w9*eUBn?VrADP*YB z=gu>XH8LJXzDm?MGGKhqOCN;L)wVEB<2IIi$YE)KNhl@}JHMTU_A{j8I+R0`DBI;I zFR!9}(2Mfc2Ff-C%K9}xSalQS4KvEft0=v0qhvitNwuPkXhOMX6j1%qB1-la%DW6q z0*vg`VFQSCAqAhz;EK{%oLZbEM+Sv7or_{edC+GZE0kmBzwzgi@vkCPSfch;rg+OJ zV6mgl6O65O4);9uhZwDwE5#j_AfzmK0y9py(yIpRTcRO3#)vsLxmkuti1;+1`gEy3K{nnsr?iIPX%=j0VR< z$`0y4mj?cQ*JQ?{Bjw&;Y`z7f+A+0+ebpaGS7M}_-e^n^E&{Q;#dRQ7JpT!%^K%EJUsbucqG-u~eX~%L-w_m? z@$dn2^2J*i6j5oyiE9Qzp1#wr_z;z0&Uj53o-ad&lj28L(qv7G<`b9mn{v|9XK8>!pX?F10FN##r6$IfUmY~ zlPS3a6NH@cei4Ny%Dm@rQu%$sbQ|-?jpZ3!);d7~4xwN=`wQ*<*)eU6E}6uFqYix0 zrWc!IEL#2WRiKh_;k2Xc+xi{P50Wh)a` zY*S||uvv~2QgfPA9j=lKUXfBi%Ty9cdMdb=qmqRB2HWojw)-A$x@ETO30!^>yyi37 z#az&uYGysNoJzC7$ml91<=alQ0_NTJ+bSEak1JN!6vf*6v2Rj9 zQ)NltLACCJ6;PYM#DiKL#4*O;nt<$h3Zyy|NP^}dkj__u>>B}c?TK@Pts#)fF;-nr z0GZwiWM&Pg%Vpl? f>Hq%#5VZQI&+9wCoNf7`Fb6g9v5D{?H&^l>NBrWn 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 zcmYjTX;@R&7QKl?xTJ^#Ayz0Mk}xL$eIT?kLNt<~3ST*rMw{7SE zq)sc+ye!AR$~ZgwlA4vyq_Ml^aXo{6Cc;2(qn|1s#xx$GbG61b%2M?X(7!#FaB$}B z@(+#+>%%<@GuOXP2r1~;y?WDeA?d}t;hV=2UQA3p)%Bp*b-fd*7aCFiSo~dg8qv2D z)7|r=)1*Eod{&gy{JnH#<=55VD1WqXvXEZ7Q7KcaHSCOzYU@xQKYxT;XgiqI0k{Y7 zVku$y+LQ3PGR}vBGWIwYAi6G^T49EDfe)uZuW1F132b2ShXW}m5h*Ucj~^IK-{t`cnMyLOHJkK@LW6miOyHp7Q6LYWm(TpYG1GHAscy^>xmx4~ z+dqgdhTSA5BpQAHw(VY}nxrJFt6o7bWjCD~K2vyOCQCpf$Jry!oGD^W8|>w6E|=37 zR6mh9!&6y?6Z$B76Dc07`A}xjj53vTj=UBh%)8D^(AL^^meZ39~HUg!Xij)02NH)Ey6%vJIk&Q<P)i{_})uxoH^VyLr)sk$vBqXy5tiP-R&L zXEZ);UXoS&&znTr7rPumUc-`vLFbb)>E>VWsr067`&S6q;vf1@y>gnh&|9=y4No3ag*6S{Jx1N7>U$M;{KEVqt5pNxu`k;6>?Rzom`zX>*aKEYEW0&5ww?hn($95cG4f3?xS68M`Gs#PKC3Tt+ zIKwXaY|ri%7|A79>q0uh$vsViHUjIuN@qOFE0xpSskw4t4v>w9%Jv(M?I0QtLOu&d zYS^bu0UYErodKyu-Zv15>C{2Fuo{S8tMO6LKBj_R0?75FN;t@V^pu4x)O^1oRBzk& zEYYb~f$5&zK#U<#6mr`yo%b~CliGPBhn=F7u?t4qU5fhsdo+?ff3N^;-WJpQ5 zH{pV@G_m+hju`&c1!dYU3!gzK!^LJd!ni5O3bylgUQM|6{4wb@H(UDMu*f~$TKY5O ziRkn1Y)eOeS_&)xB(;2};x(hA`LJk%aAUGyur3`vt5tab{zibs2lRH2~$^ zaV3Mil%NP}s!|1Bde~Lgf|l1V3|$rP9L)M0p0dk=|JW$#)2>@%_11MEXx){lXW@%+ z$%nmQvHgMC()th2eckniY%!6%;C}mGy@$GF6KC95W;@^O9Lo9waiXrVA;o~^6 zTnju$hCBq9ZJGs|p5#9!oHlh*6{WZGgeF)GB_G0qfd7xq)_kZUE9CtJC|6moA2mR9 z8Xwx25}>4_$g*5poQ-?rReLPhA*Uh1bTu0btx7f2_@ppXfEvf-Og2nt$?Ia0_HF&x zQrHf-MVy<3HT#P0KM&keQTPmy*P@Gjw4RT;27$|0`;Y`##I#{#r24|T&YH}f=v9`V z63@g#%!d5~N?7lgnvl;{k&IHdcsL*l=Zze2v&3Vq{{i+}TFnubuw)zJav-GB*@KY!e#buY&B!gbb2aa_3^hNnu$o;b8nC>PvcGRVxUNvMu3?KCqK)=NUM%rMqJ{%{ zC>ODHf$eG)%xDXffxNL@%Uc^4<*iXUQ7#p$y1%`C=Ch=DGTwc+>$;L^0_o#kUzaQ0 zO_Ojz1^Y)P1o|K@lo&Drfv@V8;dzZswX$3+;1sZBy zAP8er5N0}4vQBp(jKIp2r|CZzV?2l|D#+z;V(l+Z z-YZK#1ibmg(@h!HJ@>%VGA>8z0nG`onou)xF#(8BZ#e_yJe>IF^q|Z1qIiSAYKov0 zO87(CAbuc^6rSQZw!DGRgLg)432e8Y9CtW(V*PTqi3?`x(y&DS(rk6*haiVt(2x)x zooT2HI2t!IwNbaeJ~b2l;g2T)XVt9&)~>`AH3mgE?a0oe2}lK-;(la-toi4M$qPHc z9)uIQG~O655dQt7uj!ss4IF293hd?GrmS$wU{6cM2z2999?J+!M~pUIR&g}Q8oZ|I z_d?!3iZa!0G?1XZTni4|jkXLvj1N5v>$=0X&EOnCEJFvzQ3rKnu{_d!-fM0C9!%WU T{Fx?bf&>^e_XG9RkhK2-Hu~Qe literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/mech-reconstructor.png b/core/assets-raw/sprites/blocks/units/mech-reconstructor.png new file mode 100644 index 0000000000000000000000000000000000000000..3152db780ab19ec6fdf156bf35ed975333b8d606 GIT binary patch literal 1427 zcmZ9LdpOez7{`BeoyDTIV1(S!g1ph7-Ia^H2@ zSAi9F=Tt$g`L2PY-0g?}yH8630P;>`5`l7|c&_A$Glc->^|M`FM`)K(ub&6r8<9g$ z@l~<`sMQ#FW`T+e7Y5Zl`Y~Q+x_h8uFDHx13OimzV?k+> ze@bg?`*w$waqN7bozy95p>bGBgco@aWzX=WeVW$ zLd}(rXcOOTxoOHdPusK5C%^PBu0sJJa#@KmBDg5ZnN@tVq8j;%S+M?@x-pQE?ohkx z0sz4pG6#Ks02i3+BRxR?RyJ9U3X!uP8H0-BsjN+AW#zjS6U;2TUav8xGF&$?tCKME zqru3ei1#71^>7{eOWJ*fea&ZOhT>s+PvoL4L=IsFDF8j)wYQ;r@cF}RNfmz4l(0gg zCmqLHx{T<_m}Y_ z3&;>am0KyC6kO$p7{7D11$PH1 zPNnPp%HBHg8>{`&B|L-|!lA@fzEo;1!`Rn?C`;iv?oS)B1j80MgYzwIK+EB}i5vEB ztP)n0or>b88JS6d4lo#N4SCAW+_1&%)C2T}LiNrjf1z3Ah8c*vR!T*AD}}aa34fbo zrd9#W?=VsLnuqVzG2^TRWBowMFy?Iot^FocF*HX|#RgHTw_hW30~4#4XdkKP{7_o; z<6AzdFBAZ2o4}B%CcM5;AJRpvDGWb@e9+z&Cn;Ik{J65Nmo_^! zN>6na#xw2!3a&!axc&d;9$3cM9;`kE3oy1Eaw9X8ku!<(=HYz5yhfuOIlRAd+gPZ8 zQ$fVbW{#z!*G7%%e};NV5k)uHx0WY&Vtx@VT596Aoq~M=v-9VovD`u7m;xsUL0KI& z2(v8~esC8ma>BL#@X8+A>=v)gg`e%@-h1g5VnT4wm89P}NGbY+0ou8?kYt=0oHo!g z#REO|f#5yAV@TNQGl1dd)kN8ZZCjWvTvMWB9mEJfRMXbdxe0BEGP+2N=prs|%*@HM zcxh)7@hC9A^a=N05mUx3BhBq@DqSRsmyLQ%uNkiH#qVaw1bt+ve?u~h2eJY{8bw|46*t#j_Y<+aZur!`Ev;1)_^a5-j!k3w9*eUBn?VrADP*YB z=gu>XH8LJXzDm?MGGKhqOCN;L)wVEB<2IIi$YE)KNhl@}JHMTU_A{j8I+R0`DBI;I zFR!9}(2Mfc2Ff-C%K9}xSalQS4KvEft0=v0qhvitNwuPkXhOMX6j1%qB1-la%DW6q z0*vg`VFQSCAqAhz;EK{%oLZbEM+Sv7or_{edC+GZE0kmBzwzgi@vkCPSfch;rg+OJ zV6mgl6O65O4);9uhZwDwE5#j_AfzmK0y9py(yIpRTcRO3#)vsLxmkuti1;+1`gEy3K{nnsr?iIPX%=j0VR< z$`0y4mj?cQ*JQ?{Bjw&;Y`z7f+A+0+ebpaGS7M}_-e^n^E&{Q;#dRQ7JpT!%^K%EJUsbucqG-u~eX~%L-w_m? z@$dn2^2J*i6j5oyiE9Qzp1#wr_z;z0&Uj53o-ad&lj28L(qv7G<`b9mn{v|9XK8>!pX?F10FN##r6$IfUmY~ zlPS3a6NH@cei4Ny%Dm@rQu%$sbQ|-?jpZ3!);d7~4xwN=`wQ*<*)eU6E}6uFqYix0 zrWc!IEL#2WRiKh_;k2Xc+xi{P50Wh)a` zY*S||uvv~2QgfPA9j=lKUXfBi%Ty9cdMdb=qmqRB2HWojw)-A$x@ETO30!^>yyi37 z#az&uYGysNoJzC7$ml91<=alQ0_NTJ+bSEak1JN!6vf*6v2Rj9 zQ)NltLACCJ6;PYM#DiKL#4*O;nt<$h3Zyy|NP^}dkj__u>>B}c?TK@Pts#)fF;-nr z0GZwiWM&Pg%Vpl? f>Hq%#5VZQI&+9wCoNf7`Fb6g9v5D{?H&^l>NBrWn 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 zcmW-hdrVVT9LH~gj`Aq9r5z5cv;~n2d2GxVaw1bt+ve?u~h2eJY{8bw|46*t#j_Y<+aZur!`Ev;1)_^a5-j!k3w9*eUBn?VrADP*YB z=gu>XH8LJXzDm?MGGKhqOCN;L)wVEB<2IIi$YE)KNhl@}JHMTU_A{j8I+R0`DBI;I zFR!9}(2Mfc2Ff-C%K9}xSalQS4KvEft0=v0qhvitNwuPkXhOMX6j1%qB1-la%DW6q z0*vg`VFQSCAqAhz;EK{%oLZbEM+Sv7or_{edC+GZE0kmBzwzgi@vkCPSfch;rg+OJ zV6mgl6O65O4);9uhZwDwE5#j_AfzmK0y9py(yIpRTcRO3#)vsLxmkuti1;+1`gEy3K{nnsr?iIPX%=j0VR< z$`0y4mj?cQ*JQ?{Bjw&;Y`z7f+A+0+ebpaGS7M}_-e^n^E&{Q;#dRQ7JpT!%^K%EJUsbucqG-u~eX~%L-w_m? z@$dn2^2J*i6j5oyiE9Qzp1#wr_z;z0&Uj53o-ad&lj28L(qv7G<`b9mn{v|9XK8>!pX?F10FN##r6$IfUmY~ zlPS3a6NH@cei4Ny%Dm@rQu%$sbQ|-?jpZ3!);d7~4xwN=`wQ*<*)eU6E}6uFqYix0 zrWc!IEL#2WRiKh_;k2Xc+xi{P50Wh)a` zY*S||uvv~2QgfPA9j=lKUXfBi%Ty9cdMdb=qmqRB2HWojw)-A$x@ETO30!^>yyi37 z#az&uYGysNoJzC7$ml91<=alQ0_NTJ+bSEak1JN!6vf*6v2Rj9 zQ)NltLACCJ6;PYM#DiKL#4*O;nt<$h3Zyy|NP^}dkj__u>>B}c?TK@Pts#)fF;-nr z0GZwiWM&Pg%Vpl? f>Hq%#5VZQI&+9wCoNf7`Fb6g9v5D{?H&^l>NBrWn 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 zcmYjTX;@R&7QKl?xTJ^#Ayz0Mk}xL$eIT?kLNt<~3ST*rMw{7SE zq)sc+ye!AR$~ZgwlA4vyq_Ml^aXo{6Cc;2(qn|1s#xx$GbG61b%2M?X(7!#FaB$}B z@(+#+>%%<@GuOXP2r1~;y?WDeA?d}t;hV=2UQA3p)%Bp*b-fd*7aCFiSo~dg8qv2D z)7|r=)1*Eod{&gy{JnH#<=55VD1WqXvXEZ7Q7KcaHSCOzYU@xQKYxT;XgiqI0k{Y7 zVku$y+LQ3PGR}vBGWIwYAi6G^T49EDfe)uZuW1F132b2ShXW}m5h*Ucj~^IK-{t`cnMyLOHJkK@LW6miOyHp7Q6LYWm(TpYG1GHAscy^>xmx4~ z+dqgdhTSA5BpQAHw(VY}nxrJFt6o7bWjCD~K2vyOCQCpf$Jry!oGD^W8|>w6E|=37 zR6mh9!&6y?6Z$B76Dc07`A}xjj53vTj=UBh%)8D^(AL^^meZ39~HUg!Xij)02NH)Ey6%vJIk&Q<P)i{_})uxoH^VyLr)sk$vBqXy5tiP-R&L zXEZ);UXoS&&znTr7rPumUc-`vLFbb)>E>VWsr067`&S6q;vf1@y>gnh&|9=y4No3ag*6S{Jx1N7>U$M;{KEVqt5pNxu`k;6>?Rzom`zX>*aKEYEW0&5ww?hn($95cG4f3?xS68M`Gs#PKC3Tt+ zIKwXaY|ri%7|A79>q0uh$vsViHUjIuN@qOFE0xpSskw4t4v>w9%Jv(M?I0QtLOu&d zYS^bu0UYErodKyu-Zv15>C{2Fuo{S8tMO6LKBj_R0?75FN;t@V^pu4x)O^1oRBzk& zEYYb~f$5&zK#U<#6mr`yo%b~CliGPBhn=F7u?t4qU5fhsdo+?ff3N^;-WJpQ5 zH{pV@G_m+hju`&c1!dYU3!gzK!^LJd!ni5O3bylgUQM|6{4wb@H(UDMu*f~$TKY5O ziRkn1Y)eOeS_&)xB(;2};x(hA`LJk%aAUGyur3`vt5tab{zibs2lRH2~$^ zaV3Mil%NP}s!|1Bde~Lgf|l1V3|$rP9L)M0p0dk=|JW$#)2>@%_11MEXx){lXW@%+ z$%nmQvHgMC()th2eckniY%!6%;C}mGy@$GF6KC95W;@^O9Lo9waiXrVA;o~^6 zTnju$hCBq9ZJGs|p5#9!oHlh*6{WZGgeF)GB_G0qfd7xq)_kZUE9CtJC|6moA2mR9 z8Xwx25}>4_$g*5poQ-?rReLPhA*Uh1bTu0btx7f2_@ppXfEvf-Og2nt$?Ia0_HF&x zQrHf-MVy<3HT#P0KM&keQTPmy*P@Gjw4RT;27$|0`;Y`##I#{#r24|T&YH}f=v9`V z63@g#%!d5~N?7lgnvl;{k&IHdcsL*l=Zze2v&3Vq{{i+}TFnubuw)zJav-GB*@KY!e#buY&B!gbb2aa_3^hNnu$o;b8nC>PvcGRVxUNvMu3?KCqK)=NUM%rMqJ{%{ zC>ODHf$eG)%xDXffxNL@%Uc^4<*iXUQ7#p$y1%`C=Ch=DGTwc+>$;L^0_o#kUzaQ0 zO_Ojz1^Y)P1o|K@lo&Drfv@V8;dzZswX$3+;1sZBy zAP8er5N0}4vQBp(jKIp2r|CZzV?2l|D#+z;V(l+Z z-YZK#1ibmg(@h!HJ@>%VGA>8z0nG`onou)xF#(8BZ#e_yJe>IF^q|Z1qIiSAYKov0 zO87(CAbuc^6rSQZw!DGRgLg)432e8Y9CtW(V*PTqi3?`x(y&DS(rk6*haiVt(2x)x zooT2HI2t!IwNbaeJ~b2l;g2T)XVt9&)~>`AH3mgE?a0oe2}lK-;(la-toi4M$qPHc z9)uIQG~O655dQt7uj!ss4IF293hd?GrmS$wU{6cM2z2999?J+!M~pUIR&g}Q8oZ|I z_d?!3iZa!0G?1XZTni4|jkXLvj1N5v>$=0X&EOnCEJFvzQ3rKnu{_d!-fM0C9!%WU T{Fx?bf&>^e_XG9RkhK2-Hu~Qe literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/tank-reconstructor.png b/core/assets-raw/sprites/blocks/units/tank-reconstructor.png new file mode 100644 index 0000000000000000000000000000000000000000..3152db780ab19ec6fdf156bf35ed975333b8d606 GIT binary patch literal 1427 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 Hu0mjfe}h0! delta 670 zcmV;P0%85e1;Yi9F@JqYL_t(|ob8#tN-IGahTn)ckv=v7y$C&693f(~6zmqO!?}c9 z!68^lI>FK(B4{DvMMSW1OTkMxrKgZjCgaTRY<9l)h<;BMHnWp?-t5jVU>Jr$&}aTUTyWpMazBs1uSOZ0{spE1w=zez?oLyvZZ}tj(dBF`K_OH7k#GanqA!MyACNHcX ztkpj9MYpVdb#jJ4Jsho*Pc4%Z+AC0Q4ja|eyS)fr|J1L5;D->Cm)V}bUJ(2cG&(_* zSHNxPpMSsMHoH^Z*tFNZS3@39Tn)PWfWZ6)M@-m#68r-ct?e;dCn!QyiyZl`>hvf# z)KMTsj42P00|2TINth=>g6fu--w(L>=YLi5n%m>*o1#@Aq@aB^KtCC3!k0N20-A@w zkOznX0O=vH!@DKL7v# diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 773e1ba289..aaed9537d4 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -548,3 +548,4 @@ 63155=locus|unit-locus-ui 63154=avert|unit-avert-ui 63153=latum|unit-latum-ui +63152=tank-reconstructor|block-tank-reconstructor-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index a691481a2010175956358163ad274e883a744a24..dbc563b734ff5195ec4393288ce7e49f92d58d5e 100644 GIT binary patch delta 33 ocmcbw@L7S0;o(N6DqaDhlEl1h-J;aw{Ji3lqSEBe6}-=x0MWAymH+?% delta 16 YcmeyYa9@Fm;lW0xD&EZ#cpozX06Ap_WB>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();