diff --git a/core/assets-raw/sprites/effects/launch-arrow.png b/core/assets-raw/sprites/effects/launch-arrow.png new file mode 100644 index 0000000000..5faa4ae6c7 Binary files /dev/null and b/core/assets-raw/sprites/effects/launch-arrow.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index f8a3463a02..961bfc2e71 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -505,6 +505,7 @@ loadout = Loadout resources = Resources bannedblocks = Banned Blocks addall = Add All +launch.from = Launching From: [accent]{0} launch.destination = Destination: {0} configure.invalid = Amount must be a number between 0 and {0}. zone.unlocked = [lightgray]{0} unlocked. diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 7ef4037665..e8aa42262b 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -43,6 +43,8 @@ public class SectorInfo{ public boolean waves = true; /** Whether attack mode is enabled here. */ public boolean attack = false; + /** Whether this sector has any enemy spawns. */ + public boolean hasSpawns = true; /** Wave # from state */ public int wave = 1, winWave = -1; /** Waves this sector can survive if under attack. Based on wave in info. <0 means uncalculated. */ @@ -168,6 +170,7 @@ public class SectorInfo{ secondsPassed = 0; wavesPassed = 0; damage = 0; + hasSpawns = spawner.countSpawns() > 0; if(state.rules.sector != null){ state.rules.sector.saveInfo(); diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index ef28067423..dab11c28dc 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -206,7 +206,7 @@ public class Universe{ } //queue random invasions - if(!sector.isAttacked() && turn > invasionGracePeriod){ + if(!sector.isAttacked() && turn > invasionGracePeriod && sector.info.hasSpawns){ //invasion chance depends on # of nearby bases if(Mathf.chance(baseInvasionChance * sector.near().count(Sector::hasEnemyBase))){ int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 5) * 5; diff --git a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java index c5deb3a55d..8bad533d03 100644 --- a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java @@ -103,6 +103,8 @@ public class LaunchLoadoutDialog extends BaseDialog{ ButtonGroup