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 0000000000..a29c4daf46 Binary files /dev/null and b/core/assets-raw/sprites/blocks/turrets/afflict/afflict-blade-glow-heat.png differ 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)); } } }