From c0c7e0f4682cc7d4a2413c94e4a03201d7950961 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 1 Feb 2022 18:05:56 -0500 Subject: [PATCH] Mostly finished T2 spider unit --- .../sprites/units/krepost-foot__.png | Bin 647 -> 0 bytes .../sprites/units/krepost-joint-base.png | Bin 0 -> 587 bytes .../sprites/units/krepost-leg-base.png | Bin 611 -> 1003 bytes core/assets-raw/sprites/units/krepost-leg.png | Bin 691 -> 911 bytes core/assets-raw/sprites/units/krepost.png | Bin 5768 -> 5860 bytes .../units/{ => weapons}/conquer-weapon.png | Bin .../units/weapons/krepost-weapon-heat.png | Bin 0 -> 1491 bytes .../sprites/units/weapons/krepost-weapon.png | Bin 0 -> 1035 bytes core/src/mindustry/content/Fx.java | 11 +++ core/src/mindustry/content/UnitTypes.java | 80 +++++++++++++++--- .../src/mindustry/entities/comp/LegsComp.java | 22 +++-- .../mindustry/graphics/OverlayRenderer.java | 4 + core/src/mindustry/graphics/Pal.java | 1 + core/src/mindustry/type/UnitType.java | 10 ++- core/src/mindustry/type/Weapon.java | 2 +- .../ui/fragments/PlacementFragment.java | 3 +- gradle.properties | 2 +- 17 files changed, 111 insertions(+), 24 deletions(-) delete mode 100644 core/assets-raw/sprites/units/krepost-foot__.png create mode 100644 core/assets-raw/sprites/units/krepost-joint-base.png rename core/assets-raw/sprites/units/{ => weapons}/conquer-weapon.png (100%) create mode 100644 core/assets-raw/sprites/units/weapons/krepost-weapon-heat.png create mode 100644 core/assets-raw/sprites/units/weapons/krepost-weapon.png diff --git a/core/assets-raw/sprites/units/krepost-foot__.png b/core/assets-raw/sprites/units/krepost-foot__.png deleted file mode 100644 index f035f791d4816aef3efa8cce1957f85b9dae645d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmeAS@N?(olHy`uVBq!ia0y~yU~mIr4mJh`hC;nZEes3{jKx9jP7LeL$-HD>U~=?y zaSW-L^LEZzUuQ#}2HqqQi%lFdH<=Bc+#TK=6cl^NvHQTupp}n~l)bUY`+IlQzI|%< zPxn7oW7X(d^x?7B?}P2fm&d=_d%nN?Yi+q>XyZH)mEAIh4=sZxoGEf)o$led=~SY4 zlrrl{jrPz7lA0c7mWK~Tc{m!Kd?|J%h>PLC+q-}FU(a9P{!;9<>g+u$w~M5xsB4+* z*tRc`+l!0gz~|GAYb?G$jIeiUU`?tDnlMc!Gj;9L9esu}n#cdt)Ss=9Ww=qQy*<)X zi}j{!pSR57sZDPbj;nr}E6SXpyqq4+K6)8-seJFQ!IA*&3h8|YNlC5UGcq(o z!Y8#zT~7AV&lO-y7b}skDW9;2m)))CN|KSsK|SBt>ysA?P4+zXqROi;!pBW>@%gP! zI?|TPF6nu3w&P0m+M8LPMm3^y3>u}q=1i6FKIg@g{_2_EdnLm=@qEfJLt~77Tr0^n zja8ocM2Gvs1fC*|JJVQB@D=slOcLb0z}HviYt6ut{vk~DfabPy4_r^rJZgHNdy??H zgOBSjo-#b1^&xb-M1QQ$=7MOAuFPVv4uVHdn+dTD3wotWuqv`2mUboXar*OJS_Wlt-v zXpUhi{nEdHuUqKK$D}5!34Q_fi4FnvRe>U|f(PU$N9BK*@2<9jfq{X+)78&qol`;+ E0AN@i#{d8T diff --git a/core/assets-raw/sprites/units/krepost-joint-base.png b/core/assets-raw/sprites/units/krepost-joint-base.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6bf26d16a658176faf9fd3d05cdea9332710ab GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?Of7>k44ofy`glX=O&z{Kk5 z;uwk*$_kgS zPW|F%;4!OqT2AdAjjI_ZSNJ^A-Hd({8B-J4GB?3kJs&UKQ>PBOYF>YQtj$!exhu??v; zLRX6Pc3gULC?=92#RwQ^UOlyNAVUG!bm;w|^i ziJsP}$S&|HxsmGDDd*0 z$Xau0pRHk)Rf4zoWL67yhJ(d16Q*f#tH^%5;ZgsZVM}ubyKlu?o4Ezmv0Z}7v2VEx z83PF4#kd)ApTAVnLZ- zeC?8;>i_H1YcJ18D4%mAO?ir40q4qk4>O0Zm^Noz6+NF7i!>i)LPMoT}Udhie<9t0cgIM>^W8d2}IyP{LbQnD4)SarK z6|QtO|An=O=49(*Y`&%&moOb=VV%OYrpe7J>*gURSH1A8#ew44yFIS_I`Q<2dhDr^ zJfEU7yqcxK@^+7N1b6EF^*p6}=R$jbEyIDcXLT7K{QBiTq40*gmSfRrjT8?9Io`=> ztKUvp$K7db`Id>{*IvEa^y7IHq4Ap5Z zW>Tf;ov!mLl08+oojfZYecI=JW#FFBHT@xnT=Q~P9#Pvlhh43=DDrcJ{L0neyZ7m_ z=*R8b_1*YgaDimEz>#HJAFoZSUApYn$6vKPmx^LjGbcyiyeg|ae{GWb5+o3wWn*Z_1XDaZr+YfTRd5Fb}=XTFSpKI;}EF#h_y>6EU3r- z!lWdrXqFE5DXt9B+lrn4ZknsR<^2t(>Yo2wx^2%Eib_{x^DwAfica1!b@_tXH_)g`esgD#Nn+9&1ZzffG^|t@=>EgRL|Gi??bAP#(^f608Y0xN_zr zGtQ+bhc6CUaA>vlO=*Q^GE;wD0>|}({dbJG`1jZS^N8DDDZMvd?^V!7ZN;T&&!@dq zzkW1n-7kSjcRKDq7ruN=l*i*qg-M96=!2z6TZ_^+uU5D|Eu8g|-jsyijb6&;E3fh~ zK9tT6?_=J?yyx8}d-jT@8B;@{sYWmUJ^ZL`mbU-4n(S+RVcUZu8b+lBAD&nQ zq?}54-}%%*Q2xi4H>ax4eBZAAwfo7R1|f~4X6FDGX&Z|jEFz2+tX&yR{#*Ebz7#*S z2vEA$`p`{uwzTdBt!=NXvaZcuQ)_x4>&Cj*_4Vgijqa;$N_qzW{4BTc(l)yh8Pdb5s${i)ht03Mb0!pJXT`JKFkHxSKyQvp zh0)&}4pr89JY_vTY|^uOywtT)8usqC-4Ivt^xDxh1LfTTK>bA!g`o|PAdfxSJo{%M0t9VuCx$~;X6`f~NIp0lEH9lc(!IV8? UWBBb43=9kmp00i_>zopr0Q`OnQvd(} diff --git a/core/assets-raw/sprites/units/krepost-leg.png b/core/assets-raw/sprites/units/krepost-leg.png index fc8fba6a7fb1fea9bf14310fffafe51e132bc39a..ff3330fe9ab916a585de03c06858d93a91d86d1a 100644 GIT binary patch literal 911 zcmeAS@N?(olHy`uVBq!ia0y~yU_;zv~piUd^BYtKOx1944tVXa>4?_pT6dl{?V&iJ{|EA!lCT z6ps%|9%6!eno1AL3%G7f?)_eto}T{h+mpXu^S|HEe_odUt*l|uqD708bZ1_y*fe3? zmnT0?cwE0}nwuH2$}lo^a@WzQqY>}^9aLmc`MUJ~JKNQF5-xnVd%mY}RYI<``f>Mj z?D__4U4992o3mWi63Y`#U|jI(%KZELW6rz&c4+l(%@SqauDM~x`T0ByfA;QYXNZaY z$HMSNUZ(2y`eu{r9iO*}H%W6}?c&;QxWQrV)~ct>M_Ny}X1O-5ekAH~id{ct>bgxU z0~*uUr<=^H_&?b;!hvrc%N12!x5u2X7*^}BUVgdeTjYzcUpsf-V><9$KmO+1UtfOw zIL~mP|NZ^2I&t>b%~?~KrfXeS;fU60*!nRnd%dNtwB8b_B@Roy4sT+N++q6I^uTE; zZAKR%tpojwoSrWE^>Sr;VWC~kwus-{UAgYoZ{)ZG3Hc7_#P%c1>Y46=ZiEa zAAD=R^-kB(sKE5empG0a#e6l}_^?&P_@tlxG$tSJEHBI4qdxD-?lxZuw-G&;a3MTC z&0?1AoryZz#d5lq=;ZC3Co_#nn=8gx%3o~Kw1q#Viunp}1&LM`J~Z1a7xZu$8|TW& z5xH?P4!Jo-Q)a{~d3e}HM||W;a@e}F_&1wxY3G)Q>vl$qBv|fnUgvn6O?Xy;b)npC z*R_pPx%jp`y%m!bYjoDPr#9?@TFm`~l?7XEo4IoO*bVdo*`%9px9kpOVo}ZYj=o!B z72G&m`pN|MMMYr>tmf^$mzFMZo*^*f!h+z3Ws+I}kB@t?a^710#aCO6A#(GL8ylu2 z?Ob{4U-ArWhHX;>_~dx#Y5L=O(+SY*VBDJ*vsrrXn?IRdVDVeKw(kjIQ&l z&b++2A;!=v^scCKp}pCbg{GyN@4n_oO@CBYcF#ipsOc|5L)EHBah97>rz$yZ-u_)| zoea0=hD(!nUDf5;ZkEaVf+6DN>Q6!in|Ep1&$pk+FK<6HF8}(Ms@>1NJ-c=1Ud(1= ziQq}rK~2-{OtLo9lU>=lv|*A%`UNMZ*fX0Zgfhi?{tUUWEWKfMPTXw1tt(cnSm6== bpV8BL<=!7xkKAHlU|{fc^>bP0l+XkKaI2l( literal 691 zcmeAS@N?(olHy`uVBq!ia0y~yV9;h@U@+ofV_;x7+M+a>fq{XsILO_JVcj{ImkbO{ zxt=bLAsLNtXIlF)JMy&cos+sfGE<*Ph~wfix0M3!Cj=LTbj%V{obW(t;M-Y2F;PMPxX^lIyi z?srS{?(cqktfqS1nMFG~GZ!#098R47%~!N(sh@7Z6xKW2zS`fPb7;ehE8Ja^8U(j| z(f#RhFwM15Q^SkN@8Gw;5B@z0P~5=M^{C|L2&Z7ie(FH0e4920qyJGQvJ+ zPy6w+f;V_qvwmQjUM5yx*>_-_@4?xeYh65rA5Ci!Ie%u2cnCAo1a+ss*&jo0aA;)l zY!LO2VY|ita`oe!#okPBx1QWIv$vt>{F=8@`=EIK4kIF6e?U61%=%%nPKkx3gX&M_irO%2r@WhzMRvg!E486gl(Zw`HRVBJlQ4J@++*NRP+$yPFx>M=d`ZSzI3iFL<5ukx12()VpT zyJlN;q42`wt5_c)S>hG7bZvQ%e{`^hW&wr%k& z+wzQ@H_S2SzEQ35C1&TYd*Co_L{WV{o6lEvmZemwRY=XnAS_g8(|^UeIb-7ae#zH6t7J1QP)Ie8YOxGaj+KELo0 z?`jtHgMw#WwujAgJ|-R7IE}^KMCfi*C7*15Kw_1U%tW7(?5Bk>R)H!)G7~*OY`q_s z-!Q#tN@Z65M!<(n4izl!|nYZwpGRoI~eX=vG zTK3S+$KPyaLwVLYv}?&Mx*FGhVO_NM^Uj6c@)vI12-|h-z}0=nZ@%-l|Hoke_lL8$ z;j)9en^USiYw}sQO<8B2u=9O!tM}jgMr%{2W$5?5k51h^Ic%-;p|yuvWn%YF{Cn=> z$H21tYmcPb+1j4}_x9&a&rhGX->Yliv;W$+M>*x}+gA0oDkraO*YIR7h_uOk>2-+l z$x`MAoy(8!B;YsG1AakfK?Dr6oCtgPCS!+tv3*CK`eHyi&~>|Z_=fyQa1a(=y}db*x9mJ z<**VCBLJx`ZZKR#RT%Q5};94(or#-35%H7gfnE)6*sWEYXD z`Eo;J@b@WMoL44`OmbcuWV!Xo>$}f86ieUkURjhRw?^%r(WRrj(%s=)QvcSeYO3@< zn8Gq$EdPsL^{p8~&MJNXy&mZnPTzlJ!N;lFEEg|8;uK)Xa|A*)Q|IXfWK8nYCb9&v+pVgl&bN4NOEO+n_!_;&3 zhwAt5|767wqvF;VL~a5Q&*lh9!q?JpI}maaBUcvmO%Jm}kM z^Y^j8BBS<%wm3(f@)qRlylw5S*|zm}$F-xz+Oew(WQsTyH1B17f4$@BQ;zn4quLuc zRj4gpY!Zn4`fYUx|I0=yIb^*OF8_jA3Z&F)jE2a`<`peuefydWgG5H5Lytw zU`H>64u0=jN`bI(KfZC&fJ7KO^R!^?%Z%qlH<5=XVt_aC@*H$oA+f z*tyc{)*;2sM<(CX58rc1WTV{2Faf>uGYE2(jLZ`NjQl}R3tJbB+8R8#-5Sl$2T&G(DS1(OWd8A9xR)hlhLi-=#I@ovI1si^l4lg^#@TlHw}ym|X0q*Y5@KW*jTr_w3@ z@9dkCOv;f}6)Qa>cW`HQi)`gmFWq-(*W9R`hpV1H3!GN9(fRmNZwEoXlbz<#JMO)G zdTRcv_1(u0FYV6ooMIukmgD;FyF27`U)Sxb2#<`jI$0k0U4=t!iRr_t?fqY0Mm~%R z+9P|UtzAjR$azoD@9lnT;#_SedkQEi#{9|Xm{zd#v*qeTty9i@-0{3racS|M zA9vP?m}^}-|Iz1rNsw*KkIy_0%N8uJyCSz<#GLP1waw;Bp8T4J%e$8sJbabWFzJ$g<%1Ue=I@PEqrFuI)IZs~O{w_08ja*R?rE z7izqHy`4wxl2XjeIZM^ghKd->pgzcgpn_t()%js#WjW z&A44*4~uFl{?{2w9=?B8Y`we1lCbNSKGo>ONo~I5xko(O*+OM%&&u;@o$87*L9180 zeoWhYer{9bONLjx;ZoPLx!PMg!(Ryob=Fi>#nq-P4V`oAd(m$_S%s`pSG+&1xT@>}z4z1KYdv}lUAvEkLf$9P4|)#eo!wrkyK zSeD1-ZU3dKwDRjS+l#8lvj6-$^;$nKYdIgorPBrluaEW0^UZv`>&X3$C5!L)_)oV| zYUOp`%OqyLt)+nBt!>;oc1wHf%8SxHvu?HguKfCJ@0-@%YjXP6?e6T_dQAUJ|CMr` zuN7)(itMZl>C%l~AmT|RrwzOE)o|m?Brz&5_d8m<^ zp}PI3#6wrVDVOf&S$JmQnT?Aorp%eCd(Y&h z#-ZK=lL|VfR9vx~q8cXBziIx=N51lL%QhH^TolkVT{3yj=Ez@lS@u(oXD&G^-8$8# z%TRsp)V5igGMBXEO8HV(#u)0&lUcT8^CgGHEsGC`t`7|n&zA{a;@!J^tx1pSLxEKu zdz~*i3+G>}yj$?n;?Uh)wP$@U1oa5;t>jcK{pjkvXX2EiV_g-_OCNJB_w|2o6=dP^ zOE%AP%TZ~=RU38g8N7_KkX&*vEb8#l%ZIPDiZDn%%<9bW+%e5^?vE$s-34?0o)zUp~Qk|WF4-IiRe8>bt$R(wKH>I}tu0WYJpPS{>*&)~k! z{dIw}X#cNr<#YKaN3}0b(qDX3TJ7$-L%mTUE7U^HcUxN&yn6j;X=UY&c{9FnTzB$5 z-Av}%y_SW=^%6jqkH5&WoEf-14lWbX|B4boE z^_k?6ui24C`CsOoy;$jTbWVvjSNj{SxOH)Qanj3{OwLkxRj^u>F)RH2k|U?5zWwpz z#VPx9-*;Ylb=gRon}^ZeFcu5Hb2 z6%zI<=WO_5F^Ti#A-0#9Pk!vS{HPMQc&Vyf_>Noew@%VsxBtoO4Uf(*EjrXyaaio$ zpWpWXil1KWjNZP!llP;^`Ug{mv`qhW>Dvdt@7~HKK56$VkG(|_=P&x`3PoEz=;?Dl z{ZG!ea@L&gU)%TpOYPtfuHJP`+5gUkS&enC-x2@>NBlW z6#ahF_MXYhs`$cg-gUY%Lh7?zA7 z?V@|^yMJC^HMbr=A-8^Nj^Gcr# zczK8`O1%H{xziY_A9)@(nwoBG)uj2nB++$gtM}je++P`e zJ-3`cm^SC}*DZ@fbdnF%%r^Zrt4#4}_j&m}OH^ZC8fz)fV{v!mGz{7^@7v_Q)H6SC zp1cw~cV)Q#QmIW_WKTb;{rlnJhi(t|>-j6};rUwRee~(Ne^-TKljlyIbzx`d=A!rZ88i0= zTGe0gSbD|I#Ngs(#Vc(uGY{M;S8Y9Q=xlMSY^QD9=~+{De!JSS^ogB`L8!!%5|+ss z2kvk)SUTHyJ!;*1ck}ywy6>8`@4S3jdAZ!{H(&fhpUTtx%a5O)`t_cB`R>On=jvaY zp)D{e%ft7fKv%^aW!u!9&2p7hM;Ggu2R13it?h|=6e+@YU_*&iKz!lt-$9cmOeuM2 zr&6{0TJDp5>YB1!bA%qPZCY7ue6D-mF5N6};-1U0y80`1CL0CxbGJ=97sOC4H0xIOmoMkU zTAX!``Znh--7K)y(#4S}8r$VD*j_K|DsaxuIrz$kqYPrhHdzYU|E&sM#Cd&OpfmCqr-Xpi( zujP4~_4L7&;B4MY(<;24PcaEzy4Zwa`9wF4_AmS9EP2Z4zcQL_&fnr!nT|Fu=Uhsd zRWhe5_+QzQ0*^TrSCsAl^(oJLqRV_oe`ycH)2eCv)Hzl6U9wzybjruvRfiHc6irSp zeq5;gP-R+f$LmR6r)~+~m06heJZPm=;HeX?uQk8kv5fOu6cu;Y;<)s_!?OxFLTyeT zQjC}$Wb}N}medzBgx80tdr9u>5$acxNpjq?@UZu)f~DsV=YHV`_i}jI+6iiApPX|m z{Wa_KE8nw97fqSi9VXpg_?%<<@0u?G#WNmSaNF2i3TT@1`eT)zXFFqm|1sk*Chmiu zJYpUmG20ZRzU0b3nWEeyXSM(Q4)j;$x#{`m#?gykrPnOZ^4b&jGKjOIasJ#n3|6aS zv-bt{c&+S>KI-jx{Osx<@7+6=?_)lv{M9mRZ|u9kDL*z!Wv(uX{rRPVa9(8(c?<&w0XY5;dUtzxY7nOxy zrXHL3Ht=;}Rn@&IZ>Cth(U^B5ROn-iFx9ZmgUz>zs7p%e5nYUG5Or2 z0@WZ+^|>u;A9;M=aAjB4=I)AROQKyZRDAXX3H6EiXM1?BU2SIFk^X9qUY-o+!>aSo z8J;wyC0d2?d6%As>QSgxndk zF1Uees(Gdl1voznc<+^IDDXFTvhi}x-Wyh7{&5W#yFTFXZvE^I&=A*0M&X3~PeK=v>_M=fEd=4+?Vo^ ziF)t8e&N*PS>i!%-QiqkI6k_mEmI3(pCaZ}D5X0u?cb`ny)vqDstQq$&Pp|9Dwvk! zH44oSe5CtVK)a!aRb&0rvxc8-w5G1uoU$cEtYP1dFHfAi1Z9s-_+2vX$n2jld}rL) zTy3wN`m*zQ*C9rpJ(hWnHggQ^qxalAq`3KXQ(;DAN>=DY1~nbC(=+wlDy`40zhC1c zHE#)1cH-Cd&Z?yk7N2=(V{fhaoOS9&@xN{U%#TAhe1B`<@yl`(e?7Z3 z_ts<2r>qC&{P3Mwt*IEdzQCiuBBI|}(0|dst>4~>g1YdN z*^mQnIwwrHJAV}=2X2Fp?|JB)#6Ow9Ss z$={TNbZ2-q-4ba1?a{>|wJ1U=YhBR(dpDx39_U`bJT>C!igZ=RHB%NJ(<)rLX=(|> zYnF_%L+9_=PYr!^@}SS*;C7WO3Lbo>rotu10*a^p@;H9$RO2xhMU_19B?TYXZSu0+ zl9c1P=OyceJ%;lR9sS)LdTPDw?VFEuZNFbSx_GnKPWPi<5}wC>bIPqaIr*dL(SnCL z8@H4&6f-$z7Qkce+uA89!;G=f(I){$d1Ccy8v?~65nxP|NWLyx& zyiG`MzeyT*+naAMPA`1;ad+3tLyEg?eif~#_@kG+ui?b2{(Ul5a{KKg7EL(eCEPoA zb;TdOh-C{p+#ZB+-FQ{;M{Ek8gIU39)*N;|+q%=D5)(P@bTQs;b?&=Asnsp4;>*#K w#VbBWZ+mcptAC$GrA=MmV+;JK?T0<{Y@Tzg7L*t=FfcH9y85}Sb4q9e0EzW(cK`qY literal 5768 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 diff --git a/core/assets-raw/sprites/units/conquer-weapon.png b/core/assets-raw/sprites/units/weapons/conquer-weapon.png similarity index 100% rename from core/assets-raw/sprites/units/conquer-weapon.png rename to core/assets-raw/sprites/units/weapons/conquer-weapon.png diff --git a/core/assets-raw/sprites/units/weapons/krepost-weapon-heat.png b/core/assets-raw/sprites/units/weapons/krepost-weapon-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e9610ddfcd686255327e8447ed353d53af425c GIT binary patch literal 1491 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 { + color(Color.white, e.color, e.fin()); + + rand.setSeed(e.id); + for(int i = 0; i < 10; i++){ + float rot = e.rotation + rand.range(22f); + v.trns(rot, rand.random(e.finpow() * 24f)); + Fill.poly(e.x + v.x, e.y + v.y, 4, e.fout() * 3.8f + 0.2f, rand.random(360f)); + } + }), + shootSmokeTitan = new Effect(70f, e -> { rand.setSeed(e.id); for(int i = 0; i < 13; i++){ diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 72db812aaf..d9c6c431b3 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2556,7 +2556,7 @@ public class UnitTypes{ bulwark = new UnitType("bulwark"){{ drag = 0.1f; speed = 0.62f; - hitSize = 19f; + hitSize = 23f; health = 7300; armor = 5f; outlineColor = Pal.darkOutline; @@ -2625,7 +2625,7 @@ public class UnitTypes{ hitSound = Sounds.none; width = height = 10f; - lightColor = trailColor = backColor = Color.valueOf("8ca9e8"); + lightColor = trailColor = backColor = Pal.techBlue; lightRadius = 40f; lightOpacity = 0.7f; @@ -2653,24 +2653,25 @@ public class UnitTypes{ krepost = new UnitType("krepost"){{ drag = 0.1f; speed = 1f; - hitSize = 19f; - health = 7300; - armor = 5f; + hitSize = 44f; + health = 18000; + armor = 8f; outlineColor = Pal.darkOutline; envDisabled = Env.space; - rotateSpeed = 1.8f; + rotateSpeed = 1.6f; lockLegBase = true; - legStraightness = 1f; - baseLegStraightness = 0.6f; + legContinuousMove = true; + legStraightness = 0.6f; + baseLegStraightness = 0.5f; legCount = 8; legLength = 30f; - legTrns = 2f; + legTrns = 2.1f; legMoveSpace = 1.05f; rippleScale = 1.2f; landShake = 0.5f; legGroupSize = 2; - legExtension = -5f; + legExtension = -6f; legBaseOffset = 19f; legStraightLength = 0.9f; maxStretch = 1.2f; @@ -2684,6 +2685,65 @@ public class UnitTypes{ hovering = true; visualElevation = 0.4f; groundLayer = Layer.legUnit; + + weapons.add(new Weapon("krepost-weapon"){{ + mirror = true; + rotationLimit = 30f; + rotateSpeed = 0.4f; + rotate = true; + + x = 43/4f; + y = -20f / 4f; + shootY = 39 / 4f; + shootX = -5f / 4f; + recoil = 3f; + reload = 30f; + shake = 3f; + cooldownTime = 20f; + + shots = 3; + shotDelay = 3f; + inaccuracy = 2f; + velocityRnd = 0.1f; + heatColor = Color.red; + + bullet = new BasicBulletType(9f, 75){{ + pierceCap = 2; + pierceBuilding = true; + + lifetime = 30f; + shootEffect = Fx.shootBigColor; + smokeEffect = Fx.shootSmokeTris; + frontColor = Color.white; + hitSound = Sounds.none; + width = 12f; + height = 20f; + + lightColor = trailColor = hitColor = backColor = Pal.techBlue; + lightRadius = 40f; + lightOpacity = 0.7f; + + trailWidth = 2.2f; + trailLength = 8; + trailChance = -1f; + + despawnEffect = Fx.none; + + //TODO diff effect + hitEffect = despawnEffect = new ExplosionEffect(){{ + lifetime = 30f; + waveStroke = 2f; + waveColor = sparkColor = trailColor; + waveRad = 5f; + smokeSize = 0f; + smokeSizeBase = 0f; + sparks = 5; + sparkRad = 20f; + sparkLen = 6f; + sparkStroke = 2f; + }}; + }}; + }}); }}; //endregion diff --git a/core/src/mindustry/entities/comp/LegsComp.java b/core/src/mindustry/entities/comp/LegsComp.java index a5512a19fb..89d88e8710 100644 --- a/core/src/mindustry/entities/comp/LegsComp.java +++ b/core/src/mindustry/entities/comp/LegsComp.java @@ -62,18 +62,18 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ } public void resetLegs(float legLength){ - float rot = baseRotation; int count = type.legCount; this.legs = new Leg[count]; - float spacing = 360f / count; - for(int i = 0; i < legs.length; i++){ Leg l = new Leg(); - l.joint.trns(i * spacing + rot, legLength/2f + type.legBaseOffset).add(x, y); - l.base.trns(i * spacing + rot, legLength + type.legBaseOffset).add(x, y); + float dstRot = legAngle(i) + (type.lockLegBase ? rotation - baseRotation : baseRotation); + Vec2 baseOffset = legOffset(Tmp.v5, i).add(x, y); + + l.joint.trns(dstRot, legLength/2f).add(baseOffset); + l.base.trns(dstRot, legLength).add(baseOffset); legs[i] = l; } @@ -100,13 +100,14 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ float moveSpeed = type.legSpeed; int div = Math.max(legs.length / type.legGroupSize, 2); moveSpace = legLength / 1.6f / (div / 2f) * type.legMoveSpace; - totalLength += Mathf.dst(deltaX(), deltaY()); + //TODO should move legs even when still, based on speed. also, to prevent "slipping", make sure legs move when they are too far from their destination + totalLength += type.legContinuousMove ? type.speed : Mathf.dst(deltaX(), deltaY()); float trns = moveSpace * 0.85f * type.legTrns; //rotation + offset vector - Vec2 moveOffset = Tmp.v4.trns(rot, trns); boolean moving = moving(); + Vec2 moveOffset = !moving ? Tmp.v4.setZero() : Tmp.v4.trns(Angles.angle(deltaX(), deltaY()), trns); lastDeepFloor = null; int deeps = 0; @@ -116,6 +117,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ Vec2 baseOffset = legOffset(Tmp.v5, i).add(x, y); Leg l = legs[i]; + //TODO is limiting twice necessary? l.joint.sub(baseOffset).limit(type.maxStretch * legLength/2f).add(baseOffset); l.base.sub(baseOffset).limit(type.maxStretch * legLength).add(baseOffset); @@ -141,7 +143,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ if(l.group != group){ //create effect when transitioning to a group it can't move in - if(!move && i % div == l.group){ + if(!move && (moving || !type.legContinuousMove) && i % div == l.group){ if(floor.isLiquid){ floor.walkEffect.at(l.base.x, l.base.y, type.rippleScale, floor.mapColor); floor.walkSound.at(x, y, 1f, floor.walkSoundVolume); @@ -179,6 +181,10 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ } l.joint.lerpDelta(jointDest, moveSpeed / 4f); + + //limit again after updating + l.joint.sub(baseOffset).limit(type.maxStretch * legLength/2f).add(baseOffset); + l.base.sub(baseOffset).limit(type.maxStretch * legLength).add(baseOffset); } //when at least 1 leg is touching land, it can't drown diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index b9de129252..6589f8d6e9 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -57,6 +57,10 @@ public class OverlayRenderer{ } } + if(pos.isEmpty()){ + return; + } + //if this is laggy, it could be shoved in another thread. var result = Voronoi.generate(pos.toArray(Vec2.class), 0, world.unitWidth(), 0, world.unitHeight()); for(var edge : result){ diff --git a/core/src/mindustry/graphics/Pal.java b/core/src/mindustry/graphics/Pal.java index 0d72059161..0915b08c4b 100644 --- a/core/src/mindustry/graphics/Pal.java +++ b/core/src/mindustry/graphics/Pal.java @@ -127,6 +127,7 @@ public class Pal{ redLight = Color.valueOf("feb380"), slagOrange = Color.valueOf("ffa166"), + techBlue = Color.valueOf("8ca9e8"), vent = Color.valueOf("6b4e4e"); } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 7c738f3b8e..fde9584440 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -113,7 +113,7 @@ public class UnitType extends UnlockableContent{ public float legSplashDamage = 0f, legSplashRange = 5; public float legStraightLength = 1f; /** If true, legs are locked to the base of the unit instead of being on an implicit rotating "mount". */ - public boolean lockLegBase = false; + public boolean lockLegBase = false, legContinuousMove; public float baseLegStraightness, legStraightness; /** TODO neither of these appear to do much */ public boolean flipBackLegs = true, flipLegSide = false; @@ -1043,7 +1043,6 @@ public class UnitType extends UnlockableContent{ for(int j = legs.length - 1; j >= 0; j--){ int i = (j % 2 == 0 ? j/2 : legs.length - 1 - j/2); Leg leg = legs[i]; - float angle = unit.legAngle(i); boolean flip = i >= legs.length/2f; int flips = Mathf.sign(flip); @@ -1074,8 +1073,13 @@ public class UnitType extends UnlockableContent{ if(jointRegion.found()){ Draw.rect(jointRegion, leg.joint.x, leg.joint.y); } + } - if(baseJointRegion.found()){ + //base joints are drawn after everything else + if(baseJointRegion.found()){ + for(int j = legs.length - 1; j >= 0; j--){ + //TODO does the index / draw order really matter? + Vec2 position = unit.legOffset(legOffset, (j % 2 == 0 ? j/2 : legs.length - 1 - j/2)).add(unit); Draw.rect(baseJointRegion, position.x, position.y, rotation); } } diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index aa3d63e446..655482523a 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -414,8 +414,8 @@ public class Weapon implements Cloneable{ } protected @Nullable Bullet bullet(Unit unit, float shootX, float shootY, float angle, float lifescl){ - float xr = Mathf.range(xRand); float + xr = Mathf.range(xRand), x = shootX + Angles.trnsx(angle, 0, xr), y = shootY + Angles.trnsy(angle, 0, xr); diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index 13af141ecc..b9ff82feb0 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -11,6 +11,7 @@ import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; +import mindustry.content.*; import mindustry.core.*; import mindustry.entities.*; import mindustry.entities.units.*; @@ -484,7 +485,7 @@ public class PlacementFragment extends Fragment{ } //if the tile has a drop, display the drop - if(hoverTile.drop() != null || hoverTile.wallDrop() != null || hoverTile.floor().liquidDrop != null){ + if((hoverTile.drop() != null && hoverTile.block() == Blocks.air) || hoverTile.wallDrop() != null || hoverTile.floor().liquidDrop != null){ return hoverTile; } } diff --git a/gradle.properties b/gradle.properties index 5df4495ded..be0907b8dd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=16d2626649 +archash=ed731441e1