From acaec087813a18292ca4c74700fec64cb99d8532 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Dec 2021 21:48:32 -0500 Subject: [PATCH] Evoke repair weapon --- .../sprites/blocks/drills/eruption-drill.png | Bin 3931 -> 3917 bytes .../blocks/units/ship-assembler-in.png | Bin 0 -> 1166 bytes .../blocks/units/ship-assembler-side1.png | Bin 0 -> 770 bytes .../blocks/units/ship-assembler-side2.png | Bin 0 -> 772 bytes .../blocks/units/ship-assembler-top.png | Bin 0 -> 3189 bytes .../sprites/blocks/units/ship-assembler.png | Bin 0 -> 2898 bytes core/assets/bundles/bundle.properties | 3 +- core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3909 -> 3925 bytes core/src/mindustry/content/Blocks.java | 17 ++++++-- core/src/mindustry/content/Fx.java | 8 ++++ core/src/mindustry/content/UnitTypes.java | 40 +++++++++--------- .../mindustry/entities/bullet/BulletType.java | 23 ++++++---- .../entities/bullet/EmpBulletType.java | 2 +- core/src/mindustry/type/UnitType.java | 2 +- .../world/blocks/defense/turrets/Turret.java | 2 +- core/src/mindustry/world/meta/StatValues.java | 4 ++ 17 files changed, 66 insertions(+), 36 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/units/ship-assembler-in.png create mode 100644 core/assets-raw/sprites/blocks/units/ship-assembler-side1.png create mode 100644 core/assets-raw/sprites/blocks/units/ship-assembler-side2.png create mode 100644 core/assets-raw/sprites/blocks/units/ship-assembler-top.png create mode 100644 core/assets-raw/sprites/blocks/units/ship-assembler.png diff --git a/core/assets-raw/sprites/blocks/drills/eruption-drill.png b/core/assets-raw/sprites/blocks/drills/eruption-drill.png index da7f0465767fb04aea8a3ba76c7e31938c3ee6ec..f4b809a51e7259c5113c17a7b3db8799b2a317bf 100644 GIT binary patch delta 3905 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 P00000NkvXXu0mjfF{N8< delta 3919 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 diff --git a/core/assets-raw/sprites/blocks/units/ship-assembler-in.png b/core/assets-raw/sprites/blocks/units/ship-assembler-in.png new file mode 100644 index 0000000000000000000000000000000000000000..d411cbd4cd4ca868a197c1a080dd4536e62b33a4 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-assembler-side1.png b/core/assets-raw/sprites/blocks/units/ship-assembler-side1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec57520298b6d1d49a1523d7bd2dc2dac3f9f4e6 GIT binary patch literal 770 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I4M=vMPuB%fjKx9jP7LeL$-HD>VA|v9;uumf z=j~nFJYh$fV-Lk!jtFXGPOxBDIiQs-`q;<1 zGiToMah?y3-qt-oZL9p}`z%0%F~EZ9>3jb(_+Q?Be*e4YHGT~`d3iOR43QC@ATl5m zM0)tvcz&vRX@BVd^IxCVY3*}qFv;rFFXUKuu(0NR{C@3!e2hV<8Beu)FDTAP5`VtE zx&7{Y`+AYu>7o;q+CT2C{95**xH#O2(dhQdsq0OF^ywRk+f{+I)b*IHf?N|+Ub|J4 z7MtCexjA8yO8maMm{dclZhb)o_Gx_uAlqajwGLT+RAqY7a*gBpvFRKW7`F;eJ2KsZ zJI(3j%|hQTOevSHp%Q@j{@7-C#3bQ4;0vd9jg|sj&iF)as zIjLQ6m-v|{cPFf@KB&9>(V7O6{;<`NoaJj8-c-tTzq6TeYVq@lHM=%zcD~Cwy~JAj z^2>7>e7lV2biDIA*T)F-NyGBPtr==-e;&$WG+LEX73SOWt;JwPNy+W6Ph&r>HDfFa zdVA-N9)u)AL%GQu0^+D0}9j;V?-@{{Fd;7QMq8JZh4w+m3(Z z;+_zhWxmEgH$+@v^W3fts=&|{vFh1i3Zz4JSnS^$uLNRAS?xBR({WbDJ;O$N_HEY} zxid=&ON*~<>4;>Eba{J)nQ_yMSwMRic`1u1bQ>?4{?6wR6Gp-U3jC|x&*-f4J20Y~ QF9am->FVdQ&MBb@0Op}Ro&W#< literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-assembler-side2.png b/core/assets-raw/sprites/blocks/units/ship-assembler-side2.png new file mode 100644 index 0000000000000000000000000000000000000000..5bac81cd383127a7e743dd907ca3b32b1467a86d GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I4M=vMPuB%fjKx9jP7LeL$-HD>VA|*D;uumf z=j~nlJYh$P_J{HuoyrA_D(@!rRbRLeaLMJAqS8`NPv^t7mzFxpFm$#}QeMKvyRGN( zUt{Cl)+#psxi|IV&SsU{%ohfli~$FWt}afBxyuw^#iTV!X6Mb>9)y8EnTt{{8WF?+;rRkEsi%t~YU-p3rqS z=00y+S^WO0;4g7u4qY?XbJV!cS$${;P zTZB;jBfS}%s^!N`FLF)rELMtnttSQYT*V(7n-t^a%hWk0`116=6Hr(!JzHAYA=?}KS;EwmNRF20%-c1TuRp}MZmwY+Y^sm0ILf0jHC5V~tQ z&9j_u+2y$xWlGX51n*A0Bg+i(ihn!%MW3k8{Hs|{teEsN(p1n&_|Sq&7jvgS-+nYY zm+8rpTRR(<3UWI0b9aE@dN1hX+cTX34Jwg#`{u6Xux(46_~Y0) zp8mO_VhWqD$VJSzTA}BVW-XfNUDL^+St5~`4Ww5V6xWvTcd6;zouJk8_NSEJk+eSf zjS}aNJu4IZwcTgejvZFnQAgG^=qxIG)yNR(vd$@?2>>EzJ(U0e literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-assembler-top.png b/core/assets-raw/sprites/blocks/units/ship-assembler-top.png new file mode 100644 index 0000000000000000000000000000000000000000..a80bf2b8f72efee0f82bc5b8c5aee47038afba37 GIT binary patch literal 3189 zcmV-*42tuKP)005u}1^@s6i_d2*00001b5ch_0Itp) z=>Px>FG)l}RCt{2oiS);HxhuyCUC9}0t?#&48e;-V5^WmX_GV|q;qqP*~%=WO6P8? zgRs?+CQZ6>rSI3% zlSb0s+2ix;_uoGP3m%=G?3r9B=;B}Bet&Ist^JEv&*8<33zLgkezAaubs6mg0EC1A zz?ibx$3H^C-DXso?5F<;33ro`WwD>X5EAYdqs!oqfB+%kuHYf>ivj|Kgj>f;p1)Ol z^WxR><`Y`=DF$O`t(4Y$SgZlLSk;<=JsM>zE+9ZixJ9(eR7F65kZ?+7dXE9 z5`KF6hl|1SUErsue_S75eMvgDM?%VHNj0EmP(qp!A)!8L9&1WS{S5gQ+#(@0l&h2h zA)y|nyw#Af<=Cb+AVoqvW=+D{7Y_;LspYApgsrt@^Fv5Y!u-7@2`OJVB$R`aml6_k zZq<9AeENlYK_5MMc#}Bl7ezik`&&$A@1XUE{PN%jt)vt&=?BD`uvI>Qs0n-ENgr6^eVSP3vY^NvBtR#GNda`#TpXROjowq-``TOYpF?@LVLDT1- zy?z1!08hU;kJ~YUv&ZMx005uA`*qiOG;hbaPSC9a)sQfi4{4DQl>lNtmyYcIP2Ps!dpv4*=lex0mcT;ZjELGMafJ)g~-0 z&$lRBPffTcU&>ldxKs-QL`{g)Cri}Gl%V=Zxg$^(bAgjz$Q zs+lb%Aw@o;t5?Dn`H+%?t;>-~ODJ)DPFG8>gxbL% zChew@ga`L70pPDO;wA7H4ylCPweX}Ql(>FRKVMBk{DGH_v4})6iH7<1`+wZ}BB@wQ zl2PQV#h+n;^(@3Fv52F@^=tA`V(^ykBI)b-F;-!4X45iJ!jf3|Yc2BC3P2)?X0*Vy z??A}|Bp0kCCB9}EgK0W1IIjs)P&!V{S1JI!rAQ1TaYT}k57S<{JyP-@2L-FOtE~fo zhxDEGv}bA=jp6^L0+Sd}r?v?tXB zb7@Ps_7p84;Vkk2I1~_IUBacP>op0fovd0CQu`5mB%Db;0H-UY)-tLV@?V?i)Y8MR z5suYzPVQ(#?Lo$)d;m@b1Sn@%Epi4aNjT&BGTbzmMuEJ_2jKJ;oPxJwihL<}JLVMR z=v#0K_jWwXY7(v!hj4>hYrzjojD83y!If}^n%{i_acXGmbWe}+Ar=ziQ?d3OmtI^a zE}xf7mC&<%h^B;jzo2Ic-6m{lQv8~PGsuT%NVqgI;#ESIiCSBcVM#(Q`SQNCrEoCn zaVe4#u8j?Ql+ay*sLO%m5?aZJvf$anN~o6za-?y_sOSUT(5~i5$DB=3-WPma3!2sK7h#ufUxz zNJ%)md;l8|5TGs?MbM)M53BEAyn24~Zw>0Py%KIgJ^+XPfB^jUsq=>tDfy_MX*m|* z^b?L=Y)KM#2|{`$)RJ%Mvn|Kwv`Dxm`2ZXX2%x)rQ;&T4Ia-cgqGxCFHN46P;9Nie z9SJ4m)3~mNgr4OCm_R@PSqVqUN4>tJgx=)?m_$GT83{+rM@@%>gfqwoFi|&*)wZ%* zU>5lRCK3=JB&0Btd;pUP2%szB+O5(1HD;3!V4^l)4!2E65n$9)FaW>(H=}$26AK71 zmxLi-nQ0S_%phUNx6E{Hz+hWU{p*>b_G`K3F4lt6CVVFOTCTlo5>A=u8Rct9!!AiU zT^mp{LdIe!PV*Ww2B}UZpr(9VVKxb;5isPVGn0f75Ci^mLYLiY)bfYd&`OXxar z5t1*1X9?XVEG8x0CMG2r64Nqo6Voyck&>_Fd@T}69^12a;8rAbl^6h?fNMdj5)w)y zv2f)UR@0iMA8-jugf!(Cs|iVXt+k~&D57|iiNn+awuI+z*a^} zn4h~O;p{@SGPQsj?L`0`375{9O30CKreU`dQw#Xc+n=$v@sg6TWy!X+_qi+O*LKL9 zfoTOyw`mw5Vfr5RxSq7+q}w#iETPNxhUG>zoGzLrsai%ykY4#xVxt;CEVt?!73w7^ z9}-)231Ycfp|yk>@*%NVp&*vqwOUE2DIXHswF+XnVYRk|7V;r8Y*_97DfsO1`SroQ zOV($#o{qV2&V73F-Sy9xzcgR#+3P28_W0a=AEE1CNS=XLZw^`K@lX?T<-@;^?jOU4 zhaZqW_w4nPTmOIh&AHohc3T6Me!Z48;b`(SU;OqGC^ca&A3!-Tz2H*7T85?Dw6@S9 zp+-Bf<(x}tU6ZiZ59n1wcU5yOqtcGu)~8}*?RGr+A%yZnDcz1!`D&qF-fqXP5<`^_ zk(O|DH%v<{ol01$`DT&OO+s4bL!=}e-4V@crykuuhQA-bUVMKB30<@Sx$*(<+k~lb zJ@Zhw-8K@}|KI=rS(U67_V1-lIQ&;Y$q34zeoIZrl{SSl18)uPcQ|_RuqYd4N6yhT z;n0h>{0gNc)Q}IclCbn0atT}ZKOQOJunTi;0lgAx%7Ki0@g2p~eUa%^yN)@==D`mNGbfJs&Z#l&|&JCGs?<--(h3OML$B z*Ng9scrY;)u-4Up@^K_AWjq#`wR}CF$-%Ujh9D_Nk~}x4wO7Va_LGE;%k-?n%whCH6Q+}YqD{J4*+hrXQbDgX+`4tJ-5eN zjfcStrDH7O3Dqyq8;Qb^u+*4tl|VW!P~!R=39sH9HidHKXiKPia;Y$=771%la#RVl zf>I@}-y&gpckwEr+KHuO@F)^ex)IhS(B6|+;`$T`OHCV(5~`e3D*&`6;pibHYq;H6 z-Xs)1VaR94797dZ{Lq zk}oB#3A=}@C`d^d^3gyETPO185^BhYpoDt>HWPAsC6ov(*d@5#VJM-de8{8Ilf6C5 z**WZ66?PDSZs|IY@E3Jg)LX*K=s5N0; zLA1`cO&!?{HYSIK7{mcV@iE6 z(GCO+ZbN@EMb2NU&f80&p_134_p&c*6j!R`_Q215w}gQ0|g!B9fLU?}PWYV1B9 z*kDn1sse_5^P^pcY66CQ+d;D|RRj$Awue@kiVGO>Z5NHQeQU%;gL&cjP#X_+(G3%U z2=-Xz`C2H~Z~;TUad?n$sDL5gct%S&Ou&%O4pBg8Ll_d+3N00000NkvXXu0mjfhQisZ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/ship-assembler.png b/core/assets-raw/sprites/blocks/units/ship-assembler.png new file mode 100644 index 0000000000000000000000000000000000000000..bf54cf6950078560e7b40538b78fc9026d9dbea5 GIT binary patch literal 2898 zcmV-Y3$65tP)005u}1^@s6i_d2*00001b5ch_0Itp) z=>Px=3`s;mRCt{2ol9;MNf3qui(^>w#%wHc5s*NLTYxn35#|VN;2NWut61{J-XQrN z%qnL}MP*ey{&-|{ek*WySH8Z^S7k@N`s4o3Uw3!6G?`>@_5AcekB`sU`IuZNS42cp z!buia?H^OZNd{NT|4a!d(Oj+nFeRKs@_Or!&rc6TL^Q(cSo3A6TCOvdh0AX}U}J=y zP@BJs!#buAecpH-HuI_|+5f|qEAV@bib zuAkLYS%;-c`L?!!2Vwz<%mmA?Nd6s01Y9OX%4H zNE@pWAz_4k4NZBtcuUBh1FqrB2`kE{{j8)ck@8tTdxZBCLMyAc@-MCb26}XZ2`Kp%Z54R05+WPVBh700m)8Fpq=XOwt@7=? zmeF{~w5#PG^+iWXXr2S2lvZf4jcE3D1XwDtV5QP(1{X zDBs@SD^MxVQNyuHKA$BV?~pZ*H8gRlCM$yJRh3qJckK5 zqI`|&=lRe?<~>Bfk>zVtKhK9IstoP|oLad6%igfmH3e zx-3RK&$pyfeWwd(Jy(}Swex&js?~R@fLj$%p;EX=e+-^Y#rjSY@NDPms#CSTRRVI4 z+Vsx)o$Xv*bu9JGZ3k_*j;?@5KSI$;IM3C^VySPGe0zsi4u2D3x%iTQ{{D;gzAZ+Y zXH_EN3vBh{a0o{AgdaYBV!dyR*%QhcK|Uf-bgT#oC$&J0jPU4KM`$FRL$I98I!lj^ zb%aF1DW9H`}Qc(_=($QMtmZ z-cdLLS*PJKqPZX>992Had$K^(E&54U@FCbDVPuFjO*$U$)q)HS$Hn6@Yc3&rH4mi?$M%X^WZjbsP` ziQ+<}Wk0Mi>oZxH1@yQ<-DBk5<4nDH19AGvBw(a`ji?Z5*$=GNTqC3Bvr4EI5G5b_ z9_EPRAg+bJr!K)FA^d5X4aseq%8xu9VJP>O&+7;tkwQSPqdAoyd0K5DfPB;}7cU9n zt6<9wYORE4+CGt_5k2gB96W&vh&UZl`SwxOg#Z^s-J&Ig35a}Z=BN^$UA_iV!qkoE zy@*+(Nq8ypp?RH^FehBw_4Q5JhOL^fHI?Nf683O7JogpOL6%ZxgkMG~q8>dq~J=*$~w3SuD zu7F7SmQ=f=aCR*99U-A=A5be_WAr-;qhYCUl!QIfHljzpqcAE}>pS&M$Y^&I)>IGA zyQX4&r~f8oK6NsdYW1CVD{e`JijdF?kv2*>D&^C)2kbqpaAZb}5v|3$OzuPQnIxf?(HFBf{Y+xwa5rwAmrOSys~$8V7CXH64r~1fF@HuBE}Fr zC9D@20Y$caM9ev$w}c}w&oTavRX!rYBE(C=-kHIQob4Q=*MkcsK?+2xV6=oI$=9fQ zu1*X3!G+QY8PKO?N+hfxAM%l>l^->G1nR+sC7zbak+6zrcNr~5=lKiK0d32LOB8J0lklAZM}x>3BBdxreTq<_qX0_ zcXzkqo)EbW2i=JFl29sUkG+PCkdKp=RldE~dheG=h~5Kc4Z+fckd;$pS_wIYk8DJbw5sJ_TK|pbrw3?RAalSq zp1&DE&#AJ1!8cNQmL1IPo41g>y9h`$hJ>2NI_l*$<<2Y*m#uOmBy{^(Ci2kYnykeE zr%al1S6}S(%7hq>U4Iu`RYEWMH1BOhmxs$yS*#Me4Z%w^!_s=b(L*`}c+0mWVmRI_ z54R3EpFcu79ES)9f*|TIbGNyt1Q+wI6^96 zXlxkHe8Td&mT37r)6A}8>6|b;IMLpU%JO+F8S;6hZLLF8ek2lx4#7weLs+JKOU_i5 zC7j`S*zjzKp`r?BD$5d1PdKcAMEZ)a*kETW%aS7rhaG|^W6>LqhwcF<qcU6vw;p#@Fbv*oh#Tl6ex{1ZbskuoxsYRRD^Gss`0Kjt#-2eap delta 16 YcmcaAcT|pv;mSs)bv&C7@JwX_05 { + color(Color.white, e.color, e.fin()); + stroke(0.5f + e.fout()); + Lines.circle(e.x, e.y, e.fin() * 5f); + + Drawf.light(e.x, e.y, 23f, e.color, e.fout() * 0.7f); + }), + hitYellowLaser = new Effect(8, e -> { color(Color.white, Pal.lightTrail, e.fin()); stroke(0.5f + e.fout()); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 28515f02de..f5898ef20f 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2563,7 +2563,6 @@ public class UnitTypes{ outlineColor = Pal.darkOutline; lowAltitude = false; flying = true; - targetAir = false; mineSpeed = 6.5f; mineTier = 1; buildSpeed = 0.8f; @@ -2584,32 +2583,31 @@ public class UnitTypes{ ); weapons.add(new Weapon(){{ - reload = 55f; + reload = 17f; x = 0f; y = 1f; top = false; mirror = false; - bullet = new ArtilleryBulletType(3f, 11){{ - trailLength = 8; - trailWidth = 2.4f; - collidesTiles = true; - collides = true; - trailEffect = Fx.none; - trailColor = Pal.bulletYellowBack; - homingPower = 0.01f; - splashDamage = 10; - splashDamageRadius = 20f; - weaveMag = 2f; - weaveScale = 4f; - width = 10f; - height = 13f; + bullet = new LaserBoltBulletType(){{ + speed = 4.2f; + frontColor = Color.white; + backColor = hitColor = trailColor = Pal.accent; - lifetime = 50f; - hitEffect = Fx.blastExplosion; - shootEffect = Fx.shootBig; - smokeEffect = Fx.shootBigSmoke; - buildingDamageMultiplier = 0.4f; + height = 6f; + trailLength = 5; + trailWidth = 2f; + + healColor = Pal.accent; + healPercent = 1f; + healAmount = 25f; + collidesTeam = true; + + lifetime = 35f; + shootEffect = Fx.colorSpark; + hitEffect = smokeEffect = despawnEffect = Fx.hitLaserColor; + + damage = 10; }}; }}); }}; diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index d13910641f..97334567f1 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -118,6 +118,8 @@ public class BulletType extends Content implements Cloneable{ public float rangeChange = 0f; /** % of block health healed **/ public float healPercent = 0f; + /** flat amount of block health healed */ + public float healAmount = 0f; /** Whether to make fire on impact */ public boolean makeFire = false; /** Whether to create hit effects on despawn. Forced to true if this bullet has any special effects like splash damage. */ @@ -131,6 +133,7 @@ public class BulletType extends Content implements Cloneable{ public float fragVelocityMin = 0.2f, fragVelocityMax = 1f, fragLifeMin = 1f, fragLifeMax = 1f; public @Nullable BulletType fragBullet = null; public Color hitColor = Color.white; + public Color healColor = Pal.heal; public Color trailColor = Pal.missileYellowBack; public float trailChance = -0.0001f; @@ -218,8 +221,12 @@ public class BulletType extends Content implements Cloneable{ return -1f; } + public boolean heals(){ + return healPercent > 0 || healAmount > 0; + } + public boolean testCollision(Bullet bullet, Building tile){ - return healPercent <= 0.001f || tile.team != bullet.team || tile.healthf() < 1f; + return !heals() || tile.team != bullet.team || tile.healthf() < 1f; } /** If direct is false, this is an indirect hit and the tile was already damaged. @@ -229,9 +236,9 @@ public class BulletType extends Content implements Cloneable{ Fires.create(build.tile); } - if(healPercent > 0f && build.team == b.team && !(build.block instanceof ConstructBlock)){ - Fx.healBlockFull.at(build.x, build.y, build.block.size, Pal.heal); - build.heal(healPercent / 100f * build.maxHealth); + if(heals()&& build.team == b.team && !(build.block instanceof ConstructBlock)){ + Fx.healBlockFull.at(build.x, build.y, build.block.size, healColor); + build.heal(healPercent / 100f * build.maxHealth + healAmount); }else if(build.team != b.team && direct){ hit(b); } @@ -291,10 +298,10 @@ public class BulletType extends Content implements Cloneable{ Damage.status(b.team, x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround); } - if(healPercent > 0f){ + if(heals()){ indexer.eachBlock(b.team, x, y, splashDamageRadius, Building::damaged, other -> { - Fx.healBlockFull.at(other.x, other.y, other.block.size, Pal.heal); - other.heal(healPercent / 100f * other.maxHealth()); + Fx.healBlockFull.at(other.x, other.y, other.block.size, healColor); + other.heal(healPercent / 100f * other.maxHealth() + healAmount); }); } @@ -362,7 +369,7 @@ public class BulletType extends Content implements Cloneable{ if(homingPower > 0.0001f && b.time >= homingDelay){ Teamc target; //home in on allies if possible - if(healPercent > 0){ + if(heals()){ target = Units.closestTarget(null, b.x, b.y, homingRange, e -> e.checkTarget(collidesAir, collidesGround) && e.team != b.team && !b.hasCollided(e.id), t -> collidesGround && (t.team != b.team || t.damaged()) && !b.hasCollided(t.id) diff --git a/core/src/mindustry/entities/bullet/EmpBulletType.java b/core/src/mindustry/entities/bullet/EmpBulletType.java index 539d27d46a..e7c702b5ad 100644 --- a/core/src/mindustry/entities/bullet/EmpBulletType.java +++ b/core/src/mindustry/entities/bullet/EmpBulletType.java @@ -28,7 +28,7 @@ public class EmpBulletType extends BasicBulletType{ } if(other.block.hasPower && other.damaged()){ - other.heal(healPercent / 100f * other.maxHealth()); + other.heal(healPercent / 100f * other.maxHealth() + healAmount); Fx.healBlockFull.at(other.x, other.y, other.block.size, hitColor); applyEffect.at(other, other.block.size * 7f); } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 1629be8746..087791291c 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -454,7 +454,7 @@ public class UnitType extends UnlockableContent{ }).layer(Layer.debris); } - canHeal = weapons.contains(w -> w.bullet.healPercent > 0f); + canHeal = weapons.contains(w -> w.bullet.heals()); //add mirrored weapon variants Seq mapped = new Seq<>(); diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index ab466fb31c..8fd202f1d8 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -412,7 +412,7 @@ public class Turret extends ReloadTurret{ } protected boolean canHeal(){ - return targetHealing && hasAmmo() && peekAmmo().collidesTeam && peekAmmo().healPercent > 0; + return targetHealing && hasAmmo() && peekAmmo().collidesTeam && peekAmmo().heals(); } protected void findTarget(){ diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index cbfcbac5e7..1e6cb788be 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -329,6 +329,10 @@ public class StatValues{ sep(bt, Core.bundle.format("bullet.healpercent", Strings.autoFixed(type.healPercent, 2))); } + if(type.healAmount > 0f){ + sep(bt, Core.bundle.format("bullet.healamount", Strings.autoFixed(type.healAmount, 2))); + } + if(type.pierce || type.pierceCap != -1){ sep(bt, type.pierceCap == -1 ? "@bullet.infinitepierce" : Core.bundle.format("bullet.pierce", type.pierceCap)); }