From 2109a25e3e904913f5a2553e46aff236a0be6ec7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 16 Jun 2022 15:34:22 -0400 Subject: [PATCH] Turret progress --- .../afflict/afflict-blade-glow-heat.png | Bin 0 -> 2472 bytes core/assets/bundles/bundle.properties | 1 + core/src/mindustry/content/Blocks.java | 61 +++++++++--------- .../src/mindustry/content/ErekirTechTree.java | 3 +- .../mindustry/entities/bullet/BulletType.java | 9 ++- 5 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-glow-heat.png diff --git a/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-glow-heat.png b/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-glow-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..a29c4daf46eaf8b028550e48f61af41c2e650709 GIT binary patch literal 2472 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 Q(&z;^I}&iU4y5FN1NT{qEdT%j literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index aff42cffbb..33470678e7 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2006,6 +2006,7 @@ block.breach.name = Breach block.sublimate.name = Sublimate block.titan.name = Titan block.disperse.name = Disperse +block.afflict.name = Afflict block.fabricator.name = Fabricator block.tank-refabricator.name = Tank Refabricator block.mech-refabricator.name = Mech Refabricator diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6f599608af..934fe6d40e 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -4079,6 +4079,8 @@ public class Blocks{ trailEffect = Fx.missileTrail; trailInterval = 3f; trailParam = 4f; + pierceCap = 2; + fragOnHit = false; speed = 5f; damage = 150f; lifetime = 80f; @@ -4097,36 +4099,37 @@ public class Blocks{ 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; + fragBullet = intervalBullet = new BasicBulletType(3f, 20){{ + width = 9f; + hitSize = 5f; + height = 15f; + pierce = true; + lifetime = 30f; + pierceBuilding = true; + hitColor = backColor = trailColor = Pal.surge; + frontColor = Color.white; + trailWidth = 2.1f; + trailLength = 5; + hitEffect = despawnEffect = new WaveEffect(){{ + colorFrom = colorTo = Pal.surge; + sizeTo = 4f; + strokeFrom = 4f; + lifetime = 10f; }}; + buildingDamageMultiplier = 0.3f; + homingPower = 0.2f; }}; bulletInterval = 3f; + intervalRandomSpread = 20f; + intervalBullets = 2; + intervalAngle = 180f; + intervalSpread = 280f; - lightningColor = Pal.surge; - lightningDamage = 25; - lightning = 8; - lightningLength = 5; - lightningLengthRand = 8; + fragBullets = 20; + fragVelocityMin = 0.5f; + fragVelocityMax = 1.5f; + fragLifeMin = 0.5f; }}; drawer = new DrawTurret("reinforced-"){{ @@ -4153,7 +4156,7 @@ public class Blocks{ }}; consumePower(2f); - heatRequirement = 8f; + heatRequirement = 10f; maxHeatEfficiency = 2f; inaccuracy = 1f; @@ -4162,11 +4165,11 @@ public class Blocks{ outlineColor = Pal.darkOutline; size = 4; envEnabled |= Env.space; - reload = 80f; + reload = 110f; cooldownTime = reload; recoil = 3f; - range = 290; - shootCone = 15f; + range = 340; + shootCone = 20f; scaledHealth = 180; rotateSpeed = 1.5f; researchCostMultiplier = 0.05f; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 0ba1f44c57..c3e369bb3b 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -258,9 +258,10 @@ public class ErekirTechTree{ node(diffuse, Seq.with(new OnSector(two)), () -> { node(sublimate, () -> { - //TODO implement node(titan, Seq.with(new OnSector(four)), () -> { + node(afflict, Seq.with(new OnSector(four)), () -> { + }); }); node(disperse, Seq.with(new OnSector(four)), () -> { diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 281627dca8..6e2c615437 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -167,6 +167,12 @@ public class BulletType extends Content implements Cloneable{ public float bulletInterval = 20f; /** Number of bullet spawned per interval. */ public int intervalBullets = 1; + /** Random spread of interval bullets. */ + public float intervalRandomSpread = 360f; + /** Angle spread between individual interval bullets. */ + public float intervalSpread = 0f; + /** Angle offset for interval bullets. */ + public float intervalAngle = 0f; /** Color used for hit/despawn effects. */ public Color hitColor = Color.white; @@ -496,8 +502,9 @@ public class BulletType extends Content implements Cloneable{ public void updateBulletInterval(Bullet b){ if(intervalBullet != null && b.timer.get(2, bulletInterval)){ + float ang = b.rotation(); for(int i = 0; i < intervalBullets; i++){ - intervalBullet.create(b, b.x, b.y, Mathf.random(360f)); + intervalBullet.create(b, b.x, b.y, ang + Mathf.range(intervalRandomSpread) + intervalAngle + ((i - (intervalBullets - 1f)/2f) * intervalSpread)); } } }