From 59be28b5eb0d277cf8adc2634e2f3fb14f1a1b75 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 30 Apr 2022 18:08:40 -0400 Subject: [PATCH] Time to begin adding the new units --- .../blocks/units/basic-reconstructor-top.png | Bin 0 -> 1691 bytes .../blocks/units/basic-reconstructor.png | Bin 0 -> 1433 bytes .../blocks/units/mech-fabricator-top.png | Bin 0 -> 1539 bytes .../sprites/blocks/units/mech-fabricator.png | Bin 0 -> 1633 bytes .../blocks/units/ship-fabricator-top.png | Bin 0 -> 1535 bytes .../sprites/blocks/units/ship-fabricator.png | Bin 0 -> 1575 bytes ...icator-top.png => tank-fabricator-top.png} | Bin .../{fabricator.png => tank-fabricator.png} | Bin .../sprites/units/merui-leg-base.png | Bin 0 -> 294 bytes core/assets-raw/sprites/units/merui-leg.png | Bin 0 -> 269 bytes core/assets-raw/sprites/units/merui.png | Bin 0 -> 812 bytes core/assets-raw/sprites/units/osc-cell.png | Bin 0 -> 362 bytes core/assets-raw/sprites/units/osc.png | Bin 0 -> 976 bytes core/assets/icons/icons.properties | 6 ++ core/assets/logicids.dat | Bin 4327 -> 4358 bytes core/src/mindustry/content/Blocks.java | 53 ++++++++++++++++-- .../src/mindustry/content/ErekirTechTree.java | 45 +++++++-------- core/src/mindustry/content/SectorPresets.java | 2 +- core/src/mindustry/content/UnitTypes.java | 53 +++++++++++++++++- .../mindustry/entities/bullet/BulletType.java | 12 ++++ core/src/mindustry/io/SaveFileReader.java | 3 +- core/src/mindustry/type/UnitType.java | 35 ++++-------- 22 files changed, 151 insertions(+), 58 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/units/basic-reconstructor-top.png create mode 100644 core/assets-raw/sprites/blocks/units/basic-reconstructor.png create mode 100644 core/assets-raw/sprites/blocks/units/mech-fabricator-top.png create mode 100644 core/assets-raw/sprites/blocks/units/mech-fabricator.png create mode 100644 core/assets-raw/sprites/blocks/units/ship-fabricator-top.png create mode 100644 core/assets-raw/sprites/blocks/units/ship-fabricator.png rename core/assets-raw/sprites/blocks/units/{fabricator-top.png => tank-fabricator-top.png} (100%) rename core/assets-raw/sprites/blocks/units/{fabricator.png => tank-fabricator.png} (100%) create mode 100644 core/assets-raw/sprites/units/merui-leg-base.png create mode 100644 core/assets-raw/sprites/units/merui-leg.png create mode 100644 core/assets-raw/sprites/units/merui.png create mode 100644 core/assets-raw/sprites/units/osc-cell.png create mode 100644 core/assets-raw/sprites/units/osc.png diff --git a/core/assets-raw/sprites/blocks/units/basic-reconstructor-top.png b/core/assets-raw/sprites/blocks/units/basic-reconstructor-top.png new file mode 100644 index 0000000000000000000000000000000000000000..f092d8f80e8230f6e9a8774b5b8c126a0797d36b GIT binary patch literal 1691 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z!vK1 z;uumf=k476c_M}a$I{>PYD}nT*sZ3dE3}?LRaZ91!HG%hR?9T52@@DP`=$xSF?N0v z@cqQ#A!2hV@IXuFV|(LoXKqx#32#j~FIT@mx;pp#td|!jPriHbpwyPH4_>@m5|`n= zxAJ>pdf>ZPZ%VlD@1MU?JV&&EKXO|tE5il{kJGz&wf`hG7DUQzT>rvejN|_k(a&0c zjxrrIzvj)r@Gqa^o}n8f!=L#ARY%P3?y6Ofepyw_v9pq?_TF@pge{d$xo_59m{iW7 zRj%Hm=H(;%(l6uZqb+q4yBHWA2?U9r=WRL`dz-0|mEnO>OHgZZcQi5?!}G!K?=#G-)77eXPh!kE6YVX>Xp!n#yRWS z;(}kD%D5}`teEZ3qbLEdY@G#@c)Il8pWMgZfB*C0+OLn6bpK>%(mV0U?}1rN*1jjk zwrANHW-z2YtGdr=`YibAyOw*;>@9X#&t*4IY6<%sXvm>Fga5;KK8Icw$I~?;tp;5` z85kKF3>7kF_gDR?lR8z?a6&=H@M=rh!aRYX-jj|q_~!dE{N#*!m6z4JVC$+VoU zf59&0ZTDoD81yehZ-4)0$;o)j&#Kp39yx5d!PLrm=jhK-MJ%TY2%rR+h1v z$D*avgCDCjU%L5nTB&U7h2%pmlX`r0PfPnoPrB39zwS@U^iJl@&-g-pBjbK^YW1GE z%X#I`^7#4*;SEqHt>#`t$HD}$g zuCb1Mt3G4R^WtBB1e&J*Trq2Ec=unHuX_~UHT?c_Z0qOwd(X1(urMf|zE{_*D@6L= z+ndgXE!X?wchB}$J*n$@Ri|9#^d+r~zGsW8oB}jc&OKXP<(Q$DAb-aFYr};v4{MF& zpYk5GwXVA8sv9eC@y#xUD|QYu-YWFWGH$tP-?r!(M`FHOk_IPB4F9W*B8(sMZ9OJ6 zF3+@UI2e3kcYJu{^@~R>x@9g;dXXe!-s}458gKaNB9n`2rZ1k(JJU)xdXiveo~Kzq zer2(0DIZfI-e@|))k2)358ELrHDZ{f_#?0`v zlBwbHC=RL235S=eMX5Y5QfXZ5-pI@kRU0Kn1+`DS2)ry}h z1f1T?&NqEsR_%HIv+324Si{eO9E#W9My$1-xqsQM$F6TToSXAgC~~Reti3Dle%`~e zCi-;El&klgwOhRX9ryCTj>zY`dY1hM^AzLk>8rlRTzM6_>T99tr0rQ2i=2wpQ!I-I$>&HqVoN1ujE{2;b~KMzuu#` zL-yX&X?zonYV(; zS>{7s&(rKyu{y0f8^f{aYJhHUirv&!@ue{#-*qstOlrNF1DgRnpXchwl1B0il KpUXO@geCw6BMg)P literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/basic-reconstructor.png b/core/assets-raw/sprites/blocks/units/basic-reconstructor.png new file mode 100644 index 0000000000000000000000000000000000000000..101119dbf4694c39709f593e63b3fa5f39bf8fea GIT binary patch literal 1433 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 B)*Ju; literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/mech-fabricator.png b/core/assets-raw/sprites/blocks/units/mech-fabricator.png new file mode 100644 index 0000000000000000000000000000000000000000..96592251aeff3d2a99aee8ac0059bd10bdc85411 GIT binary patch literal 1633 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z$WeK z;uumf=j~kUd}()q8CkwBTH2PCa>6%(`PHLqe!?uPVwO*AaG08Pb={>K_Z>vJ z54Zi^VVH4%BS;{@*-UH&zrs=zp4}$}R$sPDD@%X&P2(Q}qf+H|YwQ2FpTB*4ZvOG* z_sh%M70&)U$o*;SGGXurU9e`!11%h4xcAE`&cw!~g z<>el$bixn*>{!O3!g$NH)~hA7$ZnCUQ&2;Iv9`(~Ei3tp0*aBG$F)TNV8ZSf{{)1}3SB)yPsK6bnN|P)fv3&1|GVGa;L`9-IjbWUpJyYpGHlXo`}+pR zdzCtFy(v2QC}Zl}{wYf?nqMgQZIF4cEdQ@=er^8!2_lJ_4t<{uz4z9A4d3QyXHqn& zWQIhX-{Qlf3mI3O{@JnQ@Rlw&PQh71&z~DeqJ@@>ENRu*?Cxh?v z;&qEH!Vdks^SUO$b;s||kL~@O8UK|36s-I8%~a~Z^YinY_7@6o*jOmPZk^uZ>oKvh zhmIYqeV;$+-11u@n^+m9{fqWd|M1|U@_W;J3pqL&x87NvZg9iT%4mDiwJn-QD@vxl z<78g*EhFu^%JHUa=dLf;Jru-{`TTiW}l@SrT&Gm#yqLul#15#JQj)RW@EzP1dlprQpzpzV$4^j0~rQrWCI)t=Tz) zli>otdzATNU)BegmM>D7zKV4R?;6$@Gqy6w25)5uD|X&}B!pqDX4}>y)0<~9)D|sS z$`QI}(iFbM{;tz^FwXRWoF9z2`<_d*ZHI~|VinyXyb2+eld+4O4vi)FPdXYcgT>zM2W z^7bNEfz-{MT2kDPye@9*e6(LH&a+I>N!Kh@_sX+`jS79dLhw%*us zXBET#31SOV9OsB_y-||9na^dnMU?Q(b!?H{3)nMfYBlt5%;J7@=dQ0#S^UHo25sAp z@|!uEZ}&?me!b+y2Bu!t!llK|y5cVv{!g+~`O2*0GT~O5Lr_c5^I(PYBPOmB?mc#N zV&Q(yY*2kjN+}~}gX3QJkHTfJQm>=y|ucD6KY zJ#n{Mzj`&3$iojWX4LAp+UaaLP~dH57qf5D6Pd7vH}ZQLKEB}L>+f@&zC5c_D|2zn zXGWIot1lKs_5S(v<@%fI=G#{lvIQT>$jMIT-9VIsTs-((10G7my;gg8EAvC?g(F1_#}`Pc*GJko?3<$y#qu?j z<@BA~Vvc+GUd-l*6`8w^Lu+b5yvvJC_nZXl7*c;fSukOj)^i311_n=8KbLh*2~7aO C1_J5; literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-fabricator-top.png b/core/assets-raw/sprites/blocks/units/ship-fabricator-top.png new file mode 100644 index 0000000000000000000000000000000000000000..708e36131474d379ca951bd4c8b8814c59c87db1 GIT binary patch literal 1535 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z`E1Z z#WAE}&fB^Bvt!%^jz8CP4PoVJG+}DCP!w3f^^^J1k_~qyCcm3y(yqPm+FYyf#s{ZX z1TH?uV(!^x;wc}*>C(d2c+gitz~iaN!yt{tZ{EH=ckax&ee&08R$cbIRr~wzzMJx& zzwI@*w6ThN`~G~xqnAl`ivJIIe){wzC-m3sm!DqA=;=+n%4+$#z;ref!w$}E9$RKT zVmCj?w$knL2X^y?e7$Cue{h>SwuepTWoEd;qG=kX!pl$~yyHsN1XG3sz8Z-azi~1g zXm0mE(Ui8E{XzHEQk^69yJq<3xfTomi0I`15YM8J=OpRbxpDX(#qYxXz4o=Oe z4*m%j$%R`UH>$rsef#`8zr9SUO3S18yuCqF z9lx@<7A{e1d88a9e5hdk+f!MmyypH4680+H#MhDS?X+tB)mZ_-Vprc5_&&Je zx~@g=+>8&`pYlbrEtfybTQZAr!?HD(HU_Cn9Wsq7Nqef4`1_tR1H+8kP3-gU{-2_w zEY2yDxTANKrnk|9XG)Gj8`p3+1Wjys#LS>mzrQ8^-XE`N6SETJe=Z4`d+Da1me7*B zOHVK~lnOh26kN$!tM>WOuC2jmFR+}ASUN9J=h^Zv2hP0ci;K6{*L&flvs>ZGqa@D$ z@_8Hk72C^p>Gm-^dGbcPDnZZX(CgRF85oYT#(Hnavk}uZ&6eHD$WSHxi0yl#Q_S*f zEw@^iozx1wBpb-PbeD4Gf3H&KDGw*TJCQUsf128Z86UpQm+yYM#AicHN8zI0NBCE|IPdJXM%3&`=1M&Rj8KQR9dt# zOTbT%|BTc}#+>!)8K=9BuNIqmH*Mvkqkl@4ivB-pe%!b3^@kS`TW?hD`Mf4F>aGpb zgoT~)!DVl)8W(vc8)ll{wiWmr@BPtv$;5`qO=8m{&vN$|FN+c0B_#iFmVkfvT3-WQ zo$2fJW?tC(!{cPjokJHcv21R#2tOP2Mb&PS@xs-y@@lP9j<_cY{}Pk$^nH+)q3g3k zuR+_cNsY&~hQ)WnlH-i8d^5~=&u-jfB|ql}gSmQ3NDa4@`GS(h{r(0diH7A!W zSS`KvtkQxnE12?BS{^Z9adrB$zwoBzHv1nx8+ z{`koOu?;RYDydA*-#nRhpmWv~&cZ2WiB6&7O9bT;HZQ!h?%<>y=R(9+*0RlG*~%F8 zQ81@K{*iKoxvAY&Gsjd={te6j|Hm&{o#BqnmBsIUG!C4tTKw%}_VnoWIq{F21;4G2 z5|yI{vh0e( zD!$X187p#m*s4!nfthlu)Z{^Xq@#dh<5uX!FE% zF2NHI2-=4)Pt|gY3eyrgBz*RfuhJ{MMkNzRt$!Cdd_7z%*K*#BzmlfB{k^T!-XABD z>b(4RXZv{6WlrRh`^9IWxi&6m%g5I4`O8~5v+Z~MNL}N*+foHwVp=@_jKTeDizQVTS$N%8urc(^!^}=g8L)ULCx^{6! yz+WZvblH`hIm|INc0$5FanD}n95Q_v|L^^Ic@>)z&lwmP7(8A5T-G@yGywq1fzUAk literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-fabricator.png b/core/assets-raw/sprites/blocks/units/ship-fabricator.png new file mode 100644 index 0000000000000000000000000000000000000000..c48284e98b940ce479e5d9ce09355de7c1430c58 GIT binary patch literal 1575 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!1~bB z#WAE}&f8e)EEz`uU4A2tP`d>wtqG3h8-k-}epFR4uxjdmaAaQ#Q}W_F`{q~vIyLa0bbyl62u_f1Qp2iCX1{K#C+&^XHOgf`O z!qf3{r6c3{k1^abekr;8?%~bti?4Zi{q*)Nwprb@;qE$#g;r5UKN)o^eQeM8vpkp} z|Ka!bqSyZnRa_-Nysj(T*T>)BTe=`{(vr(OFAJ??H*&}}=zn5X;k>*`O4a2>)QRT{ z-uJifms06Cyu|UNW_G(KQ>E6Tsedj#7m0E?Fv>OF9FwA-qT-UA`)>QNA{iHet*AsrOEiCW&<2TP;khb7` z|7w{OsQKTgtob_pIx0VVq_=+tPGZ zv19e8uZCiY0uHlk%J#0bSor+t@`x5bhxaF!Tjd$fesy%Yg46QYw+Y4xmQ&vzUH(#s! zZI73ltbOb0P%EP_lhG&Y+PA1gBZ0{$I8=GFt91MgLp#H8`c>T>sU8LNn5GK2X&-^*C#+#ELzFpLZPaIyCRtmbMDc5BJ{Z zHM-rKv|5Q_-u|2C*LEye*VHjzNk3`pk15)s5&ybof4iEu%*jZ>k1NV9@uzl}&mq4I@!FjkNECJH?56s+7n&7N>O~p+_!Dt z+@D{NpKC4~wm?we`Yy98MjrYf!XF8k@@)`s%$m*UDHwI~ID@UgWf8}!es)elofGT| zeJ!Rg7j7glSNFS3klQNkJg;klh+}unslAgNtLDf(VNC7*)^OQg{$@2tppnK_vnxt! zGj@NMt6tp{Af%_a{>1krgLa4R33;cFwI8-vuv8@`Ca$w>c~+;^%f&1|8Jcci&6xO1 zF#q1CbnZ>Jud=*x)p-2q6IX4=QHhmhn|Gy3mY%nG`Rau5BX*tbrT-;N|83HL%53mF z&82fd|z5xm|a3#TmK$T8*e*Ave>5{2_5 z*Hkh;Ym|~NYGKXPdZapy<*m(x>upg}S~SlK_c3PT04R`PC`|-KO`#{L`b%#Rs&QaINT^}NpWB%IVjErCHybZ@T z&6&h;btQ+6Mql+^l^AROm5j3@I2TwvDf~G7DDxC8&PAaYVq7=q>`fMYl6)jh?T|=l ox=xdqvW>XlvYhQr9RC@w^WOdca+>@l1_lNOPgg&ebxsLQ0G~(Ln*aa+ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/fabricator-top.png b/core/assets-raw/sprites/blocks/units/tank-fabricator-top.png similarity index 100% rename from core/assets-raw/sprites/blocks/units/fabricator-top.png rename to core/assets-raw/sprites/blocks/units/tank-fabricator-top.png diff --git a/core/assets-raw/sprites/blocks/units/fabricator.png b/core/assets-raw/sprites/blocks/units/tank-fabricator.png similarity index 100% rename from core/assets-raw/sprites/blocks/units/fabricator.png rename to core/assets-raw/sprites/blocks/units/tank-fabricator.png diff --git a/core/assets-raw/sprites/units/merui-leg-base.png b/core/assets-raw/sprites/units/merui-leg-base.png new file mode 100644 index 0000000000000000000000000000000000000000..8592979a68c79b41b850adee68b1584afa39587f GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0y~yV31>AU=ZhEV_;yAvHzdNz`(#*9OUlAujjYrqE?$EMz>Qh+fb^UIa#tYY$n=^JF30>f; z=9aukvvzgjjEBkhp0G=pmZYXF%8OzMU?|ufH>bD%_sv&-U4_+_mu!g2pVOPF8WP#L z;=w$N3cJ~_4J6J*uHE6JtCacl$?KEX>Z01qlY~P=c7|RqT(JCT(QBDQOu{GE2&*@5 z4!h#Zt(0jx<3N4R_o%sEIzKktS7qP5Cd}dfsTpRQ6FyrBo_rDTpj&o%1Ji*k>}+q$ zcUPDCxeI8S3G>p+n=A^CbFs9gn@y9!PC{xWt~$(695YI Bd@=w4 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/merui-leg.png b/core/assets-raw/sprites/units/merui-leg.png new file mode 100644 index 0000000000000000000000000000000000000000..020566c4936cc313b78b4a5fb56a3bd608dcc024 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yV2}i14mJh`h9fUqlNlHo7>k44ofy`glX=O&z;N8t z#WBRA^X-&_oQDl~T=%=W7wWa?T$0=E{*ohBV~W@$SEhYOb}w1ZBJ90Nip%zjd`ZWI zuU~p)7QE7bs(1bN9CfD;IS)S<>K8fRx8!coX^;@Exh(ec@k<-yr>$Y?QVQX-+&0d9 z(qqTSkRYo&Y0gB}4QoI8?rw8EqH5V-(!(0!V8UMQxMp(xYx4(*nTp%sju Y#G}^e8Z7$Hz`(%Z>FVdQ&MBb@0PM|a2><{9 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/merui.png b/core/assets-raw/sprites/units/merui.png new file mode 100644 index 0000000000000000000000000000000000000000..270c8efc539d2e7f72663231c09919b2178fcbdd GIT binary patch literal 812 zcmeAS@N?(olHy`uVBq!ia0y~yV6b3dU@+rgV_;yI)DxA*z`(#*9OUlAua@IZCmrquWE{J6f0y!2asx%y+l|C4p`|RX&NRR;zIND<`;u6nqa@PUk$K`t$eo(hJi*Ev|7Y_E@TSRA|TCyL*?PpFN*X zt8DY?(<}P*-zGahowBLOdUy5t2M(K8dtYmx#Aa04T~zS-XVaGd->bTNkMvwt9@Ot*~sqb&U zzqesq1<&s&4e1N}!;=cq@79)IyUTy;hoR29!#W2-EM6I>W^=A&=v&$9!*=8@i;9u#caPutljU=C@_3RGPqTj)d@_J z&CCa74ANI!`L1BD$gU~)e06KF-sY}P3ihnyYaG%2BXK9Bnuw9+fi@N zU9OE{pHs}%(EZzb)6q}dJghI{7i+yMxx<~8zj719UzVB^?Kd?nr@eoC{8VcQbC9tA zaa$q15Z7AUGj31vPBeztvfr=&A)#~q-?whn=}D_I_gtOZ!xHrCw0F+du*r%CpBlCNIlQB@m*))lpjv&RbBaY@~JPb3Uk(&c&?2HrNHjj a_8Tv)oXU~2GKYbIfx*+&&t;ucLK6U{e}ZcO literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/osc-cell.png b/core/assets-raw/sprites/units/osc-cell.png new file mode 100644 index 0000000000000000000000000000000000000000..af424fb76a9e2950aec46ea19ca857884c8b05f4 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z^LNs z;uumf=k1N#yv+tY4uQd?Q~VD8Yf^oo^JV$8MI1~fbpbEu-S;ZXQRviWVt|7K{@2#; zKBmokjq!CW-{A{W4_n2(O_V(ITC?(*LG}S7-*-o=pBQB}=)JH#FZOVjNqea9F6jXM zBbzx(bGp@Lykqnd&)S%n$+P}gnfU|LzS*u(@2*vE{8kj-bywP9>iWe;4{a(cvHa}2 zt#6~T`<$>oLjhh^x{-9`EO{MEUuV%#CL;^#p;TQPpTc#9%_Bjs`(}-Z~3Cd zKg8X)W8SAAw^Mu7QhIh|8kgQ}i9YxJ-n7gp<^R5H3=A5z44ZrxWR*E>$^v=c)78&q Iol`;+08UDnX8-^I literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/osc.png b/core/assets-raw/sprites/units/osc.png new file mode 100644 index 0000000000000000000000000000000000000000..0f27bb4678d7a818a24e5b4ee1434a7adf2e79ae GIT binary patch literal 976 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEk44ofy`glX=O&z})5O z;uumf=WUd=M~tJ0Z5zinCoe^TYtI^cUA=BQC~;2GQY`gQHPgJ5J6*}wL-pFC))R|X zOfXyODwXIM!_>4iLE0m+E7feX`RASA&mDJo*05pU_hZRBh_i*0>zIEA3pzD zxcTm#=F=yiN2!HKvgCeLy`2$ohe0c)r0`kow0o-)57p*6zx%ZHb(OGU$b;3#*E2Hg zUT!@(dvUk%7qRJTxxt^0FL=ec?`+TepX**%9=&}2zzvqp9})iqjQ6^4$=9+%w?`)=iv;BybYJjM3HMMv$Yxw~%t zD$1;0UZt8LbSdzjd9CD*We(@|2CSR1ep!Z8%>5Vsz3UdHuC28GwoYH|!htx+S!;_< zL~JfH`SEGz{CcS+jn0o4?>#!s{%+BUqpnJF0eS87?W#}COBa6@?)oVA&AfLHUOnsh z`{(4xeG&axJRejS#R_ul|M_{R?VR&(E8p+FwX3Mb;^>52>zt0C96>h@Ijb#s@<5@R zaY{hX0`Gz|ESY?IlXyP}p8Pq@>sf%f%NY~#Ss1o-`7JJk2oq40)M7y|TNn&2MZdzheQD$;tNq!Lne{O1W28uv&MrHxBfN)Y`ac1)5 zmAoDzf~9$xCAvka1&NtOx+VGLsYMKyn?LbxV&rDcO)V { node(siliconArcFurnace, () -> { node(electrolyzer, Seq.with(new OnSector(three)), () -> { - node(oxidationChamber, Seq.with(new Research(mechReconstructor), new OnSector(four)), () -> { + node(oxidationChamber, Seq.with(new Research(basicReconstructor), new OnSector(four)), () -> { node(electricHeater, Seq.with(new OnSector(four)), () -> { node(heatRedirector, () -> { @@ -228,7 +228,7 @@ public class ErekirTechTree{ }); - node(breach, Seq.with(new Research(siliconArcFurnace), new Research(fabricator)), () -> { + node(breach, Seq.with(new Research(siliconArcFurnace), new Research(tankFabricator)), () -> { node(berylliumWall, () -> { node(berylliumWallLarge, () -> { @@ -261,7 +261,7 @@ public class ErekirTechTree{ }); }); - node(radar, Seq.with(new Research(beamNode), new Research(turbineCondenser), new Research(fabricator), new OnSector(SectorPresets.two)), () -> { + node(radar, Seq.with(new Research(beamNode), new Research(turbineCondenser), new Research(tankFabricator), new OnSector(SectorPresets.two)), () -> { }); }); @@ -272,44 +272,39 @@ public class ErekirTechTree{ }); }); - node(fabricator, Seq.with(new Research(siliconArcFurnace), new Research(plasmaBore), new Research(turbineCondenser)), () -> { + node(tankFabricator, Seq.with(new Research(siliconArcFurnace), new Research(plasmaBore), new Research(turbineCondenser)), () -> { node(UnitTypes.stell, () -> { }); - node(mechReconstructor, Seq.with(new OnSector(three)), () -> { + node(basicReconstructor, Seq.with(new OnSector(three)), () -> { node(UnitTypes.latum); + node(UnitTypes.avert); + node(UnitTypes.locus); - node(shipReconstructor, Seq.with(new OnSector(three)), () -> { - node(UnitTypes.avert); + node(tankAssembler, Seq.with(new OnSector(three), new Research(constructor), new Research(atmosphericConcentrator)), () -> { + node(UnitTypes.vanquish, () -> { + node(UnitTypes.conquer, Seq.with(tmpNever), () -> { - node(tankReconstructor, () -> { - node(UnitTypes.locus); + }); + }); - node(tankAssembler, Seq.with(new OnSector(three), new Research(constructor), new Research(atmosphericConcentrator)), () -> { - node(UnitTypes.vanquish, () -> { - node(UnitTypes.conquer, Seq.with(tmpNever), () -> { + node(shipAssembler, Seq.with(new OnSector(five)), () -> { + node(UnitTypes.quell, () -> { + node(UnitTypes.disrupt, Seq.with(tmpNever), () -> { - }); }); + }); - node(shipAssembler, Seq.with(new OnSector(five)), () -> { - node(UnitTypes.quell, () -> { - node(UnitTypes.disrupt, Seq.with(tmpNever), () -> { + node(mechAssembler, Seq.with(tmpNever), () -> { + node(UnitTypes.bulwark, () -> { + node(UnitTypes.krepost, Seq.with(tmpNever), () -> { - }); - }); - - node(mechAssembler, Seq.with(tmpNever), () -> { - node(UnitTypes.bulwark, () -> { - node(UnitTypes.krepost, Seq.with(tmpNever), () -> { - - }); - }); }); }); }); }); + }); }); }); diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index 73d154062a..a5ee4b5227 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -151,7 +151,7 @@ public class SectorPresets{ new TextMarker("The arc furnace needs [accent]sand[] and [accent]graphite[] to create [accent]silicon[].\n[accent]Power[] is also required.", 268f * 8f, 101f * 8f), new TextMarker("Use [accent]cliff crushers[] to mine sand.", 262f * 8f, 88f * 8f) ), - new BuildCountObjective(Blocks.fabricator, 1).withMarkers( + new BuildCountObjective(Blocks.tankFabricator, 1).withMarkers( new TextMarker("Use [accent]units[] to explore the map, defend buildings, and go on the offensive.\n Research and place a [accent]fabricator[]", 258f * 8f, 116f * 8f) ), new UnitCountObjective(UnitTypes.stell, 1).withMarkers( diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index fe692a9f85..31f50ffb43 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -38,7 +38,7 @@ public class UnitTypes{ //legs public static @EntityDef({Unitc.class, Legsc.class}) UnitType corvus, atrax, - latum, anthicus, + merui, latum, anthicus, bulwark, krepost; //legs, legacy @@ -46,7 +46,8 @@ public class UnitTypes{ //air public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra, - evoke, avert, obviate; + evoke, avert, obviate, + osc; //air, legacy public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType mono; @@ -2829,6 +2830,35 @@ public class UnitTypes{ //endregion //region erekir - mech + merui = new ErekirUnitType("merui"){{ + speed = 0.75f; + drag = 0.1f; + hitSize = 9f; + rotateSpeed = 3.5f; + health = 700; + armor = 5f; + + legCount = 6; + legLength = 8f; + lockLegBase = true; + legContinuousMove = true; + legExtension = -2f; + legBaseOffset = 3f; + maxStretch = 1.1f; + maxCompress = 0.2f; + legLengthScl = 0.96f; + legTrns = 1.1f; + legGroupSize = 3; + rippleScale = 0.2f; + + legMoveSpace = 1f; + hovering = true; + + visualElevation = 0.1f; + groundLayer = Layer.legUnit - 1f; + + }}; + latum = new ErekirUnitType("latum"){{ speed = 0.7f; drag = 0.1f; @@ -3300,6 +3330,25 @@ public class UnitTypes{ //endregion //region erekir - flying + osc = new ErekirUnitType("osc"){{ + //TODO needs hover passability like legs - move into UnitType? + hovering = true; + visualElevation = 0.1f; + + drag = 0.08f; + speed = 2f; + rotateSpeed = 6f; + + accel = 0.09f; + health = 600f; + armor = 3f; + hitSize = 7f; + engineOffset = 7f; + engineSize = 2f; + itemCapacity = 0; + useEngineElevation = false; + }}; + avert = new ErekirUnitType("avert"){{ lowAltitude = false; flying = true; diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 41555fefc0..ee7d5e918c 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -150,6 +150,9 @@ public class BulletType extends Content implements Cloneable{ public int fragBullets = 9; public float fragVelocityMin = 0.2f, fragVelocityMax = 1f, fragLifeMin = 1f, fragLifeMax = 1f; public @Nullable BulletType fragBullet = null; + public float bulletInterval = 20f; + public int intervalBulletCount = 1; + public @Nullable BulletType intervalBullet; public Color hitColor = Color.white; public Color healColor = Pal.heal; public Effect healEffect = Fx.healBlockFull; @@ -423,6 +426,15 @@ public class BulletType extends Content implements Cloneable{ updateHoming(b); updateWeaving(b); updateTrailEffects(b); + updateBulletInterval(b); + } + + public void updateBulletInterval(Bullet b){ + if(intervalBullet != null && b.timer.get(2, bulletInterval)){ + for(int i = 0; i < intervalBulletCount; i++){ + intervalBullet.create(b, b.x, b.y, Mathf.random(360f)); + } + } } public void updateHoming(Bullet b){ diff --git a/core/src/mindustry/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java index 5d450f0e89..d7c16d0931 100644 --- a/core/src/mindustry/io/SaveFileReader.java +++ b/core/src/mindustry/io/SaveFileReader.java @@ -62,7 +62,8 @@ public abstract class SaveFileReader{ "block-loader", "payload-loader", "thermal-pump", "impulse-pump", "alloy-smelter", "surge-smelter", - "steam-vent", "rhyolite-vent" + "steam-vent", "rhyolite-vent", + "fabricator", "tank-fabricator" ); public static final ObjectMap modContentNameMap = ObjectMap.of( diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index c4fc7f0627..2e3aed7657 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -165,6 +165,7 @@ public class UnitType extends UnlockableContent{ public boolean canDrown = true, naval = false; public float drownTimeMultiplier = 1f; public float engineOffset = 5f, engineSize = 2.5f; + public boolean useEngineElevation = true; public @Nullable Color engineColor = null; public @Nullable Color trailColor; public Color engineColorInner = Color.white; @@ -505,6 +506,10 @@ public class UnitType extends UnlockableContent{ mechStepParticles = hitSize > 15f; } + if(engineSize > 0){ + engines.add(new UnitEngine(0f, -engineOffset, engineSize, -90f)); + } + if(treadEffect == null){ treadEffect = new Effect(50, e -> { color(Tmp.c1.set(e.color).mul(1.5f)); @@ -871,7 +876,6 @@ public class UnitType extends UnlockableContent{ if(trailLength > 0 && !naval && unit.isFlying()){ drawTrail(unit); } - if(engineSize > 0) drawEngine(unit); if(engines.size > 0) drawEngines(unit); Draw.z(z); if(drawBody) drawBody(unit); @@ -1010,27 +1014,6 @@ public class UnitType extends UnlockableContent{ } } - public void drawEngine(Unit unit){ - if(!unit.isFlying()) return; - - float scale = unit.elevation; - float offset = engineOffset/2f + engineOffset/2f*scale; - - Draw.color(engineColor == null ? unit.team.color : engineColor); - Fill.circle( - unit.x + Angles.trnsx(unit.rotation + 180, offset), - unit.y + Angles.trnsy(unit.rotation + 180, offset), - (engineSize + Mathf.absin(Time.time, 2f, engineSize / 4f)) * scale - ); - Draw.color(engineColorInner); - Fill.circle( - unit.x + Angles.trnsx(unit.rotation + 180, offset - 1f), - unit.y + Angles.trnsy(unit.rotation + 180, offset - 1f), - (engineSize + Mathf.absin(Time.time, 2f, engineSize / 4f)) / 2f * scale - ); - Draw.color(); - } - public void drawTrail(Unit unit){ if(unit.trail == null){ unit.trail = new Trail(trailLength); @@ -1040,16 +1023,18 @@ public class UnitType extends UnlockableContent{ } public void drawEngines(Unit unit){ - if(!unit.isFlying()) return; + float scale = useEngineElevation ? unit.elevation : 1f; + + if(scale <= 0.0001f) return; - float scale = unit.elevation; float rot = unit.rotation - 90; + Color color = engineColor == null ? unit.team.color : engineColor; for(var engine : engines){ Tmp.v1.set(engine.x, engine.y).rotate(rot); float ex = Tmp.v1.x, ey = Tmp.v1.y; - Draw.color(unit.team.color); + Draw.color(color); Fill.circle( unit.x + ex, unit.y + ey,