diff --git a/core/assets/maps/hidden-serpulo/116.msav b/core/assets/maps/hidden-serpulo/116.msav index 77a1f84db2..d1a087c4f4 100644 Binary files a/core/assets/maps/hidden-serpulo/116.msav and b/core/assets/maps/hidden-serpulo/116.msav differ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 3185bc131a..08a33cbc6c 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -134,6 +134,7 @@ public class Logic implements ApplicationListener{ //enable building AI on campaign unless the preset disables it state.rules.coreIncinerates = true; + state.rules.infiniteResources = false; state.rules.allowEditRules = false; state.rules.allowEditWorldProcessors = false; state.rules.waveTeam.rules().infiniteResources = true; diff --git a/core/src/mindustry/entities/abilities/ShieldArcAbility.java b/core/src/mindustry/entities/abilities/ShieldArcAbility.java index 21974c3330..a044466d27 100644 --- a/core/src/mindustry/entities/abilities/ShieldArcAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldArcAbility.java @@ -49,7 +49,7 @@ public class ShieldArcAbility extends Ability{ b.absorb(); Fx.absorb.at(b); } - + // break shield if(paramField.data <= b.damage()){ paramField.data -= paramField.cooldown * paramField.regen; @@ -69,7 +69,7 @@ public class ShieldArcAbility extends Ability{ !(unit.within(paramPos, paramField.radius - paramField.width) && paramPos.within(unit.x - unit.deltaX, unit.y - unit.deltaY, paramField.radius - paramField.width)) && (Tmp.v1.set(unit).add(unit.deltaX, unit.deltaY).within(paramPos, paramField.radius + paramField.width) || unit.within(paramPos, paramField.radius + paramField.width)) && (Angles.within(paramPos.angleTo(unit), paramUnit.rotation + paramField.angleOffset, paramField.angle / 2f) || Angles.within(paramPos.angleTo(unit.x + unit.deltaX, unit.y + unit.deltaY), paramUnit.rotation + paramField.angleOffset, paramField.angle / 2f))){ - + if(unit.isMissile() && unit.killable() && paramField.missileUnitMultiplier >= 0f){ unit.remove(); @@ -77,17 +77,17 @@ public class ShieldArcAbility extends Ability{ unit.type.deathExplosionEffect.at(unit); Fx.absorb.at(unit); Fx.circleColorSpark.at(unit.x, unit.y,paramUnit.team.color); - + // consider missile hp and gamerule to damage the shield paramField.data -= unit.health() * paramField.missileUnitMultiplier * Vars.state.rules.unitDamage(unit.team); paramField.alpha = 1f; - }else{ + }else if(paramField.pushUnits && !(!unit.isFlying() && paramUnit.isFlying())){ float reach = paramField.radius + paramField.width; float overlapDst = reach - unit.dst(paramPos.x,paramPos.y); - if(overlapDst>0){ + if(overlapDst > 0){ //stop unit.vel.setZero(); // get out @@ -132,6 +132,8 @@ public class ShieldArcAbility extends Ability{ public @Nullable Color color; /** If true, sprite position will be influenced by x/y. */ public boolean offsetRegion = false; + /** If true, enemy units are pushed out. */ + public boolean pushUnits = true; /** State. */ protected float widthScale, alpha; diff --git a/core/src/mindustry/world/blocks/distribution/Junction.java b/core/src/mindustry/world/blocks/distribution/Junction.java index cadd970ab1..e0d6735be2 100644 --- a/core/src/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/mindustry/world/blocks/distribution/Junction.java @@ -21,7 +21,6 @@ public class Junction extends Block{ underBullets = true; group = BlockGroup.transportation; unloadable = false; - floating = true; noUpdateDisabled = true; } diff --git a/core/src/mindustry/world/blocks/distribution/StackConveyor.java b/core/src/mindustry/world/blocks/distribution/StackConveyor.java index 406d44ecdb..2b4ea7ec1e 100644 --- a/core/src/mindustry/world/blocks/distribution/StackConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/StackConveyor.java @@ -298,18 +298,16 @@ public class StackConveyor extends Block implements Autotiler{ } }else{ //transfer if(state != stateLoad || (items.total() >= getMaximumAccepted(lastItem))){ - if(front() instanceof StackConveyorBuild e && e.team == team){ - if(e.link == -1){ - e.items.add(items); - e.lastItem = lastItem; - e.link = tile.pos(); - //▲ to | from ▼ - link = -1; - items.clear(); + if(front() instanceof StackConveyorBuild e && e.team == team && e.link == -1){ + e.items.add(items); + e.lastItem = lastItem; + e.link = tile.pos(); + //▲ to | from ▼ + link = -1; + items.clear(); - cooldown = recharge; - e.cooldown = 1; - } + cooldown = recharge; + e.cooldown = 1; } } } diff --git a/core/src/mindustry/world/blocks/liquid/LiquidJunction.java b/core/src/mindustry/world/blocks/liquid/LiquidJunction.java index 399c8a76b1..1e3e93a66b 100644 --- a/core/src/mindustry/world/blocks/liquid/LiquidJunction.java +++ b/core/src/mindustry/world/blocks/liquid/LiquidJunction.java @@ -10,6 +10,7 @@ public class LiquidJunction extends LiquidBlock{ public LiquidJunction(String name){ super(name); + floating = true; } @Override diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index 58d80462ae..8e95bc9d67 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -897,6 +897,9 @@ public class ApplicationTests{ ObjectSet resources = new ObjectSet<>(); boolean hasSpawnPoint = false; + assertFalse(state.rules.infiniteResources, "Sector " + zone.name + " must not have infinite resources."); + assertFalse(state.rules.allowEditRules, "Sector " + zone.name + " must not have rule editing enabled."); + for(Tile tile : world.tiles){ if(tile.drop() != null){ resources.add(tile.drop());