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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 delta 3919 zcmX>rcUx|PVZErQi(^Q|oVRmrJ7SNEHk^;{$6tq}{^X&$A+axlVGCrFLaQ=+t+TbJWt(~Vq}f`wijEXS@c6G%6$zW--V z@v}KUEA#CPwtc@_{rvsz&*ksW%xz?{zW=viNujK+*}9myzi-#K8gHI?Z0r0zR$a@k z8qK*|U2dwk_Smzp**7!K?sMS(q`0$a$rEkCbBjD@lot7aQVgtygVh)qTp$D!GG1)zidyn7d-B(blw~2y)|d!tP9!?LhM|k>zy*s zx=-DZ{!<`JYFXu_?v`SvwkOU(Lhs(oPZFAX`^_?y7?z(CLZX~17iubQjYLxyMcFKHI=IIo0+B^Et<8z9kcGIsGKkv8Rw6Me1deFHSQ(sH(E&Z@t!yxo_WUJIinUPD@9bEWg@`MY~CM#V6W>=mnT$!xn{zED;`>CtO`Qmx9 z-U8ej6Z!w2?KBDRxbbmTy;AW-j%Z{3q$yJZR1)%xU8e@jYTWnPOLX3`ttOA=SIdd7 zY{_BV`paWo%f1uO)8uo%`iss=`A1D-jE~FaanZQW!sapl}AQL zo6c{R-qRYbx9|Tor%;ENFL;I3rWWMCH+=KfHckG#<#8_07?VfmG^by=Ulbr5U{!DG zD-iCqT|uMO$adMXmPtDbE=xBD>s`6OV+F?w+lQW0FN8B}bmIIQ=IrDdv*YE`fUHec zE)%yWt~mVv<$FWUt=y}Yv`pIJkyo#yb*a*cm(!JL-rXBE|I}Mu?7myv{~6{R%E_r( zII%=`hllEu9S@pq1bdZ!F#US@d;Q|)J3QXa`uq3rW1g(U2N#T9zZTzo?)j9N`D@L} z&l<008zLk)HzLhlD=ye%df$!sgOW|3kv>nTwt{&$F%K+yDRW{~OOEC!Knc z=^L2+U<$`k{2Ik8N4i%*I>h0g8! z^D6z~IgWKTdXrpQJifA9PQDOwaLw%GwG|o5ZMWZ9a(|^Tr^F=whVK%7&Q4r&Zmkt% zWGs2KNK@Wn&lwe=P4UOOP9Aq%Z0UC~==fakygOT;dMjr3MKWcb3a@9%W8C(|PT|sR z-Xl{d=qzZhndV#2{mJw2Brgxn<4Kx2?uVw{-ma&*Kg;&X<#Z2@f`?~vwlOgXOfEQ) ze%#2r;^CP$ceg)c_#?#k^G&21XP{k!r~HMf1t-G$QYT%Q%74I^V`uH_OKY}Y)SEu- ziE~uXWVPMj-<>*ns=AZmeu`*~_aO54O;o~~Fw zQUB_q!u?C%c${K&KefrzBZQ3XG{?n7I7w1H)vs{_N@9AlgAzprS z>C~3vOi?G=c{qO`-u~>m(;-oY=${i56YY-)zYeP}+*ZRdajsxdfvU`>uie@UTWc5^=L(uI{d#ct`{YlVb-!vA zl(&i=pZhkq-uNd2)8d5QwU#byA~o+~!qGTh>%XTdvJ`Qe21_ByIPy61b&F?*?i zOloaex%J@5&Wyg6wQD%z;`dkl@qhnhiR-2bvB6GLTVHB!u|NGlX==XL`rXPIOIx+q zhtAw2zASjdjSB(}{`+p+k9ITG4KrWhR_^sQa>KTkS)T&y>+?Cgw`6#)xH>(&TGG+m z>2z&E)r1R1eNjSLd@7;$+cswPnPx^Fn)bLY<9t#@x!Z*svlgdD>AVnoyyWDusjK(Q z71UAL^2aRZ{QLu2TMyU2%s;O9ZlA%Lxq@vi-*hI|aAc>qC@z#ets#HtmSm#Git|RN z+c%WCNeI0%d{WJxEw!wE`^Ca;p>KaY4Y}^DU$*%qPq8WERIkxx9_J=z@ zF>$`7ci;*8WX0-Wto}XA@PC^|+`k zSy=8){mFZq%70D!az~*hSa{d#deeQXj0wMYUQ2cNPTIc4(%Y9rg8oh=xpiMkXQ07KDlqP zzth#!nW|5nErj$o)o`evHD%LV*Rmva<`vZ$^0ohRKh2oG@4pnoq2eaX^~L@9Y@bg| z)DNx8_lx(7dwk_}`;rYO`X2>d*3pn}ID2b?q1Cd_)A#@L{W~k~>BLFh#;V7w#AJ4D z(3XERx!&OW>lx06Ow70CAG&pG)elqc`<45qX{#uf+s(McvRkmY{gK^Ir{{`0wO6k= zYshsvbKhFk=|@^;$EDQ&pKw*m^VF%_zSy5DQgwtbv`#u8CFIB59MrKiD*{yMxvmiM zI<0YKRp4p!>R5xNtMu>6{I2sp8M>(wY(mQ=ne5Z`#~o7>cWv39sJL*+f~+sPs)ZBp zL@*R`W>1w}w9VK_M{(nQ6V)Xm$6_vr6(%Tma+~k%@OR4GnQ@YR!3Fj?M!9*W@mHmu zG}k(1?hJUUeT{w2BekC3z1jCdn+@)0N^OtPIrU=i7sZ++&XVjCFAIPFZeOfsa!h^V z?C1OL>uR$X@z$^SSdv`D+kNq)f{&No{r}z%Vw&%;yDV9}Y{mhx&n*n^jclGr?KE$3 zyD_WsVNbJ>BySzlsJvXXl@n0{tDXk%|vvFh3@k35l!3QMlI zO_}wmVExjYq8B)Be^R?NAt1`T+x=h+r?+oK)|vRoFV3ciw(aSRsps7J@JWf_re%p+ zRD4dZ)bx8LaoTZ$+l{Eoho_4@eP`UZPvv*2DahV_BgE(QpI^6+FL_+`%PGSzGJ~hj z=NV)05}~e{mnO{#`T60-G?kvG>2GcHKAG{bfA7mlyCMIB zOQp$&qK=1e^6+7PImPFiO+qH8bNA!BPG@Jz=!beo9yeD>%>KkEQYYkebb8>%xsvr8 z6jVO0v^;gLGyhH6$ETs)pnU!3yZ!%fb*6KJu&(0>+5O9KRvaZw0NELvoyA)ktM&=F0E~2%vh8?;nnh^1?3x-^7QSn77aLk zx^|b+N>=mr@v|8j=B)U;MV05Ss|;r_(=Rr*`dQZhqZdf-pVA`3xbo@K$y1aSPq7=k zWX>`>uBztby!g_+eJ@-Tr>MO;VZ*w0kCT7+iq8$}Y8WO<30$mjZe!Z2_T_5Rl%D6; zOx9j&m{RdG%PH&a@=(PkS%+5EFf;}hk7`5nKPbwX8!yTwQ$x2 zb$N#rsb!({oI8E}&I=Vi?yC%Tw);LSnA7Dc1%@g)+H2-LWftJz*dQTv zZ(nKWlyCa`e_3j;o%ZmHo_s@qL&HARC0>mls#|!{1)ngV5bzLK;Lo`;NFjz(_i&`h zPX;4amKWYmD@8a$olX~sdD=0sGBW;}U=YrwqPj5EqFYU#;lO{!{hLc-HXq#C%)r3F N;OXk;vd$@?2>|uzV0Hii 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 zcmeAS@N?(olHy`uVBq!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z~bTQ z;uumf=k49oxwjoe+#cFHof3G!_ojFChUx2!PcP}pnZ(DlfzYqW1R za5C8`SSlyEF)@IE1E>D_eEF^C89!Tjx^z_eon}{Z;a&b(zC&Q?+-v(4oTiirFK}tm zc%IiFB)F*OEQ6|2%l^9{a{XZtIe!6&?0*0v_pShuYhQrKxl2G~?-K@9C6|3`K;*nP zAku0wh?Lq4B5f{%NSV(d(qcM@l-SOos&vHgI*7FU4kEWHF?zXl{O)4a5LC<)g&{;M0h_~?PC=@w>F~T`=e+ZJKK7JM{~MZ zc8K3MRhrXZ-LUYZZbyOMLB?ZkQ+}BX37%8YIH0;@#)6>7(E<-;_?TnbMTElgYPgkT z?&mc`E52n-6TRQWaeSH$$4>ECr6BR}YZ^bSEY|-JbFo z;P1KpLD*r%L;qClncw~0ob0}QX7s9iR2=?F>t+~Cq7vP}4* zOGm`j@0^(rBUZF;PYejX$S||y*sRQk>g`8wBzVbkm(FDMsPRY?QuwGi^`z9r=nj7O zGhrv=mF-##?y9Fa)^JP}Nmwm>>d5u^FBqbE+kX5K5lvWqP#}K)sv1%Enur}N89QgE zot$eKIPdl;j+mzcP1_R#L>U*Y%4GWU`}z0nx1Kjd2eWw8yp^(Zc$9tn0;5p;?utHEW1a|-`8dikEETa zGYZ|e*u_2J$FZbMZY3+HuIk9QNn8D-+TEij+32qN5pAbO(%17Eq8+E+IXLOZv9b!* z7U6<#&)FX}FY#jh_v>f#4~3OZ4M*Cu zU71zv)`)UX_)*|Lk)e}6`VO;--J3$*2|o&s=sG-d=9tdV$-nRnvx?mj1KtTg1WxNX zJaXom%+Sfdauc(P-IEhs6Mjt4wsd&Z+`5FJlRs<`vx;3r7uSRz3Az>zkDA*TFm&?A z@iD8|Rovp8@Z&+QvBM*0&T?iIyD3G&3Lh6P(PtEr_xjB<;YYyH)30y4zbyt801ONa a4_?WC*?OgH*2c_ukcg+NpUXO@geCw-{Nl6# 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!ia0y~yU|0ac9Bd2>4Bh9`br~2K7>k44ofy`glX=O&z_iEH z#WAE}&fB}TdBTn|#~zBe91+yWoM6GQ$n&`Er3*`zbWU-0@pAT@+*W;IsiRC&azHCv z^s$e1XU@Fi<2)Z6y{&tG+E)3`_gNUQfCbaj_x@+_zr6kY{&&x7{2Fxf@@hI6A|pIO zWI!f}^zg0m{8aPO{?PyDzdo(g+UL?>lGUkS$g%8TVa@ya{o4Qd7=uzXo@)1AP@It@ z{(O6L``!2U^&+*?MJFh=f81O7wd_N2akvws(e0H}*PA*q8lAq8xLwtW(Malg%vM3J z2`aDMDoTsZZp_@AFi9nTUtLV9p;WiNpaT1}z5{J3}hd%_%6Z3S7)D|>u8$AsQFUHXCw(h?wYF6V@+y?18`E6kSY3TViA z7Sh7BBsm0GH*6iA> z+4(N#^b%|7%P-Gm@a;05)A7#hTpuF?14F~|!>t)=YkwZfVl-NnQWfUg@~y>SMM=r+ zuTNt?t~FyU3VM6zz$FgW6U=L!wY`-@6zVg3^V9QMm{Rgr{wRCqqTw(}NB;h~kQTke z8$4=~tJ{u$)d$w_RW4&MYY`Exxv;Ba$)F3P4Bh9`br~2K7>k44ofy`glX=O&z_icP z#WAE}&fB~8dBTno?GNQSI+Y6;Ro+eLtG;j{;F8NJMWv;lp3aADFD-SHVd!j|q`ZWS zcU#ZnzsAP9tyOINb8qU!oy{t@nJ>(M1vJFX`}&W`##jDc?Y{Y+tr$1$*!fYFDJ4-A zL^>`7k&31tRZo6ix}W3!{L`Orulgaxcxi>|z9XtL*p7ev`{V20AGRzWQx{HMZ{jpP zq3dqUecrgT`2AJEU*f_Xx@3-h|N4CU!Ru#ZIayESEDzgvjf3@sPV)4-(>Pd9WW*F- zb<=Q|v_|^j(W^HT(%&_CPTKSLN72-y89Mu18e}4@4z2tl#8{NFlH>W2=^PV;qm<`J z$16FoU2%&LihraxgHyHqxamc%37*ADF|YNcK;EnPV`GzIynLBD#{^%V-gg2DtEFd4 zD?5alnr`uESd(_{hz{c>F6FA1$2#IxU6pgVuPN)N;_z)-pT3|%{g)2?LXFNX{;n%} z^*!UZ)EM-~_y4e~t=zx=QxxOMYf|w_4rV1XAhJknpG!kdg2q0Vh7vW0F!ODu>JDax zA`2OAo>|Gk>aq2b{Zdakw+#ImC+|*Jx%a`ewHDe6XBS`13OgjLtx#Rp=UQGj;nd>i z>OV`K2MFD@oaR~1x9sxVi!vqY7J_%D-jQVndBwk-{i09QXa3c!Css^)8EGnLC46YX zrHi@KpKm`Joy+uO$*rA@O9i@z3_;*R_{<%9GtS9aTeSCYSGoV2w(r(|} zl^nKhi4%VuJIB*MS5!=4^A)*>`Bp3R9MY^s6TNFX88k~I60>VM8CDh)*Ou>hsp;IE zpw;vCrAx&|!c>FVdQ&MBb@03v5Sl>h($ 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 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 OFnGH9xvX4Bh9`br~2K7>k44ofy`glX=O&z|G_7 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 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)); }