diff --git a/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png b/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png index 8bbb599c9a..0f647a8ae4 100644 Binary files a/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png and b/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/ducts/underflow-duct-top.png b/core/assets-raw/sprites/blocks/distribution/ducts/underflow-duct-top.png new file mode 100644 index 0000000000..b986bc356d Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/ducts/underflow-duct-top.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/ducts/underflow-duct.png b/core/assets-raw/sprites/blocks/distribution/ducts/underflow-duct.png new file mode 100644 index 0000000000..0f647a8ae4 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/ducts/underflow-duct.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 5b17841fce..9107bba7fc 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2002,6 +2002,7 @@ block.shield-projector.name = Shield Projector block.large-shield-projector.name = Large Shield Projector block.armored-duct.name = Armored Duct block.overflow-duct.name = Overflow Duct +block.underflow-duct.name = Underflow Duct block.duct-unloader.name = Duct Unloader block.surge-conveyor.name = Surge Conveyor block.surge-router.name = Surge Router @@ -2080,4 +2081,4 @@ unit.precept.name = Precept unit.merui.name = Merui unit.anthicus.name = Anthicus unit.elude.name = Elude -unit.obviate.name = Obviate +unit.obviate.name = Obviat diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 1fee5b47e0..5e7252d3d2 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -103,7 +103,7 @@ public class Blocks{ overflowGate, underflowGate, massDriver, //transport - alternate - duct, armoredDuct, ductRouter, overflowDuct, ductBridge, ductUnloader, + duct, armoredDuct, ductRouter, overflowDuct, underflowDuct, ductBridge, ductUnloader, surgeConveyor, surgeRouter, unitCargoLoader, unitCargoUnloadPoint, @@ -1991,6 +1991,15 @@ public class Blocks{ researchCostMultiplier = 1.5f; }}; + underflowDuct = new OverflowDuct("underflow-duct"){{ + requirements(Category.distribution, with(Items.graphite, 8, Items.beryllium, 8)); + health = 90; + speed = 4f; + solid = false; + researchCostMultiplier = 1.5f; + invert = true; + }}; + ductBridge = new DuctBridge("duct-bridge"){{ requirements(Category.distribution, with(Items.beryllium, 20)); health = 90; @@ -5316,4 +5325,4 @@ public class Blocks{ //endregion } -} \ No newline at end of file +} diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 97448bc25f..759fb8e3e2 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -87,6 +87,7 @@ public class ErekirTechTree{ }); node(overflowDuct, Seq.with(new OnSector(two)), () -> { + node(underflowDuct); node(reinforcedContainer, () -> { node(ductUnloader, () -> { diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index c95603abac..648a2d0ed0 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -1,6 +1,8 @@ package mindustry.mod; import arc.struct.*; +import mindustry.world.blocks.distribution.OverflowDuct.*; + /** Generated class. Maps simple class names to concrete classes. For use in JSON mods. */ @SuppressWarnings("deprecation") public class ClassMap{ @@ -226,7 +228,7 @@ public class ClassMap{ classes.put("DriverState", mindustry.world.blocks.distribution.MassDriver.DriverState.class); classes.put("MassDriverBuild", mindustry.world.blocks.distribution.MassDriver.MassDriverBuild.class); classes.put("OverflowDuct", mindustry.world.blocks.distribution.OverflowDuct.class); - classes.put("DuctRouterBuild", mindustry.world.blocks.distribution.OverflowDuct.DuctRouterBuild.class); + classes.put("DuctRouterBuild", OverflowDuctBuild.class); classes.put("OverflowGate", mindustry.world.blocks.distribution.OverflowGate.class); classes.put("OverflowGateBuild", mindustry.world.blocks.distribution.OverflowGate.OverflowGateBuild.class); classes.put("Router", mindustry.world.blocks.distribution.Router.class); diff --git a/core/src/mindustry/world/blocks/distribution/OverflowDuct.java b/core/src/mindustry/world/blocks/distribution/OverflowDuct.java index 9fa8829e8d..d7099268b2 100644 --- a/core/src/mindustry/world/blocks/distribution/OverflowDuct.java +++ b/core/src/mindustry/world/blocks/distribution/OverflowDuct.java @@ -13,6 +13,7 @@ import mindustry.world.meta.*; public class OverflowDuct extends Block{ public float speed = 5f; + public boolean invert = false; public @Load(value = "@-top") TextureRegion topRegion; @@ -57,7 +58,7 @@ public class OverflowDuct extends Block{ return false; } - public class DuctRouterBuild extends Building{ + public class OverflowDuctBuild extends Building{ public float progress; public @Nullable Item current; @@ -95,11 +96,27 @@ public class OverflowDuct extends Block{ public Building target(){ if(current == null) return null; + if(invert){ //Lots of extra code. Make separate UnderflowDuct class? + Building l = left(), r = right(); + boolean lc = l != null && l.team == team && l.acceptItem(this, current), + rc = r != null && r.team == team && r.acceptItem(this, current); + + if(lc && !rc){ + return l; + }else if(rc && !lc){ + return r; + }else if(lc && rc){ + return cdump == 0 ? l : r; + } + } + Building front = front(); if(front != null && front.team == team && front.acceptItem(this, current)){ return front; } + if(invert) return null; + for(int i = -1; i <= 1; i++){ int dir = Mathf.mod(rotation + (((i + cdump + 1) % 3) - 1), 4); if(dir == rotation) continue; @@ -108,6 +125,7 @@ public class OverflowDuct extends Block{ return other; } } + return null; }