diff --git a/core/assets/maps/infestedCanyons.msav b/core/assets/maps/infestedCanyons.msav index 02f0c043de..08dc8945f3 100644 Binary files a/core/assets/maps/infestedCanyons.msav and b/core/assets/maps/infestedCanyons.msav differ diff --git a/core/assets/maps/planetaryTerminal.msav b/core/assets/maps/planetaryTerminal.msav index c7322b487f..fed7751b31 100644 Binary files a/core/assets/maps/planetaryTerminal.msav and b/core/assets/maps/planetaryTerminal.msav differ diff --git a/core/src/mindustry/ai/ControlPathfinder.java b/core/src/mindustry/ai/ControlPathfinder.java index a639ff4202..46378bf6be 100644 --- a/core/src/mindustry/ai/ControlPathfinder.java +++ b/core/src/mindustry/ai/ControlPathfinder.java @@ -54,6 +54,7 @@ public class ControlPathfinder implements Runnable{ costLegs = (team, tile) -> PathTile.legSolid(tile) ? impassable : 1 + + (PathTile.nearDeep(tile) ? 8 : 0) + (PathTile.deep(tile) ? 6000 : 0) + (PathTile.nearLegSolid(tile) ? 3 : 0), @@ -1425,9 +1426,7 @@ public class ControlPathfinder implements Runnable{ private static boolean nearPassable(int team, PathCost cost, int pos){ int amount = cost.getCost(team, pathfinder.tiles[pos]); - //for standard units: never consider deep water (cost = 6000) passable - //for leg units: consider it passable - return amount != impassable && amount < (cost == costLegs ? solidCap : 50); + return amount != impassable && amount < 50; } private static boolean solid(int team, PathCost type, int x, int y){ diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index 40d7fc5e94..c17b9d5e79 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -209,7 +209,7 @@ public class Pathfinder implements Runnable{ /** Packs a tile into its internal representation. */ public int packTile(Tile tile){ - boolean nearLiquid = false, nearSolid = false, nearLegSolid = false, nearGround = false, solid = tile.solid(), allDeep = tile.floor().isDeep(); + boolean nearLiquid = false, nearSolid = false, nearLegSolid = false, nearGround = false, solid = tile.solid(), allDeep = tile.floor().isDeep(), nearDeep = allDeep; for(int i = 0; i < 4; i++){ Tile other = tile.nearby(i); @@ -220,7 +220,11 @@ public class Pathfinder implements Runnable{ //TODO potentially strange behavior when teamPassable is false for other teams? if(osolid && !other.block().teamPassable) nearSolid = true; if(!floor.isLiquid) nearGround = true; - if(!floor.isDeep()) allDeep = false; + if(!floor.isDeep()){ + allDeep = false; + }else{ + nearDeep = true; + } if(other.legSolid()) nearLegSolid = true; //other tile is now near solid @@ -245,6 +249,7 @@ public class Pathfinder implements Runnable{ tile.floor().isDeep(), tile.floor().damageTaken > 0.00001f, allDeep, + nearDeep, tile.block().teamPassable ); } @@ -699,6 +704,8 @@ public class Pathfinder implements Runnable{ boolean damages; //whether all tiles nearby are deep boolean allDeep; + //whether it is near deep water + boolean nearDeep; //block teamPassable is true boolean teamPassable; } diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 2bc3e421c9..e8f52f9a81 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -164,8 +164,6 @@ public class WaveSpawner{ cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false); } } - - } } } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadSource.java b/core/src/mindustry/world/blocks/payloads/PayloadSource.java index 618f258feb..8df89f7e03 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadSource.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadSource.java @@ -13,6 +13,7 @@ import mindustry.ctype.*; import mindustry.entities.units.*; import mindustry.game.EventType.*; import mindustry.gen.*; +import mindustry.io.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.*; @@ -163,11 +164,17 @@ public class PayloadSource extends PayloadBlock{ Draw.reset(); } + @Override + public byte version(){ + return 1; + } + @Override public void write(Writes write){ super.write(write); write.s(unit == null ? -1 : unit.id); write.s(configBlock == null ? -1 : configBlock.id); + TypeIO.writeVecNullable(write, commandPos); } @Override @@ -175,6 +182,9 @@ public class PayloadSource extends PayloadBlock{ super.read(read, revision); unit = Vars.content.unit(read.s()); configBlock = Vars.content.block(read.s()); + if(revision >= 1){ + commandPos = TypeIO.readVecNullable(read); + } } } }