diff --git a/core/assets/contributors b/core/assets/contributors index 2851d455ca..c15001e0e8 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -143,3 +143,4 @@ BlueWolf [Error_27] code-explorer786 KayAyeAre +SMOLKEYS \ No newline at end of file diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 7c43f734bd..28bb749951 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -184,6 +184,12 @@ public class BulletType extends Content implements Cloneable{ public Seq spawnBullets = new Seq<>(); /** Unit spawned _instead of_ this bullet. Useful for missiles. */ public @Nullable UnitType spawnUnit; + /** Unit spawned when this bullet hits something or despawns due to it hitting the end of its lifetime. */ + public @Nullable UnitType despawnUnit; + /** Amount of units spawned when this bullet despawns. */ + public int despawnUnitCount = 1; + /** Random offset distance from the original bullet despawn/hit coordinate. */ + public float despawnUnitRadius = 0.1f; /** Color of trail behind bullet. */ public Color trailColor = Pal.missileYellowBack; @@ -373,6 +379,7 @@ public class BulletType extends Content implements Cloneable{ } createPuddles(b, x, y); createIncend(b, x, y); + createUnits(b, x, y); if(suppressionRange > 0){ //bullets are pooled, require separate Vec2 instance @@ -432,17 +439,26 @@ public class BulletType extends Content implements Cloneable{ } } + public void createUnits(Bullet b, float x, float y){ + if(despawnUnit != null){ + for(int i = 0; i < despawnUnitCount; i++){ + despawnUnit.spawn(b.team, x + Mathf.range(despawnUnitRadius), y + Mathf.range(despawnUnitRadius)); + } + } + } /** Called when the bullet reaches the end of its lifetime or is destroyed by something external. */ public void despawned(Bullet b){ if(despawnHit){ hit(b); + }else{ + createUnits(b, b.x, b.y); } if(!fragOnHit){ createFrags(b, b.x, b.y); } - + despawnEffect.at(b.x, b.y, b.rotation(), hitColor); despawnSound.at(b); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index a9854a3c81..cdf63cc21a 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -94,7 +94,7 @@ public class Rules{ public float dropZoneRadius = 300f; /** Time between waves in ticks. */ public float waveSpacing = 2 * Time.toMinutes; - /** Starting wave spacing; if <0, uses waveSpacing * 2. */ + /** Starting wave spacing; if <=0, uses waveSpacing * 2. */ public float initialWaveSpacing = 0f; /** Wave after which the player 'wins'. Used in sectors. Use a value <= 0 to disable. */ public int winWave = 0; diff --git a/core/src/mindustry/world/blocks/defense/ShieldBreaker.java b/core/src/mindustry/world/blocks/defense/ShieldBreaker.java index 0368f1557e..4980cfed6d 100644 --- a/core/src/mindustry/world/blocks/defense/ShieldBreaker.java +++ b/core/src/mindustry/world/blocks/defense/ShieldBreaker.java @@ -20,7 +20,7 @@ public class ShieldBreaker extends Block{ @Override public boolean canBreak(Tile tile){ - return false; + return Vars.state.isEditor(); } public class ShieldBreakerBuild extends Building{ diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index afcfb74d2e..fc68d7f555 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -115,7 +115,7 @@ public class CoreBlock extends StorageBlock{ @Override public boolean canBreak(Tile tile){ - return false; + return state.isEditor(); } @Override