From 98b01953a44caf555fcc6dc0764d45102028b9ec Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 2 May 2022 18:53:12 -0400 Subject: [PATCH] Diffuse turret --- .../turrets/diffuse/diffuse-front-heat.png | Bin 0 -> 1426 bytes .../turrets/diffuse/diffuse-front-l.png | Bin 0 -> 847 bytes .../turrets/diffuse/diffuse-front-r.png | Bin 0 -> 798 bytes .../diffuse-preview.png} | Bin .../blocks/turrets/diffuse/diffuse.png | Bin 0 -> 2088 bytes core/src/mindustry/content/Blocks.java | 34 +++++++++++------- core/src/mindustry/content/Fx.java | 11 ++++++ core/src/mindustry/content/UnitTypes.java | 1 + .../world/blocks/defense/turrets/Turret.java | 8 ++--- 9 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-front-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-front-l.png create mode 100644 core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-front-r.png rename core/assets-raw/sprites/blocks/turrets/{diffuse.png => diffuse/diffuse-preview.png} (100%) create mode 100644 core/assets-raw/sprites/blocks/turrets/diffuse/diffuse.png diff --git a/core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-front-heat.png b/core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-front-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..f975b3babf2d53ce0ea321b869a16dfe9cefe96a GIT binary patch literal 1426 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/diffuse.png b/core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-preview.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/diffuse.png rename to core/assets-raw/sprites/blocks/turrets/diffuse/diffuse-preview.png diff --git a/core/assets-raw/sprites/blocks/turrets/diffuse/diffuse.png b/core/assets-raw/sprites/blocks/turrets/diffuse/diffuse.png new file mode 100644 index 0000000000000000000000000000000000000000..8171681a58c3e5c3bfe7cba8765263ca8f7c6a2e GIT binary patch literal 2088 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^Ts-+Q_^hEy=Vo#VUOH&CMC zeDB05izKvmvZXAWF=65QMvYS^^bh!3l&?_{b`vrRR!d1x;F(}#u%mhLl!c8!ZC&$L zhp)fB`&!*~yXyH{*MAFM{(0;5Th;dGf7&hIoM;p@)zBgJ7{gRa=8!a=fSHtW?y^`E zetL8MW=^TsjixOKGi5iB9`cITP zY7%W-BuW^x<3A`x{5*6)na9k*Yu^IpB~Q4W`wUJn_(|TUaV|wTTlgm@? z=5)K6JIoe&V}m z?l+-J;Zq~Sgf4-J`WyD<$giKY$5~$fU8x+y&rQy9Hd_?TxK3wpshPm=z;(mp;x}>k z=I`D$efs*jY#EdE6;!1fQ(3j;OBgl?e)%Ee`-%0PWb8d*D{g_Q`U+}7jZY6u<~L(_ z!C_?Q9)zg0>fW`4 zi9t|qkN5uFdD`(Wln%u(KAWolgh}S+A7`=RldKIf4R@**pOIcz$`E&YGxMFM=dG1N zPncqAENAceyDj8t?JIpeEI?d*AWwiOp zq~xWnAn(PL@$*0xtG<)ofmY`I^7|yho7CeqdIk6_Yo4Oq-`ky&i8zynA`m0O*;nnqq-oyi zQ|z(~Yb^Q#doZuN?W@wvr?xx% zCeO}ZDDQe;52K5nf)cCs+)4a#3=UdMlJlLeoi5VJe^}(3x2{yw;WWG8!;8<4U#!}D zVw>O&pU?3u8$LO9Z>X5hni=$+LGioYfpy{!t(cyhHgjJ1a_&an3LEx{Pn8uX_i~+L zP1v_g{Zb6W`@vp7s+{dqyH;mq;15`ju*CvhJ* z9dOJr?r`P%qH9-6TNW|oJ~_Pje7xl^?uqg_^UYsNB^PQqyqnrz ze%gQGQ)f>GU3mc|1>TvnJQxyW9xHD+7t=B+++{Ay40k&h=7^sSJiI~^HC>n)9!tnK zeqE-dV{%~6CqY5I9eNpVHJ+plY)14i5vAce~xyq&g@r?u{qo!ZXJUvBa(|O^JnqJBqWQ!i` zoOJ$lP;s`?dBzjho4pzJT6K~K;^cZ!Pw%X%}56F+3i?yESs>=U?a&!2z)ALoRslVVGs zgf&$t6|DJaRuZ?SM!})8Chp?d?!6mJnSaH!W?w-oLa;>Z80&18#|}OIM_XzHe20ka!tbTi25$Qr-z-G8LW@{MY-&o5XE=P zrQ?M74ZCakFQe>qY#25azgd#-l)KE**Rw_FC)4fYzgq2{I43j2-8%c*>qPV1WcA=r ztdZxGg%y#TYK{Rz14p{YjOPQ5n$vz@nOSu1@BkKgs0AmdcUXQ(?MQ_TGx(8 zt{!h&j@^E@;?KSlx#dO-71oAH zFv9$QjZmx|>%+<$kAJFf_2D|UY@M(avya;3lR4XVZQ7ImzC`HB$;a*9n_htV>UP%_ zJ=c1A_VsgZc79pj{OwPVeSJCquf|;O{<9ku%a^KYT@n_P&HngIYiY=w2b?|Up7#0* z@-g@-6(5>)EUKt@s*tGq6Be_xQ>9-AiZBEzDIW?-)}6T1D^p0_g=N{ZuAZ$T>t2P%HXg>#v;C{=X0O;vrOhkLG71*ez94a+ dQpNjBT=3tNUgu)xbOr_n22WQ%mvv4FO#mbTnjioG literal 0 HcmV?d00001 diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index aff16f8b03..21e661a140 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3316,7 +3316,7 @@ public class Blocks{ size = 3; reload = 3f; shoot.shots = 2; - velocityInaccuracy = 0.1f; + velocityRnd = 0.1f; inaccuracy = 4f; recoilAmount = 1f; restitution = 0.04f; @@ -3456,7 +3456,7 @@ public class Blocks{ ammoUseEffect = Fx.casing3Double; ammoPerShot = 2; cooldown = 0.03f; - velocityInaccuracy = 0.2f; + velocityRnd = 0.2f; restitution = 0.02f; recoilAmount = 6f; shootShake = 2f; @@ -3759,22 +3759,22 @@ public class Blocks{ }}; diffuse = new ItemTurret("diffuse"){{ - requirements(Category.turret, with(Items.beryllium, 150, Items.silicon, 150, Items.graphite, 250)); + requirements(Category.turret, with(Items.beryllium, 150, Items.silicon, 200, Items.graphite, 200, Items.tungsten, 50)); ammo( - Items.graphite, new BasicBulletType(8f, 30){{ - knockback = 5f; + Items.graphite, new BasicBulletType(8f, 35){{ + knockback = 6f; width = 25f; hitSize = 7f; height = 20f; - shootEffect = Fx.shootTitan; - smokeEffect = Fx.shootBigSmoke; + shootEffect = Fx.shootBigColor; + smokeEffect = Fx.shootSmokeSquareSparse; ammoMultiplier = 4; hitColor = backColor = trailColor = Color.valueOf("ea8878"); - frontColor = Color.white; + frontColor = Color.valueOf("feb380"); trailWidth = 6f; trailLength = 3; - hitEffect = despawnEffect = Fx.hitBulletColor; + hitEffect = despawnEffect = Fx.hitSquaresColor; buildingDamageMultiplier = 0.2f; }} ); @@ -3786,10 +3786,19 @@ public class Blocks{ coolantMultiplier = 6f; + velocityRnd = 0.17f; shootShake = 1f; ammoPerShot = 1; maxAmmo = 50; - drawer = new DrawTurret("reinforced-"); + drawer = new DrawTurret("reinforced-"){{ + parts.add(new RegionPart("-front"){{ + progress = PartProgress.warmup; + moveRot = -10f; + mirror = true; + moves.add(new PartMove(PartProgress.reload, 0f, -3f, -5f)); + heatColor = Color.red; + }}); + }}; shootY = 5f; outlineColor = Pal.darkOutline; size = 3; @@ -3797,7 +3806,7 @@ public class Blocks{ reload = 30f; recoilAmount = 2f; restitution = 0.03f; - range = 100; + range = 110; shootCone = 3f; scaledHealth = 180; rotateSpeed = 2f; @@ -3977,7 +3986,7 @@ public class Blocks{ shrinkY = 0.3f; backSprite = "large-bomb-back"; sprite = "mine-bullet"; - velocityInaccuracy = 0.11f; + velocityRnd = 0.11f; collidesGround = false; collidesTiles = false; shootEffect = Fx.shootBig2; @@ -3994,7 +4003,6 @@ public class Blocks{ hitEffect = despawnEffect = Fx.hitBulletColor; }}); - reload = 9f; shootY = 15f; rotateSpeed = 5f; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 628157fad8..c45bbfa56a 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -1521,6 +1521,17 @@ public class Fx{ } }), + shootSmokeSquareSparse = new Effect(30f, e -> { + color(Color.white, e.color, e.fin()); + + rand.setSeed(e.id); + for(int i = 0; i < 2; i++){ + float rot = e.rotation + rand.range(30f); + v.trns(rot, rand.random(e.finpow() * 27f)); + Fill.poly(e.x + v.x, e.y + v.y, 4, e.fout() * 3.8f + 0.2f, rand.random(360f)); + } + }), + shootSmokeSquareBig = new Effect(30f, e -> { color(Color.white, e.color, e.fin()); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 57c6fc9e87..2019a293dc 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2922,6 +2922,7 @@ public class UnitTypes{ legMoveSpace = 1f; allowLegStep = true; + hovering = true; legPhysicsLayer = false; shadowElevation = 0.1f; diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index f6fe109260..15a9c6348f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -44,7 +44,7 @@ public class Turret extends ReloadTurret{ public Sound chargeSound = Sounds.none; public float soundPitchMin = 0.9f, soundPitchMax = 1.1f; - //visuals + //visuals TODO document public float ammoEjectBack = 1f; public float shootWarmupSpeed = 0.1f; public boolean linearWarmup = false; @@ -64,7 +64,7 @@ public class Turret extends ReloadTurret{ /** Bullet angle randomness in degrees. */ public float inaccuracy = 0f; /** Fraction of bullet velocity that is random. */ - public float velocityInaccuracy = 0f; + public float velocityRnd = 0f; /** Maximum angle difference in degrees at which turret will still try to shoot. */ public float shootCone = 8f; /** Turret shoot point. */ @@ -204,7 +204,7 @@ public class Turret extends ReloadTurret{ @Override public boolean shouldConsume(){ - return isShooting(); + return isShooting() || reloadCounter < reload; } @Override @@ -503,7 +503,7 @@ public class Turret extends ReloadTurret{ float lifeScl = type.scaleLife ? Mathf.clamp(Mathf.dst(bulletX, bulletY, targetPos.x, targetPos.y) / type.range, minRange / type.range, range() / type.range) : 1f; //TODO aimX / aimY for multi shot turrets? - handleBullet(type.create(this, team, bulletX, bulletY, shootAngle, -1f, 1f + Mathf.range(velocityInaccuracy), lifeScl, null, mover, targetPos.x, targetPos.y), xOffset, yOffset, angleOffset); + handleBullet(type.create(this, team, bulletX, bulletY, shootAngle, -1f, (1f - velocityRnd) + Mathf.random(velocityRnd), lifeScl, null, mover, targetPos.x, targetPos.y), xOffset, yOffset, angleOffset); (shootEffect == Fx.none ? type.shootEffect : shootEffect).at(bulletX, bulletY, rotation + angleOffset, type.hitColor); (smokeEffect == Fx.none ? type.smokeEffect : smokeEffect).at(bulletX, bulletY, rotation + angleOffset, type.hitColor);