From ad42861dafc52c7ea6065c1d584a601a86c18607 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Dec 2021 11:29:31 -0500 Subject: [PATCH] Better block health scaling system --- .../sprites/blocks/turrets/fuse-heat.png | Bin 833 -> 940 bytes .../turrets/sublimate/sublimate-back1.png | Bin 417 -> 414 bytes .../turrets/sublimate/sublimate-back2.png | Bin 423 -> 420 bytes .../turrets/sublimate/sublimate-front1.png | Bin 330 -> 327 bytes .../turrets/sublimate/sublimate-front2.png | Bin 340 -> 338 bytes .../turrets/sublimate/sublimate-heat.png | Bin 16729 -> 2508 bytes .../turrets/sublimate/sublimate-nozzle1.png | Bin 542 -> 540 bytes .../turrets/sublimate/sublimate-nozzle2.png | Bin 550 -> 544 bytes .../turrets/sublimate/sublimate-preview.png | Bin 1771 -> 2593 bytes .../blocks/turrets/sublimate/sublimate.png | Bin 1058 -> 1088 bytes core/src/mindustry/content/Blocks.java | 68 +++++++++--------- core/src/mindustry/content/Items.java | 14 +++- core/src/mindustry/content/UnitTypes.java | 3 +- .../abilities/SuppressionFieldAbility.java | 13 ++-- core/src/mindustry/type/Item.java | 4 +- core/src/mindustry/world/Block.java | 24 ++++++- .../blocks/defense/turrets/ItemTurret.java | 4 +- 17 files changed, 84 insertions(+), 46 deletions(-) diff --git a/core/assets-raw/sprites/blocks/turrets/fuse-heat.png b/core/assets-raw/sprites/blocks/turrets/fuse-heat.png index a8b34b43815a02d6d713b80704d5e95e45b0d1f2..b8c070840be19bfcc9dfc931d44ccc8fd4ee9eac 100644 GIT binary patch delta 866 zcmX@ewuXIzK|OPtr;B4q#hkaZyt73dMcn*7d)BA)C?3>tad9bleyFv&exvywG~$^3rD3KmYngYTmbC`&Vy~DGu%&J3B=Pkg zjCXWO?k<`#kI}N5=ZNc%2i^=@IG(L(ySZuRE>8JBoDH0+UkqzLXfjxNy~zIYU@@op z#?zL)I}iWeefq<}_dFhFlz;f6D>`w~ zgZA`!rs`hb8rBIdaE)J3{lm4%zarz%;aB-{zinRV>2&);H~V}I)r8$ud*{COZuHSg zob_S*@wq!Vyf`addF*RHGH!6&esh9%hVZ|P5Az%UX8mq(66&%QPf7D{&_1A6zhRQB z*XE?XRkq$P(u|9J&G>&Y++eP25tuhO{IiY5uY_qcZJD+;tUh4+N{Q{j-K^cYljT%f z|MyM4$Y=N?|3G=1t~D8T${uyg8vFV(&K5iB0vE&myG0&TmNM zcv$*7E8V}4ks+{kpVMDo?Oa>yzvKa9S;Kk7mhF?T*=WabFc@sM zJ~AP^b2H;C*B(7zUvJ(k&Hq_ySid=QyiX7QS+YZr;kb}O+aAxHOTK>@AN4d?JX%;e z_rK$m4g3#OYYNmD4xGso%|g!3U9pA#^P2tI?^qaS z+>|nWQ6Kt1sZ{XirYR~<9=;Fc|Hof=(~?7R$;?M=)0rMb9AZs6@iV94veKsq3+-Ng zZ&dDo*qqE*pu_lR(w0M>m(RL7*j9A-{$#LV`5y`qcsFPyb>0xy3w+PGzvH#lU&R8J2evgYIvZTnk~%e% z=QFy`(Xo8j?El4!Va_aG%e|6cE%ypDB&&Wgs(G=JVTC8dFUh+1hMNzrn9RtmIaz_3 eUE)Xk4{jfQ8)aq7<6;a93=E#GelF{r5}E*w|B*%j delta 763 zcmZ3(evoZ~K|RxNPZ!6KiaBp*`DaTTiX2JzE`Dvgbjk90UGM+?o4;WC9G-nUbW1o( zn>n{Crt;rz{<>?G&fEVB1n0`nSTjG||8&n66@U2l7T8tz_TIYhC9gkfeP=%M;RySj2IHT%%}#hS&t>FX_-sbO)%v!JELzMlKQq|! z=lBb221YJ4OlUC(PIG*}*GDZtVuG`PnD8d)2?CE)PhAN0V-wyaZQ!7BYle}?z0Z@f zPbJOZ{n42k9q{_gt|jwmW6& z{EQzKI^MflG50qkLye>PE8i8>4CQful$X8ln5D4&=@z>)9cv8EGz8S_cZ<&PTe-oE zT|bO{qq5Oq1Lk+aAEl-X?q>dQ?&!Uqn#Gk&AKu)G(qp+U(rtK{=fz={su>rr-Kr1Z znA>!+Vejvj84djs-=h{fZa;ABi2v8gtZd9qj!BQ+T##Mz%O~T4?31#I_Yc=?l0KN= z&=W8tI!5e_u^!X$ZOhcZ-@bXb+IqrdrZ(3K9`+cPx3|sg7FRz_$bFG$mcaj@`Ma%% z$+vYHHfMhB)JW8IY~y_X{(dm~ih!DIXKg!&`VaMvxwq?>Hhgr7{(imxrq7PgNr}Dv zvO8)%CRc6`4Xu^?zvcDepr&n|H`F?AKIHMZ{^Q2A;@LaS@pUr>FR+X7RsAhx5WsXz zV(m$pou~O7Hn9EJ@m1j%+y8eR$2Pb-)v!I})nabA>Z9RQ)3AW0m50M5&3opacHf$Y z0yc@xnF0atx`JYQ>)bvvCNVeMR1;CQbI4;bxY@Gk2>U4;c7~Mpm8uucGb|`izry|d z1v{4^!;Cy9&PU9wk_kMLfn6Wm3fUMkg}sF3HLfr`xYZ(bRD5zHv+(2wW|7Ga%pBqe b&&qF*XW#$pzVBoP1_lOCS3j3^P6mp$X` zgzYo3KkQU}uK7%?B89)Qb0>?fx@JYkMP|K|MLC992Hv;Qx-Ql;8NL$m?h$HxuL?eE^tEDNef_tv@~+afUCWm_^~=9MTRlzZ=$1FvXDLpL@S6Kd*Rnxb z>|Wp*&d@bUUtA8ZFuwL=;-#hiXT&zt9J_QbcwUmG`u(oyGpaw%tzJC)lZi-j$UdP< zfm@E$?c2}L(>>QYVz!CsYN!0E!AX0cURQo1d~?d}v$5s!qU&}vZ04os z7OH74wJt4b*mvXVSKrV7F6OC*a#@IN=3>;I!1V8kgwp}9B@K1YCsui+6ljQjY*%S{ kyY7wh|5Q%Jf13MC{Fizz-fY#xz`(%Z>FVdQ&MBb@02s8dW&i*H delta 377 zcmbQoypVZVt`>&BbrdE2MnFiOEqHmNhP$$(qi z`Hakg#lai8VmHaPbbfVR>b>{gz0md1M}odziFonv@!qQQbC%AS_BYG;h>-Wn;I*pk z1xF59cWEwc3hkMvAyIm4mQB#EFY|6PJv$$9tMXK^&eJE+AB2ka_XX#d{QYu4baD7T zflGl`j@0ej&+w&tu5-j}6R{#~r`F)4wNI}rJrTY+WA@i&JCEDR&+lKSYZQ3pg=ln& z*ZfCQW-MLpF`4OB((2W(U;W*C*K3tXflitzlb8al%n=Ev15QgC%AQZG@<{m*uJefB llLHhIf2OOp{8;{n$w+i*Ls(DtUIqpR22WQ%mvv4FO#p!(vo-(# diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back2.png index 198fcfd6c950e67959fe02bd4fc65f51066fa8ab..6310ed5bef4b16e18ed3f3772eeb3414db48b298 100644 GIT binary patch delta 380 zcmZ3^yo7mzVSSvZi(^Pe<=4NpKCr7+mX&+*}0R&R$a5A<07-)$)X&?EQ5OQTWMVvnG9bEc=rgk zL`Fy^J!6oY+Z6g{(pLqaHTqhyuL?J=jN9I^^xevZ7cPG<{yI<7+feuS)wB-PX+g`Q zy!jq%m18@GI(vOMC{$?XqRpT*T2zxU$x)#~t` zxSviQ?t#L)_w8i8pkKz9Sekn&U=4?;U+30o@!b>rQ=H|@ZabP0l+XkKU1X|~ delta 383 zcmZ3&yqtN0VSS>fi(^Pe~z<9 zVZj`$F`?PDY;N!K^F6Bnv~#n~&hNH1mS%S1P;3!!;!t!kxtmqnA(bs?cp@O<_qSJe z%YHK~mHZ@D%xkypiOtbFOxxcm>Kjg9FkOX}->~X{W@MkP8*hD@=WQRuCa)0-CtGX_- zICP)-lEoUGckkT$dna3DcSXwvvrLU^+_LZI3a-}OFQr&Nk@u#JUFi3S@1^xcxzjoq zxvajS6Z}i!`4OF1*I6O~;=e2Ii_g!08y2**A=q%WfC01SgYX_jmNPC~E6U|ow!5&^ rA642nq2RDMfq}u()z4*}Q$iB}JQ=N; diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front1.png index 09772c1c53b49a5d5fc9f7e8ce260f13e555d038..93762fca98df8a655d4b4a14f6378df62f749951 100644 GIT binary patch delta 287 zcmX@bbew5|VLhX#i(^Pe8d7B&rST9_>(PnOYt3%FKDmvgz1D`{*ft+QQv&f?5 zo(*r_DBQezX43yYp)334r!{ggfWW409$%e*AO2|lbkF(SoS)>UEACTSwvyW<#ZDt| z#)e21-h+Q^Pnq4G`~Amay}glXmtQQ^*vp-{?BeZR1$A*-P3r|;_8P5>{M_rstuS$x zsr-}||2OEZX85n%`TM1g-0pqzUj2+TS@ltuX|`*ClI@zA3-;_jmZYW;cxS^&Gv)iy z9^WOSx0X(bEz`JpV8KUT5gVP1?~3pDty_5T%u;RBdviOE*|@2sNu}ORJKk68yw2?` tFVEjJ>Cy=K(`S}yUyR$&Ai;28k$i@ML%{#1vrIt#@pScbS?83{1OU)1hA995 delta 290 zcmX@kbc$($VLgkdi(^Pe z9H%kC?TtpuvIBqQO4nSQol#w?yEsbiaYmu$;#QN#85?a_=ZDw(@;a1%xgK9|ZO`H$ z#v}ilHa}}+`rpmF(Zir$=MJCy#2BExRt4YMkLz4O7R;`>oXOrDcre-&tfE^naymc=B)#lVZbE&rFJwKP&b%LD6eO9;5mG#!z yDY~C!WxF4#yQci;nM+eI)JgB>P;7~K!kse3e#Yr6&#w#&3=E#GelF{r5}E+^D2HAE diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front2.png index 296ac010f592561196e0b2de643d5925a9c883ae..9dc19c54d02991f616117274a6f50c7edfbe5bce 100644 GIT binary patch delta 298 zcmcb@bctz#VLgwhi(^Pe8d7BJG*dDYO@~R(FHh;{;B)mdc!B`-#N?82k3Ul_A z%hgzZMP+QTJMmxERP^7!fM_KK5SX!5<4P;vP0yb_+TD*|RQD|UH(~1eqt0HRH(zHd z?d10|@x2krGWXE0`{o8AdwkcdHT%B$Yiyj);&q(@mos+Wu9vp=f1ULq|Hy5Z!n0lZ zQ)V;pU0?HKfy?8=vpOnEVn6vFs|&BuJNI#O#+9RHoVS#kgmxb8;*@aWVfe zTXav(@(JJK%+{{<47<55;ke1tH@}N+AN%{aN@(J5+bgTzFW&jJsI#(U=dn_cMTzyw zGKRfbZ_{oo9yc)6(#x2xoV__u>DR@lJNn`o7!)pw|9$8G|Lg)4E0EVbUHx3vIVCg! E0JuSpr2qf` delta 300 zcmcb_bcJbxVLhLxi(^Pe8d7BJG*dDYOaq5OLdHko+W9n{M-%l1PZ9h|^Cl|EM zy2>|T_KyWFhg)P_FDRb*U&~y3^z@NiS*81}=5hTG@*t5Lrz!^HO1E61sw zy0Yeno3C&}QdU?^fYSF3R!MTPe!Ff+?6?r8TPMR`O!)x zaQ}WmVZ+{Qv(B11@48^BrKg%9y*=`};NKUs3XbbDFid#Cef@O+muDIe8^~{-u6{1- HoD!M7E35YTtiIEGZr zc^jQs{>VZ=N0{l!49~Rx|MTbEz2m^}o_%G&N?msK$IWlb_AVD^a@(|fS9C4MfrkYa zGJNfa$)k?%Ts*7jWBsmm(yzlqL;qjD_J?D!umaPH6dC(xFQPRH@A6+~Ii{W*!n8;r z%_u}c8wgE)2}_*EPnk6Ls-P2 z2P_h6=QHorf)?H?;^|{xcN~!$i?VPdo%x39HEsh)phn8Op=Ge}V_vrP~ zJBRrm9@L+>oBh`l=h*94H62gXExuJ>FM9pSE$z+k*bZn58O}*QoZY6hu$+nO*?t$j zhWQM23p6`)n*=m!UQbTva4BhgXStesV~n8lV_mowBIEo@&V5GN?t_ix7U=Bp?4HcXuUj@jHJY{8SuvQZDyD?MfZB;>1n z$z=@tJv~F{gSZgm=^uN)|A^hCD6Lng8nbO(fNtZv4@Pmj9rqdDzEHw`v-`qg(JyWd zp4)yLxMKC|p0$d3iSYWBf-D=H1q52}Pcxj~6t}v*cnVWf>K?!EO1$2Zv+^c(tk}iE z9D8v)>xV@B2|5qBPIA?q*wOd;{o`^|JAKZ5OiUMZ`R@m%2Pv5tJ=z*@ciQGu<}kp=aYKLW@EYdquDbW4C6JX@=obFf5&|#&%&7>gYI4a+x~s| z$wj*k>m77Z=cyNEHRQX_eyxasJ^5Yb=?y9Yzi-Li+co!+?UZ9Yj+{9&UEVKT%~Zp+ z`SNrgwroR{jK(KQTT%*3{7Yla-&yYqpXL2L^Gs_a%WYBT2!`a;FtPI1gXc9G%*sn! zAM|hcVBI98X#6zFq4=}@+2A7W64lsuTffUNyqM0gcJ=3FlD=!|1#7g~7xPJ5X5RbI zrt+uUq;-R{UjwhH~pXLL=^M>6Z3N)(<@j61$j> z-RU_RxlMsl+9bK4wjwN`vFN6=b9~zVZU0 z;Qf#9f(M1-Ch9nRUvTe&HseLE7fl(An-6K29-ZzHmhgK^Z(QM=WcBk4kD77Kt3MR} z_W5^>Kkh6C|GOzYVD#nwvG`ktbX!+b25X7%)JondhwUeAaM_%gXMRYsDUIo5>BZ;w zPbWO=Eta3aJ%5%zlbpbo|Ey0r)`WlYYlvW+U~anRz}sxTU5i8i^dv6g<<(xoThn;w zZ^0jzSJoRooou=<-1MPd`T9S1mWRd6cJG|)?=MnhPEonwI;ACEYeu0#P^6-1`W8p$ z`{#ehE4kWkVY>ZgP|1SDNt#=6{WOrZOwwO61mF^B5x@O9EfQW z6kr$DdsZ)ft0MgE_CwcKr1K~IU)#TwVXexIrn%GjEnc+gP00Fjrr^5AQXU1tB~!!R zsXAS7!>sN1DtQSEXjKzv{J^#J&rr+d3WJ{-R|3!-b>$I zG!$iYn91^b`E`yc-|xng_uII#s}#NX-MHju*}iRdhgD{@GzjN)Ts+A=OLoo9%C#&7 zS564)OMjiy`)fUmA9!xvd6GlGe2HF0?*qLpaw+v*TPB^K!jRjX zHNE@myrACte$Ko6276hjRGrvX%DFSG`O1y$(-wvusp8k3r?TM2W7!Ws{gQ&1xO9E4 zwO`pA@$l72HtF}P-`6|c%SfMlKW*Rt_O*!?-mB6Z&UlT-3e% zZ)Ge097aY#DPGMt$9^?^I~)03kT-Sb$1FaBov#(oH8EUvSG#pi;$zLkyUH`ZPGZTu zm+`GyY+btrH&cTWr&-|Q>WlXUGenkLoFW_ftXl67`?(H=1&&R&lNLSg>i@)$doO+e zw&OGPIpr;kK`E*F^G2Z{C5Qg?CUv(<^A52$)H5c3%$cg5Gw&b+0|SGntDnm{r-UW| Dy6@ur delta 16444 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 delta 277 zcmbQkGLL0~Vf_tH7srr_Id5;D^<@eaX?w_T&1i0tAi2xTaGQcz!l7e(Z!s-oTwS4QTt#;^V~7oVH+*-qOhqUU*P!aLas3=9kmDVsOgH3aY6v&$~zf84rj_xt1LZOi+A z-uN~1j6-+-e!K8jM_QA~qfU7Vr^3&k30e(L^qqDwOj^&O$?Q=Vs*~5H||K{6Lpvs z-%`N1q|%i`(qWc=%Lc|Jl`b5z4xi)|YZy+Jw_Lc+SS(=YaC!OvkFUe@#k*JXKkvW5 zc&jZw!kt5U!TAr|r#Tdvc_ix+MHOQj3=eM?(K=vw`s~xZ(oc_HDu*;!rT(bTW!@&W zZ;FCL=-man?fRrSZ-C;dfX(bnG`tgdCn{}Z$-3dQ zYRPG-7fy{yk_CUJKbUD=ypOA8;+Z)rpQ?`uF)%PRdGPRpr!3}f+5IK@DSUCQyl_U4NvTyelSdW z&#~}2qbi5|gBz>szg4dPdG+&^<)7VOFytOy-)Gn-VCFFYVfb+=Hx9{!6CYOJH|!G7 zJ22y6G?(auDW}gq%`5%(`K5A5L%mx2!|l8`vVH_LF_ii?ZT!V_;xl@O1TaS?83{1OOxN*)0G7 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-preview.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-preview.png index 11b2d43d75fcc81d5ed5d573ee254ede48940a2b..b91e9ba13b4af99c0000f3467ea0d6796fc51088 100644 GIT binary patch delta 2585 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 diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 386482a2ca..614c44d236 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -134,7 +134,6 @@ public class Blocks{ basicAssemblerModule, //payloads - //TODO small deconstructor payloadConveyor, payloadRouter, payloadPropulsionTower, smallDeconstructor, deconstructor, constructor, largeConstructor, payloadLoader, payloadUnloader, //logic @@ -1492,7 +1491,7 @@ public class Blocks{ range = 85f; healPercent = 11f; phaseBoost = 15f; - health = 80 * size * size; + scaledHealth = 80; consumes.item(Items.phaseFabric).boost(); }}; @@ -2406,14 +2405,14 @@ public class Blocks{ requirements(Category.effect, with(Items.titanium, 100)); size = 2; itemCapacity = 300; - health = size * size * 55; + scaledHealth = 55; }}; vault = new StorageBlock("vault"){{ requirements(Category.effect, with(Items.titanium, 250, Items.thorium, 125)); size = 3; itemCapacity = 1000; - health = size * size * 55; + scaledHealth = 55; }}; //TODO move tabs? @@ -2428,14 +2427,14 @@ public class Blocks{ size = 3; //TODO should it really be kept the same, at 1000? itemCapacity = 1200; - health = size * size * 120; + scaledHealth = 120; }}; reinforcedVault = new StorageBlock("reinforced-vault"){{ requirements(Category.effect, with(Items.tungsten, 250, Items.carbide, 125)); size = 4; itemCapacity = 2500; - health = size * size * 120; + scaledHealth = 120; }}; //endregion @@ -2484,7 +2483,7 @@ public class Blocks{ inaccuracy = 17f; shootCone = 35f; - health = 200 * size * size; + scaledHealth = 200; shootSound = Sounds.shootSnap; limitRange(2); @@ -2541,7 +2540,7 @@ public class Blocks{ liquidCapacity = 10f; shootEffect = Fx.shootLiquid; range = 110f; - health = 250 * size * size; + scaledHealth = 250; flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher); }}; @@ -2562,7 +2561,7 @@ public class Blocks{ chargeBeginEffect = Fx.lancerLaserChargeBegin; heatColor = Color.red; size = 2; - health = 280 * size * size; + scaledHealth = 280; targetAir = false; shootSound = Sounds.laser; @@ -2609,7 +2608,7 @@ public class Blocks{ scaledForce = 6f; range = 240f; damage = 0.3f; - health = 160 * size * size; + scaledHealth = 160; rotateSpeed = 10; consumes.powerCond(3f, (TractorBeamBuild e) -> e.target != null); @@ -2629,7 +2628,7 @@ public class Blocks{ range = 240f; xRand = 6f; size = 2; - health = 300 * size * size; + scaledHealth = 300; shootSound = Sounds.missile; limitRange(5f); @@ -2657,7 +2656,7 @@ public class Blocks{ spread = 0f; shots = 4; ammoUseEffect = Fx.casing2; - health = 240 * size * size; + scaledHealth = 240; shootSound = Sounds.shootBig; limitRange(); @@ -2666,7 +2665,7 @@ public class Blocks{ segment = new PointDefenseTurret("segment"){{ requirements(Category.turret, with(Items.silicon, 130, Items.thorium, 80, Items.phaseFabric, 40, Items.titanium, 40)); - health = 250 * size * size; + scaledHealth = 250; range = 180f; hasPower = true; consumes.powerCond(8f, (PointDefenseBuild b) -> b.target != null); @@ -2695,7 +2694,7 @@ public class Blocks{ liquidCapacity = 40f; shootEffect = Fx.shootLiquid; range = 190f; - health = 250 * size * size; + scaledHealth = 250; flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher); }}; @@ -2712,7 +2711,7 @@ public class Blocks{ shootCone = 30; size = 3; - health = 220 * size * size; + scaledHealth = 220; shootSound = Sounds.shotgun; float brange = range + 10f; @@ -2761,7 +2760,7 @@ public class Blocks{ range = 290f; minRange = 50f; - health = 130 * size * size; + scaledHealth = 130; shootSound = Sounds.artillery; }}; @@ -2783,7 +2782,7 @@ public class Blocks{ shootCone = 30f; shootSound = Sounds.shootSnap; - health = 145 * size * size; + scaledHealth = 145; limitRange(); }}; @@ -2824,7 +2823,7 @@ public class Blocks{ coolantMultiplier = 0.4f; - health = 150 * size * size; + scaledHealth = 150; coolantUsage = 1f; consumes.powerCond(10f, TurretBuild::isActive); @@ -2852,7 +2851,7 @@ public class Blocks{ shootCone = 24f; shootSound = Sounds.shootBig; - health = 160 * size * size; + scaledHealth = 160; coolantUsage = 1f; limitRange(); @@ -2887,7 +2886,7 @@ public class Blocks{ ammoMultiplier = 1f; }}; - health = 200 * size * size; + scaledHealth = 200; consumes.add(new ConsumeCoolant(0.5f)).update(false); }}; @@ -2943,7 +2942,7 @@ public class Blocks{ restitution = 0.03f; range = 190; shootCone = 3f; - health = 360 * size * size; + scaledHealth = 280; rotateSpeed = 1.6f; limitRange(); @@ -2952,7 +2951,7 @@ public class Blocks{ //TODO bad name sublimate = new ContinuousTurret("sublimate"){{ //TODO requirements - requirements(Category.turret, with(Items.tungsten, 50, Items.silicon, 60, Items.oxide, 30, Items.carbide, 40)); + requirements(Category.turret, with(Items.tungsten, 120, Items.silicon, 160, Items.oxide, 50)); draw = new DrawTurret("reinforced-"){{ liquidDraw = Liquids.ozone; @@ -2988,15 +2987,17 @@ public class Blocks{ }}; outlineColor = Pal.darkOutline; + //TODO also consume hydrogen as a different ammo consumes.liquids(LiquidStack.with(Liquids.cyanogen, 3f / 60f, Liquids.ozone, 2f / 60f)); range = 170f; - //TODO multi ammo shootType = new ContinuousFlameBulletType(){{ - damage = 4f; + damage = 5f; length = range; }}; + + scaledHealth = 320; shootLength = 7f; size = 3; }}; @@ -3006,15 +3007,15 @@ public class Blocks{ ammo( //TODO 1 more ammo type, decide on base type - Items.fissileMatter, new ArtilleryBulletType(2.5f, 60, "shell"){{ + Items.fissileMatter, new ArtilleryBulletType(2.5f, 100, "shell"){{ hitEffect = new MultiEffect(Fx.titanExplosion, Fx.titanSmoke); despawnEffect = Fx.none; knockback = 2f; lifetime = 140f; - height = 17f; - width = 16f; + height = 19f; + width = 17f; splashDamageRadius = 65f; - splashDamage = 150f; + splashDamage = 250f; backColor = hitColor = trailColor = Color.valueOf("ea8878").lerp(Color.valueOf("feb380"), 0.5f); frontColor = Color.white; ammoMultiplier = 1f; @@ -3022,9 +3023,9 @@ public class Blocks{ status = StatusEffects.blasted; trailLength = 32; - trailWidth = 2.85f; + trailWidth = 3.35f; trailSinScl = 2.5f; - trailSinMag = 1f; + trailSinMag = 0.5f; trailEffect = Fx.none; despawnShake = 7f; @@ -3040,7 +3041,7 @@ public class Blocks{ targetAir = false; shootShake = 4f; recoilAmount = 1f; - reloadTime = 60f * 2f; + reloadTime = 60f * 3f; shootLength = 7f; rotateSpeed = 2.5f; @@ -3073,6 +3074,7 @@ public class Blocks{ consumes.liquids(LiquidStack.with(Liquids.hydrogen, 2f / 60f)); + scaledHealth = 300; range = 390f; size = 4; }}; @@ -3083,7 +3085,7 @@ public class Blocks{ commandCenter = new CommandCenter("command-center"){{ requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100)); size = 2; - health = size * size * 55; + scaledHealth = 55; }}; groundFactory = new UnitFactory("ground-factory"){{ @@ -3411,7 +3413,7 @@ public class Blocks{ hasPower = true; consumes.power(10f); buildCostMultiplier = 0.5f; - health = size * size * 80; + scaledHealth = 80; }}; //endregion campaign diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 1076c51f04..34dd7bb293 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -51,6 +51,7 @@ public class Items{ hardness = 4; radioactivity = 1f; cost = 1.1f; + healthScaling = 0.2f; }}; scrap = new Item("scrap", Color.valueOf("777777")){{ @@ -65,16 +66,19 @@ public class Items{ flammability = 0.1f; explosiveness = 0.2f; cost = 1.3f; + healthScaling = 0.1f; }}; phaseFabric = new Item("phase-fabric", Color.valueOf("f4ba6e")){{ cost = 1.3f; radioactivity = 0.6f; + healthScaling = 0.25f; }}; surgeAlloy = new Item("surge-alloy", Color.valueOf("f3e979")){{ cost = 1.2f; charge = 0.75f; + healthScaling = 0.25f; }}; sporePod = new Item("spore-pod", Color.valueOf("7457ce")){{ @@ -88,25 +92,29 @@ public class Items{ pyratite = new Item("pyratite", Color.valueOf("ffaa5f")){{ flammability = 1.4f; - explosiveness = 0.4f; + explosiveness = 0.5f; }}; beryllium = new Item("beryllium", Color.valueOf("3a8f64")){{ hardness = 4; cost = 1.3f; + healthScaling = 0.6f; }}; tungsten = new Item("tungsten", Color.valueOf("768a9a")){{ hardness = 5; cost = 1.5f; + healthScaling = 0.8f; }}; oxide = new Item("oxide", Color.valueOf("e4ffd6")){{ - cost = 1.1f; + cost = 1.2f; + healthScaling = 0.5f; }}; carbide = new Item("carbide", Color.valueOf("89769a")){{ - cost = 1.3f; + cost = 1.6f; + healthScaling = 1.1f; }}; fissileMatter = new Item("fissile-matter", Color.valueOf("5e988d")){{ diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index af2c06f553..a07477ed3c 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2513,7 +2513,7 @@ public class UnitTypes{ rotateSpeed = 3.5f; accel = 0.1f; health = 3000f; - armor = 4f; + armor = 5f; hitSize = 36f; payloadCapacity = Mathf.sqr(3f) * tilePayload; @@ -2522,6 +2522,7 @@ public class UnitTypes{ abilities.add(new SuppressionFieldAbility(){{ orbRadius = 5.3f; + y = 1f; }}); float es = 3.9f; diff --git a/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java b/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java index b7755f33bf..c97de62c22 100644 --- a/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java +++ b/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java @@ -23,6 +23,7 @@ public class SuppressionFieldAbility extends Ability{ public Color color1 = Pal.sap.cpy().mul(1.6f), color2 = Pal.sap; public float layer = Layer.effect; + public float x = 0f, y = 0f; public int particles = 15; public float particleSize = 4f; public float particleLen = 7f; @@ -78,12 +79,14 @@ public class SuppressionFieldAbility extends Ability{ Draw.z(layer); float rad = orbRadius + Mathf.absin(orbSinScl, orbSinMag); + Tmp.v1.set(x, y).rotate(unit.rotation - 90f); + float rx = unit.x + Tmp.v1.x, ry = unit.y + Tmp.v1.y; Draw.color(color2); - Fill.circle(unit.x, unit.y, rad); + Fill.circle(rx, ry, rad); Draw.color(color1); - Fill.circle(unit.x, unit.y, rad * orbMidScl); + Fill.circle(rx, ry, rad * orbMidScl); float base = (Time.time / particleLife); rand.setSeed(unit.id); @@ -93,8 +96,8 @@ public class SuppressionFieldAbility extends Ability{ float angle = rand.random(360f) + (Time.time / rotateScl + unit.rotation) % 360f; float len = particleLen * particleInterp.apply(fout); Fill.circle( - unit.x + Angles.trnsx(angle, len), - unit.y + Angles.trnsy(angle, len), + rx + Angles.trnsx(angle, len), + ry + Angles.trnsy(angle, len), particleSize * Mathf.slope(fin) ); } @@ -103,7 +106,7 @@ public class SuppressionFieldAbility extends Ability{ if(heat > 0.001f){ Draw.color(Pal.sapBullet); Lines.stroke(1.2f * heat * Mathf.absin(10f, 1f)); - Lines.circle(unit.x, unit.y, range); + Lines.circle(rx, ry, range); } Draw.reset(); diff --git a/core/src/mindustry/type/Item.java b/core/src/mindustry/type/Item.java index 5cf5220213..fde04f9363 100644 --- a/core/src/mindustry/type/Item.java +++ b/core/src/mindustry/type/Item.java @@ -32,7 +32,9 @@ public class Item extends UnlockableContent{ * 1 cost = 1 tick added to build time */ public float cost = 1f; - /** if true, this item is of lowest priority to drills. */ + /** When this item is present in the build cost, a block's default health is multiplied by 1 + scaling, where 'scaling' is summed together for all item requirement types. */ + public float healthScaling = 0f; + /** if true, this item is of the lowest priority to drills. */ public boolean lowPriority; /** If >0, this item is animated. */ diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index ed29bb73b5..a379818b10 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -134,7 +134,9 @@ public class Block extends UnlockableContent{ public @Nullable Item itemDrop = null; /** Array of affinities to certain things. */ public Attributes attributes = new Attributes(); - /** tile entity health */ + /** Health per square tile that this block occupies; essentially, this is multiplied by size * size. Overridden if health is > 0. If <0, the default is 40. */ + public float scaledHealth = -1; + /** building health; -1 to use scaledHealth */ public int health = -1; /** damage absorption, similar to unit armor */ public float armor = 0f; @@ -914,7 +916,25 @@ public class Block extends UnlockableContent{ public void init(){ //initialize default health based on size if(health == -1){ - health = size * size * 40; + boolean round = false; + if(scaledHealth < 0){ + scaledHealth = 40; + + float scaling = 1f; + for(var stack : requirements){ + scaling += stack.item.healthScaling; + } + + if(scaling > 1){ + Log.info("@: @ -> @", name, scaledHealth * size * size, (Mathf.round(scaledHealth * scaling, 5) * size * size)); + } + scaledHealth *= scaling; + round = true; + } + + health = round ? + Mathf.round(size * size * scaledHealth, 5) : + (int)(size * size * scaledHealth); } clipSize = Math.max(clipSize, size * tilesize); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index 05a4017aaf..b1688d1596 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -40,6 +40,7 @@ public class ItemTurret extends Turret{ for(var entry : ammoTypes.copy().entries()){ var copy = entry.value.copy(); float realRange = copy.rangeChange + range; + //doesn't handle drag copy.lifetime = (realRange + margin) / copy.speed; ammoTypes.put(entry.key, copy); } @@ -59,7 +60,8 @@ public class ItemTurret extends Turret{ @Override public void build(Building build, Table table){ MultiReqImage image = new MultiReqImage(); - content.items().each(i -> filter.get(i) && i.unlockedNow(), item -> image.add(new ReqImage(new ItemImage(item.uiIcon), + content.items().each(i -> filter.get(i) && i.unlockedNow(), + item -> image.add(new ReqImage(new ItemImage(item.uiIcon), () -> build instanceof ItemTurretBuild it && !it.ammo.isEmpty() && ((ItemEntry)it.ammo.peek()).item == item))); table.add(image).size(8 * 4);