From 3f8a7f591a0d33633e84d1f74b2673b8f82c5351 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 30 Jan 2022 11:34:52 -0500 Subject: [PATCH] Disabled Erekir invasions & planet simulation --- .../assets-raw/sprites/units/conquer.aseprite | Bin 0 -> 10632 bytes core/assets-raw/sprites/units/conquer.png | Bin 0 -> 3709 bytes core/assets/bundles/bundle.properties | 8 +++- core/src/mindustry/content/Planets.java | 2 + core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/core/Logic.java | 35 ++++++++------- core/src/mindustry/game/SectorInfo.java | 4 +- core/src/mindustry/game/Universe.java | 4 +- core/src/mindustry/type/Planet.java | 4 ++ .../mindustry/ui/dialogs/PlanetDialog.java | 42 +++++++++++++++--- 10 files changed, 72 insertions(+), 29 deletions(-) create mode 100644 core/assets-raw/sprites/units/conquer.aseprite create mode 100644 core/assets-raw/sprites/units/conquer.png diff --git a/core/assets-raw/sprites/units/conquer.aseprite b/core/assets-raw/sprites/units/conquer.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..4387c51df790bbc202ec979f146fc71f702bcacc GIT binary patch literal 10632 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 At^fc4 literal 0 HcmV?d00001 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index d0daac7835..644e336282 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -616,6 +616,7 @@ sectors.rename = Rename Sector sectors.enemybase = [scarlet]Enemy Base sectors.vulnerable = [scarlet]Vulnerable sectors.underattack = [scarlet]Under attack! [accent]{0}% damaged +sectors.underattack.nodamage = [scarlet]Under attack! sectors.survives = [accent]Survives {0} waves sectors.go = Go sector.curcapture = Sector Captured @@ -626,6 +627,9 @@ sector.lost = Sector [accent]{0}[white] lost! #note: the missing space in the line below is intentional sector.captured = Sector [accent]{0}[white]captured! sector.changeicon = Change Icon +sector.noswitch.title = Unable to Switch Sectors +sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[] +sector.view = View Sector threat.low = Low threat.medium = Medium @@ -1590,8 +1594,8 @@ block.core-foundation.description = Core of the base. Well armored. Stores more block.core-foundation.details = The second iteration. block.core-nucleus.description = Core of the base. Extremely well armored. Stores massive amounts of resources. block.core-nucleus.details = The third and final iteration. -block.vault.description = Stores a large amount of items of each type. Contents can be retrieved with an unloader. -block.container.description = Stores a small amount of items of each type. Contents can be retrieved with an unloader. +block.vault.description = Stores a large amount of items of each type. Expands storage when placed next to a core. Contents can be retrieved with an unloader. +block.container.description = Stores a small amount of items of each type. Expands storage when placed next to a core. Contents can be retrieved with an unloader. block.unloader.description = Unloads the selected item from nearby blocks. block.launch-pad.description = Launches batches of items to selected sectors. block.launch-pad.details = Sub-orbital system for point-to-point transportation of resources. Payload pods are fragile and incapable of surviving re-entry. diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 0324fd80be..42fe36b87d 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -100,6 +100,8 @@ public class Planets{ new HexSkyMesh(this, 1, 0.6f, 0.16f, 5, Color.white.cpy().lerp(Pal.spore, 0.55f).a(0.75f), 2, 0.45f, 1f, 0.41f) ); + allowWaveSimulation = true; + allowSectorInvasion = true; allowLaunchSchematics = true; atmosphereColor = Color.valueOf("3c1b8f"); atmosphereRadIn = 0.02f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index f21de9f30e..99befc6099 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2435,7 +2435,7 @@ public class UnitTypes{ speed = 0.6f; health = 9000; armor = 20f; - areaDamage = 10f; + areaDamage = 12f; treadRect = new Rect(22f, 16f, 28f, 130f); weapons.add(new Weapon("vanquish-weapon"){{ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 2da3ea9b4b..bf77ed5fc7 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -64,25 +64,28 @@ public class Logic implements ApplicationListener{ SectorInfo info = state.rules.sector.info; info.write(); - //how much wave time has passed - int wavesPassed = info.wavesPassed; + //only simulate waves if the planet allows it + if(state.rules.sector.planet.allowWaveSimulation){ + //how much wave time has passed + int wavesPassed = info.wavesPassed; - //wave has passed, remove all enemies, they are assumed to be dead - if(wavesPassed > 0){ - Groups.unit.each(u -> { - if(u.team == state.rules.waveTeam){ - u.remove(); - } - }); - } + //wave has passed, remove all enemies, they are assumed to be dead + if(wavesPassed > 0){ + Groups.unit.each(u -> { + if(u.team == state.rules.waveTeam){ + u.remove(); + } + }); + } - //simulate passing of waves - if(wavesPassed > 0){ - //simulate wave counter moving forward - state.wave += wavesPassed; - state.wavetime = state.rules.waveSpacing; + //simulate passing of waves + if(wavesPassed > 0){ + //simulate wave counter moving forward + state.wave += wavesPassed; + state.wavetime = state.rules.waveSpacing; - SectorDamage.applyCalculatedDamage(); + SectorDamage.applyCalculatedDamage(); + } } //reset values diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 0900558353..c686d97b1a 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -204,7 +204,9 @@ public class SectorInfo{ state.rules.sector.saveInfo(); } - SectorDamage.writeParameters(this); + if(state.rules.sector != null && state.rules.sector.planet.allowWaveSimulation){ + SectorDamage.writeParameters(this); + } } /** Update averages of various stats, updates some special sector logic. diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index ec6124f861..39adf83536 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -194,7 +194,7 @@ public class Universe{ } int wavesPassed = (int)(sector.info.secondsPassed*60f / sector.info.waveSpacing); - boolean attacked = sector.info.waves; + boolean attacked = sector.info.waves && sector.planet.allowWaveSimulation; if(attacked){ sector.info.wavesPassed = wavesPassed; @@ -243,7 +243,7 @@ public class Universe{ } //queue random invasions - if(!sector.isAttacked() && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){ + if(!sector.isAttacked() && sector.planet.allowSectorInvasion && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){ int count = sector.near().count(Sector::hasEnemyBase); //invasion chance depends on # of nearby bases diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index ae2d8de0db..7864cca54e 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -90,6 +90,10 @@ public class Planet extends UnlockableContent{ public boolean hasAtmosphere = true; /** Whether to allow users to specify a custom launch schematic for this map. */ public boolean allowLaunchSchematics = false; + /** Whether to allow sectors to simulate waves in the background. */ + public boolean allowWaveSimulation = false; + /** Whether to simulate sector invasions from enemy bases. */ + public boolean allowSectorInvasion = false; /** Parent body that this planet orbits around. If null, this planet is considered to be in the middle of the solar system.*/ public @Nullable Planet parent; /** The root parent of the whole solar system this planet is in. */ diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 7bbc93044f..52b2fc6382 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -412,13 +412,14 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(state.uiAlpha > 0.001f){ for(Sector sec : planet.sectors){ if(sec.hasBase()){ - for(Sector enemy : sec.near()){ - if(enemy.hasEnemyBase()){ - planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25); + if(planet.allowSectorInvasion){ + for(Sector enemy : sec.near()){ + if(enemy.hasEnemyBase()){ + planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25); + } } } - if(selected != null && selected != sec && selected.hasBase()){ //imports if(sec.info.getRealDestination() == selected && sec.info.anyExports()){ @@ -889,10 +890,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ void addSurvivedInfo(Sector sector, Table table, boolean wrap){ if(!wrap){ - table.add(Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100))).wrapLabel(wrap).row(); + table.add(sector.planet.allowWaveSimulation ? Core.bundle.format("sectors.underattack", (int)(sector.info.damage * 100)) : "@sectors.underattack.nodamage").wrapLabel(wrap).row(); } - if(sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){ + if(sector.planet.allowWaveSimulation && sector.info.wavesSurvived >= 0 && sector.info.wavesSurvived - sector.info.wavesPassed >= 0 && !sector.isBeingPlayed()){ int toCapture = sector.info.attack || sector.info.winWave <= 1 ? -1 : sector.info.winWave - (sector.info.wave + sector.info.wavesPassed); boolean plus = (sector.info.wavesSurvived - sector.info.wavesPassed) >= SectorDamage.maxRetWave - 1; table.add(Core.bundle.format("sectors.survives", Math.min(sector.info.wavesSurvived - sector.info.wavesPassed, toCapture <= 0 ? 200 : toCapture) + @@ -1019,7 +1020,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(sector.isAttacked()){ addSurvivedInfo(sector, stable, false); - }else if(sector.hasBase() && sector.near().contains(Sector::hasEnemyBase)){ + }else if(sector.hasBase() && sector.planet.allowSectorInvasion && sector.near().contains(Sector::hasEnemyBase)){ stable.add("@sectors.vulnerable"); stable.row(); }else if(!sector.hasBase() && sector.hasEnemyBase()){ @@ -1073,6 +1074,33 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ return; } + //make sure there are no under-attack sectors (other than this one) + //TODO abandon button? + for(Planet planet : content.planets()){ + if(!planet.allowWaveSimulation){ + int attackedCount = planet.sectors.count(s -> s.isAttacked() && s != sector); + + //if there are two or more attacked sectors... something went wrong, don't show the dialog to prevent softlock + if(attackedCount < 2){ + Sector attacked = planet.sectors.find(s -> s.isAttacked() && s != sector); + if(attacked != null){ + BaseDialog dialog = new BaseDialog("@sector.noswitch.title"); + dialog.cont.add(bundle.format("sector.noswitch", attacked.name(), attacked.planet.localizedName)).maxWidth(400f).labelAlign(Align.center).center().wrap(); + dialog.addCloseButton(); + dialog.buttons.button("@sector.view", Icon.eyeSmall, () -> { + dialog.hide(); + lookAt(attacked); + selected = attacked; + updateSelected(); + }); + dialog.show(); + + return; + } + } + } + } + boolean shouldHide = true; //save before launch.