diff --git a/annotations/src/main/java/mindustry/annotations/Annotations.java b/annotations/src/main/java/mindustry/annotations/Annotations.java index 8a0079df2c..501c255d2e 100644 --- a/annotations/src/main/java/mindustry/annotations/Annotations.java +++ b/annotations/src/main/java/mindustry/annotations/Annotations.java @@ -128,11 +128,11 @@ public class Annotations{ String fallback() default "error"; } - /** Registers a logic node's slot. */ - @Target(ElementType.FIELD) + /** Registers a statement for auto serialization. */ + @Target(ElementType.TYPE) @Retention(RetentionPolicy.SOURCE) - public @interface Slot{ - boolean input() default false; + public @interface RegisterStatement{ + String value(); } @Target(ElementType.TYPE) diff --git a/annotations/src/main/java/mindustry/annotations/misc/LogicStatementProcessor.java b/annotations/src/main/java/mindustry/annotations/misc/LogicStatementProcessor.java new file mode 100644 index 0000000000..bf5f25b682 --- /dev/null +++ b/annotations/src/main/java/mindustry/annotations/misc/LogicStatementProcessor.java @@ -0,0 +1,98 @@ +package mindustry.annotations.misc; + +import arc.func.*; +import arc.struct.*; +import com.squareup.javapoet.*; +import mindustry.annotations.Annotations.*; +import mindustry.annotations.*; +import mindustry.annotations.util.*; + +import javax.annotation.processing.*; +import javax.lang.model.element.*; + +@SupportedAnnotationTypes("mindustry.annotations.Annotations.RegisterStatement") +public class LogicStatementProcessor extends BaseProcessor{ + + @Override + public void process(RoundEnvironment env) throws Exception{ + TypeSpec.Builder type = TypeSpec.classBuilder("LogicIO") + .addModifiers(Modifier.PUBLIC); + + MethodSpec.Builder writer = MethodSpec.methodBuilder("write") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .addParameter(Object.class, "obj") + .addParameter(StringBuilder.class, "out"); + + MethodSpec.Builder reader = MethodSpec.methodBuilder("read") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .returns(tname("mindustry.logic.LStatement")) + .addParameter(String[].class, "tokens"); + + Seq types = types(RegisterStatement.class); + + type.addField(FieldSpec.builder( + ParameterizedTypeName.get( + ClassName.get(Seq.class), + ParameterizedTypeName.get(ClassName.get(Prov.class), + tname("mindustry.logic.LStatement"))), "allStatements", Modifier.PUBLIC, Modifier.STATIC) + .initializer("Seq.with(" + types.toString(", ", t -> "" + t.toString() + "::new") + ")").build()); + + boolean beganWrite = false, beganRead = false; + + for(Stype c : types){ + String name = c.annotation(RegisterStatement.class).value(); + + if(beganWrite){ + writer.nextControlFlow("else if(obj instanceof $T)", c.mirror()); + }else{ + writer.beginControlFlow("if(obj instanceof $T)", c.mirror()); + beganWrite = true; + } + + //write the name & individual fields + writer.addStatement("out.append($S)", name); + + Seq fields = c.fields(); + + String readSt = "if(tokens[0].equals($S))"; + if(beganRead){ + reader.nextControlFlow("else " + readSt, name); + }else{ + reader.beginControlFlow(readSt, name); + beganRead = true; + } + + reader.addStatement("$T result = new $T()", c.mirror(), c.mirror()); + + for(int i = 0; i < fields.size; i++){ + Svar field = fields.get(i); + + if(field.is(Modifier.TRANSIENT)) continue; + + writer.addStatement("out.append(\" \")"); + writer.addStatement("out.append((($T)obj).$L)", c.mirror(), field.name()); + + //reading primitives, strings and enums is supported; nothing else is + reader.addStatement("result.$L = $L(tokens[$L])", + field.name(), + field.mirror().toString().equals("java.lang.String") ? + "" : (field.tname().isPrimitive() ? field.tname().box().toString() : + field.mirror().toString()) + ".valueOf", //if it's not a string, it must have a valueOf method + i + 1 + ); + } + + reader.addStatement("return result"); + } + + reader.endControlFlow(); + writer.endControlFlow(); + + reader.addStatement("return null"); + + type.addMethod(writer.build()); + type.addMethod(reader.build()); + + write(type); + } +} diff --git a/annotations/src/main/resources/revisions/Bullet/3.json b/annotations/src/main/resources/revisions/Bullet/3.json new file mode 100644 index 0000000000..012dbdff7e --- /dev/null +++ b/annotations/src/main/resources/revisions/Bullet/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:collided,type:arc.struct.IntSeq,size:-1},{name:damage,type:float,size:4},{name:data,type:java.lang.Object,size:-1},{name:lifetime,type:float,size:4},{name:owner,type:Entityc,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:type,type:mindustry.entities.bullet.BulletType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/Bullet/4.json b/annotations/src/main/resources/revisions/Bullet/4.json new file mode 100644 index 0000000000..9f4b9aa7fa --- /dev/null +++ b/annotations/src/main/resources/revisions/Bullet/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:collided,type:arc.struct.IntSeq,size:-1},{name:damage,type:float,size:4},{name:data,type:java.lang.Object,size:-1},{name:lifetime,type:float,size:4},{name:owner,type:Entityc,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:type,type:mindustry.entities.bullet.BulletType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/EffectState/3.json b/annotations/src/main/resources/revisions/EffectState/3.json new file mode 100644 index 0000000000..eae3fd4ac8 --- /dev/null +++ b/annotations/src/main/resources/revisions/EffectState/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:color,type:arc.graphics.Color,size:-1},{name:data,type:java.lang.Object,size:-1},{name:effect,type:mindustry.entities.Effect,size:-1},{name:lifetime,type:float,size:4},{name:offsetX,type:float,size:4},{name:offsetY,type:float,size:4},{name:parent,type:Posc,size:-1},{name:rotation,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/EffectState/4.json b/annotations/src/main/resources/revisions/EffectState/4.json new file mode 100644 index 0000000000..223affa87a --- /dev/null +++ b/annotations/src/main/resources/revisions/EffectState/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:color,type:arc.graphics.Color,size:-1},{name:data,type:java.lang.Object,size:-1},{name:effect,type:mindustry.entities.Effect,size:-1},{name:lifetime,type:float,size:4},{name:offsetX,type:float,size:4},{name:offsetY,type:float,size:4},{name:parent,type:Posc,size:-1},{name:rotation,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/core/assets-raw/sprites/blocks/campaign/data-processor-2.png b/core/assets-raw/sprites/blocks/campaign/data-processor-2.png deleted file mode 100644 index 7071b2b02c..0000000000 Binary files a/core/assets-raw/sprites/blocks/campaign/data-processor-2.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/campaign/logic-processor-3.png b/core/assets-raw/sprites/blocks/campaign/logic-processor-3.png new file mode 100644 index 0000000000..92bbec2528 Binary files /dev/null and b/core/assets-raw/sprites/blocks/campaign/logic-processor-3.png differ diff --git a/core/assets-raw/sprites/blocks/campaign/logic-processor.png b/core/assets-raw/sprites/blocks/campaign/logic-processor.png index 92bbec2528..7071b2b02c 100644 Binary files a/core/assets-raw/sprites/blocks/campaign/logic-processor.png and b/core/assets-raw/sprites/blocks/campaign/logic-processor.png differ diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index 94d1d88158..fd306dce12 100644 Binary files a/core/assets/sprites/block_colors.png and b/core/assets/sprites/block_colors.png differ diff --git a/core/assets/sprites/fallback/sprites.atlas b/core/assets/sprites/fallback/sprites.atlas index 1e5cbba959..9b9c2795d2 100644 --- a/core/assets/sprites/fallback/sprites.atlas +++ b/core/assets/sprites/fallback/sprites.atlas @@ -444,13 +444,6 @@ core-silo orig: 160, 160 offset: 0, 0 index: -1 -data-processor-2 - rotate: false - xy: 1445, 951 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 data-processor-top rotate: false xy: 1367, 1623 @@ -481,12 +474,19 @@ launch-pad-light index: -1 launchpod rotate: false - xy: 1643, 877 + xy: 1577, 877 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 logic-processor + rotate: false + xy: 1643, 877 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +logic-processor-3 rotate: false xy: 1237, 1317 size: 96, 96 @@ -950,7 +950,7 @@ cross index: -1 distributor rotate: false - xy: 1445, 885 + xy: 1445, 951 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1104,14 +1104,14 @@ blast-drill-top index: -1 drill-top rotate: false - xy: 1643, 943 + xy: 1577, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-liquid rotate: false - xy: 1643, 943 + xy: 1577, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1972,7 +1972,7 @@ disassembler-spinner index: -1 graphite-press rotate: false - xy: 1775, 943 + xy: 1709, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2000,21 +2000,21 @@ item-void index: -1 kiln rotate: false - xy: 1841, 943 + xy: 1775, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 1907, 943 + xy: 1841, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 1907, 943 + xy: 1841, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2357,7 +2357,7 @@ hail-heat index: -1 lancer-heat rotate: false - xy: 1577, 877 + xy: 1511, 877 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2546,14 +2546,14 @@ door index: -1 door-large rotate: false - xy: 1511, 943 + xy: 1445, 885 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 1577, 943 + xy: 1511, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4394,7 +4394,7 @@ item-titanium-xlarge index: -1 lancer rotate: false - xy: 1511, 877 + xy: 1907, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -5430,7 +5430,7 @@ fortress index: -1 fortress-base rotate: false - xy: 1709, 943 + xy: 1643, 943 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8142,7 +8142,7 @@ armored-conveyor-icon-editor index: -1 battery-icon-editor rotate: false - xy: 295, 47 + xy: 229, 47 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -8163,14 +8163,14 @@ blast-drill-icon-editor index: -1 blast-mixer-icon-editor rotate: false - xy: 1005, 725 + xy: 907, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border-editor rotate: false - xy: 295, 13 + xy: 263, 47 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -8247,7 +8247,7 @@ cliffs-icon-editor index: -1 coal-centrifuge-icon-editor rotate: false - xy: 1071, 725 + xy: 973, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8268,7 +8268,7 @@ conduit-icon-editor index: -1 container-icon-editor rotate: false - xy: 1137, 725 + xy: 1039, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8289,7 +8289,7 @@ copper-wall-icon-editor index: -1 copper-wall-large-icon-editor rotate: false - xy: 1203, 725 + xy: 1105, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8331,14 +8331,14 @@ editor-craters1 index: -1 cryofluidmixer-icon-editor rotate: false - xy: 1269, 725 + xy: 1171, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-editor rotate: false - xy: 1335, 725 + xy: 1237, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8352,133 +8352,133 @@ cyclone-icon-editor index: -1 dark-metal-icon-editor rotate: false - xy: 1995, 795 + xy: 297, 47 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-editor rotate: false - xy: 1995, 761 + xy: 1989, 795 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-1 rotate: false - xy: 1995, 761 + xy: 1989, 795 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-editor rotate: false - xy: 1995, 727 + xy: 1989, 761 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-2 rotate: false - xy: 1995, 727 + xy: 1989, 761 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-editor rotate: false - xy: 1995, 693 + xy: 1963, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-3 rotate: false - xy: 1995, 693 + xy: 1963, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-editor rotate: false - xy: 1995, 659 + xy: 1963, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-4 rotate: false - xy: 1995, 659 + xy: 1963, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-editor rotate: false - xy: 1995, 625 + xy: 1963, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-5 rotate: false - xy: 1995, 625 + xy: 1963, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-editor rotate: false - xy: 329, 57 + xy: 1963, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-6 rotate: false - xy: 329, 57 + xy: 1963, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-editor rotate: false - xy: 329, 23 + xy: 331, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand1 rotate: false - xy: 329, 23 + xy: 331, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-editor rotate: false - xy: 409, 205 + xy: 1997, 727 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-editor rotate: false - xy: 443, 205 + xy: 1997, 693 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-editor rotate: false - xy: 477, 205 + xy: 1997, 659 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-deepwater rotate: false - xy: 477, 205 + xy: 1997, 659 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -8492,7 +8492,7 @@ differential-generator-icon-editor index: -1 diode-icon-editor rotate: false - xy: 511, 201 + xy: 1997, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -8506,826 +8506,826 @@ disassembler-icon-editor index: -1 distributor-icon-editor rotate: false - xy: 1401, 725 + xy: 1303, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-icon-editor rotate: false - xy: 545, 201 + xy: 409, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-editor rotate: false - xy: 1467, 725 + xy: 1369, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dunerocks-icon-editor rotate: false - xy: 363, 57 + xy: 443, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-editor rotate: false - xy: 363, 23 + xy: 477, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char2 rotate: false - xy: 579, 201 + xy: 511, 201 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char3 rotate: false - xy: 617, 725 + xy: 545, 201 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters2 rotate: false - xy: 617, 691 + xy: 215, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters3 rotate: false - xy: 651, 725 + xy: 249, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water1 rotate: false - xy: 685, 725 + xy: 365, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water2 rotate: false - xy: 617, 623 + xy: 351, 23 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water3 rotate: false - xy: 651, 657 + xy: 385, 23 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water1 rotate: false - xy: 685, 691 + xy: 579, 201 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water2 rotate: false - xy: 719, 725 + xy: 617, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water3 rotate: false - xy: 617, 589 + xy: 617, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand2 rotate: false - xy: 617, 657 + xy: 283, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand3 rotate: false - xy: 651, 691 + xy: 317, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass1 rotate: false - xy: 651, 623 + xy: 651, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass-icon-editor rotate: false - xy: 651, 623 + xy: 651, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass2 rotate: false - xy: 685, 657 + xy: 617, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass3 rotate: false - xy: 719, 691 + xy: 651, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-holostone1 rotate: false - xy: 753, 725 + xy: 685, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone-icon-editor rotate: false - xy: 753, 725 + xy: 685, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-holostone2 rotate: false - xy: 651, 589 + xy: 617, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-holostone3 rotate: false - xy: 685, 623 + xy: 651, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock1 rotate: false - xy: 719, 657 + xy: 685, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-editor rotate: false - xy: 719, 657 + xy: 685, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock2 rotate: false - xy: 753, 691 + xy: 719, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock3 rotate: false - xy: 685, 589 + xy: 617, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow1 rotate: false - xy: 753, 623 + xy: 753, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-editor rotate: false - xy: 753, 623 + xy: 753, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow2 rotate: false - xy: 753, 589 + xy: 651, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow3 rotate: false - xy: 617, 555 + xy: 685, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice1 rotate: false - xy: 719, 623 + xy: 651, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-editor rotate: false - xy: 719, 623 + xy: 651, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice2 rotate: false - xy: 753, 657 + xy: 685, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice3 rotate: false - xy: 719, 589 + xy: 719, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ignarock1 rotate: false - xy: 651, 555 + xy: 719, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock-icon-editor rotate: false - xy: 651, 555 + xy: 719, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ignarock2 rotate: false - xy: 685, 555 + xy: 753, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ignarock3 rotate: false - xy: 719, 555 + xy: 685, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock1 rotate: false - xy: 753, 555 + xy: 719, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock-icon-editor rotate: false - xy: 753, 555 + xy: 719, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock2 rotate: false - xy: 787, 659 + xy: 753, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock3 rotate: false - xy: 787, 625 + xy: 719, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor rotate: false - xy: 787, 591 + xy: 753, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-icon-editor rotate: false - xy: 787, 591 + xy: 753, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-2 rotate: false - xy: 821, 659 + xy: 753, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2-icon-editor rotate: false - xy: 821, 659 + xy: 753, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-3 rotate: false - xy: 821, 625 + xy: 617, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-icon-editor rotate: false - xy: 821, 625 + xy: 617, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-5 rotate: false - xy: 787, 557 + xy: 651, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-icon-editor rotate: false - xy: 787, 557 + xy: 651, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged1 rotate: false - xy: 821, 591 + xy: 685, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged-icon-editor rotate: false - xy: 821, 591 + xy: 685, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged2 rotate: false - xy: 855, 659 + xy: 719, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged3 rotate: false - xy: 855, 625 + xy: 753, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss1 rotate: false - xy: 821, 557 + xy: 787, 659 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss-icon-editor rotate: false - xy: 821, 557 + xy: 787, 659 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss2 rotate: false - xy: 855, 591 + xy: 787, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss3 rotate: false - xy: 889, 659 + xy: 787, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal1 rotate: false - xy: 889, 625 + xy: 821, 659 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal2 rotate: false - xy: 855, 557 + xy: 821, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal3 rotate: false - xy: 889, 591 + xy: 821, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper1 rotate: false - xy: 923, 659 + xy: 787, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper2 rotate: false - xy: 923, 625 + xy: 855, 659 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper3 rotate: false - xy: 889, 557 + xy: 855, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead1 rotate: false - xy: 923, 591 + xy: 855, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead2 rotate: false - xy: 957, 659 + xy: 821, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead3 rotate: false - xy: 957, 625 + xy: 855, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap1 rotate: false - xy: 923, 557 + xy: 889, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap2 rotate: false - xy: 957, 591 + xy: 889, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap3 rotate: false - xy: 957, 557 + xy: 923, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium1 rotate: false - xy: 991, 625 + xy: 923, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium2 rotate: false - xy: 991, 591 + xy: 889, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium3 rotate: false - xy: 1025, 625 + xy: 957, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium1 rotate: false - xy: 991, 557 + xy: 957, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium2 rotate: false - xy: 1025, 591 + xy: 923, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium3 rotate: false - xy: 1059, 625 + xy: 991, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles1 rotate: false - xy: 1025, 557 + xy: 991, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles2 rotate: false - xy: 1059, 591 + xy: 957, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles3 rotate: false - xy: 1093, 625 + xy: 1025, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-salt rotate: false - xy: 1059, 557 + xy: 1025, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-editor rotate: false - xy: 1059, 557 + xy: 1025, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water1 rotate: false - xy: 1127, 591 + xy: 1025, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water2 rotate: false - xy: 1161, 625 + xy: 1093, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water3 rotate: false - xy: 1127, 557 + xy: 1093, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand1 rotate: false - xy: 1093, 591 + xy: 991, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-editor rotate: false - xy: 1093, 591 + xy: 991, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand2 rotate: false - xy: 1127, 625 + xy: 1059, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand3 rotate: false - xy: 1093, 557 + xy: 1059, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale1 rotate: false - xy: 1161, 591 + xy: 1059, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-editor rotate: false - xy: 1161, 591 + xy: 1059, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale2 rotate: false - xy: 1195, 625 + xy: 1127, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale3 rotate: false - xy: 1161, 557 + xy: 1127, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-slag rotate: false - xy: 1195, 591 + xy: 1093, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 slag-icon-editor rotate: false - xy: 1195, 591 + xy: 1093, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow1 rotate: false - xy: 1229, 625 + xy: 1161, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow2 rotate: false - xy: 1195, 557 + xy: 1161, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow3 rotate: false - xy: 1229, 591 + xy: 1127, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spawn rotate: false - xy: 1263, 625 + xy: 1195, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss1 rotate: false - xy: 1229, 557 + xy: 1195, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-editor rotate: false - xy: 1229, 557 + xy: 1195, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss2 rotate: false - xy: 1263, 591 + xy: 1161, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss3 rotate: false - xy: 1297, 625 + xy: 1229, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone1 rotate: false - xy: 1263, 557 + xy: 1229, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-editor rotate: false - xy: 1263, 557 + xy: 1229, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone2 rotate: false - xy: 1297, 591 + xy: 1195, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone3 rotate: false - xy: 1331, 625 + xy: 1263, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tainted-water rotate: false - xy: 1297, 557 + xy: 1263, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-editor rotate: false - xy: 1297, 557 + xy: 1263, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tar rotate: false - xy: 1331, 591 + xy: 1229, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-editor rotate: false - xy: 1331, 591 + xy: 1229, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils1 rotate: false - xy: 1365, 625 + xy: 1297, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils2 rotate: false - xy: 1331, 557 + xy: 1297, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils3 rotate: false - xy: 1365, 591 + xy: 1263, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-water rotate: false - xy: 1399, 625 + xy: 1331, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-editor rotate: false - xy: 1399, 625 + xy: 1331, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9353,7 +9353,7 @@ fuse-icon-editor index: -1 graphite-press-icon-editor rotate: false - xy: 1533, 725 + xy: 1435, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -9367,21 +9367,21 @@ ground-factory-icon-editor index: -1 hail-icon-editor rotate: false - xy: 1365, 557 + xy: 1331, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-icon-editor rotate: false - xy: 1399, 591 + xy: 1297, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-icon-editor rotate: false - xy: 1433, 625 + xy: 1365, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9395,49 +9395,49 @@ impact-reactor-icon-editor index: -1 incinerator-icon-editor rotate: false - xy: 1399, 557 + xy: 1365, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 inverted-sorter-icon-editor rotate: false - xy: 1433, 591 + xy: 1331, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-editor rotate: false - xy: 1467, 625 + xy: 1399, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-editor rotate: false - xy: 1433, 557 + xy: 1399, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-editor rotate: false - xy: 1467, 591 + xy: 1365, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-editor rotate: false - xy: 1599, 757 + xy: 1501, 725 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-editor rotate: false - xy: 1665, 757 + xy: 551, 467 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -9465,21 +9465,21 @@ launch-pad-large-icon-editor index: -1 liquid-junction-icon-editor rotate: false - xy: 1501, 625 + xy: 1433, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-editor rotate: false - xy: 1467, 557 + xy: 1433, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-editor rotate: false - xy: 1501, 591 + xy: 1399, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9493,42 +9493,42 @@ liquid-tank-icon-editor index: -1 liquid-void-icon-editor rotate: false - xy: 1535, 625 + xy: 1467, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 logic-processor-icon-editor rotate: false - xy: 1201, 791 - size: 96, 96 - orig: 96, 96 + xy: 1593, 757 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 mass-conveyor-icon-editor rotate: false - xy: 1299, 791 + xy: 1201, 791 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mass-driver-icon-editor rotate: false - xy: 1397, 791 + xy: 1299, 791 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill-icon-editor rotate: false - xy: 1731, 757 + xy: 1659, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-pump-icon-editor rotate: false - xy: 1501, 557 + xy: 1467, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9542,35 +9542,35 @@ meltdown-icon-editor index: -1 melter-icon-editor rotate: false - xy: 1535, 591 + xy: 1433, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-editor rotate: false - xy: 1797, 757 + xy: 1725, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender-icon-editor rotate: false - xy: 1535, 557 + xy: 1501, 625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message-icon-editor rotate: false - xy: 617, 521 + xy: 1501, 591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-editor rotate: false - xy: 453, 435 + xy: 1397, 791 size: 96, 96 orig: 96, 96 offset: 0, 0 @@ -9584,91 +9584,91 @@ multiplicative-reconstructor-icon-editor index: -1 naval-factory-icon-editor rotate: false - xy: 1495, 791 + xy: 453, 435 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-icon-editor rotate: false - xy: 1593, 823 + xy: 1495, 791 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome-icon-editor rotate: false - xy: 1691, 823 + xy: 1593, 823 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-projector-icon-editor rotate: false - xy: 1863, 757 + xy: 1791, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overflow-gate-icon-editor rotate: false - xy: 617, 487 + xy: 1467, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 parallax-icon-editor rotate: false - xy: 1929, 757 + xy: 1857, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 payload-router-icon-editor rotate: false - xy: 1789, 823 + xy: 1691, 823 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 pebbles-icon-editor rotate: false - xy: 651, 521 + xy: 1501, 557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-editor rotate: false - xy: 617, 453 + xy: 617, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-editor rotate: false - xy: 651, 487 + xy: 617, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-editor rotate: false - xy: 685, 521 + xy: 651, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-editor rotate: false - xy: 551, 467 + xy: 1923, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-editor rotate: false - xy: 1005, 659 + xy: 907, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -9682,112 +9682,112 @@ pine-icon-editor index: -1 plastanium-compressor-icon-editor rotate: false - xy: 1071, 659 + xy: 973, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-conveyor-icon-editor rotate: false - xy: 617, 419 + xy: 617, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-icon-editor rotate: false - xy: 651, 453 + xy: 651, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large-icon-editor rotate: false - xy: 1137, 659 + xy: 1039, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plated-conduit-icon-editor rotate: false - xy: 685, 487 + xy: 685, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-editor rotate: false - xy: 1203, 659 + xy: 1105, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-node-icon-editor rotate: false - xy: 719, 521 + xy: 617, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-editor rotate: false - xy: 1269, 659 + xy: 1171, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source-icon-editor rotate: false - xy: 651, 419 + xy: 651, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-editor rotate: false - xy: 685, 453 + xy: 685, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-editor rotate: false - xy: 719, 487 + xy: 719, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-editor rotate: false - xy: 753, 521 + xy: 651, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-editor rotate: false - xy: 1335, 659 + xy: 1237, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-icon-editor rotate: false - xy: 787, 523 + xy: 685, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 resupply-point-icon-editor rotate: false - xy: 1401, 659 + xy: 1303, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ripple-icon-editor rotate: false - xy: 1887, 823 + xy: 1789, 823 size: 96, 96 orig: 96, 96 offset: 0, 0 @@ -9801,77 +9801,77 @@ rock-icon-editor index: -1 rocks-icon-editor rotate: false - xy: 685, 419 + xy: 719, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-icon-editor rotate: false - xy: 1467, 659 + xy: 1369, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 router-icon-editor rotate: false - xy: 719, 453 + xy: 753, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-editor rotate: false - xy: 1533, 659 + xy: 1435, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 saltrocks-icon-editor rotate: false - xy: 753, 487 + xy: 787, 523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-editor rotate: false - xy: 1599, 691 + xy: 1501, 659 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sand-boulder-icon-editor rotate: false - xy: 787, 489 + xy: 685, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-editor rotate: false - xy: 821, 523 + xy: 719, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-icon-editor rotate: false - xy: 719, 419 + xy: 753, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-editor rotate: false - xy: 1665, 691 + xy: 1567, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-icon-editor rotate: false - xy: 753, 453 + xy: 787, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9885,84 +9885,84 @@ scrap-wall-gigantic-icon-editor index: -1 scrap-wall-huge-icon-editor rotate: false - xy: 325, 339 + xy: 1887, 823 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-icon-editor rotate: false - xy: 787, 455 + xy: 821, 523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-editor rotate: false - xy: 1731, 691 + xy: 1633, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 segment-icon-editor rotate: false - xy: 1797, 691 + xy: 1699, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-editor rotate: false - xy: 1863, 691 + xy: 1765, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shale-boulder-icon-editor rotate: false - xy: 821, 489 + xy: 719, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-editor rotate: false - xy: 855, 523 + xy: 753, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-editor rotate: false - xy: 753, 419 + xy: 787, 455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-editor rotate: false - xy: 787, 421 + xy: 821, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-crucible-icon-editor rotate: false - xy: 325, 241 + xy: 325, 339 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-smelter-icon-editor rotate: false - xy: 1929, 691 + xy: 1831, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 snow-icon-editor rotate: false - xy: 821, 455 + xy: 855, 523 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -9983,35 +9983,35 @@ snowrock-icon-editor index: -1 snowrocks-icon-editor rotate: false - xy: 855, 489 + xy: 753, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-editor rotate: false - xy: 889, 523 + xy: 787, 421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-editor rotate: false - xy: 423, 337 + xy: 325, 241 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 sorter-icon-editor rotate: false - xy: 821, 421 + xy: 821, 455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-editor rotate: false - xy: 855, 455 + xy: 855, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -10039,49 +10039,49 @@ spore-pine-icon-editor index: -1 spore-press-icon-editor rotate: false - xy: 551, 401 + xy: 1897, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sporerocks-icon-editor rotate: false - xy: 889, 489 + xy: 889, 523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-editor rotate: false - xy: 521, 335 + xy: 551, 401 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-wall-icon-editor rotate: false - xy: 923, 523 + xy: 821, 421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-editor rotate: false - xy: 521, 269 + xy: 521, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-editor rotate: false - xy: 1599, 625 + xy: 521, 269 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tendrils-icon-editor rotate: false - xy: 855, 421 + xy: 855, 455 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -10095,35 +10095,35 @@ tetrative-reconstructor-icon-editor index: -1 thermal-generator-icon-editor rotate: false - xy: 1665, 625 + xy: 1567, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump-icon-editor rotate: false - xy: 423, 239 + xy: 423, 337 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-icon-editor rotate: false - xy: 809, 693 + xy: 423, 239 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-wall-icon-editor rotate: false - xy: 889, 455 + xy: 889, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-editor rotate: false - xy: 1731, 625 + xy: 1633, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -10137,63 +10137,63 @@ thruster-icon-editor index: -1 titanium-conveyor-icon-editor rotate: false - xy: 923, 489 + xy: 923, 523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-editor rotate: false - xy: 957, 523 + xy: 855, 421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-editor rotate: false - xy: 1797, 625 + xy: 1699, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-icon-editor rotate: false - xy: 1863, 625 + xy: 1765, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 underflow-gate-icon-editor rotate: false - xy: 889, 421 + xy: 889, 455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-editor rotate: false - xy: 923, 455 + xy: 923, 489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-editor rotate: false - xy: 907, 693 + xy: 809, 693 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 water-extractor-icon-editor rotate: false - xy: 1929, 625 + xy: 1831, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-editor rotate: false - xy: 229, 15 + xy: 1897, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 diff --git a/core/assets/sprites/fallback/sprites2.png b/core/assets/sprites/fallback/sprites2.png index bfe0963f08..00a105b412 100644 Binary files a/core/assets/sprites/fallback/sprites2.png and b/core/assets/sprites/fallback/sprites2.png differ diff --git a/core/assets/sprites/fallback/sprites4.png b/core/assets/sprites/fallback/sprites4.png index b315971f35..09730fb5a5 100644 Binary files a/core/assets/sprites/fallback/sprites4.png and b/core/assets/sprites/fallback/sprites4.png differ diff --git a/core/assets/sprites/fallback/sprites6.png b/core/assets/sprites/fallback/sprites6.png index 1fc332b4b3..b8b35098c5 100644 Binary files a/core/assets/sprites/fallback/sprites6.png and b/core/assets/sprites/fallback/sprites6.png differ diff --git a/core/assets/sprites/fallback/sprites7.png b/core/assets/sprites/fallback/sprites7.png index c73823d891..92b195cd42 100644 Binary files a/core/assets/sprites/fallback/sprites7.png and b/core/assets/sprites/fallback/sprites7.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 622f665bea..017778359b 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -11,13 +11,6 @@ core-silo orig: 160, 160 offset: 0, 0 index: -1 -data-processor-2 - rotate: false - xy: 3427, 698 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 data-processor-top rotate: false xy: 1877, 931 @@ -48,12 +41,19 @@ launch-pad-light index: -1 launchpod rotate: false - xy: 3493, 698 + xy: 3487, 368 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 logic-processor + rotate: false + xy: 3493, 698 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +logic-processor-3 rotate: false xy: 2431, 649 size: 96, 96 @@ -650,7 +650,7 @@ cross index: -1 distributor rotate: false - xy: 3421, 632 + xy: 3427, 698 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -811,14 +811,14 @@ blast-drill-top index: -1 drill-top rotate: false - xy: 3421, 434 + xy: 3421, 500 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-liquid rotate: false - xy: 3421, 434 + xy: 3421, 500 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1679,7 +1679,7 @@ disassembler-spinner index: -1 graphite-press rotate: false - xy: 3487, 632 + xy: 3421, 368 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1707,21 +1707,21 @@ item-void index: -1 kiln rotate: false - xy: 3487, 566 + xy: 3487, 632 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 3487, 500 + xy: 3487, 566 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 3487, 500 + xy: 3487, 566 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2099,7 +2099,7 @@ hail-heat index: -1 lancer-heat rotate: false - xy: 3487, 368 + xy: 3487, 434 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2344,14 +2344,14 @@ door index: -1 door-large rotate: false - xy: 3421, 566 + xy: 3421, 632 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 3421, 500 + xy: 3421, 566 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4787,7 +4787,7 @@ item-titanium-xlarge index: -1 lancer rotate: false - xy: 3487, 434 + xy: 3487, 500 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -5942,7 +5942,7 @@ fortress index: -1 fortress-base rotate: false - xy: 3421, 368 + xy: 3421, 434 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -8095,2107 +8095,2107 @@ filter: nearest,nearest repeat: none additive-reconstructor-icon-editor rotate: false - xy: 1973, 389 + xy: 1973, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 air-factory-icon-editor rotate: false - xy: 2071, 389 + xy: 2071, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-icon-editor rotate: false - xy: 2169, 389 + xy: 2169, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 arc-icon-editor rotate: false - xy: 1085, 227 + xy: 1085, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-icon-editor rotate: false - xy: 1565, 225 + xy: 3633, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-editor rotate: false - xy: 1119, 227 + xy: 1119, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large-icon-editor rotate: false - xy: 2267, 389 + xy: 2267, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 blast-drill-icon-editor rotate: false - xy: 163, 35 + xy: 163, 47 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-mixer-icon-editor rotate: false - xy: 4031, 421 + xy: 4031, 433 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border-editor rotate: false - xy: 1599, 225 + xy: 3667, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-forge-icon-editor rotate: false - xy: 2365, 389 + xy: 2365, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-loader-icon-editor rotate: false - xy: 2463, 389 + xy: 2463, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-unloader-icon-editor rotate: false - xy: 2561, 389 + xy: 2561, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 bridge-conduit-icon-editor rotate: false - xy: 1633, 225 + xy: 3701, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-editor rotate: false - xy: 1667, 225 + xy: 3735, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char-icon-editor rotate: false - xy: 1701, 225 + xy: 3769, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char1 rotate: false - xy: 1701, 225 + xy: 3769, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear-editor rotate: false - xy: 645, 194 + xy: 645, 206 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 cliff-icon-editor rotate: false - xy: 1735, 225 + xy: 3803, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs-icon-editor rotate: false - xy: 1769, 225 + xy: 3837, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal-centrifuge-icon-editor rotate: false - xy: 4031, 355 + xy: 4031, 367 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 combustion-generator-icon-editor rotate: false - xy: 1803, 225 + xy: 3871, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-icon-editor rotate: false - xy: 1847, 257 + xy: 3905, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 container-icon-editor rotate: false - xy: 1847, 291 + xy: 1749, 303 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 conveyor-icon-editor rotate: false - xy: 1881, 257 + xy: 3939, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-editor rotate: false - xy: 1915, 257 + xy: 3973, 367 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large-icon-editor rotate: false - xy: 1913, 291 + xy: 1815, 303 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 core-foundation-icon-editor rotate: false - xy: 1323, 357 + xy: 1323, 369 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus-icon-editor rotate: false - xy: 1, 3 + xy: 1, 15 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard-icon-editor rotate: false - xy: 2659, 389 + xy: 2659, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 craters-icon-editor rotate: false - xy: 1979, 289 + xy: 163, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters1 rotate: false - xy: 1979, 289 + xy: 163, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cryofluidmixer-icon-editor rotate: false - xy: 1979, 323 + xy: 1881, 303 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-editor rotate: false - xy: 2045, 323 + xy: 553, 13 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cyclone-icon-editor rotate: false - xy: 2757, 389 + xy: 2757, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 dark-metal-icon-editor rotate: false - xy: 2013, 289 + xy: 197, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-editor rotate: false - xy: 2047, 289 + xy: 231, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-1 rotate: false - xy: 2047, 289 + xy: 231, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-editor rotate: false - xy: 2081, 289 + xy: 265, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-2 rotate: false - xy: 2081, 289 + xy: 265, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-editor rotate: false - xy: 2115, 289 + xy: 299, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-3 rotate: false - xy: 2115, 289 + xy: 299, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-editor rotate: false - xy: 2149, 289 + xy: 333, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-4 rotate: false - xy: 2149, 289 + xy: 333, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-editor rotate: false - xy: 2183, 289 + xy: 367, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-5 rotate: false - xy: 2183, 289 + xy: 367, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-editor rotate: false - xy: 2217, 289 + xy: 401, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-6 rotate: false - xy: 2217, 289 + xy: 401, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-editor rotate: false - xy: 2251, 289 + xy: 435, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand1 rotate: false - xy: 2251, 289 + xy: 435, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-editor rotate: false - xy: 2285, 289 + xy: 469, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-editor rotate: false - xy: 2319, 289 + xy: 503, 13 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-editor rotate: false - xy: 2353, 289 + xy: 1753, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-deepwater rotate: false - xy: 2353, 289 + xy: 1753, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator-icon-editor rotate: false - xy: 2855, 389 + xy: 2855, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 diode-icon-editor rotate: false - xy: 2387, 289 + xy: 1787, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 disassembler-icon-editor rotate: false - xy: 2953, 389 + xy: 2953, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 distributor-icon-editor rotate: false - xy: 2111, 323 + xy: 651, 45 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-icon-editor rotate: false - xy: 2421, 289 + xy: 1821, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-editor rotate: false - xy: 2177, 323 + xy: 717, 45 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dunerocks-icon-editor rotate: false - xy: 2455, 289 + xy: 1855, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-editor rotate: false - xy: 2489, 289 + xy: 1889, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char2 rotate: false - xy: 2523, 289 + xy: 915, 77 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char3 rotate: false - xy: 2557, 289 + xy: 915, 43 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters2 rotate: false - xy: 2591, 289 + xy: 1923, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters3 rotate: false - xy: 2625, 289 + xy: 945, 189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water1 rotate: false - xy: 2727, 289 + xy: 1013, 189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water2 rotate: false - xy: 2761, 289 + xy: 945, 121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water3 rotate: false - xy: 2795, 289 + xy: 979, 155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water1 rotate: false - xy: 2829, 289 + xy: 1047, 189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water2 rotate: false - xy: 2863, 289 + xy: 979, 121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water3 rotate: false - xy: 2897, 289 + xy: 1013, 155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand2 rotate: false - xy: 2659, 289 + xy: 979, 189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand3 rotate: false - xy: 2693, 289 + xy: 945, 155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass1 rotate: false - xy: 2931, 289 + xy: 1013, 121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass-icon-editor rotate: false - xy: 2931, 289 + xy: 1013, 121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass2 rotate: false - xy: 2965, 289 + xy: 1047, 155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass3 rotate: false - xy: 2999, 289 + xy: 1047, 121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-holostone1 rotate: false - xy: 3033, 289 + xy: 949, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone-icon-editor rotate: false - xy: 3033, 289 + xy: 949, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-holostone2 rotate: false - xy: 3067, 289 + xy: 949, 53 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-holostone3 rotate: false - xy: 3101, 289 + xy: 983, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock1 rotate: false - xy: 3135, 289 + xy: 983, 53 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-editor rotate: false - xy: 3135, 289 + xy: 983, 53 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock2 rotate: false - xy: 3169, 289 + xy: 1017, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock3 rotate: false - xy: 3203, 289 + xy: 1017, 53 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow1 rotate: false - xy: 3339, 289 + xy: 3525, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-editor rotate: false - xy: 3339, 289 + xy: 3525, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow2 rotate: false - xy: 3373, 289 + xy: 3559, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow3 rotate: false - xy: 3407, 289 + xy: 3593, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice1 rotate: false - xy: 3237, 289 + xy: 1051, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-editor rotate: false - xy: 3237, 289 + xy: 1051, 87 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice2 rotate: false - xy: 3271, 289 + xy: 1051, 53 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice3 rotate: false - xy: 3305, 289 + xy: 3491, 317 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ignarock1 rotate: false - xy: 3441, 289 + xy: 1085, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock-icon-editor rotate: false - xy: 3441, 289 + xy: 1085, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ignarock2 rotate: false - xy: 3475, 289 + xy: 1119, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ignarock3 rotate: false - xy: 3509, 289 + xy: 1081, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock1 rotate: false - xy: 3543, 289 + xy: 1081, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock-icon-editor rotate: false - xy: 3543, 289 + xy: 1081, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock2 rotate: false - xy: 3577, 289 + xy: 1115, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock3 rotate: false - xy: 3611, 289 + xy: 1115, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor rotate: false - xy: 3645, 289 + xy: 1153, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-icon-editor rotate: false - xy: 3645, 289 + xy: 1153, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-2 rotate: false - xy: 3679, 289 + xy: 1149, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2-icon-editor rotate: false - xy: 3679, 289 + xy: 1149, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-3 rotate: false - xy: 3713, 289 + xy: 1187, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-icon-editor rotate: false - xy: 3713, 289 + xy: 1187, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-5 rotate: false - xy: 3747, 289 + xy: 1149, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-icon-editor rotate: false - xy: 3747, 289 + xy: 1149, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged1 rotate: false - xy: 3781, 289 + xy: 1183, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged-icon-editor rotate: false - xy: 3781, 289 + xy: 1183, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged2 rotate: false - xy: 3815, 289 + xy: 1221, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged3 rotate: false - xy: 3849, 289 + xy: 1183, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss1 rotate: false - xy: 3883, 289 + xy: 1217, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss-icon-editor rotate: false - xy: 3883, 289 + xy: 1217, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss2 rotate: false - xy: 3917, 289 + xy: 1255, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss3 rotate: false - xy: 3951, 289 + xy: 1217, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal1 rotate: false - xy: 3985, 289 + xy: 1251, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal2 rotate: false - xy: 163, 1 + xy: 1289, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal3 rotate: false - xy: 197, 1 + xy: 1323, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper1 rotate: false - xy: 231, 1 + xy: 1251, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper2 rotate: false - xy: 265, 1 + xy: 1285, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper3 rotate: false - xy: 299, 1 + xy: 1285, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead1 rotate: false - xy: 333, 1 + xy: 1319, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead2 rotate: false - xy: 367, 1 + xy: 1319, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead3 rotate: false - xy: 401, 1 + xy: 1353, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap1 rotate: false - xy: 435, 1 + xy: 1353, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap2 rotate: false - xy: 469, 1 + xy: 1387, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap3 rotate: false - xy: 503, 1 + xy: 1387, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium1 rotate: false - xy: 915, 65 + xy: 1421, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium2 rotate: false - xy: 915, 31 + xy: 1421, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium3 rotate: false - xy: 4025, 321 + xy: 1455, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium1 rotate: false - xy: 4059, 321 + xy: 1455, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium2 rotate: false - xy: 4019, 287 + xy: 1489, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium3 rotate: false - xy: 4053, 287 + xy: 1489, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles1 rotate: false - xy: 1837, 223 + xy: 1523, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles2 rotate: false - xy: 1871, 223 + xy: 1523, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles3 rotate: false - xy: 1905, 223 + xy: 1557, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-salt rotate: false - xy: 945, 177 + xy: 1557, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-editor rotate: false - xy: 945, 177 + xy: 1557, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water1 rotate: false - xy: 979, 143 + xy: 1625, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water2 rotate: false - xy: 1013, 177 + xy: 1659, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water3 rotate: false - xy: 979, 109 + xy: 1659, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand1 rotate: false - xy: 945, 143 + xy: 1591, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-editor rotate: false - xy: 945, 143 + xy: 1591, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand2 rotate: false - xy: 979, 177 + xy: 1591, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand3 rotate: false - xy: 945, 109 + xy: 1625, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale1 rotate: false - xy: 1013, 143 + xy: 1693, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-editor rotate: false - xy: 1013, 143 + xy: 1693, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale2 rotate: false - xy: 1047, 177 + xy: 1693, 137 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale3 rotate: false - xy: 1013, 109 + xy: 1085, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-slag rotate: false - xy: 1047, 143 + xy: 1085, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 slag-icon-editor rotate: false - xy: 1047, 143 + xy: 1085, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow1 rotate: false - xy: 1047, 109 + xy: 1119, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow2 rotate: false - xy: 949, 75 + xy: 1119, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow3 rotate: false - xy: 949, 41 + xy: 1153, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spawn rotate: false - xy: 983, 75 + xy: 1153, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss1 rotate: false - xy: 983, 41 + xy: 1187, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-editor rotate: false - xy: 983, 41 + xy: 1187, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss2 rotate: false - xy: 1017, 75 + xy: 1187, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss3 rotate: false - xy: 1017, 41 + xy: 1221, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone1 rotate: false - xy: 1051, 75 + xy: 1221, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-editor rotate: false - xy: 1051, 75 + xy: 1221, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone2 rotate: false - xy: 1051, 41 + xy: 1255, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone3 rotate: false - xy: 1423, 175 + xy: 1255, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tainted-water rotate: false - xy: 1457, 175 + xy: 1289, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-editor rotate: false - xy: 1457, 175 + xy: 1289, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tar rotate: false - xy: 1491, 175 + xy: 1289, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-editor rotate: false - xy: 1491, 175 + xy: 1289, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils1 rotate: false - xy: 1525, 183 + xy: 1323, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils2 rotate: false - xy: 1085, 193 + xy: 1323, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils3 rotate: false - xy: 1119, 193 + xy: 1357, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-water rotate: false - xy: 1081, 159 + xy: 1357, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-editor rotate: false - xy: 1081, 159 + xy: 1357, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 exponential-reconstructor-icon-editor rotate: false - xy: 935, 261 + xy: 935, 273 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 force-projector-icon-editor rotate: false - xy: 3051, 389 + xy: 3051, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 fuse-icon-editor rotate: false - xy: 3149, 389 + xy: 3149, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 graphite-press-icon-editor rotate: false - xy: 2243, 323 + xy: 783, 45 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ground-factory-icon-editor rotate: false - xy: 3247, 389 + xy: 3247, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 hail-icon-editor rotate: false - xy: 1081, 125 + xy: 1391, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-icon-editor rotate: false - xy: 1115, 159 + xy: 1391, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-icon-editor rotate: false - xy: 1115, 125 + xy: 1425, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 impact-reactor-icon-editor rotate: false - xy: 293, 35 + xy: 293, 47 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 incinerator-icon-editor rotate: false - xy: 1153, 193 + xy: 1425, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 inverted-sorter-icon-editor rotate: false - xy: 1149, 159 + xy: 1459, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-editor rotate: false - xy: 1187, 193 + xy: 1459, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-editor rotate: false - xy: 1149, 125 + xy: 1493, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-editor rotate: false - xy: 1183, 159 + xy: 1493, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-editor rotate: false - xy: 2309, 323 + xy: 849, 45 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-editor rotate: false - xy: 2375, 323 + xy: 1357, 205 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 laser-drill-icon-editor rotate: false - xy: 3345, 389 + xy: 3345, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-icon-editor rotate: false - xy: 3443, 389 + xy: 3443, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large-icon-editor rotate: false - xy: 1453, 357 + xy: 1453, 369 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 liquid-junction-icon-editor rotate: false - xy: 1221, 193 + xy: 1527, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-editor rotate: false - xy: 1183, 125 + xy: 1527, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-editor rotate: false - xy: 1217, 159 + xy: 1561, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-icon-editor rotate: false - xy: 3541, 389 + xy: 3541, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-void-icon-editor rotate: false - xy: 1255, 193 + xy: 1561, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 logic-processor-icon-editor rotate: false - xy: 3639, 389 - size: 96, 96 - orig: 96, 96 + xy: 1423, 205 + size: 64, 64 + orig: 64, 64 offset: 0, 0 index: -1 mass-conveyor-icon-editor rotate: false - xy: 3737, 389 + xy: 3639, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mass-driver-icon-editor rotate: false - xy: 3835, 389 + xy: 3737, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill-icon-editor rotate: false - xy: 2441, 323 + xy: 1489, 205 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-pump-icon-editor rotate: false - xy: 1217, 125 + xy: 1595, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-icon-editor rotate: false - xy: 423, 35 + xy: 423, 47 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 melter-icon-editor rotate: false - xy: 1251, 159 + xy: 1595, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-editor rotate: false - xy: 2507, 323 + xy: 1555, 205 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender-icon-editor rotate: false - xy: 1289, 193 + xy: 1629, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message-icon-editor rotate: false - xy: 1323, 193 + xy: 1629, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-editor rotate: false - xy: 3933, 389 + xy: 3835, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 multiplicative-reconstructor-icon-editor rotate: false - xy: 1161, 325 + xy: 1161, 337 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 naval-factory-icon-editor rotate: false - xy: 553, 67 + xy: 3933, 401 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-icon-editor rotate: false - xy: 651, 99 + xy: 553, 79 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome-icon-editor rotate: false - xy: 749, 99 + xy: 651, 111 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-projector-icon-editor rotate: false - xy: 2573, 323 + xy: 1621, 205 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overflow-gate-icon-editor rotate: false - xy: 1251, 125 + xy: 1663, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 parallax-icon-editor rotate: false - xy: 2639, 323 + xy: 1687, 205 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 payload-router-icon-editor rotate: false - xy: 847, 99 + xy: 749, 111 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 pebbles-icon-editor rotate: false - xy: 1285, 159 + xy: 1663, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-editor rotate: false - xy: 1285, 125 + xy: 1697, 103 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-editor rotate: false - xy: 1319, 159 + xy: 1697, 69 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-editor rotate: false - xy: 1319, 125 + xy: 1085, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-editor rotate: false - xy: 2705, 323 + xy: 1753, 237 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-editor rotate: false - xy: 2771, 323 + xy: 1819, 237 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pine-icon-editor rotate: false - xy: 935, 211 + xy: 935, 223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 plastanium-compressor-icon-editor rotate: false - xy: 2837, 323 + xy: 1885, 237 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-conveyor-icon-editor rotate: false - xy: 1353, 159 + xy: 1119, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-icon-editor rotate: false - xy: 1353, 125 + xy: 1153, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large-icon-editor rotate: false - xy: 2903, 323 + xy: 1973, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plated-conduit-icon-editor rotate: false - xy: 1387, 159 + xy: 1187, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-editor rotate: false - xy: 2969, 323 + xy: 2039, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-node-icon-editor rotate: false - xy: 1387, 125 + xy: 1221, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-editor rotate: false - xy: 3035, 323 + xy: 2105, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source-icon-editor rotate: false - xy: 1421, 141 + xy: 1255, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-editor rotate: false - xy: 1455, 141 + xy: 1289, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-editor rotate: false - xy: 1489, 141 + xy: 1323, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-editor rotate: false - xy: 1085, 91 + xy: 1357, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-editor rotate: false - xy: 3101, 323 + xy: 2171, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-icon-editor rotate: false - xy: 1085, 57 + xy: 1391, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 resupply-point-icon-editor rotate: false - xy: 3167, 323 + xy: 2237, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ripple-icon-editor rotate: false - xy: 1161, 227 + xy: 847, 111 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rock-icon-editor rotate: false - xy: 1423, 209 + xy: 3491, 351 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-icon-editor rotate: false - xy: 1119, 91 + xy: 1425, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-icon-editor rotate: false - xy: 3233, 323 + xy: 2303, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 router-icon-editor rotate: false - xy: 1119, 57 + xy: 1459, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-editor rotate: false - xy: 3299, 323 + xy: 2369, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 saltrocks-icon-editor rotate: false - xy: 1153, 91 + xy: 1493, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-editor rotate: false - xy: 3365, 323 + xy: 2435, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sand-boulder-icon-editor rotate: false - xy: 1153, 57 + xy: 1527, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-editor rotate: false - xy: 1187, 91 + xy: 1561, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-icon-editor rotate: false - xy: 1187, 57 + xy: 1595, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-editor rotate: false - xy: 3431, 323 + xy: 2501, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-icon-editor rotate: false - xy: 1221, 91 + xy: 1629, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-editor rotate: false - xy: 1583, 357 + xy: 1583, 369 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-huge-icon-editor rotate: false - xy: 1259, 227 + xy: 1161, 239 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-icon-editor rotate: false - xy: 1221, 57 + xy: 1663, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-editor rotate: false - xy: 3497, 323 + xy: 2567, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 segment-icon-editor rotate: false - xy: 3563, 323 + xy: 2633, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-editor rotate: false - xy: 3629, 323 + xy: 2699, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shale-boulder-icon-editor rotate: false - xy: 1255, 91 + xy: 1697, 35 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-editor rotate: false - xy: 1255, 57 + xy: 949, 19 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-editor rotate: false - xy: 1289, 91 + xy: 983, 19 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-editor rotate: false - xy: 1289, 57 + xy: 1017, 19 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-crucible-icon-editor rotate: false - xy: 1357, 259 + xy: 1259, 239 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-smelter-icon-editor rotate: false - xy: 3695, 323 + xy: 2765, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 snow-icon-editor rotate: false - xy: 1323, 91 + xy: 1051, 19 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-editor rotate: false - xy: 985, 211 + xy: 985, 223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock-icon-editor rotate: false - xy: 1473, 209 + xy: 3541, 351 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-icon-editor rotate: false - xy: 1323, 57 + xy: 1085, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-editor rotate: false - xy: 1357, 91 + xy: 1119, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-editor rotate: false - xy: 1455, 259 + xy: 1357, 271 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 sorter-icon-editor rotate: false - xy: 1357, 57 + xy: 1153, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-editor rotate: false - xy: 1391, 91 + xy: 1187, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-editor rotate: false - xy: 1713, 357 + xy: 1713, 369 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spore-cluster-icon-editor rotate: false - xy: 1523, 217 + xy: 3591, 359 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-pine-icon-editor rotate: false - xy: 1035, 211 + xy: 1035, 223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-editor rotate: false - xy: 3761, 323 + xy: 2831, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sporerocks-icon-editor rotate: false - xy: 1391, 57 + xy: 1221, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-editor rotate: false - xy: 3827, 323 + xy: 2897, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-wall-icon-editor rotate: false - xy: 1425, 107 + xy: 1255, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-editor rotate: false - xy: 3893, 323 + xy: 2963, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-editor rotate: false - xy: 3959, 323 + xy: 3029, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tendrils-icon-editor rotate: false - xy: 1425, 73 + xy: 1289, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tetrative-reconstructor-icon-editor rotate: false - xy: 645, 197 + xy: 645, 209 size: 288, 288 orig: 288, 288 offset: 0, 0 index: -1 thermal-generator-icon-editor rotate: false - xy: 553, 1 + xy: 3095, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump-icon-editor rotate: false - xy: 1553, 259 + xy: 1455, 271 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-icon-editor rotate: false - xy: 1651, 259 + xy: 1553, 271 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-wall-icon-editor rotate: false - xy: 1459, 107 + xy: 1323, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-editor rotate: false - xy: 651, 33 + xy: 3161, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thruster-icon-editor rotate: false - xy: 1843, 357 + xy: 1843, 369 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 titanium-conveyor-icon-editor rotate: false - xy: 1459, 73 + xy: 1357, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-editor rotate: false - xy: 1493, 107 + xy: 1391, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-editor rotate: false - xy: 717, 33 + xy: 3227, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-icon-editor rotate: false - xy: 783, 33 + xy: 3293, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 underflow-gate-icon-editor rotate: false - xy: 1493, 73 + xy: 1425, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-editor rotate: false - xy: 1085, 23 + xy: 1459, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-editor rotate: false - xy: 1749, 259 + xy: 1651, 271 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 water-extractor-icon-editor rotate: false - xy: 849, 33 + xy: 3359, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-editor rotate: false - xy: 1357, 193 + xy: 3425, 335 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 white-tree-dead-icon-editor rotate: false - xy: 1, 165 + xy: 1, 177 size: 320, 320 orig: 320, 320 offset: 0, 0 index: -1 white-tree-icon-editor rotate: false - xy: 323, 165 + xy: 323, 177 size: 320, 320 orig: 320, 320 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 034c214c25..5984adc0b0 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/assets/sprites/sprites2.png b/core/assets/sprites/sprites2.png index 0894d8afbb..edfea1f37b 100644 Binary files a/core/assets/sprites/sprites2.png and b/core/assets/sprites/sprites2.png differ diff --git a/core/assets/sprites/sprites4.png b/core/assets/sprites/sprites4.png index 3b79281bc3..ee6bb947ec 100644 Binary files a/core/assets/sprites/sprites4.png and b/core/assets/sprites/sprites4.png differ diff --git a/core/assets/sprites/sprites5.png b/core/assets/sprites/sprites5.png index cf4d7f133a..602d57005e 100644 Binary files a/core/assets/sprites/sprites5.png and b/core/assets/sprites/sprites5.png differ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 880f697a25..adf88a4235 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1890,7 +1890,7 @@ public class Blocks implements ContentList{ logicProcessor = new LogicProcessor("logic-processor"){{ requirements(Category.effect, BuildVisibility.debugOnly, with(Items.copper, 200, Items.lead, 100)); - size = 3; + size = 2; alwaysUnlocked = true; }}; diff --git a/core/src/mindustry/logic/LAssembler.java b/core/src/mindustry/logic/LAssembler.java index 471cf8770e..715401acc3 100644 --- a/core/src/mindustry/logic/LAssembler.java +++ b/core/src/mindustry/logic/LAssembler.java @@ -1,12 +1,14 @@ package mindustry.logic; +import arc.func.*; import arc.struct.*; -import mindustry.io.*; -import mindustry.logic.LCanvas.*; +import mindustry.gen.*; import mindustry.logic.LExecutor.*; /** "Compiles" a sequence of statements into instructions. */ public class LAssembler{ + public static ObjectMap> customParsers = new ObjectMap<>(); + private transient int lastVar; /** Maps names to variable IDs. */ ObjectMap vars = new ObjectMap<>(); @@ -20,35 +22,47 @@ public class LAssembler{ putConst("null", null); } - public static LAssembler assemble(Seq seq){ - LAssembler out = new LAssembler(); - - seq.each(s -> s.st.saveUI()); - out.instructions = seq.map(s -> s.st.build(out)).toArray(LInstruction.class); - - return out; - } - - public static String toJson(Seq seq){ - seq.each(s -> s.st.saveUI()); - LStatement[] statements = seq.map(s -> s.st).toArray(LStatement.class); - - return JsonIO.write(statements); - } - - //TODO this is awful and confusing - public static LAssembler fromJson(String json){ + public static LAssembler assemble(String data){ LAssembler asm = new LAssembler(); - LStatement[] statements = JsonIO.read(LStatement[].class, json); - for(LStatement s : statements){ - s.setupUI(); - } - asm.instructions = Seq.with(statements).map(l -> l.build(asm)).toArray(LInstruction.class); + Seq st = read(data); + asm.instructions = st.map(l -> l.build(asm)).toArray(LInstruction.class); return asm; } + public static String write(Seq statements){ + StringBuilder out = new StringBuilder(); + for(LStatement s : statements){ + s.write(out); + out.append("\n"); + } + + return out.toString(); + } + + public static Seq read(String data){ + Seq statements = new Seq<>(); + String[] lines = data.split("[;\n]+"); + for(String line : lines){ + //comments + if(line.startsWith("#")) continue; + + String[] tokens = line.split(" "); + LStatement st = LogicIO.read(tokens); + if(st != null){ + statements.add(st); + }else{ + //attempt parsing using custom parser if a match is found - this is for mods + String first = tokens[0]; + if(customParsers.containsKey(first)){ + statements.add(customParsers.get(first).get(tokens)); + } + } + } + return statements; + } + /** @return a variable ID by name. * This may be a constant variable referring to a number or object. */ public int var(String symbol){ diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index 3824dc8cc8..cd903e8e78 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -16,9 +16,9 @@ import arc.util.*; import arc.util.ArcAnnotate.*; import mindustry.gen.*; import mindustry.graphics.*; -import mindustry.io.*; import mindustry.logic.LStatements.*; import mindustry.ui.*; +import mindustry.ui.dialogs.*; public class LCanvas extends Table{ private static final Color backgroundCol = Pal.darkMetal.cpy().mul(0.1f), gridCol = Pal.darkMetal.cpy().mul(0.5f); @@ -35,8 +35,30 @@ public class LCanvas extends Table{ pane(statements).grow().get().setClip(false); + row(); + + button("@add", Icon.add, Styles.cleart, () -> { + BaseDialog dialog = new BaseDialog("@add"); + dialog.cont.pane(t -> { + t.background(Tex.button); + for(Prov prov : LogicIO.allStatements){ + LStatement example = prov.get(); + t.button(example.name(), Styles.cleart, () -> { + add(prov.get()); + dialog.hide(); + }).size(200f, 50f); + t.row(); + } + }); + dialog.addCloseButton(); + dialog.show(); + }).height(50f).left().width(400f).marginLeft(10f); + add(new PrintStatement()); - add(new AssignStatement()); + add(new SetStatement()); + add(new JumpStatement()); + add(new EnableStatement()); + add(new OpStatement()); } private void drawGrid(){ @@ -70,18 +92,26 @@ public class LCanvas extends Table{ } String save(){ - return LAssembler.toJson(statements.getChildren().as()); + Seq st = statements.getChildren().as().map(s -> s.st); + st.each(LStatement::saveUI); + + return LAssembler.write(st); } - void load(String json){ + void load(String asm){ statements.clearChildren(); - LStatement[] statements = JsonIO.read(LStatement[].class, json); - for(LStatement st : statements){ - add(st); - } + try{ + Seq statements = LAssembler.read(asm); + for(LStatement st : statements){ + add(st); + } - for(LStatement st : statements){ - st.setupUI(); + for(LStatement st : statements){ + st.setupUI(); + } + }catch(Exception e){ + //ignore errors reading asm + e.printStackTrace(); } this.statements.layout(); @@ -96,7 +126,7 @@ public class LCanvas extends Table{ public class DragLayout extends WidgetGroup{ float margin = 4f; - float space = 10f, width = 400f; + float space = 10f, width = 400f, prefWidth, prefHeight; Seq seq = new Seq<>(); int insertPosition = 0; @@ -105,6 +135,8 @@ public class LCanvas extends Table{ float cy = 0; seq.clear(); + prefWidth = width; + //layout everything normally for(int i = 0; i < getChildren().size; i++){ Element e = getChildren().get(i); @@ -143,10 +175,22 @@ public class LCanvas extends Table{ } } + prefHeight = cy; + } + + @Override + public float getPrefWidth(){ + return prefWidth; + } + + @Override + public float getPrefHeight(){ + return prefHeight; } @Override public void draw(){ + Draw.alpha(parentAlpha); //draw selection box indicating placement position if(dragging != null && insertPosition <= seq.size){ @@ -260,9 +304,9 @@ public class LCanvas extends Table{ @Override public void draw(){ float pad = 5f; - Fill.dropShadow(x + width/2f, y + height/2f, width + pad, height + pad, 10f, 0.9f); + Fill.dropShadow(x + width/2f, y + height/2f, width + pad, height + pad, 10f, 0.9f * parentAlpha); - Draw.color(0, 0, 0, 0.3f); + Draw.color(0, 0, 0, 0.3f * parentAlpha); Fill.crect(x, y, width, height); Draw.reset(); @@ -323,24 +367,31 @@ public class LCanvas extends Table{ public void draw(){ super.draw(); - - postDraw.add(() -> { Element hover = to.get() == null && selecting ? hovered() : to.get(); float tx = 0, ty = 0; boolean draw = false; //capture coordinates for use in lambda - float rx = x, ry = y; + float rx = x + translation.x, ry = y + translation.y; + Element p = parent; while(p != null){ - rx += p.x; - ry += p.y; + rx += p.x + p.translation.x; + ry += p.y + p.translation.y; p = p.parent; } if(hover != null){ tx = hover.getX(Align.right) + hover.translation.x; ty = hover.getY(Align.right) + hover.translation.y; + + Element op = hover.parent; + while(op != null){ + tx += op.x + op.translation.x; + ty += op.y + op.translation.y; + op = op.parent; + } + draw = true; }else if(selecting){ tx = rx + mx; diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 0f571a9629..8064edafca 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -16,7 +16,7 @@ public class LExecutor{ return instructions != null && vars != null && instructions.length > 0; } - /** Runs all the instructions at once. Debugging only. */ + /** Runs all the instructions at once. Debugging only! */ public void runAll(){ counter = 0; @@ -25,6 +25,19 @@ public class LExecutor{ } } + public void runOnce(){ + //reset to start + if(counter >= instructions.length) counter = 0; + + if(counter < instructions.length){ + instructions[counter++].run(this); + } + } + + public void load(Object context, String data){ + load(context,LAssembler.assemble(data)); + } + public void load(Object context, LAssembler builder){ builder.putConst("this", context); @@ -105,15 +118,15 @@ public class LExecutor{ } /** Enables/disables a building. */ - public static class ToggleI implements LInstruction{ + public static class EnableI implements LInstruction{ public int target, value; - public ToggleI(int target, int value){ + public EnableI(int target, int value){ this.target = target; this.value = value; } - ToggleI(){} + EnableI(){} @Override public void run(LExecutor exec){ @@ -131,15 +144,15 @@ public class LExecutor{ } } - public static class AssignI implements LInstruction{ + public static class SetI implements LInstruction{ public int from, to; - public AssignI(int from, int to){ + public SetI(int from, int to){ this.from = from; this.to = to; } - AssignI(){} + SetI(){} @Override public void run(LExecutor exec){ @@ -219,17 +232,17 @@ public class LExecutor{ } } - public static class FetchBuildI implements LInstruction{ + public static class GetBuildI implements LInstruction{ public int dest; public int x, y; - public FetchBuildI(int dest, int x, int y){ + public GetBuildI(int dest, int x, int y){ this.dest = dest; this.x = x; this.y = y; } - FetchBuildI(){} + GetBuildI(){} @Override public void run(LExecutor exec){ diff --git a/core/src/mindustry/logic/LStatement.java b/core/src/mindustry/logic/LStatement.java index 32ebb7806f..394c31760f 100644 --- a/core/src/mindustry/logic/LStatement.java +++ b/core/src/mindustry/logic/LStatement.java @@ -2,10 +2,13 @@ package mindustry.logic; import arc.scene.ui.layout.*; import arc.util.ArcAnnotate.*; +import mindustry.gen.*; import mindustry.logic.LCanvas.*; import mindustry.logic.LExecutor.*; -/** A statement is an intermediate representation of an instruction, to be used in UI. */ +/** + * A statement is an intermediate representation of an instruction, to be used mostly in UI. + * Contains all relevant variable information. */ public abstract class LStatement{ public transient @Nullable StatementElem elem; @@ -13,6 +16,10 @@ public abstract class LStatement{ public abstract LCategory category(); public abstract LInstruction build(LAssembler builder); + public void write(StringBuilder builder){ + LogicIO.write(this,builder); + } + public void setupUI(){ } diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 8d484145f8..2b536712e4 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -3,13 +3,15 @@ package mindustry.logic; import arc.graphics.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; +import mindustry.annotations.Annotations.*; import mindustry.logic.LExecutor.*; import mindustry.logic.LCanvas.*; import mindustry.ui.*; public class LStatements{ - public static class AssignStatement extends LStatement{ + @RegisterStatement("set") + public static class SetStatement extends LStatement{ public String to = "result"; public String from = "0"; @@ -31,12 +33,12 @@ public class LStatements{ @Override public LInstruction build(LAssembler builder){ - //TODO internal consts need to start with ___ and not be assignable to - return new LExecutor.AssignI(builder.var(from), builder.var(to)); + return new SetI(builder.var(from), builder.var(to)); } } - public static class ToggleStatement extends LStatement{ + @RegisterStatement("enable") + public static class EnableStatement extends LStatement{ public String target = "result"; public String value = "0"; @@ -57,11 +59,12 @@ public class LStatements{ } @Override - public LExecutor.LInstruction build(LAssembler builder){ - return new LExecutor.ToggleI(builder.var(target), builder.var(value)); + public LInstruction build(LAssembler builder){ + return new EnableI(builder.var(target), builder.var(value)); } } + @RegisterStatement("op") public static class OpStatement extends LStatement{ public BinaryOp op = BinaryOp.add; public String a = "a", b = "b", dest = "result"; @@ -98,6 +101,7 @@ public class LStatements{ } } + @RegisterStatement("end") public static class EndStatement extends LStatement{ @Override public void build(Table table){ @@ -115,6 +119,7 @@ public class LStatements{ } } + @RegisterStatement("print") public static class PrintStatement extends LStatement{ public String value = "\"frog\""; @@ -135,6 +140,7 @@ public class LStatements{ } } + @RegisterStatement("jump") public static class JumpStatement extends LStatement{ public transient StatementElem dest; @@ -176,7 +182,8 @@ public class LStatements{ } } - public static class FetchBuildStatement extends LStatement{ + @RegisterStatement("getbuild") + public static class getBuildStatement extends LStatement{ public String x = "0", y = "0", dest = "result"; @Override @@ -197,7 +204,7 @@ public class LStatements{ @Override public LInstruction build(LAssembler builder){ - return new FetchBuildI(builder.var(dest), builder.var(x), builder.var(y)); + return new GetBuildI(builder.var(dest), builder.var(x), builder.var(y)); } @Override diff --git a/core/src/mindustry/world/blocks/logic/LogicProcessor.java b/core/src/mindustry/world/blocks/logic/LogicProcessor.java index f12a100fdc..c871d94715 100644 --- a/core/src/mindustry/world/blocks/logic/LogicProcessor.java +++ b/core/src/mindustry/world/blocks/logic/LogicProcessor.java @@ -16,20 +16,28 @@ public class LogicProcessor extends Block{ config(String.class, (LogicEntity entity, String code) -> { if(code != null){ entity.code = code; - entity.executor.load(entity, LAssembler.fromJson(code)); + + try{ + entity.executor.load(entity, code); + }catch(Exception e){ + e.printStackTrace(); + + //handle malformed code and replace it with nothing + entity.executor.load(entity, ""); + } } }); } public class LogicEntity extends Building{ /** logic "source code" as list of json statements */ - String code = "[]"; + String code = ""; LExecutor executor = new LExecutor(); @Override public void updateTile(){ if(executor.initialized()){ - executor.runAll(); + executor.runOnce(); } } @@ -51,7 +59,14 @@ public class LogicProcessor extends Block{ super.read(read, revision); code = read.str(); - executor.load(this, LAssembler.fromJson(code)); + try{ + executor.load(this, code); + }catch(Exception e){ + e.printStackTrace(); + + //handle malformed code and ignore it + executor = new LExecutor(); + } } } }