diff --git a/core/assets-raw/sprites/blocks/defense/shield-breaker.png b/core/assets-raw/sprites/blocks/defense/shield-breaker.png deleted file mode 100644 index 3012ca2867..0000000000 Binary files a/core/assets-raw/sprites/blocks/defense/shield-breaker.png and /dev/null differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 84a30f95ef..c23c4eea49 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -760,6 +760,7 @@ sector.ravine.name = Ravine sector.caldera-erekir.name = Caldera sector.onset.description = The tutorial sector. This objective has not been created yet. Await further information. +#TODO - no shield breaker anymore. sector.aegis.description = The enemy is protected by shields. An experimental shield breaker module has been detected in this sector.\nLocate this structure. Supply it with tungsten ammunition and destroy the enemy base. sector.lake.description = This sector's slag lake greatly limits viable units. A hover unit is the only option.\nResearch the [accent]ship fabricator[] and produce an [accent]elude[] unit as soon as possible. sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain. @@ -1674,7 +1675,6 @@ block.small-deconstructor.name = Small Deconstructor block.canvas.name = Canvas block.world-processor.name = World Processor block.world-cell.name = World Cell -block.shield-breaker.name = Shield Breaker (temp name/sprite) block.tank-fabricator.name = Tank Fabricator block.mech-fabricator.name = Mech Fabricator block.ship-fabricator.name = Ship Fabricator @@ -2103,6 +2103,7 @@ lst.set = Set a variable. lst.operation = Perform an operation on 1-2 variables. lst.end = Jump to the top of the instruction stack. lst.wait = Wait a certain number of seconds. +lst.stop = Halt execution of this processor. lst.lookup = Look up an item/liquid/unit/block type by ID.\nTotal counts of each type can be accessed with:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] lst.jump = Conditionally jump to another statement. lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[]. diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index d5281b4875..3e73563e57 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -541,7 +541,6 @@ 63143=armored-duct|block-armored-duct-ui 63142=anthicus|unit-anthicus-ui 63141=anthicus-missile|unit-anthicus-missile-ui -63140=shield-breaker|block-shield-breaker-ui 63139=obviate|unit-obviate-ui 63138=tank-fabricator|block-tank-fabricator-ui 63137=mech-fabricator|block-mech-fabricator-ui diff --git a/core/assets/maps/aegis.msav b/core/assets/maps/aegis.msav index 6340c22a82..eef58e1907 100644 Binary files a/core/assets/maps/aegis.msav and b/core/assets/maps/aegis.msav differ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 0d389f72a0..5ad4b58bf3 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1863,17 +1863,6 @@ public class Blocks{ consumePower(5f); }}; - shieldBreaker = new ShieldBreaker("shield-breaker"){{ - requirements(Category.effect, BuildVisibility.editorOnly, with()); - - size = 5; - toDestroy = new Block[]{Blocks.shieldProjector, Blocks.largeShieldProjector}; - - consumeItem(Items.tungsten, 100); - itemCapacity = 100; - scaledHealth = 120f; - }}; - //endregion //region distribution diff --git a/core/src/mindustry/logic/LCategory.java b/core/src/mindustry/logic/LCategory.java index 0f175f4593..f7eaa7c05d 100644 --- a/core/src/mindustry/logic/LCategory.java +++ b/core/src/mindustry/logic/LCategory.java @@ -19,7 +19,7 @@ public class LCategory implements Comparable{ operation = new LCategory("operation", Pal.logicOperations, Icon.settingsSmall), control = new LCategory("control", Pal.logicControl, Icon.rotateSmall), unit = new LCategory("unit", Pal.logicUnits, Icon.unitsSmall), - world = new LCategory("world", Pal.logicWorld, Icon.terminalSmall); + world = new LCategory("world", Pal.logicWorld, Icon.terrainSmall); public final String name; public final int id; diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 5b6b580707..3df0e3edf6 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1084,7 +1084,6 @@ public class LExecutor{ public int value; public float curTime; - public double wait; public long frameId; public WaitI(int value){ @@ -1110,6 +1109,15 @@ public class LExecutor{ } } + public static class StopI implements LInstruction{ + + @Override + public void run(LExecutor exec){ + //skip back to self. + exec.var(varCounter).numval --; + } + } + //TODO inverse lookup public static class LookupI implements LInstruction{ public int dest; diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index cb10027821..b57b1b3fa6 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -675,7 +675,25 @@ public class LStatements{ @Override public LCategory category(){ - return LCategory.operation; + return LCategory.control; + } + } + + @RegisterStatement("stop") + public static class StopStatement extends LStatement{ + + @Override + public void build(Table table){ + } + + @Override + public LInstruction build(LAssembler builder){ + return new StopI(); + } + + @Override + public LCategory category(){ + return LCategory.control; } } diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 20587fbd83..fd2ac4c58a 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -163,8 +163,6 @@ public class ClassMap{ classes.put("RadarBuild", mindustry.world.blocks.defense.Radar.RadarBuild.class); classes.put("RegenProjector", mindustry.world.blocks.defense.RegenProjector.class); classes.put("RegenProjectorBuild", mindustry.world.blocks.defense.RegenProjector.RegenProjectorBuild.class); - classes.put("ShieldBreaker", mindustry.world.blocks.defense.ShieldBreaker.class); - classes.put("ShieldBreakerBuild", mindustry.world.blocks.defense.ShieldBreaker.ShieldBreakerBuild.class); classes.put("ShieldWall", mindustry.world.blocks.defense.ShieldWall.class); classes.put("ShieldWallBuild", mindustry.world.blocks.defense.ShieldWall.ShieldWallBuild.class); classes.put("ShockMine", mindustry.world.blocks.defense.ShockMine.class); diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 03711bf3a3..2e3057b2d8 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -241,7 +241,7 @@ public class CustomRulesDialog extends BaseDialog{ t.button("@rules.anyenv", style, () -> { //unlocalized for now - ui.showInfo("[accent]'Any' environment, or 'mixed tech', is no longer allowed.[]\n\nReasoning: Serpulo and Erekir tech were never meant to be used in the same map. They are not compatible.\nI have received far too many complains in this regard."); + ui.showInfo("[accent]'Any' environment, or 'mixed tech', is no longer allowed.[]\n\nReasoning: Serpulo and Erekir tech were never meant to be used in the same map. They are not compatible or remotely balanced.\nI have received far too many complains in this regard."); //rules.env = Vars.defaultEnv; //rules.hiddenBuildItems.clear(); diff --git a/core/src/mindustry/world/blocks/defense/ShieldBreaker.java b/core/src/mindustry/world/blocks/defense/ShieldBreaker.java deleted file mode 100644 index 4980cfed6d..0000000000 --- a/core/src/mindustry/world/blocks/defense/ShieldBreaker.java +++ /dev/null @@ -1,47 +0,0 @@ -package mindustry.world.blocks.defense; - -import arc.math.*; -import mindustry.*; -import mindustry.content.*; -import mindustry.entities.*; -import mindustry.gen.*; -import mindustry.world.*; - -public class ShieldBreaker extends Block{ - public Block[] toDestroy = {}; - public Effect effect = Fx.shockwave, breakEffect = Fx.reactorExplosion, selfKillEffect = Fx.massiveExplosion; - - public ShieldBreaker(String name){ - super(name); - - solid = update = true; - rebuildable = false; - } - - @Override - public boolean canBreak(Tile tile){ - return Vars.state.isEditor(); - } - - public class ShieldBreakerBuild extends Building{ - - @Override - public void updateTile(){ - if(Mathf.equal(efficiency, 1f)){ - effect.at(this); - for(var other : Vars.state.teams.active){ - if(team != other.team){ - for(var block : toDestroy){ - other.getBuildings(block).copy().each(b -> { - breakEffect.at(b); - b.kill(); - }); - } - } - } - selfKillEffect.at(this); - kill(); - } - } - } -}