diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index dbce16b750..f2a89e8508 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -542,6 +542,7 @@ planet.serpulo.name = Serpulo planet.sun.name = Sun #NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway +sector.impact0078.name = Impact 0078 sector.groundZero.name = Ground Zero sector.craters.name = The Craters sector.frozenForest.name = Frozen Forest @@ -555,7 +556,6 @@ sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass #unused -#sector.impact0078.name = Impact 0078 #sector.crags.name = Crags sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. diff --git a/core/assets/maps/fungalPass.msav b/core/assets/maps/fungalPass.msav index b9a6f6575b..a97ca7706d 100644 Binary files a/core/assets/maps/fungalPass.msav and b/core/assets/maps/fungalPass.msav differ diff --git a/core/assets/maps/impact0078.msav b/core/assets/maps/impact0078.msav index 03bcfe8be2..fae74556ad 100644 Binary files a/core/assets/maps/impact0078.msav and b/core/assets/maps/impact0078.msav differ diff --git a/core/assets/maps/tarFields.msav b/core/assets/maps/tarFields.msav index cfd7ef7ae6..53c67a18cb 100644 Binary files a/core/assets/maps/tarFields.msav and b/core/assets/maps/tarFields.msav differ diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index 5b85810141..96107d7ca3 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -10,7 +10,7 @@ public class SectorPresets implements ContentList{ groundZero, craters, frozenForest, ruinousShores, stainedMountains, tarFields, fungalPass, saltFlats, overgrowth, - desolateRift, nuclearComplex; + impact0078, desolateRift, nuclearComplex; @Override public void load(){ @@ -55,17 +55,22 @@ public class SectorPresets implements ContentList{ }}; tarFields = new SectorPreset("tarFields", serpulo, 23){{ - captureWave = 50; + captureWave = 40; difficulty = 5; }}; + impact0078 = new SectorPreset("impact0078", serpulo, 227){{ + captureWave = 45; + difficulty = 7; + }}; + desolateRift = new SectorPreset("desolateRift", serpulo, 123){{ - captureWave = 40; + captureWave = 30; difficulty = 8; }}; nuclearComplex = new SectorPreset("nuclearComplex", serpulo, 130){{ - captureWave = 60; + captureWave = 50; difficulty = 7; }}; } diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 13d7c8c7ac..b7eb855703 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -479,19 +479,25 @@ public class TechTree implements ContentList{ new Research(kiln), new Research(mechanicalPump) ), () -> { - node(tarFields, Seq.with( new SectorComplete(ruinousShores), new Research(coalCentrifuge), new Research(conduit), new Research(wave) ), () -> { - node(desolateRift, Seq.with( + //TODO change positions? + node(impact0078, Seq.with( new SectorComplete(tarFields), - new Research(thermalGenerator), - new Research(thoriumReactor) + new Research(Items.thorium), + new Research(overdriveProjector) ), () -> { + node(desolateRift, Seq.with( + new SectorComplete(impact0078), + new Research(thermalGenerator), + new Research(thoriumReactor) + ), () -> { + }); }); }); diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index b492199be5..d605eadb20 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -12,7 +12,6 @@ import arc.util.*; import mindustry.audio.*; import mindustry.content.*; import mindustry.core.GameState.*; -import mindustry.ctype.*; import mindustry.entities.*; import mindustry.game.EventType.*; import mindustry.game.*; @@ -406,6 +405,10 @@ public class Control implements ApplicationListener, Loadable{ } } + for(Music music : assets.getAll(Music.class, new Seq<>())){ + music.stop(); + } + content.dispose(); net.dispose(); Musics.dispose(); diff --git a/core/src/mindustry/game/Saves.java b/core/src/mindustry/game/Saves.java index fb738b49b6..dc43f3c740 100644 --- a/core/src/mindustry/game/Saves.java +++ b/core/src/mindustry/game/Saves.java @@ -334,6 +334,9 @@ public class Saves{ } public void delete(){ + if(SaveIO.backupFileFor(file).exists()){ + SaveIO.backupFileFor(file).delete(); + } file.delete(); saves.remove(this, true); if(this == current){ diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 156146f0b2..97da3a51a7 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -177,17 +177,23 @@ public class PlanetRenderer implements Disposable{ } public void drawArc(Planet planet, Vec3 a, Vec3 b){ + drawArc(planet, a, b, Pal.accent, Color.clear, 1f); + } + public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length){ + drawArc(planet, a, b, from, to, length, 80f, 25); + } + + public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){ Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f); - avg.setLength(planet.radius*2f); + avg.setLength(planet.radius*(1f+length)); points.clear(); points.addAll(Tmp.v33.set(b).setLength(outlineRad), Tmp.v31, Tmp.v34.set(a).setLength(outlineRad)); Tmp.bz3.set(points); - float points = 25; - for(int i = 0; i < points + 1; i++){ - float f = i / points; - Tmp.c1.set(Pal.accent).lerp(Color.clear, (f+Time.globalTime()/80f)%1f); + for(int i = 0; i < pointCount + 1; i++){ + float f = i / (float)pointCount; + Tmp.c1.set(from).lerp(to, (f+Time.globalTime()/timeScale)%1f); batch.color(Tmp.c1); batch.vertex(Tmp.bz3.valueAt(Tmp.v32, f)); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 151d777648..d170a6abb9 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -160,7 +160,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(canSelect(sec) || sec.unlocked()){ Color color = - sec.hasBase() ? Team.sharded.color : + sec.hasBase() ? Tmp.c2.set(Team.sharded.color).lerp(Team.crux.color, sec.hasEnemyBase() ? 0.5f : 0f) : sec.preset != null ? Team.derelict.color : sec.hasEnemyBase() ? Team.crux.color : null; @@ -202,6 +202,16 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } } + 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, Color.clear, 0.24f, 110f, 25); + } + } + } + } + /* //TODO render arcs if(selected != null && selected.preset != null){ @@ -391,6 +401,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ (plus ? "+" : "") + (toCapture < 0 ? "" : "/" + toCapture) + " waves"); stable.row(); } + }else if(sector.hasBase() && sector.near().contains(Sector::hasEnemyBase)){ + stable.add("[scarlet]Vulnerable"); + stable.row(); } if(sector.save != null && sector.info.resources.any()){ diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 78a9a18853..378e909922 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -146,6 +146,12 @@ public class SettingsMenuDialog extends SettingsDialog{ } } } + + for(var slot : control.saves.getSaveSlots().copy()){ + if(slot.isSector()){ + slot.delete(); + } + } }); }).marginLeft(4); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index 7550f23e79..9d1c29a69b 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -177,7 +177,7 @@ public class ItemTurret extends Turret{ totalAmmo += a; //only add ammo if this is a valid ammo type - if(ammoTypes.containsKey(item)){ + if(item != null && ammoTypes.containsKey(item)){ ammo.add(new ItemEntry(item, a)); } } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index df3686baff..9c0eee32ac 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -210,7 +210,7 @@ public class CoreBlock extends StorageBlock{ super.onDestroyed(); //add a spawn to the map for future reference - waves should be disabled, so it shouldn't matter - if(state.isCampaign() && team == state.rules.waveTeam){ + if(state.isCampaign() && team == state.rules.waveTeam && team.cores().size <= 1){ //do not recache tile.setOverlayQuiet(Blocks.spawn); diff --git a/gradle.properties b/gradle.properties index add8844ab6..7ef5b71bd1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=c7c50c8d46cffff0526c0f86c7f160fd07a04309 +archash=5e0057b1eb96674f613caf5f7e732bd9f338a98f