From 52b5ed57bfd344802537b0b1147bc30629e71518 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 16 Jun 2022 13:46:20 -0400 Subject: [PATCH] Unfinished/WIP turret --- .../turrets/afflict/afflict-blade-heat.png | Bin 0 -> 658 bytes .../turrets/afflict/afflict-blade-l.png | Bin 0 -> 1215 bytes .../turrets/afflict/afflict-blade-r.png | Bin 0 -> 1207 bytes .../turrets/afflict/afflict-preview.png | Bin 0 -> 4086 bytes .../blocks/turrets/afflict/afflict.png | Bin 0 -> 1295 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 4509 -> 4518 bytes core/src/mindustry/content/Blocks.java | 115 +++++++++++++++++- .../blocks/defense/turrets/ItemTurret.java | 7 +- .../blocks/defense/turrets/PowerTurret.java | 4 + .../world/blocks/defense/turrets/Turret.java | 6 + .../blocks/environment/ShallowLiquid.java | 33 ++++- 12 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-l.png create mode 100644 core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-r.png create mode 100644 core/assets-raw/sprites/blocks/turrets/afflict/afflict-preview.png create mode 100644 core/assets-raw/sprites/blocks/turrets/afflict/afflict.png diff --git a/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-heat.png b/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7f994e5a6a77c85022d48fe61a8c89cbc04543 GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>VDj;FaSW-L z^Y%`xpKzc|+sEe@!t7j{;wn~7e|PXm><;$uCuMg!ue%AVDg}!Ct}0x1W5LS55;Ds_ z|CuzIhjCJU)jZ4G6D$){JSVAmItT8Odr&_uf4NN2P9^kSu6N8^I@E80>kQ=x&K&hF!RmY%6=zvUphl{R@ssMmC|(_ zGN!KuZY=Ly;J>_qQD>TT{QH3S|7st|706dG$S{{T##WVaNgVi;CjaM|f5YQ6*+AwO zcW(n#26*lK`Rk1P25(zVz8|H3;_D^;v?u2sVfgomUoa)l_vhc-Md3UNoJ*$&mM*Sm z2tN@1fawR%9P{hb4}5=?UM1YhsIzj4(Zalc;tzxixaKgtZ|uJ!p=a3eHq^^<(Y?3n zSI*Wm?^$}Rz|U54odHO+lBtH_UZDB^7O5kwA9{cBFXc&?JvC@vaR0yHJemJXr@UNr z|EiehCzF$pRlZN^`Ta%QVXMl?!z$IDHoomzCy(ro2gW0L=$4s1V5#(UaSW-L z^LDO(-W3CpcH27(h1h2#n!j>PxXHYMozd3uAxo(0uICJ~ha9!a4lqur>PU26l92S< z_P1r3&3*OIRYsEPGw+LA*UKEY1ey&37UE@V!xyCAtNl?i>)-y}dvAWp-+Ehj{lCpq zuP1Nbv;SX-*ZHls0uBc|gcKSkT~u*s;BlM8z-T1t%EY4a;OXksXT2L31nd6(nKvi> zwUB~C(?wMW21aF|pp)BF2F9M7vsgF+8g)H^ioUfce=Fav#K@!~5zE9PV6cgWLm?%E zQ$V5V$rb-o{rdU4r!X)I_2@A&aY#f06&S5z;keKd2eh*7ivlB)i-zUb$(MeK2x6#_ z%m!N5yK`^Vzx!KERUI1mGBg>PN}RNTMhm}P`tWu8{gahZ9zYj3B{My_C;lRkiN)iA zw*XhY<_^`W$qbAvK0-?lP4_DJUomk`x-O@HgU1TX56xbl2C)IBrXG-D3Hb2#^GJYJ11|TrIW?i+pku6AE$n;Py5TeRlz}VsZhqD>1MW40tXsmIHTI%%P`GYICVk$hq=xS!Apd`2<ccQe%$%C@8PF4$De=I%C*T~=%)fT^t&s(9PY1YH+eCcS< z4KKqNPJJZ*;_06i8_&t*>&?INFgu&;<FEoOF@~L+x4+D{fnnX<%|CDXEmico z_Wup5#?Oyl$9OK3Y57jvEt{_Eu=>N&4>1nQBUE#!}$q9Al z8mZeN`MJ=MUxHUAFffKC$kq5Td8!L#a|$dl@@{Nb z$@tj7!6adP-#K}C;a*^5iQbU!TU7i*hI0+8V}qB6b!*$LFH09>U*Y2jm^g(6XcA|Z zDKAIB%n2<2zRX}T?dKM7@br_YyP>G*<^QqhU9N%yo2t-~S*=@v(c`0&)g+MZ)xf}d zC2O|ssi{C#YlL?~gV0~rg$KJn@Z!dJy*&U z5A4;hPz1(Is_!P};dMQIDp#rZvw64z%2Ie`V^(pqwSQ@;VD6&rJ4xtsfX6#R4*!AoGvGXioIo SeeC*KAaPGuKbLh*2~7a&+~eZ_ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-r.png b/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-r.png new file mode 100644 index 0000000000000000000000000000000000000000..d79cd376dae99e15f5e78a02a0526c5fc54211c4 GIT binary patch literal 1207 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>U@7!;aSW-L z^LDOn(NzNxH&$LzQ|X4192T#xFOd#vxov8^lcyyzz6=gH$xLp4|U`UyD!Ne^vTg_6B#c zq#F~XNRI|1lZK=(6N^TI3a7w=34tmO4P58+*OlorGO1Mjf0+Euwt6}Pqfw6@BNK;2 zBom8((JB^>gfsV492nTYselyK?9l%ACJv~NXR&t!1C!e{2F8{iEuhSVIlnxAelEGW zl!aqLVhN{!!+{e*3JntiRUI1Kz9=y=nJi)F6i{$HyK?@NYs)(@)SSB!#l(_vX8Y;= z|82Je&A7m*3)JbCp~}c4vS_c#pRd1szuD@lNEDsjt(xt9AnO?GHK({uYNz|(hwDWK zGN(k`lTZ@dr*cE!*J_a6Dvo+JD_NGOf4})X2WSLG=Ut^V$q>J$mrX${S*|HGG^JY0 zaBF<~^C@eQ3sb&;!$}p#cQ0c0$?cwU2j~tBhg-_?RZjFOZ<)ft$W{6KU6iWhdIbm8 zAkMseze($(&zWCoVwifxYXRr|$4LTA5&>F{uRl0DFc@zU`XW%r!I97v(iC@ypONv* zMw_LRxk8zlB#e4xqC6BNO*Szw_C)YWU-vL*J>N26ZbIel8&4;`*JWf1c_jI-WjPB+ zKx3-GPP6%(igN>{Jba(`0T~yR{@ltv?!cg`dwBibc2fa|#`GVz5|gz#XNcJ?e&X)y z`)$Ww%fR;aYc;dL zF8FDk4g6)xr|Yo#!_p0U3xahHP2chv7+mibDK-dYDoo-_@M`**u?Xm%2MuY*&d*}W zc0L&gj8DUrtV=eU)#^EB$u+jKaBN`w{2*A!Lv3ONFfp84!zwp#wE0S>(^JJS-gf$3GCdzQknX+pq=h|AsVx-$qUB$Umm zb9%Bz0|Q$`>$AYcPk;$kIqR_Y-#?EJ$8I}6VG;u)k0$R%wLe>rOY!M89Df_WB{8aH zewE(wg{&M4_p+!iTxz#ix4%_UzhVvVg%-uB%ToN3ygnVi&LCX9hEwI~(|zKm2b%6> zGxi{9*`<`od{)@aU;aQv{iqRBi?_ z^n+n$!pH>0kv++ zR8(aW3D9=*EI6GTb=89-z+)xLy?Ta)OIOdmDILXG#cj{RvcgTvvHxLv1B2QVl^3Q! zcO2k3KW~?M?E5?SKD=6axX)t$j;g%U=Yf#Y0EM*B`_Evk@AlpGY%Q~lo FCIGzh+lK%E literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/afflict/afflict-preview.png b/core/assets-raw/sprites/blocks/turrets/afflict/afflict-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb86e37f46b76b33154c5ea8dd5ca73e3b2388c GIT binary patch literal 4086 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 se(u%@ES9@10O<0C0;$@B};qNOR# zgcOY)Hq(5SwPmIF=(Jjz$C|A=gD6iOHHGwO?8s#7U)T?ydw;w4ocqH)y(1>l)1BxJ z0DvbyiWlp2rf1C zc+Z;8g_MKn;n%L**dIki{!*`@v|vizJicve$^|`-Zj=;-{?z|z*B9O2oms}8H|lhr zx8_((CR4K;fw&lQ(f^jkd$SzYeNHat&h9 zg zj#NzsHyB^hj3550?h2%x-t^RChj-_G5G(W;ggbjXz-tSlj%1%W`%7eAzR#7wu?6+M zI>v_04#(XD^h6CCL7|WwtljEc2TL$3L!7B}4ox1}3?}rr;jq9}s;bx$#g_)i4O$@1 zZjkll*)wGLDe)}v?+!s%;BcjsZU~*tGHkjAV)~&yCs@esV)7wS@^Q_cXjlvBAHkV{aJ>&{ zQ9(vxNcrT#J0wLKD(9Jw+Cr23V0(}fJ>}rD7 zDnAU;6b-L}gU!!^XR3CxU*8N9KEFW@4`&D2-`A9;p4u+b%Ju;oUtU`+R}`*rN5z^? zv6x8%BjsR$buk5^vomd%ER_=Tcr@g`>mGQyMO5gkEHe%ajmsNtnBySZ#D*k?sidRX9*I|{nKE-xcO@XM$jN4k5DGKCgz?hj7 zK8cH{d-9^x>>}XmN`f@|q!(#8G>ke-K2W+B1g0oUoO9O$ZJ`b=*k*0|%Eu>wopyZv zwt*WL%Rxp;K@)i0{JvJ@O$xuitQQ}#t`@&bLt4}s(I8pFnY13E^RVSaW2x81X&Hrv zHK_wRqt+w%KFr|PJwA=Iad4lie|73%@2GRm`bKxtH-4Of1F#3Ig7lT=?#@%;il>yJ zf;{KURe!J;@C%{e^B{!)l{7r}kdk^~OT8F<9^DR~lU5}52}2$F-yls{#pY^xzW*Ur zZVfKcrLT5%(08+w4G`IID{*x?!^+rBNY;Q~R;)N(F5;1wN3bT0^~#+@Ijhb>kc{O( z9VQLTA_;-F9U#@*@@}U2c1vB&yJ%8?oUI28b>M^Eyr2L@yA?&wKmw>4N^#epjNDP$ z=@f*}=~jDx*)> z5Ez9tx|r754}Z)3b?Pu?CG;ADQ+Jdle?)2GD-&K2UU-e^M~@k{gmWgUh545nS{EiO jjVaZ1#T_e_d}SI>KkE2c@?@38`EUS#YYeZMD^>mrxW^z1 literal 0 HcmV?d00001 diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index e0de3ab0ae..4408c861c0 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -564,3 +564,4 @@ 63120=mech-refabricator|block-mech-refabricator-ui 63119=ship-refabricator|block-ship-refabricator-ui 63118=slag-heater|block-slag-heater-ui +63117=afflict|block-afflict-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index 26b7474472e61bf73016057525807eaeadd57b69..3ee34e9448248157e1584d85896949277034238b 100644 GIT binary patch delta 24 gcmbQMyiA#i;nPN@IeZ-KiD_v$naL%K=khTF0A<|>6aWAK delta 16 YcmZ3cJXe{C;p0Z8IeeR!^ZjQ605gIHLjV8( diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index d8ae541e51..6f599608af 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -4061,7 +4061,120 @@ public class Blocks{ limitRange(-5f); }}; - //TODO 3+ more turrets. + //TODO very WIP + afflict = new PowerTurret("afflict"){{ + requirements(Category.turret, with(Items.surgeAlloy, 100, Items.silicon, 200, Items.graphite, 250, Items.oxide, 40)); + + shootType = new BasicBulletType(){{ + shootEffect = new MultiEffect(Fx.shootTitan, new WaveEffect(){{ + colorTo = Pal.surge; + sizeTo = 26f; + lifetime = 14f; + strokeFrom = 4f; + }}); + smokeEffect = Fx.shootSmokeTitan; + hitColor = Pal.surge; + + sprite = "large-orb"; + trailEffect = Fx.missileTrail; + trailInterval = 3f; + trailParam = 4f; + speed = 5f; + damage = 150f; + lifetime = 80f; + width = height = 16f; + backColor = Pal.surge; + frontColor = Color.white; + shrinkX = shrinkY = 0f; + trailColor = Pal.surge; + trailLength = 12; + trailWidth = 2.2f; + despawnEffect = hitEffect = new ExplosionEffect(){{ + waveColor = Pal.surge; + smokeColor = Color.gray; + sparkColor = Pal.sap; + waveStroke = 4f; + waveRad = 40f; + }}; + + intervalBullet = new LightningBulletType(){{ + damage = 18; + collidesAir = false; + ammoMultiplier = 1f; + lightningColor = Pal.surge; + lightningLength = 5; + lightningLengthRand = 8; + + //for visual stats only. + buildingDamageMultiplier = 0.25f; + + lightningType = new BulletType(0.0001f, 0f){{ + lifetime = Fx.lightning.lifetime; + hitEffect = Fx.hitLancer; + despawnEffect = Fx.none; + status = StatusEffects.shocked; + statusDuration = 10f; + hittable = false; + lightColor = Color.white; + buildingDamageMultiplier = 0.25f; + }}; + }}; + + bulletInterval = 3f; + + lightningColor = Pal.surge; + lightningDamage = 25; + lightning = 8; + lightningLength = 5; + lightningLengthRand = 8; + }}; + + drawer = new DrawTurret("reinforced-"){{ + parts.add(new RegionPart("-blade"){{ + progress = PartProgress.recoil; + heatColor = Color.valueOf("ff6214"); + mirror = true; + under = true; + moveX = 2f; + moveY = -1f; + moveRot = -5f; + }}, + new RegionPart("-blade-glow"){{ + progress = PartProgress.recoil; + heatProgress = PartProgress.warmup; + heatColor = Color.valueOf("ff6214"); + drawRegion = false; + mirror = true; + under = true; + moveX = 2f; + moveY = -1f; + moveRot = -5f; + }}); + }}; + + consumePower(2f); + heatRequirement = 8f; + maxHeatEfficiency = 2f; + + inaccuracy = 1f; + shake = 2f; + shootY = 4; + outlineColor = Pal.darkOutline; + size = 4; + envEnabled |= Env.space; + reload = 80f; + cooldownTime = reload; + recoil = 3f; + range = 290; + shootCone = 15f; + scaledHealth = 180; + rotateSpeed = 1.5f; + researchCostMultiplier = 0.05f; + + limitRange(9f); + }}; + + //TODO 5 more turrets. //endregion //region units diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index 956b22d63c..fb6e86aa7b 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -38,11 +38,8 @@ public class ItemTurret extends Turret{ /** Makes copies of all bullets and limits their range. */ public void limitRange(float margin){ - for(var entry : ammoTypes.copy().entries()){ - var bullet = entry.value; - float realRange = bullet.rangeChange + range; - //doesn't handle drag - bullet.lifetime = (realRange + margin) / bullet.speed; + for(var entry : ammoTypes.entries()){ + limitRange(entry.value, margin); } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java index b7c6f92e5a..d18db6208c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java @@ -19,6 +19,10 @@ public class PowerTurret extends Turret{ stats.add(Stat.ammo, StatValues.ammo(ObjectMap.of(this, shootType))); } + public void limitRange(float margin){ + limitRange(shootType, margin); + } + public class PowerTurretBuild extends TurretBuild{ @Override diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 6a3ca346f8..25ac2ff0cf 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -186,6 +186,12 @@ public class Turret extends ReloadTurret{ drawer.getRegionsToOutline(this, out); } + public void limitRange(BulletType bullet, float margin){ + float realRange = bullet.rangeChange + range; + //doesn't handle drag + bullet.lifetime = (realRange + margin) / bullet.speed; + } + public static abstract class AmmoEntry{ public int amount; diff --git a/core/src/mindustry/world/blocks/environment/ShallowLiquid.java b/core/src/mindustry/world/blocks/environment/ShallowLiquid.java index 4ab54e1086..95c4a368ee 100644 --- a/core/src/mindustry/world/blocks/environment/ShallowLiquid.java +++ b/core/src/mindustry/world/blocks/environment/ShallowLiquid.java @@ -1,11 +1,15 @@ package mindustry.world.blocks.environment; +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; import arc.util.*; +import mindustry.graphics.*; +import mindustry.graphics.MultiPacker.*; import mindustry.world.*; /** - * Do not use in mods. This class provides no new functionality, and is only used for the Mindustry sprite generator. - * Use the standard Floor class instead. + * Blends water together with a standard floor. No new mechanics. * */ public class ShallowLiquid extends Floor{ public @Nullable Floor liquidBase, floorBase; @@ -26,4 +30,29 @@ public class ShallowLiquid extends Floor{ cacheLayer = liquidBase.cacheLayer; shallow = true; } + + @Override + public void createIcons(MultiPacker packer){ + //TODO might not be necessary at all, but I am not sure yet + //super.createIcons(packer); + + if(liquidBase != null && floorBase != null){ + var overlay = Core.atlas.getPixmap(liquidBase.region); + int index = 0; + for(TextureRegion region : floorBase.variantRegions()){ + var res = Core.atlas.getPixmap(region).crop(); + for(int x = 0; x < res.width; x++){ + for(int y = 0; y < res.height; y++){ + res.setRaw(x, y, Pixmap.blend((overlay.getRaw(x, y) & 0xffffff00) | (int)(liquidOpacity * 255), res.getRaw(x, y))); + } + } + + String baseName = this.name + "" + (++index); + packer.add(PageType.environment, baseName, res); + packer.add(PageType.editor, "editor-" + baseName, res); + + res.dispose(); + } + } + } }