diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b9e740e588..b70e31fab8 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2345,6 +2345,7 @@ block.unit-cargo-loader.description = Constructs cargo drones. Drones automatica block.unit-cargo-unload-point.description = Acts as an unloading point for cargo drones. Accepts items that match the selected filter. block.beam-node.description = Transmits power to other blocks orthogonally. Stores a small amount of power. block.beam-tower.description = Transmits power to other blocks orthogonally. Stores a large amount of power. Long-range. +block.beam-link.description = Transmits power over vast distances.\nOnly capable of connecting to adjacent structures or other beam links. block.turbine-condenser.description = Generates power when placed on vents. Produces a small amount of water. block.chemical-combustion-chamber.description = Generates power from arkycite and ozone. block.pyrolysis-generator.description = Generates large amounts of power from arkycite and slag. Produces water as a byproduct. diff --git a/core/assets/maps/crossroads.msav b/core/assets/maps/crossroads.msav index 535724643d..c45de2a146 100644 Binary files a/core/assets/maps/crossroads.msav and b/core/assets/maps/crossroads.msav differ diff --git a/core/assets/maps/origin.msav b/core/assets/maps/origin.msav index c04eba0728..f0ad24faf7 100644 Binary files a/core/assets/maps/origin.msav and b/core/assets/maps/origin.msav differ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index c068c3f7d6..16a7d5d3df 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2487,11 +2487,12 @@ public class Blocks{ }}; beamLink = new LongPowerNode("beam-link"){{ - requirements(Category.power, BuildVisibility.editorOnly, with()); + requirements(Category.power, with(Items.beryllium, 250, Items.silicon, 250, Items.oxide, 150, Items.carbide, 75, Items.surgeAlloy, 75, Items.phaseFabric, 75)); size = 3; maxNodes = 1; - laserRange = 1000f; + laserRange = 500f; autolink = false; + sameBlockConnection = true; laserColor2 = Color.valueOf("ffd9c2"); laserScale = 0.8f; scaledHealth = 130; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 680c0194dd..162131bbab 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -160,7 +160,9 @@ public class ErekirTechTree{ }); node(beamTower, Seq.with(new OnSector(peaks)), () -> { + node(beamLink, Seq.with(new OnSector(crossroads)), () -> { + }); }); diff --git a/core/src/mindustry/content/SerpuloTechTree.java b/core/src/mindustry/content/SerpuloTechTree.java index c7d14b042a..b33d68d4f2 100644 --- a/core/src/mindustry/content/SerpuloTechTree.java +++ b/core/src/mindustry/content/SerpuloTechTree.java @@ -485,6 +485,7 @@ public class SerpuloTechTree{ node(mycelialBastion, Seq.with( new Research(atrax), new Research(spiroct), + new Research(arkyid), new Research(multiplicativeReconstructor), new Research(exponentialReconstructor) ), () -> { diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java index 20fe08dc75..a3eae8fb08 100644 --- a/core/src/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/mindustry/world/blocks/power/PowerNode.java @@ -33,7 +33,7 @@ public class PowerNode extends PowerBlock{ public @Load(value = "@-laser-end", fallback = "laser-end") TextureRegion laserEnd; public float laserRange = 6; public int maxNodes = 3; - public boolean autolink = true, drawRange = true; + public boolean autolink = true, drawRange = true, sameBlockConnection = false; public float laserScale = 0.25f; public Color laserColor1 = Color.white; public Color laserColor2 = Pal.powerLight; @@ -341,7 +341,7 @@ public class PowerNode extends PowerBlock{ } public boolean linkValid(Building tile, Building link, boolean checkMaxNodes){ - if(tile == link || link == null || !link.block.hasPower || !link.block.connectedPower || tile.team != link.team) return false; + if(tile == link || link == null || !link.block.hasPower || !link.block.connectedPower || tile.team != link.team || (sameBlockConnection && tile.block != link.block)) return false; if(overlaps(tile, link, laserRange * tilesize) || (link.block instanceof PowerNode node && overlaps(link, tile, node.laserRange * tilesize))){ if(checkMaxNodes && link.block instanceof PowerNode node){