From 19d3e203284d1121b37ab2ad1175f5daf305ce2d Mon Sep 17 00:00:00 2001 From: SomeonesShade Date: Sat, 14 Jun 2025 06:04:09 +0800 Subject: [PATCH] Temporarily Invincible Missiles Quell (#10674) * quell changes version 1 (draft) * Quell Homing Workaround and Stat Display Working * Quell, 16 close range instead of 19 * final color adjustment * quell description attempt 1 * quell desc attempt 2 * e * oop * Added Homing to Quell Plasma Shielding --------- Co-authored-by: EggleEgg <125359838+EggleEgg@users.noreply.github.com> --- core/assets/bundles/bundle.properties | 2 +- core/src/mindustry/content/UnitTypes.java | 73 +++++++++++++------ .../abilities/SuppressionFieldAbility.java | 5 +- 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 4fa00bd859..94a4e69a14 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2448,7 +2448,7 @@ unit.collaris.description = Fires long-range fragmenting artillery at enemy targ unit.elude.description = Fires pairs of homing bullets at enemy targets. Can float over bodies of liquid. unit.avert.description = Fires twisting pairs of bullets at enemy targets. unit.obviate.description = Fires twisting pairs of lightning orbs at enemy targets. -unit.quell.description = Fires long-range homing missiles at enemy targets. Suppresses enemy structure repair blocks. Only attacks ground targets. +unit.quell.description = Fires long-range homing missiles with unstable plasma shielding at enemy targets. Suppresses enemy structure repair blocks. Only attacks ground targets. unit.disrupt.description = Fires long-range homing suppression missiles at enemy targets. Suppresses enemy structure repair blocks. Only attacks ground targets. unit.evoke.description = Builds structures to defend the Bastion core. Repairs structures with a beam. Capable of carrying 2x2 structures. unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam. Capable of carrying 2x2 structures. diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 6e34ac4264..113193b15a 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -3829,8 +3829,10 @@ public class UnitTypes{ engineSize = 4.8f; engineOffset = 61 / 4f; + range = 4.3f * 60f * 1.4f; abilities.add(new SuppressionFieldAbility(){{ + reload = 60f * 8f; orbRadius = 5.3f; y = 1f; }}); @@ -3846,36 +3848,59 @@ public class UnitTypes{ recoil = 1f; rotationLimit = 60f; - bullet = new BulletType(){{ + bullet = new BasicBulletType(4.3f, 70f, "missile-large"){{ shootEffect = Fx.shootBig; smokeEffect = Fx.shootBigSmoke2; shake = 1f; - speed = 0f; + lifetime = 60 * 0.496f; + rangeOverride = 361.2f; + followAimSpeed = 5f; + + width = 12f; + height = 22f; + hitSize = 7f; + hitColor = backColor = trailColor = Pal.sapBulletBack; + trailWidth = 3f; + trailLength = 12; + hitEffect = despawnEffect = Fx.hitBulletColor; + keepVelocity = false; + collidesGround = true; collidesAir = false; - spawnUnit = new MissileUnitType("quell-missile"){{ - targetAir = false; - speed = 4.3f; - maxRange = 6f; - lifetime = 60f * 1.4f; - outlineColor = Pal.darkOutline; - engineColor = trailColor = Pal.sapBulletBack; - engineLayer = Layer.effect; - health = 45; - loopSoundVolume = 0.1f; + //workaround to get the missile to behave like in spawnUnit while still spawning on death + fragRandomSpread = 0; + fragBullets = 1; + fragVelocityMin = 1f; + fragOffsetMax = 1f; - weapons.add(new Weapon(){{ - shootSound = Sounds.none; - shootCone = 360f; - mirror = false; - reload = 1f; - shootOnDeath = true; - bullet = new ExplosionBulletType(110f, 25f){{ - shootEffect = Fx.massiveExplosion; - collidesAir = false; - }}; - }}); + fragBullet = new BulletType(){{ + speed = 0f; + keepVelocity = false; + collidesAir = false; + spawnUnit = new MissileUnitType("quell-missile"){{ + targetAir = false; + speed = 4.3f; + maxRange = 6f; + lifetime = 60f * (1.4f - 0.496f); + outlineColor = Pal.darkOutline; + engineColor = trailColor = Pal.sapBulletBack; + engineLayer = Layer.effect; + health = 45; + loopSoundVolume = 0.1f; + + weapons.add(new Weapon() {{ + shootSound = Sounds.none; + shootCone = 360f; + mirror = false; + reload = 1f; + shootOnDeath = true; + bullet = new ExplosionBulletType(110f, 25f) {{ + shootEffect = Fx.massiveExplosion; + collidesAir = false; + }}; + }}); + }}; }}; }}; }}); @@ -3909,6 +3934,8 @@ public class UnitTypes{ int parts = 10; abilities.add(new SuppressionFieldAbility(){{ + reload = 60 * 15f; + range = 320f; orbRadius = orbRad; particleSize = partRad; y = 10f; diff --git a/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java b/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java index be69a45797..9785ac6597 100644 --- a/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java +++ b/core/src/mindustry/entities/abilities/SuppressionFieldAbility.java @@ -17,6 +17,7 @@ public class SuppressionFieldAbility extends Ability{ protected static Rand rand = new Rand(); public float reload = 60f * 1.5f; + public float maxDelay = 60f * 1.5f; public float range = 200f; public float orbRadius = 4.1f, orbMidScl = 0.33f, orbSinScl = 8f, orbSinMag = 1f; @@ -55,9 +56,9 @@ public class SuppressionFieldAbility extends Ability{ public void update(Unit unit){ if(!active) return; - if((timer += Time.delta) >= reload){ + if((timer += Time.delta) >= maxDelay){ Tmp.v1.set(x, y).rotate(unit.rotation - 90f).add(unit); - Damage.applySuppression(unit.team, Tmp.v1.x, Tmp.v1.y, range, reload, reload, applyParticleChance, unit, effectColor); + Damage.applySuppression(unit.team, Tmp.v1.x, Tmp.v1.y, range, reload, maxDelay, applyParticleChance, unit, effectColor); timer = 0f; } }