diff --git a/core/assets/maps/origin.msav b/core/assets/maps/origin.msav index 2a9c6c87a9..f17535e0c3 100644 Binary files a/core/assets/maps/origin.msav and b/core/assets/maps/origin.msav differ diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 66e326042a..cc3eb8565c 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -158,8 +158,7 @@ public class BuilderAI extends AIController{ } } - //TODO this is bad, rebuild time should not depend on AI here - float rebuildTime = (unit.team.rules().rtsAi ? 8f : 2f) * 60f; + float rebuildTime = 2f * 60f; //find new plan if(!onlyAssist && !unit.team.data().plans.isEmpty() && following == null && timer.get(timerTarget3, rebuildTime)){ diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index f96e10ee2c..346d4bb6f0 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -385,7 +385,9 @@ public class ErekirTechTree{ node(siege, Seq.with(new SectorComplete(crevice)), () -> { node(crossroads, Seq.with(new SectorComplete(siege)), () -> { node(karst, Seq.with(new SectorComplete(crossroads), new Research(coreAcropolis)), () -> { + node(origin, Seq.with(new SectorComplete(karst), new Research(coreAcropolis), new Research(UnitTypes.vanquish), new Research(UnitTypes.disrupt), new Research(UnitTypes.collaris)), () -> { + }); }); }); }); diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 027e30280c..3c753818ec 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -66,6 +66,7 @@ public class Planets{ defaultCore = Blocks.coreBastion; iconColor = Color.valueOf("ff9266"); hiddenItems.addAll(Items.serpuloItems).removeAll(Items.erekirItems); + enemyBuildSpeedMultiplier = 0.4f; //TODO SHOULD there be lighting? updateLighting = false; diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index dc824c5444..8069c135d6 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -12,8 +12,8 @@ public class SectorPresets{ impact0078, desolateRift, nuclearComplex, planetaryTerminal, coastline, navalFortress, - onset, aegis, lake, intersect, basin, atlas, split, marsh, peaks, ravine, caldera, stronghold, crevice, siege, - crossroads, karst; + onset, aegis, lake, intersect, basin, atlas, split, marsh, peaks, ravine, caldera, + stronghold, crevice, siege, crossroads, karst, origin; public static void load(){ //region serpulo @@ -181,6 +181,10 @@ public class SectorPresets{ captureWave = 10; }}; + origin = new SectorPreset("origin", erekir, 12){{ + difficulty = 10; + }}; + //endregion } } diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index ab136b717a..1179c61c4c 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -133,6 +133,7 @@ public class Logic implements ApplicationListener{ state.rules.coreIncinerates = true; state.rules.waveTeam.rules().infiniteResources = true; + state.rules.waveTeam.rules().buildSpeedMultiplier *= state.getPlanet().enemyBuildSpeedMultiplier; //fill enemy cores by default? TODO decide for(var core : state.rules.waveTeam.cores()){ diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 892e147851..14546fcd4b 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -103,6 +103,8 @@ public class Planet extends UnlockableContent{ public boolean allowSectorInvasion = false; /** If true, sectors saves are cleared when lost. */ public boolean clearSectorOnLose = false; + /** Multiplier for enemy rebuild speeds; only applied in campaign (not standard rules) */ + public float enemyBuildSpeedMultiplier = 1f; /** If true, enemy cores are replaced with spawnpoints on this planet (for invasions) */ public boolean enemyCoreSpawnReplace = false; /** If true, blocks in the radius of the core will be removed and "built up" in a shockwave upon landing. */