diff --git a/.gitignore b/.gitignore index 10fca2d7f0..e9f029335a 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ config/ changelog *.gif /core/assets/saves/ +/out/ version.properties diff --git a/android/src/mindustry/android/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java index 438d133707..6c0a695000 100644 --- a/android/src/mindustry/android/AndroidLauncher.java +++ b/android/src/mindustry/android/AndroidLauncher.java @@ -19,6 +19,7 @@ import arc.util.serialization.*; import mindustry.*; import mindustry.game.Saves.*; import mindustry.io.*; +import mindustry.net.*; import mindustry.ui.dialogs.*; import java.io.*; @@ -145,9 +146,33 @@ public class AndroidLauncher extends AndroidApplication{ useImmersiveMode = true; depth = 0; hideStatusBar = true; - //errorHandler = ModCrashHandler::handle; + errorHandler = CrashSender::log; }}); checkFiles(getIntent()); + + //new external folder + Fi data = Core.files.absolute(getContext().getExternalFilesDir(null).getAbsolutePath()); + + //moved to internal storage if there's no file indicating that it moved + if(!Core.files.local("files_moved").exists()){ + Log.info("Moving files to external storage..."); + + try{ + //current local storage folder + Fi src = Core.files.absolute(Core.files.getLocalStoragePath()); + for(Fi fi : src.list()){ + fi.copyTo(data.child(fi.name())); + } + //create marker + Core.files.local("files_moved").writeString("files moved to " + data); + Log.info("Files moved."); + }catch(Throwable t){ + Log.err("Failed to move files!"); + t.printStackTrace(); + } + }else{ + Core.settings.setDataDirectory(data); + } } @Override diff --git a/annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java index 3ccb3d0729..0ef33f671d 100644 --- a/annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java +++ b/annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java @@ -1,5 +1,9 @@ package mindustry.annotations; +import arc.files.*; +import arc.scene.style.*; +import arc.struct.*; +import arc.util.serialization.*; import com.squareup.javapoet.*; import mindustry.annotations.Annotations.*; @@ -8,96 +12,71 @@ import javax.lang.model.*; import javax.lang.model.element.*; import javax.tools.Diagnostic.*; import javax.tools.*; -import java.nio.file.*; import java.util.*; -@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedAnnotationTypes("mindustry.annotations.Annotations.StyleDefaults") -public class AssetsAnnotationProcessor extends AbstractProcessor{ - /** Name of the base package to put all the generated classes. */ - private static final String packageName = "mindustry.gen"; +public class AssetsAnnotationProcessor extends BaseProcessor{ private String path; - private int round; @Override - public synchronized void init(ProcessingEnvironment processingEnv){ - super.init(processingEnv); - //put all relevant utils into utils class - Utils.typeUtils = processingEnv.getTypeUtils(); - Utils.elementUtils = processingEnv.getElementUtils(); - Utils.filer = processingEnv.getFiler(); - Utils.messager = processingEnv.getMessager(); - } + public void process(RoundEnvironment env) throws Exception{ + path = Fi.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no") + .toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length())) + .parent().parent().parent().parent().parent().parent().toString(); + path = path.replace("%20", " "); - @Override - public boolean process(Set annotations, RoundEnvironment roundEnv){ - if(round++ != 0) return false; //only process 1 round - - try{ - path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no") - .toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length())) - .getParent().getParent().getParent().getParent().getParent().getParent().toString(); - path = path.replace("%20", " "); - - processSounds("Sounds", path + "/assets/sounds", "arc.audio.Sound"); - processSounds("Musics", path + "/assets/music", "arc.audio.Music"); - processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class)); - - return true; - }catch(Exception e){ - e.printStackTrace(); - throw new RuntimeException(e); - } + processSounds("Sounds", path + "/assets/sounds", "arc.audio.Sound"); + processSounds("Musics", path + "/assets/music", "arc.audio.Music"); + processUI(env.getElementsAnnotatedWith(StyleDefaults.class)); } void processUI(Set elements) throws Exception{ - String[] iconSizes = {"small", "smaller", "tiny"}; - TypeSpec.Builder type = TypeSpec.classBuilder("Tex").addModifiers(Modifier.PUBLIC); TypeSpec.Builder ictype = TypeSpec.classBuilder("Icon").addModifiers(Modifier.PUBLIC); + TypeSpec.Builder ichtype = TypeSpec.classBuilder("Iconc").addModifiers(Modifier.PUBLIC); MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); MethodSpec.Builder loadStyles = MethodSpec.methodBuilder("loadStyles").addModifiers(Modifier.PUBLIC, Modifier.STATIC); MethodSpec.Builder icload = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); String resources = path + "/assets-raw/sprites/ui"; - Files.walk(Paths.get(resources)).forEach(p -> { - if(Files.isDirectory(p) || p.getFileName().toString().equals(".DS_Store")) return; + Jval icons = Jval.read(Fi.get(path + "/assets-raw/fontgen/config.json").readString()); - String filename = p.getFileName().toString(); + ictype.addField(FieldSpec.builder(ParameterizedTypeName.get(ObjectMap.class, String.class, TextureRegionDrawable.class), + "icons", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("new ObjectMap<>()").build()); + + for(Jval val : icons.get("glyphs").asArray()){ + String name = capitalize(val.getString("css", "")); + int code = val.getInt("code", 0); + ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("(char)" + code).build()); + + ictype.addField(TextureRegionDrawable.class, name + "Small", Modifier.PUBLIC, Modifier.STATIC); + icload.addStatement(name + "Small = mindustry.ui.Fonts.getGlyph(mindustry.ui.Fonts.def, (char)" + code + ")"); + + ictype.addField(TextureRegionDrawable.class, name, Modifier.PUBLIC, Modifier.STATIC); + icload.addStatement(name + " = mindustry.ui.Fonts.getGlyph(mindustry.ui.Fonts.icon, (char)" + code + ")"); + + icload.addStatement("icons.put($S, " + name + ")", name); + icload.addStatement("icons.put($S, " + name + "Small)", name + "Small"); + } + + Fi.get(resources).walk(p -> { + if(!p.extEquals("png")) return; + + String filename = p.name(); filename = filename.substring(0, filename.indexOf(".")); - ArrayList names = new ArrayList<>(); - names.add(""); - if(filename.contains("icon")){ - names.addAll(Arrays.asList(iconSizes)); - } + String sfilen = filename; + String dtype = p.name().endsWith(".9.png") ? "arc.scene.style.NinePatchDrawable" : "arc.scene.style.TextureRegionDrawable"; - for(String suffix : names){ - suffix = suffix.isEmpty() ? "" : "-" + suffix; + String varname = capitalize(sfilen); - String sfilen = filename + suffix; - String dtype = p.getFileName().toString().endsWith(".9.png") ? "arc.scene.style.NinePatchDrawable" : "arc.scene.style.TextureRegionDrawable"; + if(SourceVersion.isKeyword(varname)) varname += "s"; - String varname = capitalize(sfilen); - TypeSpec.Builder ttype = type; - MethodSpec.Builder tload = load; - if(varname.startsWith("icon")){ - varname = varname.substring("icon".length()); - varname = Character.toLowerCase(varname.charAt(0)) + varname.substring(1); - ttype = ictype; - tload = icload; - if(SourceVersion.isKeyword(varname)) varname += "i"; - } - - if(SourceVersion.isKeyword(varname)) varname += "s"; - - ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC); - tload.addStatement(varname + " = ("+dtype+")arc.Core.atlas.drawable($S)", sfilen); - } + type.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC); + load.addStatement(varname + " = ("+dtype+")arc.Core.atlas.drawable($S)", sfilen); }); for(Element elem : elements){ - TypeElement t = (TypeElement)elem; - t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> { + Array.with(((TypeElement)elem).getEnclosedElements()).each(e -> e.getKind() == ElementKind.FIELD, field -> { String fname = field.getSimpleName().toString(); if(fname.startsWith("default")){ loadStyles.addStatement("arc.Core.scene.addStyle(" + field.asType().toString() + ".class, mindustry.ui.Styles." + fname + ")"); @@ -106,6 +85,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ } ictype.addMethod(icload.build()); + JavaFile.builder(packageName, ichtype.build()).build().writeTo(Utils.filer); JavaFile.builder(packageName, ictype.build()).build().writeTo(Utils.filer); type.addMethod(load.build()); @@ -119,10 +99,9 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); HashSet names = new HashSet<>(); - Files.list(Paths.get(path)).forEach(p -> { - String fname = p.getFileName().toString(); - String name = p.getFileName().toString(); - name = name.substring(0, name.indexOf(".")); + Fi.get(path).walk(p -> { + String fname = p.name(); + String name = p.nameWithoutExtension(); if(names.contains(name)){ Utils.messager.printMessage(Kind.ERROR, "Duplicate file name: " + p.toString() + "!"); diff --git a/annotations/src/main/java/mindustry/annotations/BaseProcessor.java b/annotations/src/main/java/mindustry/annotations/BaseProcessor.java new file mode 100644 index 0000000000..f9a83c80fd --- /dev/null +++ b/annotations/src/main/java/mindustry/annotations/BaseProcessor.java @@ -0,0 +1,43 @@ +package mindustry.annotations; + +import javax.annotation.processing.*; +import javax.lang.model.*; +import javax.lang.model.element.*; +import java.util.*; + +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public abstract class BaseProcessor extends AbstractProcessor{ + /** Name of the base package to put all the generated classes. */ + public static final String packageName = "mindustry.gen"; + + private int round; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv){ + super.init(processingEnv); + //put all relevant utils into utils class + Utils.typeUtils = processingEnv.getTypeUtils(); + Utils.elementUtils = processingEnv.getElementUtils(); + Utils.filer = processingEnv.getFiler(); + Utils.messager = processingEnv.getMessager(); + } + + @Override + public final boolean process(Set annotations, RoundEnvironment roundEnv){ + if(round++ != 0) return false; //only process 1 round + try{ + process(roundEnv); + }catch(Exception e){ + e.printStackTrace(); + throw new RuntimeException(e); + } + return true; + } + + @Override + public SourceVersion getSupportedSourceVersion(){ + return SourceVersion.RELEASE_8; + } + + public abstract void process(RoundEnvironment env) throws Exception; +} diff --git a/annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java index af66fc3b11..16ebcc9ead 100644 --- a/annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java +++ b/annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java @@ -14,108 +14,86 @@ import java.lang.reflect.*; import java.util.*; import java.util.zip.*; -@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedAnnotationTypes("mindustry.annotations.Annotations.Serialize") -public class SerializeAnnotationProcessor extends AbstractProcessor{ +public class SerializeAnnotationProcessor extends BaseProcessor{ /** Target class name. */ private static final String className = "Serialization"; /** Name of the base package to put all the generated classes. */ - private static final String packageName = "mindustry.gen"; - - private int round; + private static final String data = "eJztV0tvGzcQvvfQ3zDRIeDCKhsbQVDUsgP5UViH2IHl9BIEBsUdSYxX3C3Jlawm+XH9Z53hUg/bkuOmOfRQwfDuDme++ebBWe6PfwU3/wTwUU2VLJQdSYfDAnWQvxkschjCAUyMzWtPetJikF2nzzG8deXU5OjkW6VvMPTRGVWYP0mgC+W9HGE4Qbp1mEcg0Zo5E9C1sn2AofQYulqj92ZQoAiuxqVc2Loo2iCU03JYWy2PS+v3OndJNF7bDW1rSnk0D3hUD4foDjNRtWGQwU+HQIGZoajAWB+U1VgOYROOZx+Wgm4eMzJ7ghpoyo14Cl5FsQ2I4PsPcE2/XXpssk7kOMw6mEJe9KXxXZu70uTM4Jjz2Hl9CJ79xCc5LN25mqBoqUZPVosy9DEEY0eebnTtMKZ5iaDddgRd2oA2MGO+XqIvi2mq0xJAqQ0ARHzA8dncywWar91QaZwanMkUS7eqCqNVMKW9x+qRuO6wug3R8GGLvsEwLnMYMZBS6z3XrIgWidYhLgYfyQ50IyKrkZbGTssbjHU4Lh1KVVWbvaUNEf8fUFXYX+rt7vnJ5UXv5Lp3Et30g6NagDK55RZpHrNoyUaxwx+PyA+XLtZCaYBabSpoOzlptttX0uM8oen7aJsqnhLkkixmyPlFjlLe1kL0a/ER6YVis4UXKO2YCbYyNkCBnBQv6ToKY5Gt9kauAveZxVkjYc2fYe8DT4bSCTY2tP5iny4dxuGbnQPY4+3Cxu9N1GdODJAJcTxWTmmaOzI3IxOEl5ok3SBM1obdVxl0OvAyA9iB7Zq0uNtoM9cvy9gpvLoIiXAjW+1mnwZi7Ht5pDy+enlc8k5Fq+kqmG8EpBnQIEn8o1aFp25a/C66B60sgzB25Sx6uaxtMBM8vdVYMbBoHakc3r3rnchYvjhdiBGDM1csPD4cMr3Sc8ZSGHVtuJ+X/e8Xk2TZcKLFOtR2rVYizM8EdDqpwlxkDJZKeCcnUfYLl4+f2MFEhbG8pE0uMhqXt4Gntk/hM3Ti8k0JTSgM8zCWqg7LKPiyWcurKYr1PDaYi0x+Wi08gVaOkdYT85paa+Enbubo4NTWE3QRvtO87eg1Qy/gWeluerQd47w9BCRSsHWdfd6XebGcGptMoKw58Dhe4IwrXJYFKkspEKnYfImdRB0R7+GAasezjRIXamdhSP2M+1/rjv7cB5xI5Zya67KaN2BteNFOFvE2CtPUYObJxbN/1Sxb9hw8f/7dgbsMnKoMcAbjlIezWAcecJRxkmHcGacFTmg48xrLuYBnyuUzerl185y8UPkW6YbPn+HZWFJhtmlmMSKUY+XfUC8m8NgBG52uDeXrVFnYhv3Py3u9sb7X9wu8eMUE9x1GArUoAW0rNyVw42r3WwfwanDQHx1+9FhcMYii4y6E/6fvf3T6UiaZLA3BtXO9Zvvf0Xn2MahNEfmv1unr42peYe9Cxk+chD6gU5qcNla8/GQbSwfhJyvXvslmpC2oxOXAUIe9TgegXfgVXizXOSxN4RSlW9nEnK4eGzsGolO9pw+6xXC6d/pa0yDBzs7db6ZHGEczPgSbO+88qBpVMYjSbH/Trgn0vUM8+oE+O67otMbt8uWHvwGqGwCj"; @Override - public boolean process(Set annotations, RoundEnvironment roundEnv){ - if(round++ != 0) return false; //only process 1 round + public void process(RoundEnvironment env) throws Exception{ + Set elements = ElementFilter.typesIn(env.getElementsAnnotatedWith(Serialize.class)); - try{ - Set elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class)); + TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC); + classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(new ByteArrayInputStream(Base64.getDecoder().decode(data)))).readUTF())); + classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build()); + classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning); - TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC); - classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF().replace("io.anuke.", ""))); - classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build()); - classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning); + MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC); - MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + for(TypeElement elem : elements){ + TypeName type = TypeName.get(elem.asType()); + String simpleTypeName = type.toString().substring(type.toString().lastIndexOf('.') + 1); - for(TypeElement elem : elements){ - TypeName type = TypeName.get(elem.asType()); - String simpleTypeName = type.toString().substring(type.toString().lastIndexOf('.') + 1); + TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("") + .addSuperinterface(ParameterizedTypeName.get( + ClassName.bestGuess("arc.Settings.TypeSerializer"), type)); - TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("") - .addSuperinterface(ParameterizedTypeName.get( - ClassName.bestGuess("arc.Settings.TypeSerializer"), type)); + MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write") + .returns(void.class) + .addParameter(DataOutput.class, "stream") + .addParameter(type, "object") + .addException(IOException.class) + .addModifiers(Modifier.PUBLIC); - MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write") - .returns(void.class) - .addParameter(DataOutput.class, "stream") - .addParameter(type, "object") - .addException(IOException.class) - .addModifiers(Modifier.PUBLIC); + MethodSpec.Builder readMethod = MethodSpec.methodBuilder("read") + .returns(type) + .addParameter(DataInput.class, "stream") + .addException(IOException.class) + .addModifiers(Modifier.PUBLIC); - MethodSpec.Builder readMethod = MethodSpec.methodBuilder("read") - .returns(type) - .addParameter(DataInput.class, "stream") - .addException(IOException.class) - .addModifiers(Modifier.PUBLIC); + readMethod.addStatement("$L object = new $L()", type, type); - readMethod.addStatement("$L object = new $L()", type, type); + List fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem)); + for(VariableElement field : fields){ + if(field.getModifiers().contains(Modifier.STATIC) || field.getModifiers().contains(Modifier.TRANSIENT) || field.getModifiers().contains(Modifier.PRIVATE)) + continue; - List fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem)); - for(VariableElement field : fields){ - if(field.getModifiers().contains(Modifier.STATIC) || field.getModifiers().contains(Modifier.TRANSIENT) || field.getModifiers().contains(Modifier.PRIVATE)) - continue; + String name = field.getSimpleName().toString(); + String typeName = Utils.typeUtils.erasure(field.asType()).toString().replace('$', '.'); + String capName = Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1); - String name = field.getSimpleName().toString(); - String typeName = Utils.typeUtils.erasure(field.asType()).toString().replace('$', '.'); - String capName = Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1); - - if(field.asType().getKind().isPrimitive()){ - writeMethod.addStatement("stream.write" + capName + "(object." + name + ")"); - readMethod.addStatement("object." + name + "= stream.read" + capName + "()"); - }else{ - writeMethod.addStatement("arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")"); - readMethod.addStatement("object." + name + " = (" + typeName + ")arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)"); - } + if(field.asType().getKind().isPrimitive()){ + writeMethod.addStatement("stream.write" + capName + "(object." + name + ")"); + readMethod.addStatement("object." + name + "= stream.read" + capName + "()"); + }else{ + writeMethod.addStatement("arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")"); + readMethod.addStatement("object." + name + " = (" + typeName + ")arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)"); } - - readMethod.addStatement("return object"); - - serializer.addMethod(writeMethod.build()); - serializer.addMethod(readMethod.build()); - - method.addStatement("arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build()); - - name(writeMethod, "write" + simpleTypeName); - name(readMethod, "read" + simpleTypeName); - - writeMethod.addModifiers(Modifier.STATIC); - readMethod.addModifiers(Modifier.STATIC); - - classBuilder.addMethod(writeMethod.build()); - classBuilder.addMethod(readMethod.build()); } - classBuilder.addMethod(method.build()); + readMethod.addStatement("return object"); - //write result - JavaFile.builder(packageName, classBuilder.build()).build().writeTo(Utils.filer); + serializer.addMethod(writeMethod.build()); + serializer.addMethod(readMethod.build()); - return true; - }catch(Exception e){ - e.printStackTrace(); - throw new RuntimeException(e); + method.addStatement("arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build()); + + name(writeMethod, "write" + simpleTypeName); + name(readMethod, "read" + simpleTypeName); + + writeMethod.addModifiers(Modifier.STATIC); + readMethod.addModifiers(Modifier.STATIC); + + classBuilder.addMethod(writeMethod.build()); + classBuilder.addMethod(readMethod.build()); } - } - @Override - public synchronized void init(ProcessingEnvironment processingEnv){ - super.init(processingEnv); - //put all relevant utils into utils class - Utils.typeUtils = processingEnv.getTypeUtils(); - Utils.elementUtils = processingEnv.getElementUtils(); - Utils.filer = processingEnv.getFiler(); - Utils.messager = processingEnv.getMessager(); + classBuilder.addMethod(method.build()); + + //write result + JavaFile.builder(packageName, classBuilder.build()).build().writeTo(Utils.filer); } static void name(MethodSpec.Builder builder, String name){ diff --git a/annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java index 632e14a91a..48d5cf33f0 100644 --- a/annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java +++ b/annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java @@ -17,148 +17,126 @@ import java.util.Set; * Generates ""value types"" classes that are packed into integer primitives of the most aproppriate size. * It would be nice if Java didn't make crazy hacks like this necessary. */ -@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedAnnotationTypes({ "mindustry.annotations.Annotations.Struct" }) -public class StructAnnotationProcessor extends AbstractProcessor{ - /** Name of the base package to put all the generated classes. */ - private static final String packageName = "mindustry.gen"; - private int round; +public class StructAnnotationProcessor extends BaseProcessor{ @Override - public synchronized void init(ProcessingEnvironment processingEnv){ - super.init(processingEnv); - //put all relevant utils into utils class - Utils.typeUtils = processingEnv.getTypeUtils(); - Utils.elementUtils = processingEnv.getElementUtils(); - Utils.filer = processingEnv.getFiler(); - Utils.messager = processingEnv.getMessager(); - } + public void process(RoundEnvironment env) throws Exception{ + Set elements = ElementFilter.typesIn(env.getElementsAnnotatedWith(Struct.class)); - @Override - public boolean process(Set annotations, RoundEnvironment roundEnv){ - if(round++ != 0) return false; //only process 1 round + for(TypeElement elem : elements){ - try{ - Set elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Struct.class)); + if(!elem.getSimpleName().toString().endsWith("Struct")){ + Utils.messager.printMessage(Kind.ERROR, "All classes annotated with @Struct must have their class names end in 'Struct'.", elem); + continue; + } - for(TypeElement elem : elements){ + String structName = elem.getSimpleName().toString().substring(0, elem.getSimpleName().toString().length() - "Struct".length()); + String structParam = structName.toLowerCase(); - if(!elem.getSimpleName().toString().endsWith("Struct")){ - Utils.messager.printMessage(Kind.ERROR, "All classes annotated with @Struct must have their class names end in 'Struct'.", elem); + TypeSpec.Builder classBuilder = TypeSpec.classBuilder(structName) + .addModifiers(Modifier.FINAL, Modifier.PUBLIC); + + try{ + List variables = ElementFilter.fieldsIn(elem.getEnclosedElements()); + int structSize = variables.stream().mapToInt(StructAnnotationProcessor::varSize).sum(); + int structTotalSize = (structSize <= 8 ? 8 : structSize <= 16 ? 16 : structSize <= 32 ? 32 : 64); + + if(variables.size() == 0){ + Utils.messager.printMessage(Kind.ERROR, "making a struct with no fields is utterly pointles.", elem); continue; } - String structName = elem.getSimpleName().toString().substring(0, elem.getSimpleName().toString().length() - "Struct".length()); - String structParam = structName.toLowerCase(); + //obtain type which will be stored + Class structType = typeForSize(structSize); - TypeSpec.Builder classBuilder = TypeSpec.classBuilder(structName) - .addModifiers(Modifier.FINAL, Modifier.PUBLIC); + //[constructor] get(fields...) : structType + MethodSpec.Builder constructor = MethodSpec.methodBuilder("get") + .addModifiers(Modifier.STATIC, Modifier.PUBLIC) + .returns(structType); - try{ - List variables = ElementFilter.fieldsIn(elem.getEnclosedElements()); - int structSize = variables.stream().mapToInt(StructAnnotationProcessor::varSize).sum(); - int structTotalSize = (structSize <= 8 ? 8 : structSize <= 16 ? 16 : structSize <= 32 ? 32 : 64); + StringBuilder cons = new StringBuilder(); + StringBuilder doc = new StringBuilder(); + doc.append("Bits used: ").append(structSize).append(" / ").append(structTotalSize).append("\n"); - if(variables.size() == 0){ - Utils.messager.printMessage(Kind.ERROR, "making a struct with no fields is utterly pointles.", elem); - continue; - } + int offset = 0; + for(VariableElement var : variables){ + int size = varSize(var); + TypeName varType = TypeName.get(var.asType()); + String varName = var.getSimpleName().toString(); - //obtain type which will be stored - Class structType = typeForSize(structSize); + //add val param to constructor + constructor.addParameter(varType, varName); - //[constructor] get(fields...) : structType - MethodSpec.Builder constructor = MethodSpec.methodBuilder("get") + //[get] field(structType) : fieldType + MethodSpec.Builder getter = MethodSpec.methodBuilder(var.getSimpleName().toString()) .addModifiers(Modifier.STATIC, Modifier.PUBLIC) - .returns(structType); + .returns(varType) + .addParameter(structType, structParam); + //[set] field(structType, fieldType) : structType + MethodSpec.Builder setter = MethodSpec.methodBuilder(var.getSimpleName().toString()) + .addModifiers(Modifier.STATIC, Modifier.PUBLIC) + .returns(structType) + .addParameter(structType, structParam).addParameter(varType, "value"); - StringBuilder cons = new StringBuilder(); - StringBuilder doc = new StringBuilder(); - doc.append("Bits used: ").append(structSize).append(" / ").append(structTotalSize).append("\n"); - - int offset = 0; - for(VariableElement var : variables){ - int size = varSize(var); - TypeName varType = TypeName.get(var.asType()); - String varName = var.getSimpleName().toString(); - - //add val param to constructor - constructor.addParameter(varType, varName); - - //[get] field(structType) : fieldType - MethodSpec.Builder getter = MethodSpec.methodBuilder(var.getSimpleName().toString()) - .addModifiers(Modifier.STATIC, Modifier.PUBLIC) - .returns(varType) - .addParameter(structType, structParam); - //[set] field(structType, fieldType) : structType - MethodSpec.Builder setter = MethodSpec.methodBuilder(var.getSimpleName().toString()) - .addModifiers(Modifier.STATIC, Modifier.PUBLIC) - .returns(structType) - .addParameter(structType, structParam).addParameter(varType, "value"); - - //[getter] - if(varType == TypeName.BOOLEAN){ - //bools: single bit, is simplified - getter.addStatement("return ($L & (1L << $L)) != 0", structParam, offset); - }else if(varType == TypeName.FLOAT){ - //floats: need conversion - getter.addStatement("return Float.intBitsToFloat((int)(($L >>> $L) & $L))", structParam, offset, bitString(size, structTotalSize)); - }else{ - //bytes, shorts, chars, ints - getter.addStatement("return ($T)(($L >>> $L) & $L)", varType, structParam, offset, bitString(size, structTotalSize)); - } - - //[setter] + [constructor building] - if(varType == TypeName.BOOLEAN){ - cons.append(" | (").append(varName).append(" ? ").append("1L << ").append(offset).append("L : 0)"); - - //bools: single bit, needs special case to clear things - setter.beginControlFlow("if(value)"); - setter.addStatement("return ($T)(($L & ~(1L << $LL)))", structType, structParam, offset); - setter.nextControlFlow("else"); - setter.addStatement("return ($T)(($L & ~(1L << $LL)) | (1L << $LL))", structType, structParam, offset, offset); - setter.endControlFlow(); - }else if(varType == TypeName.FLOAT){ - cons.append(" | (").append("(").append(structType).append(")").append("Float.floatToIntBits(").append(varName).append(") << ").append(offset).append("L)"); - - //floats: need conversion - setter.addStatement("return ($T)(($L & $L) | (($T)Float.floatToIntBits(value) << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset); - }else{ - cons.append(" | (((").append(structType).append(")").append(varName).append(" << ").append(offset).append("L)").append(" & ").append(bitString(offset, size, structTotalSize)).append(")"); - - //bytes, shorts, chars, ints - setter.addStatement("return ($T)(($L & $L) | (($T)value << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset); - } - - doc.append("
").append(varName).append(" [").append(offset).append("..").append(size + offset).append("]\n"); - - //add finished methods - classBuilder.addMethod(getter.build()); - classBuilder.addMethod(setter.build()); - - offset += size; + //[getter] + if(varType == TypeName.BOOLEAN){ + //bools: single bit, is simplified + getter.addStatement("return ($L & (1L << $L)) != 0", structParam, offset); + }else if(varType == TypeName.FLOAT){ + //floats: need conversion + getter.addStatement("return Float.intBitsToFloat((int)(($L >>> $L) & $L))", structParam, offset, bitString(size, structTotalSize)); + }else{ + //bytes, shorts, chars, ints + getter.addStatement("return ($T)(($L >>> $L) & $L)", varType, structParam, offset, bitString(size, structTotalSize)); } - classBuilder.addJavadoc(doc.toString()); + //[setter] + [constructor building] + if(varType == TypeName.BOOLEAN){ + cons.append(" | (").append(varName).append(" ? ").append("1L << ").append(offset).append("L : 0)"); - //add constructor final statement + add to class and build - constructor.addStatement("return ($T)($L)", structType, cons.toString().substring(3)); - classBuilder.addMethod(constructor.build()); + //bools: single bit, needs special case to clear things + setter.beginControlFlow("if(value)"); + setter.addStatement("return ($T)(($L & ~(1L << $LL)))", structType, structParam, offset); + setter.nextControlFlow("else"); + setter.addStatement("return ($T)(($L & ~(1L << $LL)) | (1L << $LL))", structType, structParam, offset, offset); + setter.endControlFlow(); + }else if(varType == TypeName.FLOAT){ + cons.append(" | (").append("(").append(structType).append(")").append("Float.floatToIntBits(").append(varName).append(") << ").append(offset).append("L)"); - JavaFile.builder(packageName, classBuilder.build()).build().writeTo(Utils.filer); - }catch(IllegalArgumentException e){ - e.printStackTrace(); - Utils.messager.printMessage(Kind.ERROR, e.getMessage(), elem); + //floats: need conversion + setter.addStatement("return ($T)(($L & $L) | (($T)Float.floatToIntBits(value) << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset); + }else{ + cons.append(" | (((").append(structType).append(")").append(varName).append(" << ").append(offset).append("L)").append(" & ").append(bitString(offset, size, structTotalSize)).append(")"); + + //bytes, shorts, chars, ints + setter.addStatement("return ($T)(($L & $L) | (($T)value << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset); + } + + doc.append("
").append(varName).append(" [").append(offset).append("..").append(size + offset).append("]\n"); + + //add finished methods + classBuilder.addMethod(getter.build()); + classBuilder.addMethod(setter.build()); + + offset += size; } - } - return true; - }catch(Exception e){ - e.printStackTrace(); - throw new RuntimeException(e); + classBuilder.addJavadoc(doc.toString()); + + //add constructor final statement + add to class and build + constructor.addStatement("return ($T)($L)", structType, cons.toString().substring(3)); + classBuilder.addMethod(constructor.build()); + + JavaFile.builder(packageName, classBuilder.build()).build().writeTo(Utils.filer); + }catch(IllegalArgumentException e){ + e.printStackTrace(); + Utils.messager.printMessage(Kind.ERROR, e.getMessage(), elem); + } } + } static String bitString(int offset, int size, int totalSize){ diff --git a/annotations/src/main/resources/DS_Store b/annotations/src/main/resources/DS_Store deleted file mode 100644 index b3aabf0ffe..0000000000 Binary files a/annotations/src/main/resources/DS_Store and /dev/null differ diff --git a/build.gradle b/build.gradle index fba440efbe..957eddbde9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,12 @@ buildscript{ + ext{ + getArcHash = { + return new Properties().with{ p -> p.load(file('gradle.properties').newReader()); return p }["archash"] + } + + arcHash = getArcHash() + } + repositories{ mavenLocal() mavenCentral() @@ -10,8 +18,9 @@ buildscript{ dependencies{ classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.8' - classpath "com.badlogicgames.gdx:gdx-tools:1.9.10" classpath "com.github.anuken:packr:-SNAPSHOT" + classpath "com.github.Anuken.Arc:packer:$arcHash" + classpath "com.github.Anuken.Arc:arc-core:$arcHash" } } @@ -28,7 +37,6 @@ allprojects{ gdxVersion = '1.9.10' roboVMVersion = '2.3.8' steamworksVersion = '891ed912791e01fe9ee6237a6497e5212b85c256' - arcHash = null loadVersionProps = { return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p } @@ -42,10 +50,6 @@ allprojects{ return !project.hasProperty("release") && new File(projectDir.parent, '../Arc').exists() } - getArcHash = { - return new Properties().with{ p -> p.load(file('gradle.properties').newReader()); return p }["archash"] - } - arcModule = { String name -> if(localArc()){ return project(":Arc:$name") @@ -298,7 +302,7 @@ project(":tools"){ compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" - compile "org.reflections:reflections:0.9.11" + compile "org.reflections:reflections:0.9.12" compile arcModule("backends:backend-sdl") } @@ -308,7 +312,8 @@ project(":annotations"){ apply plugin: "java" dependencies{ - compile 'com.squareup:javapoet:1.11.0' + compile 'com.squareup:javapoet:1.12.1' + compile "com.github.Anuken.Arc:arc-core:$arcHash" compile files("${System.getProperty('java.home')}/../lib/tools.jar") } } diff --git a/core/assets-raw/fontgen/config.json b/core/assets-raw/fontgen/config.json new file mode 100644 index 0000000000..e5034e70fe --- /dev/null +++ b/core/assets-raw/fontgen/config.json @@ -0,0 +1,924 @@ +{ + "name": "", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "c08a1cde48d96cba21d8c05fa7d7feb1", + "css": "file-text-fill", + "code": 61788, + "src": "fontawesome" + }, + { + "uid": "178053298e3e5b03551d754d4b9acd8b", + "css": "file", + "code": 61787, + "src": "fontawesome" + }, + { + "uid": "5408be43f7c42bccee419c6be53fdef5", + "css": "file-text", + "code": 61686, + "src": "fontawesome" + }, + { + "uid": "555ef8c86832e686fef85f7af2eb7cde", + "css": "left", + "code": 59394, + "src": "fontawesome" + }, + { + "uid": "ad6b3fbb5324abe71a9c0b6609cbb9f1", + "css": "right", + "code": 59395, + "src": "fontawesome" + }, + { + "uid": "95376bf082bfec6ce06ea1cda7bd7ead", + "css": "up", + "code": 59396, + "src": "fontawesome" + }, + { + "uid": "1c4068ed75209e21af36017df8871802", + "css": "down", + "code": 59397, + "src": "fontawesome" + }, + { + "uid": "6f880cbd94039674f0de065ffb57c250", + "css": "distribution", + "code": 59398, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 0L0 50 0 100 0 150 0 200 0 250 0 300 0 350 0 400 0 450 0 500 0 550 0 600 0 650 0 700 0 750 0 800 0 850 0 900 0 950 0 1000 50 1000 100 1000 100 950 100 850 100 750 100 650 100 550 100 450 100 350 100 250 100 150 100 50 100 0 50 0 0 0ZM900 0L900 50 900 150 900 250 900 350 900 450 900 550 900 650 900 750 900 850 900 950 900 1000 950 1000 1000 1000 1000 950 1000 900 1000 850 1000 800 1000 750 1000 700 1000 650 1000 600 1000 550 1000 500 1000 450 1000 400 1000 350 1000 300 1000 250 1000 200 1000 150 1000 100 1000 50 1000 0 950 0 900 0ZM500 106.3C487.5 106.3 475 108.3 462.5 112.5 437.5 120.8 416.7 133.3 400 150L350 200C333.3 216.7 325 233.3 325 250 325 266.7 337.5 279.2 362.5 287.5 387.5 295.8 416.7 300 450 300L550 300C597.6 293.9 649.1 300.5 675 250 675 233.3 666.7 216.7 650 200L600 150C583.3 133.3 562.5 120.8 537.5 112.5 525 108.3 512.5 106.3 500 106.3ZM500 406.3C487.5 406.3 475 408.3 462.5 412.5 437.5 420.8 416.7 433.3 400 450L350 500C333.3 516.7 325 533.3 325 550 325 566.7 337.5 579.2 362.5 587.5 387.5 595.8 416.7 600 450 600L550 600C583.3 600 612.5 595.8 637.5 587.5 662.5 579.2 675 566.7 675 550 675 533.3 666.7 516.7 650 500L600 450C583.3 433.3 562.5 420.8 537.5 412.5 525 408.3 512.5 406.3 500 406.3ZM500 706.3C487.5 706.3 475 708.3 462.5 712.5 437.5 720.8 416.7 733.3 400 750L350 800C333.3 816.7 325 833.3 325 850 325 866.7 337.5 879.2 362.5 887.5 387.5 895.8 416.7 900 450 900L550 900C583.3 900 612.5 895.8 637.5 887.5 662.5 879.2 675 866.7 675 850 675 833.3 666.7 816.7 650 800L600 750C583.3 733.3 562.5 720.8 537.5 712.5 525 708.3 512.5 706.3 500 706.3Z", + "width": 1000 + }, + "search": [ + "icon-distribution-transparent.png" + ] + }, + { + "uid": "w3nzesrlbezu6f30q7ytyq919p6gdlb6", + "css": "home", + "code": 59399, + "src": "typicons" + }, + { + "uid": "12f4ece88e46abd864e40b35e05b11cd", + "css": "ok", + "code": 59392, + "src": "fontawesome" + }, + { + "uid": "6a7ed3214c9049148cbdb01825e5efc2", + "css": "image", + "code": 59400, + "src": "typicons" + }, + { + "uid": "vyuzsm6wijlfwtjo4ifkoblfmsepk6g8", + "css": "star", + "code": 59401, + "src": "typicons" + }, + { + "uid": "dd4b00255957a608953c409346e7d7fb", + "css": "warning", + "code": 59402, + "src": "typicons" + }, + { + "uid": "cdfalpadi7huwv9ah4fef2gpfpb4c6qm", + "css": "resize", + "code": 59403, + "src": "typicons" + }, + { + "uid": "j6xzwioffey3gxe90yx3ie56j5dlt902", + "css": "block_", + "code": 59404, + "src": "typicons" + }, + { + "uid": "jh3jpcb1t1bcm80gidkadilh080aq79h", + "css": "menu", + "code": 59405, + "src": "typicons" + }, + { + "uid": "dpxunrtmigvk6jm0ieo7axfsgzx4awll", + "css": "settings", + "code": 59406, + "src": "typicons" + }, + { + "uid": "i7r8vgyqewsy2rlx0xhawybpw5uyss3z", + "css": "wrench", + "code": 59407, + "src": "typicons" + }, + { + "uid": "971842913945f59c7f3cf11e75e1e4f1", + "css": "power_", + "code": 59408, + "src": "typicons" + }, + { + "uid": "2b8ea04aa0e500ae056f9c7934af18e6", + "css": "pine", + "code": 59409, + "src": "typicons" + }, + { + "uid": "0ece9a12de796b8411f868d582bee678", + "css": "github-square", + "code": 62208, + "src": "fontawesome" + }, + { + "uid": "3c961c1a8d874815856fc6637dc5a13c", + "css": "file-image", + "code": 61893, + "src": "fontawesome" + }, + { + "uid": "1gf923f9wvaezxmfon515dglxa3drf0e", + "css": "add", + "code": 59411, + "src": "typicons" + }, + { + "uid": "k7sao112253txym1egnte7822irbyphe", + "css": "eye", + "code": 59412, + "src": "typicons" + }, + { + "uid": "jqzwo6i8oicjbn049sh2856d8anrqoli", + "css": "edit", + "code": 59414, + "src": "typicons" + }, + { + "uid": "890649841b2c37d56ff90065872fecf3", + "css": "chart-bar", + "code": 59417, + "src": "typicons" + }, + { + "uid": "db7651b88bb33a590710f551bfbbd371", + "css": "plane-outline", + "code": 59418, + "src": "typicons" + }, + { + "uid": "4109c474ff99cad28fd5a2c38af2ec6f", + "css": "filter", + "code": 61616, + "src": "fontawesome" + }, + { + "uid": "f8aa663c489bcbd6e68ec8147dca841e", + "css": "folder", + "code": 59421, + "src": "fontawesome" + }, + { + "uid": "ca1c07c0df52dbf2af6813c9e36c2611", + "css": "copy", + "code": 59424, + "src": "typicons" + }, + { + "uid": "785a9b232e86ae750516adc5228a5aa7", + "css": "steam", + "code": 59426, + "src": "zocial" + }, + { + "uid": "348b04ea17f646fbc6a46e20ebe4fe12", + "css": "download", + "code": 61486, + "src": "mfglabs" + }, + { + "uid": "4f3b31017c63ba04dc4f78ce7a8f02b1", + "css": "upload", + "code": 61487, + "src": "mfglabs" + }, + { + "uid": "6020aff067fc3c119cdd75daa5249220", + "css": "exchange", + "code": 61676, + "src": "fontawesome" + }, + { + "uid": "ccddff8e8670dcd130e3cb55fdfc2fd0", + "css": "down-open", + "code": 59428, + "src": "fontawesome" + }, + { + "uid": "d870630ff8f81e6de3958ecaeac532f2", + "css": "left-open", + "code": 59429, + "src": "fontawesome" + }, + { + "uid": "fe6697b391355dec12f3d86d6d490397", + "css": "up-open", + "code": 59430, + "src": "fontawesome" + }, + { + "uid": "87d337fee4866c2c28f6082994ce0f41", + "css": "map", + "code": 59431, + "src": "typicons" + }, + { + "uid": "5qynhqqaenby227l5kogqj8sdk5s4e7h", + "css": "rotate", + "code": 59427, + "src": "typicons" + }, + { + "uid": "3e290a111c0f3ee3acbf7b5f17ccc04a", + "css": "play", + "code": 59433, + "src": "typicons" + }, + { + "uid": "e44ef09cb81413287d702eefa65dd790", + "css": "pause", + "code": 59434, + "src": "typicons" + }, + { + "uid": "lu2wqmd7v9zp21knhy4eifo41wjp4cnx", + "css": "list", + "code": 59435, + "src": "typicons" + }, + { + "uid": "5211af474d3a9848f67f945e2ccaf143", + "css": "cancel", + "code": 59436, + "src": "fontawesome" + }, + { + "uid": "fhkechw94uv9ydw6tukba3ka2hhoif4n", + "css": "move", + "code": 59438, + "src": "typicons" + }, + { + "uid": "287ee2cac4ded1712253c7b03ff4a5db", + "css": "pipette", + "code": 59439, + "src": "typicons" + }, + { + "uid": "0e26e70b4aa537cc206f41b21dcf2fcc", + "css": "lock", + "code": 59442, + "src": "elusive" + }, + { + "uid": "8f562a6dca9c14c9c8268bdb64efa89f", + "css": "lock-open", + "code": 59443, + "src": "elusive" + }, + { + "uid": "fa10777b2d88cc64cd6e4f26ef0e5264", + "css": "terminal", + "code": 61728, + "src": "fontawesome" + }, + { + "uid": "28r0xthd180mg0wnfh8ek3mtn761hs11", + "css": "undo", + "code": 59445, + "src": "typicons" + }, + { + "uid": "7p5gflyid3o4gtesy94a6erq94e4pz7u", + "css": "redo", + "code": 59446, + "src": "typicons" + }, + { + "uid": "3d4ea8a78dc34efe891f3a0f3d961274", + "css": "info", + "code": 61737, + "src": "fontawesome" + }, + { + "uid": "e82cedfa1d5f15b00c5a81c9bd731ea2", + "css": "info-circle", + "code": 59447, + "src": "fontawesome" + }, + { + "uid": "8a1d446e5555e76f82ddb1c8b526f579", + "css": "tree", + "code": 59448, + "src": "entypo" + }, + { + "uid": "813cb2527308990d4870591d9d76f8cd", + "css": "right-open-out", + "code": 59449, + "src": "typicons" + }, + { + "uid": "6zhrgcf3co77hnljttd3b2mrc8z5fiq5", + "css": "right-open", + "code": 59450, + "src": "typicons" + }, + { + "uid": "fd8d9ae4422e55d3ca23f55d9cf4b20a", + "css": "waves", + "code": 59451, + "src": "typicons" + }, + { + "uid": "5c49851100aa021825b346d16d7f3abf", + "css": "temperatire", + "code": 59452, + "src": "typicons" + }, + { + "uid": "e3699d145bd628d2a35d4a508b616f0c", + "css": "filters", + "code": 59454, + "src": "iconic" + }, + { + "uid": "d2c499942f8a7c037d5a94f123eeb478", + "css": "layers", + "code": 59455, + "src": "iconic" + }, + { + "uid": "b9be509237c9abea9c258d677777b713", + "css": "pick", + "code": 59456, + "src": "iconic" + }, + { + "uid": "ebc57fa8400e4ede049ac5dc665210e1", + "css": "eraser", + "code": 61741, + "src": "fontawesome" + }, + { + "uid": "51727ca007aa35ceabcaffc28934faee", + "css": "book-open", + "code": 59393, + "src": "entypo" + }, + { + "uid": "da72ab64b02d997ff0521339f2997233", + "css": "grid", + "code": 61481, + "src": "mfglabs" + }, + { + "uid": "f8d887df13c5f95ede5fb0e2cdb042b1", + "css": "flip-x", + "code": 59410, + "src": "elusive" + }, + { + "uid": "f8b0d36761ba4c7e51d0af49d3386713", + "css": "flip-y", + "code": 59458, + "src": "elusive" + }, + { + "uid": "9edf364d6c567aa474b0f9ec6c26c042", + "css": "hammer", + "code": 59459, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M470.3 0C458.1 0 446 6.1 433.8 18.3L397.3 54.8 360.7 91.3 324.2 127.9 287.7 164.4 251.1 200.9 214.6 237.4 178.1 274C165.9 286.1 159.8 298.3 159.8 310.5 159.8 322.7 165.9 334.9 178.1 347L214.6 383.6 251.1 420.1 287.7 456.6 324.2 493.2C336.4 505.3 342.5 517.5 342.5 529.7 342.5 541.9 336.4 554 324.2 566.2L287.7 602.7 251.1 639.3 214.6 675.8 178.1 712.3 141.6 748.9 105 785.4 68.5 821.9 32 858.4C19.8 870.6 10.7 885.8 4.6 904.1-1.5 922.4-1.5 940.6 4.6 958.9 10.7 977.2 22.8 989.3 41.1 995.4 59.4 1001.5 77.6 1001.5 95.9 995.4 114.2 989.3 129.4 980.2 141.6 968L178.1 931.5 214.6 895 251.1 858.4 287.7 821.9 324.2 785.4 360.7 748.9 397.3 712.3 433.8 675.8C446 663.6 458.1 657.5 470.3 657.5 482.5 657.5 494.7 663.6 506.8 675.8L543.4 712.3 579.9 748.9 616.4 785.4 653 821.9C665.1 834.1 677.3 840.2 689.5 840.2 701.7 840.2 713.9 834.1 726 821.9L762.6 785.4 799.1 748.9 835.6 712.3 872.1 675.8 908.7 639.3 945.2 602.7 981.7 566.2C993.9 554 1000 541.9 1000 529.7 1000 517.5 993.9 505.3 981.7 493.2L945.2 456.6 908.7 420.1 872.1 383.6 835.6 347 799.1 310.5 762.6 274 726 237.4 689.5 200.9 653 164.4 616.4 127.9 579.9 91.3 543.4 54.8 506.8 18.3C494.7 6.1 482.5 0 470.3 0Z", + "width": 1000 + }, + "search": [ + "hammer" + ] + }, + { + "uid": "e594fc6e5870b4ab7e49f52571d52577", + "css": "diagonal", + "code": 59460, + "src": "fontawesome" + }, + { + "uid": "wh8nbtrxjl2f67dpybsww6mri0xcaklm", + "css": "export", + "code": 59462, + "src": "typicons" + }, + { + "uid": "9e33d50c92e84bd26d83d1f37d6f0d57", + "css": "admin", + "code": 59432, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M427.1 385.4Q437.5 354.2 468.8 343.8 500 333.3 531.3 343.8 562.5 354.2 572.9 385.4 583.3 416.7 572.9 447.9 562.5 479.2 531.3 489.6 500 500 468.8 489.6 437.5 479.2 427.1 447.9 416.7 416.7 427.1 385.4M166.7 41.7Q187.5 20.8 218.8 10.4 250 0 291.7 0 333.3 0 375 0 416.7 0 458.3 0 500 0 541.7 0 583.3 0 625 0 666.7 0 708.3 0 750 0 781.3 10.4 812.5 20.8 833.3 41.7 854.2 62.5 875 83.3 895.8 104.2 916.7 125 937.5 145.8 958.3 166.7 979.2 187.5 989.6 218.8 1000 250 1000 291.7 1000 333.3 1000 375 1000 416.7 1000 458.3 1000 500 989.6 531.3 979.2 562.5 958.3 583.3 937.5 604.2 927.1 635.4 916.7 666.7 916.7 708.3 916.7 750 906.3 781.3 895.8 812.5 875 833.3 854.2 854.2 833.3 875 812.5 895.8 791.7 916.7 770.8 937.5 750 958.3 729.2 979.2 697.9 989.6 666.7 1000 625 1000 583.3 1000 541.7 1000 500 1000 458.3 1000 416.7 1000 375 1000 333.3 1000 302.1 989.6 270.8 979.2 250 958.3 229.2 937.5 208.3 916.7 187.5 895.8 166.7 875 145.8 854.2 125 833.3 104.2 812.5 93.8 781.3 83.3 750 83.3 708.3 83.3 666.7 72.9 635.4 62.5 604.2 41.7 583.3 20.8 562.5 10.4 531.3 0 500 0 458.3 0 416.7 0 375 0 333.3 0 291.7 0 250 10.4 218.8 20.8 187.5 41.7 166.7 62.5 145.8 83.3 125 104.2 104.2 125 83.3 145.8 62.5 166.7 41.7M541.7 750Q583.3 750 614.6 739.6 645.8 729.2 645.8 708.3 645.8 687.5 614.6 677.1 583.3 666.7 541.7 666.7 500 666.7 458.3 666.7 416.7 666.7 385.4 677.1 354.2 687.5 354.2 708.3 354.2 729.2 385.4 739.6 416.7 750 458.3 750 500 750 541.7 750M541.7 583.3Q583.3 583.3 614.6 572.9 645.8 562.5 666.7 541.7 687.5 520.8 708.3 500 729.2 479.2 739.6 447.9 750 416.7 739.6 385.4 729.2 354.2 708.3 333.3 687.5 312.5 666.7 291.7 645.8 270.8 614.6 260.4 583.3 250 541.7 250 500 250 458.3 250 416.7 250 385.4 260.4 354.2 270.8 333.3 291.7 312.5 312.5 291.7 333.3 270.8 354.2 260.4 385.4 250 416.7 260.4 447.9 270.8 479.2 291.7 500 312.5 520.8 333.3 541.7 354.2 562.5 385.4 572.9 416.7 583.3 458.3 583.3 500 583.3 541.7 583.3", + "width": 1000 + }, + "search": [ + "admin" + ] + }, + { + "uid": "4bad23bc52aaddaac37da019e46b6f6b", + "css": "discord", + "code": 59464, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M347 419.5C318.5 419.5 296 444.5 296 475 296 505.5 319 530.5 347 530.5 375.5 530.5 398 505.5 398 475 398.5 444.5 375.5 419.5 347 419.5ZM529.5 419.5C501 419.5 478.5 444.5 478.5 475 478.5 505.5 501.5 530.5 529.5 530.5 558 530.5 580.5 505.5 580.5 475 580.5 444.5 558 419.5 529.5 419.5ZM772.5 0H102.5C46 0 0 46 0 103V779C0 836 46 882 102.5 882H669.5L643 789.5 707 849 767.5 905 875 1000V103C875 46 829 0 772.5 0ZM579.5 653C579.5 653 561.5 631.5 546.5 612.5 612 594 637 553 637 553 616.5 566.5 597 576 579.5 582.5 554.5 593 530.5 600 507 604 459 613 415 610.5 377.5 603.5 349 598 324.5 590 304 582 292.5 577.5 280 572 267.5 565 266 564 264.5 563.5 263 562.5 262 562 261.5 561.5 261 561 252 556 247 552.5 247 552.5 247 552.5 271 592.5 334.5 611.5 319.5 630.5 301 653 301 653 190.5 649.5 148.5 577 148.5 577 148.5 416 220.5 285.5 220.5 285.5 292.5 231.5 361 233 361 233L366 239C276 265 234.5 304.5 234.5 304.5 234.5 304.5 245.5 298.5 264 290 317.5 266.5 360 260 377.5 258.5 380.5 258 383 257.5 386 257.5 416.5 253.5 451 252.5 487 256.5 534.5 262 585.5 276 637.5 304.5 637.5 304.5 598 267 513 241L520 233C520 233 588.5 231.5 660.5 285.5 660.5 285.5 732.5 416 732.5 577 732.5 577 690 649.5 579.5 653Z", + "width": 875 + }, + "search": [ + "discord-logo-white" + ] + }, + { + "uid": "777bee87001d4219672e09caa12e1c78", + "css": "crafting", + "code": 59425, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M909.1 62.9Q923.1 21 965 7 1007-7 1049 7 1090.9 21 1104.9 62.9 1118.9 104.9 1118.9 160.8 1118.9 216.8 1118.9 272.7 1118.9 328.7 1118.9 384.6 1118.9 440.6 1118.9 496.5 1118.9 552.4 1118.9 608.4 1118.9 664.3 1118.9 720.3 1118.9 776.2 1118.9 832.2 1118.9 888.1 1104.9 930.1 1090.9 972 1049 986 1007 1000 951 1000 895.1 1000 839.2 1000 783.2 1000 727.3 1000 671.3 1000 615.4 1000 559.4 1000 503.5 1000 447.6 1000 391.6 1000 335.7 1000 279.7 1000 223.8 1000 167.8 1000 111.9 1000 69.9 986 28 972 14 930.1 0 888.1 0 832.2 0 776.2 0 720.3 0 664.3 0 608.4 0 552.4 0 496.5 0 440.6 0 384.6 0 328.7 0 272.7 0 216.8 14 174.8 28 132.9 55.9 132.9 83.9 132.9 111.9 160.8 139.9 188.8 167.8 216.8 195.8 244.8 223.8 272.7 251.7 300.7 279.7 328.7 307.7 356.6 335.7 384.6 363.6 412.6 391.6 412.6 419.6 412.6 433.6 370.6 447.6 328.7 447.6 272.7 447.6 216.8 461.5 174.8 475.5 132.9 503.5 132.9 531.5 132.9 559.4 160.8 587.4 188.8 615.4 216.8 643.4 244.8 671.3 272.7 699.3 300.7 727.3 328.7 755.2 356.6 783.2 384.6 811.2 412.6 839.2 412.6 867.1 412.6 881.1 370.6 895.1 328.7 895.1 272.7 895.1 216.8 895.1 160.8 895.1 104.9 909.1 62.9M839.2 888.1Q895.1 888.1 937.1 874.1 979 860.1 993 818.2 1007 776.2 1007 720.3 1007 664.3 993 622.4 979 580.4 937.1 566.4 895.1 552.4 853.1 538.5 811.2 524.5 783.2 496.5 755.2 468.5 727.3 440.6 699.3 412.6 671.3 384.6 643.4 356.6 615.4 356.6 587.4 356.6 573.4 398.6 559.4 440.6 545.5 482.5 531.5 524.5 489.5 538.5 447.6 552.4 405.6 538.5 363.6 524.5 335.7 496.5 307.7 468.5 279.7 440.6 251.7 412.6 223.8 384.6 195.8 356.6 167.8 356.6 139.9 356.6 125.9 398.6 111.9 440.6 111.9 496.5 111.9 552.4 111.9 608.4 111.9 664.3 111.9 720.3 111.9 776.2 125.9 818.2 139.9 860.1 181.8 874.1 223.8 888.1 279.7 888.1 335.7 888.1 391.6 888.1 447.6 888.1 503.5 888.1 559.4 888.1 615.4 888.1 671.3 888.1 727.3 888.1 783.2 888.1 839.2 888.1M251.7 720.3Q251.7 692.3 279.7 692.3 307.7 692.3 307.7 720.3 307.7 748.3 279.7 748.3 251.7 748.3 251.7 720.3M475.5 720.3Q475.5 692.3 503.5 692.3 531.5 692.3 531.5 720.3 531.5 748.3 503.5 748.3 475.5 748.3 475.5 720.3M699.3 720.3Q699.3 692.3 727.3 692.3 755.2 692.3 755.2 720.3 755.2 748.3 727.3 748.3 699.3 748.3 699.3 720.3", + "width": 1119 + }, + "search": [ + "crafting" + ] + }, + { + "uid": "39651356f0f411effa9ab4a83abd2d0d", + "css": "defense", + "code": 59465, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M101.3 0C88.6 0 75.9 2.1 63.3 6.3 38 14.8 21.1 31.6 12.7 57 4.2 82.3 0 111.8 0 145.6V246.8 348.1 449.4C0 483.1 4.2 512.7 12.7 538 21.1 563.3 33.8 584.4 50.6 601.3L101.3 651.9 151.9 702.5 202.5 753.2 253.2 803.8 303.8 854.4 354.4 905.1 405.1 955.7C421.9 972.6 443 985.2 468.4 993.7 493.7 1002.1 519 1002.1 544.3 993.7 569.6 985.2 590.7 972.6 607.6 955.7L658.2 905.1 708.9 854.4 759.5 803.8 810.1 753.2 860.8 702.5 911.4 651.9 962 601.3C978.9 584.4 991.6 563.3 1000 538 1008.4 512.7 1012.7 483.1 1012.7 449.4V348.1 246.8 145.6C1012.7 111.8 1008.4 82.3 1000 57 991.6 31.6 974.7 14.8 949.4 6.3 924.1-2.1 898.7-2.1 873.4 6.3 848.1 14.8 827 27.4 810.1 44.3L759.5 94.9 708.9 145.6C692 162.4 670.9 175.1 645.6 183.5 620.3 192 590.7 196.2 557 196.2H455.7C421.9 196.2 392.4 192 367.1 183.5 341.8 175.1 320.7 162.4 303.8 145.6L253.2 94.9 202.5 44.3C185.7 27.4 164.6 14.8 139.2 6.3 126.6 2.1 113.9 0 101.3 0ZM151.9 120.3C168.8 120.3 185.7 128.7 202.5 145.6L253.2 196.2 303.8 246.8C320.7 263.7 341.8 276.4 367.1 284.8 392.4 293.2 421.9 297.5 455.7 297.5H557C590.7 297.5 620.3 293.2 645.6 284.8 670.9 276.4 692 263.7 708.9 246.8L759.5 196.2 810.1 145.6C827 128.7 843.9 120.3 860.8 120.3 877.6 120.3 890.3 132.9 898.7 158.2 907.2 183.5 911.4 213.1 911.4 246.8V348.1 449.4C911.4 483.1 907.2 512.7 898.7 538 890.3 563.3 877.6 584.4 860.8 601.3L810.1 651.9 759.5 702.5 708.9 753.2 658.2 803.8 607.6 854.4C590.7 871.3 569.6 884 544.3 892.4 519 900.8 493.7 900.8 468.4 892.4 443 884 421.9 871.3 405.1 854.4L354.4 803.8 303.8 753.2 253.2 702.5 202.5 651.9 151.9 601.3C135 584.4 122.4 563.3 113.9 538 105.5 512.7 101.3 483.1 101.3 449.4V348.1 246.8C101.3 213.1 105.5 183.5 113.9 158.2 122.4 132.9 135 120.3 151.9 120.3Z", + "width": 1013 + }, + "search": [ + "defense" + ] + }, + { + "uid": "10e2d46ee8b987f0a414451439b23036", + "css": "effect", + "code": 59466, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M250 0C216.7 0 187.5 4.2 162.5 12.5 137.5 20.8 116.7 33.3 100 50L50 100C33.3 116.7 20.8 137.5 12.5 162.5 4.2 187.5 0 216.7 0 250V350 450 550 650 750C0 783.3 4.2 812.5 12.5 837.5 20.8 862.5 33.3 883.3 50 900L100 950C116.7 966.7 137.5 979.2 162.5 987.5 187.5 995.8 216.7 1000 250 1000H350 450 550 650 750C783.3 1000 812.5 995.8 837.5 987.5 862.5 979.2 883.3 966.7 900 950L950 900C966.7 883.3 979.2 862.5 987.5 837.5 995.8 812.5 1000 783.3 1000 750V650 550 450 350 250C1000 216.7 995.8 187.5 987.5 162.5 979.2 137.5 966.7 116.7 950 100L900 50C883.3 33.3 862.5 20.8 837.5 12.5 812.5 4.2 783.3 0 750 0H650 550 450 350ZM350 100H450 550 650C683.3 100 712.5 104.2 737.5 112.5 762.5 120.8 783.3 133.3 800 150L850 200C866.7 216.7 879.2 237.5 887.5 262.5 895.8 287.5 900 316.7 900 350V450 550 650C900 683.3 895.8 712.5 887.5 737.5 879.2 762.5 866.7 783.3 850 800L800 850C783.3 866.7 762.5 879.2 737.5 887.5 712.5 895.8 683.3 900 650 900H550 450 350C316.7 900 287.5 895.8 262.5 887.5 237.5 879.2 216.7 866.7 200 850L150 800C133.3 783.3 120.8 762.5 112.5 737.5 104.2 712.5 100 683.3 100 650V550 450 350C100 316.7 104.2 287.5 112.5 262.5 120.8 237.5 133.3 216.7 150 200L200 150C216.7 133.3 237.5 120.8 262.5 112.5 287.5 104.2 316.7 100 350 100ZM500 306.3C487.5 306.3 475 308.3 462.5 312.5 437.5 320.8 416.7 333.3 400 350L350 400C333.3 416.7 320.8 437.5 312.5 462.5 304.2 487.5 304.2 512.5 312.5 537.5 320.8 562.5 333.3 583.3 350 600L400 650C416.7 666.7 437.5 679.2 462.5 687.5 487.5 695.8 512.5 695.8 537.5 687.5 562.5 679.2 583.3 666.7 600 650L650 600C666.7 583.3 679.2 562.5 687.5 537.5 695.8 512.5 695.8 487.5 687.5 462.5 679.2 437.5 666.7 416.7 650 400L600 350C583.3 333.3 562.5 320.8 537.5 312.5 525 308.3 512.5 306.3 500 306.3Z", + "width": 1000 + }, + "search": [ + "effect" + ] + }, + { + "uid": "a4d157485929f47f7a7872bac82ffbb7", + "css": "liquid", + "code": 59467, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M0 57.1Q0 28.6 42.9 14.3 85.7 0 142.9 0 200 0 257.1 0 314.3 0 371.4 0 428.6 0 485.7 0 542.9 0 600 0 657.1 0 700 14.3 742.9 28.6 742.9 57.1 742.9 85.7 714.3 114.3 685.7 142.9 671.4 185.7 657.1 228.6 671.4 271.4 685.7 314.3 728.6 328.6 771.4 342.9 814.3 328.6 857.1 314.3 885.7 285.7 914.3 257.1 942.9 257.1 971.4 257.1 985.7 300 1000 342.9 1000 400 1000 457.1 1000 514.3 1000 571.4 1000 628.6 1000 685.7 1000 742.9 1000 800 1000 857.1 1000 914.3 985.7 957.1 971.4 1000 942.9 1000 914.3 1000 885.7 971.4 857.1 942.9 814.3 928.6 771.4 914.3 714.3 914.3 657.1 914.3 600 914.3 542.9 914.3 485.7 914.3 428.6 914.3 385.7 900 342.9 885.7 314.3 857.1 285.7 828.6 257.1 800 228.6 771.4 200 742.9 171.4 714.3 142.9 685.7 114.3 657.1 100 614.3 85.7 571.4 85.7 514.3 85.7 457.1 85.7 400 85.7 342.9 85.7 285.7 85.7 228.6 71.4 185.7 57.1 142.9 28.6 114.3 0 85.7 0 57.1M714.3 800Q771.4 800 814.3 785.7 857.1 771.4 871.4 728.6 885.7 685.7 885.7 628.6 885.7 571.4 871.4 528.6 857.1 485.7 814.3 471.4 771.4 457.1 728.6 442.9 685.7 428.6 657.1 400 628.6 371.4 600 342.9 571.4 314.3 557.1 271.4 542.9 228.6 528.6 185.7 514.3 142.9 471.4 128.6 428.6 114.3 371.4 114.3 314.3 114.3 271.4 128.6 228.6 142.9 214.3 185.7 200 228.6 200 285.7 200 342.9 200 400 200 457.1 200 514.3 200 571.4 214.3 614.3 228.6 657.1 257.1 685.7 285.7 714.3 314.3 742.9 342.9 771.4 385.7 785.7 428.6 800 485.7 800 542.9 800 600 800 657.1 800 714.3 800", + "width": 1000 + }, + "search": [ + "liquid" + ] + }, + { + "uid": "757a660cd53e3349515bc329726c3dbd", + "css": "production", + "code": 59469, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M7 69.9Q21 28 62.9 14 104.9 0 160.8 0 216.8 0 272.7 0 328.7 0 384.6 0 440.6 0 496.5 0 552.4 0 608.4 0 664.3 0 720.3 0 776.2 0 818.2 14 860.1 28 874.1 69.9 888.1 111.9 874.1 153.8 860.1 195.8 832.2 223.8 804.2 251.7 776.2 279.7 748.3 307.7 720.3 335.7 692.3 363.6 678.3 405.6 664.3 447.6 664.3 503.5 664.3 559.4 664.3 615.4 664.3 671.3 664.3 727.3 664.3 783.2 650.3 825.2 636.4 867.1 608.4 895.1 580.4 923.1 552.4 951 524.5 979 482.5 993 440.6 1007 398.6 993 356.6 979 328.7 951 300.7 923.1 272.7 895.1 244.8 867.1 230.8 825.2 216.8 783.2 216.8 727.3 216.8 671.3 216.8 615.4 216.8 559.4 216.8 503.5 216.8 447.6 202.8 405.6 188.8 363.6 160.8 335.7 132.9 307.7 104.9 279.7 76.9 251.7 49 223.8 21 195.8 7 153.8-7 111.9 7 69.9M342.7 825.2Q356.6 867.1 384.6 867.1 412.6 867.1 440.6 839.2 468.5 811.2 496.5 783.2 524.5 755.2 524.5 727.3 524.5 699.3 496.5 671.3 468.5 643.4 468.5 615.4 468.5 587.4 496.5 559.4 524.5 531.5 524.5 503.5 524.5 475.5 496.5 447.6 468.5 419.6 440.6 391.6 412.6 363.6 384.6 363.6 356.6 363.6 342.7 405.6 328.7 447.6 328.7 503.5 328.7 559.4 328.7 615.4 328.7 671.3 328.7 727.3 328.7 783.2 342.7 825.2M608.4 223.8Q664.3 223.8 706.3 209.8 748.3 195.8 748.3 167.8 748.3 139.9 706.3 125.9 664.3 111.9 608.4 111.9 552.4 111.9 496.5 111.9 440.6 111.9 384.6 111.9 328.7 111.9 272.7 111.9 216.8 111.9 174.8 125.9 132.9 139.9 132.9 167.8 132.9 195.8 174.8 209.8 216.8 223.8 272.7 223.8 328.7 223.8 384.6 223.8 440.6 223.8 496.5 223.8 552.4 223.8 608.4 223.8", + "width": 881 + }, + "search": [ + "production" + ] + }, + { + "uid": "fffdfd2df00136ae95e542b0af62d8fa", + "css": "turret", + "code": 59470, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M125.9 62.9Q139.9 21 181.8 7 223.8-7 265.7 7 307.7 21 321.7 62.9 335.7 104.9 349.7 146.9 363.6 188.8 405.6 202.8 447.6 216.8 489.5 202.8 531.5 188.8 545.5 146.9 559.4 104.9 573.4 62.9 587.4 21 629.4 7 671.3-7 713.3 7 755.2 21 769.2 62.9 783.2 104.9 783.2 160.8 783.2 216.8 783.2 272.7 783.2 328.7 797.2 370.6 811.2 412.6 839.2 440.6 867.1 468.5 881.1 510.5 895.1 552.4 895.1 608.4 895.1 664.3 895.1 720.3 895.1 776.2 895.1 832.2 895.1 888.1 881.1 930.1 867.1 972 825.2 986 783.2 1000 727.3 1000 671.3 1000 629.4 986 587.4 972 559.4 944.1 531.5 916.1 489.5 902.1 447.6 888.1 405.6 902.1 363.6 916.1 335.7 944.1 307.7 972 265.7 986 223.8 1000 167.8 1000 111.9 1000 69.9 986 28 972 14 930.1 0 888.1 0 832.2 0 776.2 0 720.3 0 664.3 0 608.4 0 552.4 14 510.5 28 468.5 55.9 440.6 83.9 412.6 97.9 370.6 111.9 328.7 111.9 272.7 111.9 216.8 111.9 160.8 111.9 104.9 125.9 62.9M629.4 874.1Q671.3 888.1 713.3 874.1 755.2 860.1 769.2 818.2 783.2 776.2 783.2 720.3 783.2 664.3 783.2 608.4 783.2 552.4 769.2 510.5 755.2 468.5 727.3 440.6 699.3 412.6 671.3 384.6 643.4 356.6 601.4 342.7 559.4 328.7 503.5 328.7 447.6 328.7 391.6 328.7 335.7 328.7 293.7 342.7 251.7 356.6 223.8 384.6 195.8 412.6 167.8 440.6 139.9 468.5 125.9 510.5 111.9 552.4 111.9 608.4 111.9 664.3 111.9 720.3 111.9 776.2 125.9 818.2 139.9 860.1 181.8 874.1 223.8 888.1 265.7 874.1 307.7 860.1 335.7 832.2 363.6 804.2 405.6 790.2 447.6 776.2 489.5 790.2 531.5 804.2 559.4 832.2 587.4 860.1 629.4 874.1", + "width": 895 + }, + "search": [ + "turret" + ] + }, + { + "uid": "dbc386322a6eec797d94d5cf2af56dc3", + "css": "units", + "code": 59471, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M566.9 0C524.9 0 488.2 5.2 456.7 15.7 425.2 26.2 399 42 378 63L315 126 252 189 189 252 126 315 63 378C42 399 26.2 425.2 15.7 456.7 5.2 488.2 0 524.9 0 566.9 0 608.9 5.2 645.7 15.7 677.2 26.2 708.7 42 724.4 63 724.4 84 724.4 105 713.9 126 692.9 147 671.9 168 661.4 189 661.4 210 661.4 225.7 677.2 236.2 708.7 246.7 740.2 252 776.9 252 818.9 252 860.9 257.2 897.6 267.7 929.1 278.2 960.6 299.2 981.6 330.7 992.1 362.2 1002.6 393.7 1002.6 425.2 992.1 456.7 981.6 477.7 960.6 488.2 929.1L519.7 834.6C530.2 803.1 551.2 782.2 582.7 771.7 614.2 761.2 645.7 761.2 677.2 771.7 708.7 782.2 729.7 803.1 740.2 834.6L771.7 929.1C782.2 960.6 803.1 981.6 834.6 992.1 866.1 1002.6 897.6 1002.6 929.1 992.1 960.6 981.6 981.6 960.6 992.1 929.1 1002.6 897.6 1007.9 860.9 1007.9 818.9 1007.9 776.9 1013.1 740.2 1023.6 708.7 1034.1 677.2 1049.9 661.4 1070.9 661.4 1091.9 661.4 1112.9 671.9 1133.9 692.9 1154.9 713.9 1175.9 724.4 1196.9 724.4 1217.8 724.4 1233.6 708.7 1244.1 677.2 1254.6 645.7 1259.8 608.9 1259.8 566.9 1259.8 524.9 1254.6 488.2 1244.1 456.7 1233.6 425.2 1217.8 399 1196.9 378L1133.9 315 1070.9 252 1007.9 189 944.9 126 881.9 63C860.9 42 834.6 26.2 803.1 15.7 771.7 5.2 734.9 0 692.9 0ZM566.9 126H692.9C734.9 126 771.7 131.2 803.1 141.7 834.6 152.2 860.9 168 881.9 189L944.9 252 1007.9 315 1070.9 378C1091.9 399 1102.4 419.9 1102.4 440.9 1102.4 461.9 1086.6 477.7 1055.1 488.2L960.6 519.7C929.1 530.2 902.9 545.9 881.9 566.9 860.9 587.9 834.6 603.7 803.1 614.2 771.7 624.7 734.9 629.9 692.9 629.9H566.9C524.9 629.9 488.2 624.7 456.7 614.2 425.2 603.7 399 587.9 378 566.9 357 545.9 330.7 530.2 299.2 519.7L204.7 488.2C173.2 477.7 157.5 461.9 157.5 440.9 157.5 419.9 168 399 189 378L252 315 315 252 378 189C399 168 425.2 152.2 456.7 141.7 488.2 131.2 524.9 126 566.9 126ZM629.9 259.8C614.2 259.8 598.4 262.5 582.7 267.7 551.2 278.2 535.4 294 535.4 315 535.4 336 551.2 351.7 582.7 362.2 614.2 372.7 645.7 372.7 677.2 362.2 708.7 351.7 724.4 336 724.4 315 724.4 294 708.7 278.2 677.2 267.7 661.4 262.5 645.7 259.8 629.9 259.8Z", + "width": 1260 + }, + "search": [ + "units" + ] + }, + { + "uid": "4fe8d91bf30522a9a76bab94836b2dd7", + "css": "upgrade", + "code": 59472, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M396.2 44Q421.4 18.9 459.1 6.3 496.9-6.3 534.6 6.3 572.3 18.9 597.5 44 622.6 69.2 647.8 94.3 673 119.5 698.1 144.7 723.3 169.8 748.4 195 773.6 220.1 798.7 245.3 823.9 270.4 849.1 295.6 874.2 320.8 899.4 345.9 924.5 371.1 949.7 396.2 974.8 421.4 987.4 459.1 1000 496.9 987.4 534.6 974.8 572.3 937.1 584.9 899.4 597.5 849.1 597.5 798.7 597.5 761 610.1 723.3 622.6 710.7 660.4 698.1 698.1 698.1 748.4 698.1 798.7 698.1 849.1 698.1 899.4 685.5 937.1 673 974.8 635.2 987.4 597.5 1000 547.2 1000 496.9 1000 446.5 1000 396.2 1000 358.5 987.4 320.8 974.8 308.2 937.1 295.6 899.4 295.6 849.1 295.6 798.7 295.6 748.4 295.6 698.1 283 660.4 270.4 622.6 232.7 610.1 195 597.5 144.7 597.5 94.3 597.5 56.6 584.9 18.9 572.3 6.3 534.6-6.3 496.9 6.3 459.1 18.9 421.4 44 396.2 69.2 371.1 94.3 345.9 119.5 320.8 144.7 295.6 169.8 270.4 195 245.3 220.1 220.1 245.3 195 270.4 169.8 295.6 144.7 320.8 119.5 345.9 94.3 371.1 69.2 396.2 44M459.1 886.8Q496.9 899.4 534.6 886.8 572.3 874.2 584.9 836.5 597.5 798.7 597.5 748.4 597.5 698.1 597.5 647.8 597.5 597.5 610.1 559.7 622.6 522 660.4 509.4 698.1 496.9 735.8 484.3 773.6 471.7 773.6 446.5 773.6 421.4 748.4 396.2 723.3 371.1 698.1 345.9 673 320.8 647.8 295.6 622.6 270.4 597.5 245.3 572.3 220.1 534.6 207.5 496.9 195 459.1 207.5 421.4 220.1 396.2 245.3 371.1 270.4 345.9 295.6 320.8 320.8 295.6 345.9 270.4 371.1 245.3 396.2 220.1 421.4 220.1 446.5 220.1 471.7 257.9 484.3 295.6 496.9 333.3 509.4 371.1 522 383.6 559.7 396.2 597.5 396.2 647.8 396.2 698.1 396.2 748.4 396.2 798.7 408.8 836.5 421.4 874.2 459.1 886.8", + "width": 994 + }, + "search": [ + "upgrade" + ] + }, + { + "uid": "8cbea4558186fc7f4197ccba882dd534", + "css": "save", + "code": 59440, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M11.4 56.8Q22.7 22.7 56.8 11.4 90.9 0 136.4 0 181.8 0 227.3 0 272.7 0 318.2 0 363.6 0 409.1 0 454.5 0 500 0 545.5 0 590.9 0 636.4 0 681.8 0 727.3 0 761.4 11.4 795.5 22.7 818.2 45.5 840.9 68.2 863.6 90.9 886.4 113.6 897.7 147.7 909.1 181.8 909.1 227.3 909.1 272.7 909.1 318.2 909.1 363.6 909.1 409.1 909.1 454.5 909.1 500 909.1 545.5 909.1 590.9 909.1 636.4 909.1 681.8 909.1 727.3 909.1 772.7 909.1 818.2 909.1 863.6 909.1 909.1 897.7 943.2 886.4 977.3 852.3 988.6 818.2 1000 772.7 1000 727.3 1000 681.8 1000 636.4 1000 590.9 1000 545.5 1000 500 1000 454.5 1000 409.1 1000 363.6 1000 318.2 1000 272.7 1000 227.3 1000 181.8 1000 136.4 1000 90.9 1000 56.8 988.6 22.7 977.3 11.4 943.2 0 909.1 0 863.6 0 818.2 0 772.7 0 727.3 0 681.8 0 636.4 0 590.9 0 545.5 0 500 0 454.5 0 409.1 0 363.6 0 318.2 0 272.7 0 227.3 0 181.8 0 136.4 0 90.9 11.4 56.8M500 909.1Q545.5 909.1 579.5 897.7 613.6 886.4 625 852.3 636.4 818.2 636.4 772.7 636.4 727.3 625 693.2 613.6 659.1 579.5 647.7 545.5 636.4 500 636.4 454.5 636.4 409.1 636.4 363.6 636.4 329.5 647.7 295.5 659.1 284.1 693.2 272.7 727.3 272.7 772.7 272.7 818.2 284.1 852.3 295.5 886.4 329.5 897.7 363.6 909.1 409.1 909.1 454.5 909.1 500 909.1M738.6 852.3Q750 886.4 772.7 886.4 795.5 886.4 806.8 852.3 818.2 818.2 818.2 772.7 818.2 727.3 818.2 681.8 818.2 636.4 818.2 590.9 818.2 545.5 818.2 500 818.2 454.5 818.2 409.1 818.2 363.6 818.2 318.2 818.2 272.7 818.2 227.3 818.2 181.8 806.8 147.7 795.5 113.6 761.4 102.3 727.3 90.9 693.2 102.3 659.1 113.6 647.7 147.7 636.4 181.8 636.4 227.3 636.4 272.7 625 306.8 613.6 340.9 579.5 352.3 545.5 363.6 500 363.6 454.5 363.6 409.1 363.6 363.6 363.6 329.5 352.3 295.5 340.9 284.1 306.8 272.7 272.7 272.7 227.3 272.7 181.8 261.4 147.7 250 113.6 215.9 102.3 181.8 90.9 147.7 102.3 113.6 113.6 102.3 147.7 90.9 181.8 90.9 227.3 90.9 272.7 90.9 318.2 90.9 363.6 90.9 409.1 90.9 454.5 90.9 500 90.9 545.5 90.9 590.9 90.9 636.4 90.9 681.8 90.9 727.3 90.9 772.7 90.9 818.2 102.3 852.3 113.6 886.4 136.4 886.4 159.1 886.4 170.5 852.3 181.8 818.2 181.8 772.7 181.8 727.3 181.8 681.8 181.8 636.4 193.2 602.3 204.5 568.2 238.6 556.8 272.7 545.5 318.2 545.5 363.6 545.5 409.1 545.5 454.5 545.5 500 545.5 545.5 545.5 590.9 545.5 636.4 545.5 670.5 556.8 704.5 568.2 715.9 602.3 727.3 636.4 727.3 681.8 727.3 727.3 727.3 772.7 727.3 818.2 738.6 852.3M420.5 261.4Q454.5 272.7 488.6 261.4 522.7 250 534.1 215.9 545.5 181.8 534.1 147.7 522.7 113.6 488.6 102.3 454.5 90.9 420.5 102.3 386.4 113.6 375 147.7 363.6 181.8 375 215.9 386.4 250 420.5 261.4", + "width": 909 + }, + "search": [ + "save" + ] + }, + { + "uid": "dd6df3b754e8d0dbf09d9b24088f0442", + "css": "box", + "code": 59422, + "src": "iconic" + }, + { + "uid": "3b1a66b7efb81f4f8980f3edc369eeda", + "css": "link", + "code": 59444, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M208.3 0C180.6 0 156.2 3.5 135.4 10.4 114.6 17.4 97.2 27.8 83.3 41.7L41.7 83.3C27.8 97.2 17.4 114.6 10.4 135.4 3.5 156.3 0 180.6 0 208.3V291.7 375 458.3 541.7 625 708.3 791.7C0 819.4 3.5 843.8 10.4 864.6 17.4 885.4 27.8 902.8 41.7 916.7L83.3 958.3C97.2 972.2 114.6 982.6 135.4 989.6 156.2 996.5 180.6 1000 208.3 1000H291.7 375 458.3 541.7 625 708.3 791.7C819.4 1000 843.7 996.5 864.6 989.6 885.4 982.6 902.8 972.2 916.7 958.3L958.3 916.7C972.2 902.8 982.6 885.4 989.6 864.6 996.5 843.8 1000 819.4 1000 791.7 1000 763.9 996.5 739.6 989.6 718.8 982.6 697.9 972.2 680.6 958.3 666.7L916.7 625C902.8 611.1 888.9 604.2 875 604.2 861.1 604.2 850.7 614.6 843.7 635.4 836.8 656.3 833.3 680.6 833.3 708.3 833.3 736.1 829.9 760.4 822.9 781.3 816 802.1 802.1 816 781.2 822.9 760.4 829.9 736.1 833.3 708.3 833.3H625 541.7 458.3 375 291.7C263.9 833.3 239.6 829.9 218.7 822.9 197.9 816 184 802.1 177.1 781.3 170.1 760.4 166.7 736.1 166.7 708.3V625 541.7 458.3 375 291.7C166.7 263.9 170.1 239.6 177.1 218.8 184 197.9 197.9 184 218.7 177.1 239.6 170.1 263.9 166.7 291.7 166.7 319.4 166.7 343.7 163.2 364.6 156.3 385.4 149.3 395.8 138.9 395.8 125 395.8 111.1 388.9 97.2 375 83.3L333.3 41.7C319.4 27.8 302.1 17.4 281.2 10.4 260.4 3.5 236.1 0 208.3 0ZM625 0C597.2 0 572.9 3.5 552.1 10.4 531.2 17.4 520.8 27.8 520.8 41.7 520.8 55.6 527.8 69.4 541.7 83.3L583.3 125 625 166.7C638.9 180.6 645.8 194.4 645.8 208.3 645.8 222.2 638.9 236.1 625 250L583.3 291.7 541.7 333.3 500 375 458.3 416.7 416.7 458.3 375 500C361.1 513.9 350.7 531.3 343.7 552.1 336.8 572.9 336.8 593.8 343.7 614.6 350.7 635.4 364.6 649.3 385.4 656.3 406.2 663.2 427.1 663.2 447.9 656.3 468.7 649.3 486.1 638.9 500 625L541.7 583.3 583.3 541.7 625 500 666.7 458.3 708.3 416.7 750 375C763.9 361.1 777.8 354.2 791.7 354.2 805.6 354.2 819.4 361.1 833.3 375L875 416.7 916.7 458.3C930.6 472.2 944.4 479.2 958.3 479.2 972.2 479.2 982.6 468.8 989.6 447.9 996.5 427.1 1000 402.8 1000 375V291.7 208.3 125C1000 97.2 996.5 72.9 989.6 52.1 982.6 31.3 968.7 17.4 947.9 10.4 927.1 3.5 902.8 0 875 0H791.7 708.3Z", + "width": 1000 + }, + "search": [ + "link" + ] + }, + { + "uid": "f08ba9f0e8f9b426a92efcaa59c1e932", + "css": "reddit-alien", + "code": 62081, + "src": "fontawesome" + }, + { + "uid": "4a0bb1ac004980bb3837560d4c9e8cee", + "css": "github_", + "code": 62216, + "src": "brandico" + }, + { + "uid": "909f99f11c6b6551bf757b6e809f98f3", + "css": "googleplay", + "code": 59453, + "src": "zocial" + }, + { + "uid": "aaf371ab44841e9aaffebd179d324ce4", + "css": "android", + "code": 59461, + "src": "zocial" + }, + { + "uid": "b846892636bd74112998bb159bdddf27", + "css": "trello", + "code": 61825, + "src": "fontawesome" + }, + { + "uid": "ffe24157e3c63b2ad9526b4e779caefb", + "css": "itchio", + "code": 59468, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M303.8 44.3Q329.1 19 367.1 6.3 405.1-6.3 443 6.3 481 19 506.3 44.3 531.6 69.6 569.6 82.3 607.6 94.9 658.2 94.9 708.9 94.9 759.5 94.9 810.1 94.9 848.1 82.3 886.1 69.6 911.4 44.3 936.7 19 974.7 6.3 1012.7-6.3 1050.6 6.3 1088.6 19 1113.9 44.3 1139.2 69.6 1164.6 94.9 1189.9 120.3 1202.5 158.2 1215.2 196.2 1215.2 246.8 1215.2 297.5 1227.8 335.4 1240.5 373.4 1265.8 398.7 1291.1 424.1 1316.5 449.4 1341.8 474.7 1367.1 500 1392.4 525.3 1405.1 563.3 1417.7 601.3 1417.7 651.9 1417.7 702.5 1417.7 753.2 1417.7 803.8 1405.1 841.8 1392.4 879.7 1367.1 905.1 1341.8 930.4 1316.5 955.7 1291.1 981 1253.2 993.7 1215.2 1006.3 1177.2 993.7 1139.2 981 1113.9 955.7 1088.6 930.4 1063.3 905.1 1038 879.7 1012.7 854.4 987.3 829.1 949.4 816.5 911.4 803.8 860.8 803.8 810.1 803.8 759.5 803.8 708.9 803.8 658.2 803.8 607.6 803.8 557 803.8 506.3 803.8 468.4 816.5 430.4 829.1 405.1 854.4 379.7 879.7 354.4 905.1 329.1 930.4 303.8 955.7 278.5 981 240.5 993.7 202.5 1006.3 164.6 993.7 126.6 981 101.3 955.7 75.9 930.4 50.6 905.1 25.3 879.7 12.7 841.8 0 803.8 0 753.2 0 702.5 0 651.9 0 601.3 12.7 563.3 25.3 525.3 50.6 500 75.9 474.7 101.3 449.4 126.6 424.1 151.9 398.7 177.2 373.4 189.9 335.4 202.5 297.5 202.5 246.8 202.5 196.2 215.2 158.2 227.8 120.3 253.2 94.9 278.5 69.6 303.8 44.3M670.9 689.9Q708.9 702.5 746.8 689.9 784.8 677.2 797.5 639.2 810.1 601.3 822.8 563.3 835.4 525.3 873.4 512.7 911.4 500 949.4 487.3 987.3 474.7 987.3 449.4 987.3 424.1 962 398.7 936.7 373.4 911.4 348.1 886.1 322.8 860.8 297.5 835.4 272.2 810.1 246.8 784.8 221.5 746.8 208.9 708.9 196.2 670.9 208.9 632.9 221.5 607.6 246.8 582.3 272.2 557 297.5 531.6 322.8 506.3 348.1 481 373.4 455.7 398.7 430.4 424.1 430.4 449.4 430.4 474.7 468.4 487.3 506.3 500 544.3 512.7 582.3 525.3 594.9 563.3 607.6 601.3 620.3 639.2 632.9 677.2 670.9 689.9", + "width": 1418 + }, + "search": [ + "itchio" + ] + }, + { + "uid": "4fa999c5ba68a4ec62d4abe5e8e51076", + "css": "line", + "code": 59473, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M836.8 36.8Q857.9 15.8 889.5 5.3 921.1-5.3 952.6 5.3 984.2 15.8 994.7 47.4 1005.3 78.9 994.7 110.5 984.2 142.1 963.2 163.2 942.1 184.2 921.1 205.3 900 226.3 878.9 247.4 857.9 268.4 836.8 289.5 815.8 310.5 794.7 331.6 773.7 352.6 752.6 373.7 731.6 394.7 710.5 415.8 689.5 436.8 668.4 457.9 647.4 478.9 626.3 500 605.3 521.1 584.2 542.1 563.2 563.2 542.1 584.2 521.1 605.3 500 626.3 478.9 647.4 457.9 668.4 436.8 689.5 415.8 710.5 394.7 731.6 373.7 752.6 352.6 773.7 331.6 794.7 310.5 815.8 289.5 836.8 268.4 857.9 247.4 878.9 226.3 900 205.3 921.1 184.2 942.1 163.2 963.2 142.1 984.2 110.5 994.7 78.9 1005.3 47.4 994.7 15.8 984.2 5.3 952.6-5.3 921.1 5.3 889.5 15.8 857.9 36.8 836.8 57.9 815.8 78.9 794.7 100 773.7 121.1 752.6 142.1 731.6 163.2 710.5 184.2 689.5 205.3 668.4 226.3 647.4 247.4 626.3 268.4 605.3 289.5 584.2 310.5 563.2 331.6 542.1 352.6 521.1 373.7 500 394.7 478.9 415.8 457.9 436.8 436.8 457.9 415.8 478.9 394.7 500 373.7 521.1 352.6 542.1 331.6 563.2 310.5 584.2 289.5 605.3 268.4 626.3 247.4 647.4 226.3 668.4 205.3 689.5 184.2 710.5 163.2 731.6 142.1 752.6 121.1 773.7 100 794.7 78.9 815.8 57.9 836.8 36.8", + "width": 1000 + }, + "search": [ + "line" + ] + }, + { + "uid": "d4d06d27c6e566237097413b3695b4aa", + "css": "spray", + "code": 59474, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M18.2 0C6.1 0 0 6.1 0 18.2 0 30.3 6.1 36.4 18.2 36.4 30.3 36.4 36.4 30.3 36.4 18.2 36.4 6.1 30.3 0 18.2 0ZM454.5 54.5C430.3 54.5 409.1 57.6 390.9 63.6 372.7 69.7 363.6 78.8 363.6 90.9 363.6 103 369.7 115.2 381.8 127.3 393.9 139.4 400 151.5 400 163.6 400 175.8 393.9 187.9 381.8 200L345.5 236.4 309.1 272.7 272.7 309.1 236.4 345.5C224.2 357.6 218.2 369.7 218.2 381.8 218.2 393.9 227.3 403 245.5 409.1 263.6 415.2 284.8 418.2 309.1 418.2H381.8 454.5 527.3 600 672.7C697 418.2 718.2 415.2 736.4 409.1 754.5 403 763.6 393.9 763.6 381.8 763.6 369.7 757.6 357.6 745.5 345.5L709.1 309.1 672.7 272.7C660.6 260.6 651.5 245.5 645.5 227.3 639.4 209.1 636.4 187.9 636.4 163.6 636.4 139.4 633.3 118.2 627.3 100 621.2 81.8 609.1 69.7 590.9 63.6 572.7 57.6 551.5 54.5 527.3 54.5ZM163.6 72.7C151.5 72.7 145.5 78.8 145.5 90.9 145.5 103 151.5 115.2 163.6 127.3 175.8 139.4 181.8 151.5 181.8 163.6 181.8 175.8 175.8 187.9 163.6 200 151.5 212.1 145.5 224.2 145.5 236.4 145.5 248.5 151.5 254.5 163.6 254.5 175.8 254.5 187.9 248.5 200 236.4L236.4 200C248.5 187.9 254.5 175.8 254.5 163.6 254.5 151.5 248.5 139.4 236.4 127.3L200 90.9C187.9 78.8 175.8 72.7 163.6 72.7ZM18.2 145.5C6.1 145.5 0 151.5 0 163.6 0 175.8 6.1 181.8 18.2 181.8 30.3 181.8 36.4 175.8 36.4 163.6 36.4 151.5 30.3 145.5 18.2 145.5ZM18.2 290.9C6.1 290.9 0 297 0 309.1 0 321.2 6.1 327.3 18.2 327.3 30.3 327.3 36.4 321.2 36.4 309.1 36.4 297 30.3 290.9 18.2 290.9ZM309.1 490.9C284.8 490.9 263.6 493.9 245.5 500 227.3 506.1 215.2 518.2 209.1 536.4 203 554.5 200 575.8 200 600V672.7 745.5C200 769.7 203 790.9 209.1 809.1 215.2 827.3 227.3 839.4 245.5 845.5 263.6 851.5 284.8 854.5 309.1 854.5H381.8 454.5 527.3 600 672.7C697 854.5 718.2 851.5 736.4 845.5 754.5 839.4 766.7 827.3 772.7 809.1 778.8 790.9 781.8 769.7 781.8 745.5V672.7 600C781.8 575.8 778.8 554.5 772.7 536.4 766.7 518.2 754.5 506.1 736.4 500 718.2 493.9 697 490.9 672.7 490.9H600 527.3 454.5 381.8ZM309.1 927.3C284.8 927.3 263.6 930.3 245.5 936.4 227.3 942.4 218.2 951.5 218.2 963.6 218.2 975.8 227.3 984.8 245.5 990.9 263.6 997 284.8 1000 309.1 1000H381.8 454.5 527.3 600 672.7C697 1000 718.2 997 736.4 990.9 754.5 984.8 763.6 975.8 763.6 963.6 763.6 951.5 754.5 942.4 736.4 936.4 718.2 930.3 697 927.3 672.7 927.3H600 527.3 454.5 381.8Z", + "width": 782 + }, + "search": [ + "spray" + ] + }, + { + "uid": "eab433e0de7fbc7ce341bca83f184abb", + "css": "fill", + "code": 59457, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M426 35.9Q443.9 17.9 470.9 9 497.8 0 533.6 0 569.5 0 596.4 9 623.3 17.9 641.3 35.9 659.2 53.8 677.1 71.7 695.1 89.7 704 116.6 713 143.5 713 179.4 713 215.2 704 242.2 695.1 269.1 677.1 287 659.2 304.9 659.2 322.9 659.2 340.8 686.1 349.8 713 358.7 748.9 358.7 784.8 358.7 811.7 367.7 838.6 376.7 856.5 394.6 874.4 412.6 892.4 430.5 910.3 448.4 928.3 466.4 946.2 484.3 964.1 502.2 982.1 520.2 991 547.1 1000 574 1000 609.9 1000 645.7 1000 681.6 1000 717.5 1000 753.4 1000 789.2 1000 825.1 1000 861 991 887.9 982.1 914.8 964.1 914.8 946.2 914.8 937.2 887.9 928.3 861 928.3 825.1 928.3 789.2 919.3 762.3 910.3 735.4 892.4 717.5 874.4 699.6 865.5 672.6 856.5 645.7 847.5 618.8 838.6 591.9 820.6 591.9 802.7 591.9 784.8 609.9 766.8 627.8 748.9 645.7 730.9 663.7 713 681.6 695.1 699.6 677.1 717.5 659.2 735.4 641.3 753.4 623.3 771.3 605.4 789.2 587.4 807.2 569.5 825.1 551.6 843 533.6 861 515.7 878.9 497.8 896.9 479.8 914.8 461.9 932.7 443.9 950.7 426 968.6 408.1 986.5 381.2 995.5 354.3 1004.5 327.4 995.5 300.4 986.5 282.5 968.6 264.6 950.7 246.6 932.7 228.7 914.8 210.8 896.9 192.8 878.9 174.9 861 157 843 139 825.1 121.1 807.2 103.1 789.2 85.2 771.3 67.3 753.4 49.3 735.4 31.4 717.5 13.5 699.6 4.5 672.6-4.5 645.7 4.5 618.8 13.5 591.9 31.4 574 49.3 556.1 67.3 538.1 85.2 520.2 103.1 502.2 121.1 484.3 139 466.4 157 448.4 174.9 430.5 192.8 412.6 210.8 394.6 228.7 376.7 246.6 376.7 264.6 376.7 273.5 403.6 282.5 430.5 273.5 457.4 264.6 484.3 246.6 502.2 228.7 520.2 210.8 538.1 192.8 556.1 174.9 574 157 591.9 148 618.8 139 645.7 148 672.6 157 699.6 174.9 717.5 192.8 735.4 210.8 753.4 228.7 771.3 246.6 789.2 264.6 807.2 282.5 825.1 300.4 843 327.4 852 354.3 861 381.2 852 408.1 843 426 825.1 443.9 807.2 461.9 789.2 479.8 771.3 497.8 753.4 515.7 735.4 533.6 717.5 551.6 699.6 569.5 681.6 587.4 663.7 605.4 645.7 623.3 627.8 641.3 609.9 659.2 591.9 677.1 574 695.1 556.1 695.1 538.1 695.1 520.2 677.1 502.2 659.2 484.3 641.3 466.4 623.3 448.4 605.4 430.5 587.4 412.6 569.5 394.6 551.6 376.7 533.6 358.7 515.7 340.8 506.7 313.9 497.8 287 506.7 260.1 515.7 233.2 533.6 233.2 551.6 233.2 569.5 251.1 587.4 269.1 605.4 269.1 623.3 269.1 632.3 242.2 641.3 215.2 641.3 179.4 641.3 143.5 632.3 116.6 623.3 89.7 596.4 80.7 569.5 71.7 533.6 71.7 497.8 71.7 470.9 80.7 443.9 89.7 435 116.6 426 143.5 426 179.4 426 215.2 426 251.1 426 287 426 322.9 426 358.7 426 394.6 426 430.5 417 457.4 408.1 484.3 390.1 484.3 372.2 484.3 363.2 457.4 354.3 430.5 354.3 394.6 354.3 358.7 354.3 322.9 354.3 287 354.3 251.1 354.3 215.2 354.3 179.4 354.3 143.5 363.2 116.6 372.2 89.7 390.1 71.7 408.1 53.8 426 35.9", + "width": 1000 + }, + "search": [ + "fill" + ] + }, + { + "uid": "d9d4c18716c0d8b23485258e35d9e3a9", + "css": "paste", + "code": 59419, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M392.9 0C369 0 348.2 3 330.4 8.9 312.5 14.9 297.6 23.8 285.7 35.7 273.8 47.6 258.9 56.5 241.1 62.5 223.2 68.5 202.4 71.4 178.6 71.4 154.8 71.4 133.9 74.4 116.1 80.4 98.2 86.3 83.3 95.2 71.4 107.1L35.7 142.9C23.8 154.8 14.9 169.6 8.9 187.5 3 205.4 0 226.2 0 250V321.4 392.9 464.3 535.7 607.1 678.6 750 821.4C0 845.2 3 866.1 8.9 883.9 14.9 901.8 23.8 916.7 35.7 928.6L71.4 964.3C83.3 976.2 98.2 985.1 116.1 991.1 133.9 997 154.8 1000 178.6 1000H250 321.4 392.9 464.3 535.7 607.1 678.6C702.4 1000 723.2 997 741.1 991.1 758.9 985.1 773.8 976.2 785.7 964.3L821.4 928.6C833.3 916.7 842.3 901.8 848.2 883.9 854.2 866.1 857.1 845.2 857.1 821.4V750 678.6 607.1 535.7 464.3 392.9 321.4 250C857.1 226.2 854.2 205.4 848.2 187.5 842.3 169.6 833.3 154.8 821.4 142.9L785.7 107.1C773.8 95.2 758.9 86.3 741.1 80.4 723.2 74.4 702.4 71.4 678.6 71.4 654.8 71.4 633.9 68.5 616.1 62.5 598.2 56.5 583.3 47.6 571.4 35.7 559.5 23.8 544.6 14.9 526.8 8.9 508.9 3 488.1 0 464.3 0ZM428.6 75.9C437.5 75.9 446.4 77.4 455.4 80.4 473.2 86.3 482.1 95.2 482.1 107.1 482.1 119 473.2 128 455.4 133.9 437.5 139.9 419.6 139.9 401.8 133.9 383.9 128 375 119 375 107.1 375 95.2 383.9 86.3 401.8 80.4 410.7 77.4 419.6 75.9 428.6 75.9ZM214.3 218.8C223.2 218.8 232.1 220.2 241.1 223.2 258.9 229.2 273.8 238.1 285.7 250 297.6 261.9 312.5 270.8 330.4 276.8 348.2 282.7 369 285.7 392.9 285.7H464.3C488.1 285.7 508.9 282.7 526.8 276.8 544.6 270.8 559.5 261.9 571.4 250 583.3 238.1 598.2 229.2 616.1 223.2 633.9 217.3 651.8 217.3 669.6 223.2 687.5 229.2 699.4 241.1 705.4 258.9 711.3 276.8 714.3 297.6 714.3 321.4V392.9 464.3 535.7 607.1 678.6 750C714.3 773.8 711.3 794.6 705.4 812.5 699.4 830.4 687.5 842.3 669.6 848.2 651.8 854.2 631 857.1 607.1 857.1H535.7 464.3 392.9 321.4 250C226.2 857.1 205.4 854.2 187.5 848.2 169.6 842.3 157.7 830.4 151.8 812.5 145.8 794.6 142.9 773.8 142.9 750V678.6 607.1 535.7 464.3 392.9 321.4C142.9 297.6 145.8 276.8 151.8 258.9 157.7 241.1 169.6 229.2 187.5 223.2 196.4 220.2 205.4 218.8 214.3 218.8ZM321.4 428.6C297.6 428.6 276.8 431.5 258.9 437.5 241.1 443.5 232.1 452.4 232.1 464.3 232.1 476.2 241.1 485.1 258.9 491.1 276.8 497 297.6 500 321.4 500H392.9 464.3 535.7C559.5 500 580.4 497 598.2 491.1 616.1 485.1 625 476.2 625 464.3 625 452.4 616.1 443.5 598.2 437.5 580.4 431.5 559.5 428.6 535.7 428.6H464.3 392.9ZM321.4 571.4C297.6 571.4 276.8 574.4 258.9 580.4 241.1 586.3 232.1 595.2 232.1 607.1 232.1 619 241.1 628 258.9 633.9 276.8 639.9 297.6 642.9 321.4 642.9H392.9 464.3 535.7C559.5 642.9 580.4 639.9 598.2 633.9 616.1 628 625 619 625 607.1 625 595.2 616.1 586.3 598.2 580.4 580.4 574.4 559.5 571.4 535.7 571.4H464.3 392.9ZM321.4 714.3C297.6 714.3 276.8 717.3 258.9 723.2 241.1 729.2 232.1 738.1 232.1 750 232.1 761.9 241.1 770.8 258.9 776.8 276.8 782.7 297.6 785.7 321.4 785.7H392.9 464.3 535.7C559.5 785.7 580.4 782.7 598.2 776.8 616.1 770.8 625 761.9 625 750 625 738.1 616.1 729.2 598.2 723.2 580.4 717.3 559.5 714.3 535.7 714.3H464.3 392.9Z", + "width": 857 + }, + "search": [ + "paste" + ] + }, + { + "uid": "a69daaa147a4c2bee4b985727c89e1ff", + "css": "book", + "code": 59423, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M227.3 0C197 0 170.5 3.8 147.7 11.4 125 18.9 106.1 30.3 90.9 45.5L45.5 90.9C30.3 106.1 18.9 125 11.4 147.7 3.8 170.5 0 197 0 227.3V318.2 409.1 500 590.9 681.8 772.7 863.6C0 893.9 3.8 920.5 11.4 943.2 18.9 965.9 34.1 981.1 56.8 988.6 79.5 996.2 106.1 1000 136.4 1000H227.3 318.2 409.1 500 590.9 681.8C712.1 1000 738.6 996.2 761.4 988.6 784.1 981.1 803 969.7 818.2 954.5L863.6 909.1C878.8 893.9 890.2 875 897.7 852.3 905.3 829.5 909.1 803 909.1 772.7V681.8 590.9 500 409.1 318.2 227.3 136.4C909.1 106.1 905.3 79.5 897.7 56.8 890.2 34.1 875 18.9 852.3 11.4 829.5 3.8 803 0 772.7 0H681.8 590.9 500 409.1 318.2ZM318.2 90.9H409.1 500 590.9 681.8C712.1 90.9 738.6 94.7 761.4 102.3 784.1 109.8 799.2 125 806.8 147.7 814.4 170.5 818.2 197 818.2 227.3V318.2 409.1 500 590.9 681.8C818.2 712.1 814.4 738.6 806.8 761.4 799.2 784.1 784.1 799.2 761.4 806.8 738.6 814.4 712.1 818.2 681.8 818.2H590.9 500 409.1 318.2C287.9 818.2 261.4 814.4 238.6 806.8 215.9 799.2 200.8 784.1 193.2 761.4 185.6 738.6 181.8 712.1 181.8 681.8V590.9 500 409.1 318.2 227.3C181.8 197 185.6 170.5 193.2 147.7 200.8 125 215.9 109.8 238.6 102.3 261.4 94.7 287.9 90.9 318.2 90.9ZM409.1 181.8C378.8 181.8 352.3 185.6 329.5 193.2 306.8 200.8 291.7 215.9 284.1 238.6 276.5 261.4 276.5 284.1 284.1 306.8 291.7 329.5 306.8 344.7 329.5 352.3 352.3 359.8 378.8 363.6 409.1 363.6H500 590.9C621.2 363.6 647.7 359.8 670.5 352.3 693.2 344.7 708.3 329.5 715.9 306.8 723.5 284.1 723.5 261.4 715.9 238.6 708.3 215.9 693.2 200.8 670.5 193.2 647.7 185.6 621.2 181.8 590.9 181.8H500ZM409.1 454.5C378.8 454.5 352.3 458.3 329.5 465.9 306.8 473.5 295.5 484.8 295.5 500 295.5 515.2 306.8 526.5 329.5 534.1 352.3 541.7 378.8 545.5 409.1 545.5H500 590.9C621.2 545.5 647.7 541.7 670.5 534.1 693.2 526.5 704.5 515.2 704.5 500 704.5 484.8 693.2 473.5 670.5 465.9 647.7 458.3 621.2 454.5 590.9 454.5H500ZM409.1 636.4C378.8 636.4 352.3 640.2 329.5 647.7 306.8 655.3 295.5 666.7 295.5 681.8 295.5 697 306.8 708.3 329.5 715.9 352.3 723.5 378.8 727.3 409.1 727.3H500 590.9C621.2 727.3 647.7 723.5 670.5 715.9 693.2 708.3 704.5 697 704.5 681.8 704.5 666.7 693.2 655.3 670.5 647.7 647.7 640.2 621.2 636.4 590.9 636.4H500Z", + "width": 909 + }, + "search": [ + "book" + ] + }, + { + "uid": "ceb9cde822ac23f35c3bd67a8d0c4fac", + "css": "host", + "code": 59437, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M11.4 56.8Q22.7 22.7 56.8 11.4 90.9 0 136.4 0 181.8 0 227.3 0 272.7 0 318.2 0 363.6 0 409.1 0 454.5 0 500 0 545.5 0 590.9 0 636.4 0 681.8 0 727.3 0 772.7 0 818.2 0 863.6 0 909.1 0 954.5 0 1000 0 1034.1 11.4 1068.2 22.7 1079.5 56.8 1090.9 90.9 1090.9 136.4 1090.9 181.8 1079.5 215.9 1068.2 250 1034.1 261.4 1000 272.7 954.5 272.7 909.1 272.7 863.6 272.7 818.2 272.7 772.7 272.7 727.3 272.7 681.8 272.7 636.4 272.7 590.9 272.7 545.5 272.7 500 272.7 454.5 272.7 409.1 272.7 363.6 272.7 318.2 272.7 272.7 272.7 227.3 272.7 181.8 272.7 136.4 272.7 90.9 272.7 56.8 261.4 22.7 250 11.4 215.9 0 181.8 0 136.4 0 90.9 11.4 56.8M409.1 181.8Q454.5 181.8 488.6 170.5 522.7 159.1 522.7 136.4 522.7 113.6 488.6 102.3 454.5 90.9 409.1 90.9 363.6 90.9 318.2 90.9 272.7 90.9 227.3 90.9 181.8 90.9 147.7 102.3 113.6 113.6 113.6 136.4 113.6 159.1 147.7 170.5 181.8 181.8 227.3 181.8 272.7 181.8 318.2 181.8 363.6 181.8 409.1 181.8M840.9 136.4Q840.9 159.1 863.6 159.1 886.4 159.1 886.4 136.4 886.4 113.6 863.6 113.6 840.9 113.6 840.9 136.4M11.4 420.5Q22.7 386.4 56.8 375 90.9 363.6 136.4 363.6 181.8 363.6 227.3 363.6 272.7 363.6 318.2 363.6 363.6 363.6 409.1 363.6 454.5 363.6 500 363.6 545.5 363.6 590.9 363.6 636.4 363.6 681.8 363.6 727.3 363.6 772.7 363.6 818.2 363.6 863.6 363.6 909.1 363.6 954.5 363.6 1000 363.6 1034.1 375 1068.2 386.4 1079.5 420.5 1090.9 454.5 1090.9 500 1090.9 545.5 1079.5 579.5 1068.2 613.6 1034.1 625 1000 636.4 954.5 636.4 909.1 636.4 863.6 636.4 818.2 636.4 772.7 636.4 727.3 636.4 681.8 636.4 636.4 636.4 590.9 636.4 545.5 636.4 500 636.4 454.5 636.4 409.1 636.4 363.6 636.4 318.2 636.4 272.7 636.4 227.3 636.4 181.8 636.4 136.4 636.4 90.9 636.4 56.8 625 22.7 613.6 11.4 579.5 0 545.5 0 500 0 454.5 11.4 420.5M409.1 545.5Q454.5 545.5 488.6 534.1 522.7 522.7 522.7 500 522.7 477.3 488.6 465.9 454.5 454.5 409.1 454.5 363.6 454.5 318.2 454.5 272.7 454.5 227.3 454.5 181.8 454.5 147.7 465.9 113.6 477.3 113.6 500 113.6 522.7 147.7 534.1 181.8 545.5 227.3 545.5 272.7 545.5 318.2 545.5 363.6 545.5 409.1 545.5M840.9 500Q840.9 522.7 863.6 522.7 886.4 522.7 886.4 500 886.4 477.3 863.6 477.3 840.9 477.3 840.9 500M11.4 784.1Q22.7 750 56.8 738.6 90.9 727.3 136.4 727.3 181.8 727.3 227.3 727.3 272.7 727.3 318.2 727.3 363.6 727.3 409.1 727.3 454.5 727.3 500 727.3 545.5 727.3 590.9 727.3 636.4 727.3 681.8 727.3 727.3 727.3 772.7 727.3 818.2 727.3 863.6 727.3 909.1 727.3 954.5 727.3 1000 727.3 1034.1 738.6 1068.2 750 1079.5 784.1 1090.9 818.2 1090.9 863.6 1090.9 909.1 1079.5 943.2 1068.2 977.3 1034.1 988.6 1000 1000 954.5 1000 909.1 1000 863.6 1000 818.2 1000 772.7 1000 727.3 1000 681.8 1000 636.4 1000 590.9 1000 545.5 1000 500 1000 454.5 1000 409.1 1000 363.6 1000 318.2 1000 272.7 1000 227.3 1000 181.8 1000 136.4 1000 90.9 1000 56.8 988.6 22.7 977.3 11.4 943.2 0 909.1 0 863.6 0 818.2 11.4 784.1M409.1 909.1Q454.5 909.1 488.6 897.7 522.7 886.4 522.7 863.6 522.7 840.9 488.6 829.5 454.5 818.2 409.1 818.2 363.6 818.2 318.2 818.2 272.7 818.2 227.3 818.2 181.8 818.2 147.7 829.5 113.6 840.9 113.6 863.6 113.6 886.4 147.7 897.7 181.8 909.1 227.3 909.1 272.7 909.1 318.2 909.1 363.6 909.1 409.1 909.1M840.9 863.6Q840.9 886.4 863.6 886.4 886.4 886.4 886.4 863.6 886.4 840.9 863.6 840.9 840.9 840.9 840.9 863.6", + "width": 1091 + }, + "search": [ + "host" + ] + }, + { + "uid": "496a07ca2bfa65f351c24b819fae0362", + "css": "exit", + "code": 59416, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M208.3 0C180.6 0 156.2 3.5 135.4 10.4 114.6 17.4 97.2 27.8 83.3 41.7L41.7 83.3C27.8 97.2 17.4 114.6 10.4 135.4 3.5 156.2 0 180.6 0 208.3V291.7 375 458.3 541.7 625 708.3 791.7C0 819.4 3.5 843.7 10.4 864.6 17.4 885.4 27.8 902.8 41.7 916.7L83.3 958.3C97.2 972.2 114.6 982.6 135.4 989.6 156.2 996.5 180.6 1000 208.3 1000H291.7 375 458.3 541.7 625 708.3C736.1 1000 760.4 996.5 781.3 989.6 802.1 982.6 819.4 972.2 833.3 958.3L875 916.7C888.9 902.8 895.8 888.9 895.8 875 895.8 861.1 885.4 850.7 864.6 843.7 843.8 836.8 819.4 833.3 791.7 833.3H708.3 625 541.7 458.3 375 291.7C263.9 833.3 239.6 829.9 218.7 822.9 197.9 816 184 802.1 177.1 781.2 170.1 760.4 166.7 736.1 166.7 708.3V625 541.7 458.3 375 291.7C166.7 263.9 170.1 239.6 177.1 218.7 184 197.9 197.9 184 218.7 177.1 239.6 170.1 263.9 166.7 291.7 166.7H375 458.3 541.7 625 708.3 791.7C819.4 166.7 843.8 163.2 864.6 156.2 885.4 149.3 895.8 138.9 895.8 125 895.8 111.1 888.9 97.2 875 83.3L833.3 41.7C819.4 27.8 802.1 17.4 781.3 10.4 760.4 3.5 736.1 0 708.3 0H625 541.7 458.3 375 291.7ZM791.7 270.8C777.8 270.8 767.4 281.2 760.4 302.1L739.6 364.6C732.6 385.4 718.8 399.3 697.9 406.2 677.1 413.2 652.8 416.7 625 416.7H541.7 458.3C430.6 416.7 406.2 420.1 385.4 427.1 364.6 434 350.7 447.9 343.7 468.7 336.8 489.6 336.8 510.4 343.7 531.2 350.7 552.1 364.6 566 385.4 572.9 406.2 579.9 430.6 583.3 458.3 583.3H541.7 625C652.8 583.3 677.1 586.8 697.9 593.7 718.8 600.7 732.6 614.6 739.6 635.4L760.4 697.9C767.4 718.7 777.8 729.2 791.7 729.2 805.6 729.2 819.4 722.2 833.3 708.3L875 666.7 916.7 625 958.3 583.3C972.2 569.4 982.6 552.1 989.6 531.2 996.5 510.4 996.5 489.6 989.6 468.7 982.6 447.9 972.2 430.6 958.3 416.7L916.7 375 875 333.3 833.3 291.7C819.4 277.8 805.6 270.8 791.7 270.8Z", + "width": 995 + }, + "search": [ + "exit" + ] + }, + { + "uid": "06a8fb7f89285292492baf4e4f3657be", + "css": "terrain", + "code": 59475, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M340.4 21.3Q361.7 0 383 0 404.3 0 425.5 21.3 446.8 42.6 468.1 63.8 489.4 85.1 510.6 106.4 531.9 127.7 553.2 148.9 574.5 170.2 595.7 191.5 617 212.8 638.3 212.8 659.6 212.8 680.9 191.5 702.1 170.2 723.4 170.2 744.7 170.2 766 191.5 787.2 212.8 808.5 234 829.8 255.3 851.1 276.6 872.3 297.9 893.6 319.1 914.9 340.4 936.2 361.7 957.4 383 978.7 404.3 1000 425.5 1010.6 457.4 1021.3 489.4 1021.3 531.9 1021.3 574.5 1021.3 617 1021.3 659.6 1021.3 702.1 1021.3 744.7 1021.3 787.2 1021.3 829.8 1021.3 872.3 1021.3 914.9 1010.6 946.8 1000 978.7 968.1 989.4 936.2 1000 893.6 1000 851.1 1000 808.5 1000 766 1000 723.4 1000 680.9 1000 638.3 1000 595.7 1000 553.2 1000 510.6 1000 468.1 1000 425.5 1000 383 1000 340.4 1000 297.9 1000 255.3 1000 212.8 1000 170.2 1000 127.7 1000 85.1 1000 53.2 989.4 21.3 978.7 10.6 946.8 0 914.9 0 872.3 0 829.8 0 787.2 0 744.7 0 702.1 0 659.6 0 617 0 574.5 0 531.9 0 489.4 0 446.8 0 404.3 10.6 372.3 21.3 340.4 42.6 319.1 63.8 297.9 85.1 276.6 106.4 255.3 127.7 234 148.9 212.8 170.2 191.5 191.5 170.2 212.8 148.9 234 127.7 255.3 106.4 276.6 85.1 297.9 63.8 319.1 42.6 340.4 21.3M808.5 914.9Q851.1 914.9 883 904.3 914.9 893.6 925.5 861.7 936.2 829.8 936.2 787.2 936.2 744.7 936.2 702.1 936.2 659.6 936.2 617 936.2 574.5 925.5 542.6 914.9 510.6 893.6 489.4 872.3 468.1 851.1 446.8 829.8 425.5 808.5 404.3 787.2 383 766 361.7 744.7 340.4 723.4 340.4 702.1 340.4 680.9 361.7 659.6 383 638.3 383 617 383 595.7 361.7 574.5 340.4 553.2 319.1 531.9 297.9 510.6 276.6 489.4 255.3 468.1 234 446.8 212.8 425.5 191.5 404.3 170.2 383 170.2 361.7 170.2 340.4 191.5 319.1 212.8 297.9 234 276.6 255.3 255.3 276.6 234 297.9 212.8 319.1 191.5 340.4 170.2 361.7 148.9 383 127.7 404.3 106.4 425.5 95.7 457.4 85.1 489.4 85.1 531.9 85.1 574.5 85.1 617 85.1 659.6 85.1 702.1 85.1 744.7 85.1 787.2 85.1 829.8 95.7 861.7 106.4 893.6 138.3 904.3 170.2 914.9 212.8 914.9 255.3 914.9 297.9 914.9 340.4 914.9 383 914.9 425.5 914.9 468.1 914.9 510.6 914.9 553.2 914.9 595.7 914.9 638.3 914.9 680.9 914.9 723.4 914.9 766 914.9 808.5 914.9", + "width": 1021 + }, + "search": [ + "terrain" + ] + }, + { + "uid": "c97c45befeea2eaee193c77fc6c6fd64", + "css": "trash", + "code": 59413, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M260.4 52.1Q270.8 20.8 302.1 10.4 333.3 0 375 0 416.7 0 458.3 0 500 0 531.3 10.4 562.5 20.8 572.9 52.1 583.3 83.3 593.8 114.6 604.2 145.8 635.4 156.3 666.7 166.7 708.3 166.7 750 166.7 781.3 177.1 812.5 187.5 822.9 218.8 833.3 250 833.3 291.7 833.3 333.3 833.3 375 833.3 416.7 822.9 447.9 812.5 479.2 791.7 500 770.8 520.8 760.4 552.1 750 583.3 750 625 750 666.7 750 708.3 750 750 750 791.7 750 833.3 750 875 750 916.7 739.6 947.9 729.2 979.2 697.9 989.6 666.7 1000 625 1000 583.3 1000 541.7 1000 500 1000 458.3 1000 416.7 1000 375 1000 333.3 1000 291.7 1000 250 1000 208.3 1000 166.7 1000 135.4 989.6 104.2 979.2 93.8 947.9 83.3 916.7 83.3 875 83.3 833.3 83.3 791.7 83.3 750 83.3 708.3 83.3 666.7 83.3 625 83.3 583.3 72.9 552.1 62.5 520.8 41.7 500 20.8 479.2 10.4 447.9 0 416.7 0 375 0 333.3 0 291.7 0 250 10.4 218.8 20.8 187.5 52.1 177.1 83.3 166.7 125 166.7 166.7 166.7 197.9 156.3 229.2 145.8 239.6 114.6 250 83.3 260.4 52.1M177.1 864.6Q187.5 895.8 208.3 895.8 229.2 895.8 239.6 864.6 250 833.3 250 791.7 250 750 250 708.3 250 666.7 250 625 250 583.3 239.6 552.1 229.2 520.8 208.3 520.8 187.5 520.8 177.1 552.1 166.7 583.3 166.7 625 166.7 666.7 166.7 708.3 166.7 750 166.7 791.7 166.7 833.3 177.1 864.6M385.4 906.3Q416.7 916.7 447.9 906.3 479.2 895.8 489.6 864.6 500 833.3 500 791.7 500 750 500 708.3 500 666.7 500 625 500 583.3 489.6 552.1 479.2 520.8 447.9 510.4 416.7 500 385.4 510.4 354.2 520.8 343.8 552.1 333.3 583.3 333.3 625 333.3 666.7 333.3 708.3 333.3 750 333.3 791.7 333.3 833.3 343.8 864.6 354.2 895.8 385.4 906.3M593.8 864.6Q604.2 895.8 625 895.8 645.8 895.8 656.3 864.6 666.7 833.3 666.7 791.7 666.7 750 666.7 708.3 666.7 666.7 666.7 625 666.7 583.3 656.3 552.1 645.8 520.8 625 520.8 604.2 520.8 593.8 552.1 583.3 583.3 583.3 625 583.3 666.7 583.3 708.3 583.3 750 583.3 791.7 583.3 833.3 593.8 864.6M625 416.7Q666.7 416.7 697.9 406.3 729.2 395.8 739.6 364.6 750 333.3 739.6 302.1 729.2 270.8 697.9 260.4 666.7 250 625 250 583.3 250 541.7 250 500 250 458.3 250 416.7 250 375 250 333.3 250 291.7 250 250 250 208.3 250 166.7 250 135.4 260.4 104.2 270.8 93.8 302.1 83.3 333.3 93.8 364.6 104.2 395.8 135.4 406.3 166.7 416.7 208.3 416.7 250 416.7 291.7 416.7 333.3 416.7 375 416.7 416.7 416.7 458.3 416.7 500 416.7 541.7 416.7 583.3 416.7 625 416.7M385.4 156.3Q416.7 166.7 447.9 156.3 479.2 145.8 479.2 125 479.2 104.2 447.9 93.8 416.7 83.3 385.4 93.8 354.2 104.2 354.2 125 354.2 145.8 385.4 156.3", + "width": 833 + }, + "search": [ + "trash" + ] + }, + { + "uid": "7e5b51e48fad210964d9b2ef40e120ca", + "css": "refresh", + "code": 59463, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M178.6 0C154.8 0 133.9 3 116.1 8.9 98.2 14.9 83.3 23.8 71.4 35.7L35.7 71.4C23.8 83.3 14.9 98.2 8.9 116.1 3 133.9 0 154.8 0 178.6V250 321.4 392.9 464.3C0 488.1 3 508.9 8.9 526.8 14.9 544.6 26.8 556.5 44.6 562.5 62.5 568.5 80.4 568.5 98.2 562.5 116.1 556.5 128 544.6 133.9 526.8 139.9 508.9 142.9 488.1 142.9 464.3V392.9 321.4 250C142.9 226.2 145.8 205.4 151.8 187.5 157.7 169.6 169.6 157.7 187.5 151.8 205.4 145.8 226.2 142.9 250 142.9H321.4 392.9 464.3 535.7 607.1C631 142.9 651.8 145.8 669.6 151.8 687.5 157.7 696.4 166.7 696.4 178.6 696.4 190.5 690.5 202.4 678.6 214.3 666.7 226.2 660.7 238.1 660.7 250 660.7 261.9 669.6 270.8 687.5 276.8 705.4 282.7 726.2 285.7 750 285.7H821.4C845.2 285.7 866.1 282.7 883.9 276.8 901.8 270.8 913.7 258.9 919.6 241.1 925.6 223.2 928.6 202.4 928.6 178.6V107.1C928.6 83.3 925.6 62.5 919.6 44.6 913.7 26.8 904.8 17.9 892.9 17.9 881 17.9 869 23.8 857.1 35.7 845.2 47.6 833.3 53.6 821.4 53.6 809.5 53.6 797.6 47.6 785.7 35.7 773.8 23.8 758.9 14.9 741.1 8.9 723.2 3 702.4 0 678.6 0H607.1 535.7 464.3 392.9 321.4 250ZM928.6 433C919.6 433 910.7 434.5 901.8 437.5 883.9 443.5 872 455.4 866.1 473.2 860.1 491.1 857.1 511.9 857.1 535.7V607.1 678.6 750C857.1 773.8 854.2 794.6 848.2 812.5 842.3 830.4 830.4 842.3 812.5 848.2 794.6 854.2 773.8 857.1 750 857.1H678.6 607.1 535.7 464.3 392.9C369 857.1 348.2 854.2 330.4 848.2 312.5 842.3 303.6 833.3 303.6 821.4 303.6 809.5 309.5 797.6 321.4 785.7 333.3 773.8 339.3 761.9 339.3 750 339.3 738.1 330.4 729.2 312.5 723.2 294.6 717.3 273.8 714.3 250 714.3H178.6C154.8 714.3 133.9 717.3 116.1 723.2 98.2 729.2 86.3 741.1 80.4 758.9 74.4 776.8 71.4 797.6 71.4 821.4V892.9C71.4 916.7 74.4 937.5 80.4 955.4 86.3 973.2 95.2 982.1 107.1 982.1 119 982.1 131 976.2 142.9 964.3 154.8 952.4 166.7 946.4 178.6 946.4 190.5 946.4 202.4 952.4 214.3 964.3 226.2 976.2 241.1 985.1 258.9 991.1 276.8 997 297.6 1000 321.4 1000H392.9 464.3 535.7 607.1 678.6 750 821.4C845.2 1000 866.1 997 883.9 991.1 901.8 985.1 916.7 976.2 928.6 964.3L964.3 928.6C976.2 916.7 985.1 901.8 991.1 883.9 997 866.1 1000 845.2 1000 821.4V750 678.6 607.1 535.7C1000 511.9 997 491.1 991.1 473.2 985.1 455.4 973.2 443.5 955.4 437.5 946.4 434.5 937.5 433 928.6 433Z", + "width": 1000 + }, + "search": [ + "refresh" + ] + }, + { + "uid": "59925475e7cc98ccd821771cff586bb6", + "css": "pencil_", + "code": 59476, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M836.4 0C824.2 0 812.1 6.1 800 18.2L763.6 54.5 727.3 90.9 690.9 127.3C678.8 139.4 672.7 151.5 672.7 163.6 672.7 175.8 678.8 187.9 690.9 200L727.3 236.4 763.6 272.7 800 309.1C812.1 321.2 824.2 327.3 836.4 327.3 848.5 327.3 860.6 321.2 872.7 309.1L909.1 272.7 945.5 236.4 981.8 200C993.9 187.9 1000 175.8 1000 163.6 1000 151.5 993.9 139.4 981.8 127.3L945.5 90.9 909.1 54.5 872.7 18.2C860.6 6.1 848.5 0 836.4 0ZM545.5 290.9C533.3 290.9 521.2 297 509.1 309.1L472.7 345.5 436.4 381.8 400 418.2 363.6 454.5 327.3 490.9 290.9 527.3 254.5 563.6 218.2 600 181.8 636.4 145.5 672.7 109.1 709.1 72.7 745.5 36.4 781.8C24.2 793.9 15.2 809.1 9.1 827.3 3 845.5 0 866.7 0 890.9 0 915.2 3 936.4 9.1 954.5 15.2 972.7 27.3 984.8 45.5 990.9 63.6 997 84.8 1000 109.1 1000 133.3 1000 154.5 997 172.7 990.9 190.9 984.8 206.1 975.8 218.2 963.6L254.5 927.3 290.9 890.9 327.3 854.5 363.6 818.2 400 781.8 436.4 745.5 472.7 709.1 509.1 672.7 545.5 636.4 581.8 600 618.2 563.6 654.5 527.3 690.9 490.9C703 478.8 709.1 466.7 709.1 454.5 709.1 442.4 703 430.3 690.9 418.2L654.5 381.8 618.2 345.5 581.8 309.1C569.7 297 557.6 290.9 545.5 290.9ZM254.5 654.5C266.7 654.5 278.8 660.6 290.9 672.7L327.3 709.1C339.4 721.2 345.5 733.3 345.5 745.5 345.5 757.6 339.4 769.7 327.3 781.8L290.9 818.2 254.5 854.5 218.2 890.9C206.1 903 190.9 912.1 172.7 918.2 154.5 924.2 136.4 924.2 118.2 918.2 100 912.1 87.9 900 81.8 881.8 75.8 863.6 75.8 845.5 81.8 827.3 87.9 809.1 97 793.9 109.1 781.8L145.5 745.5 181.8 709.1 218.2 672.7C230.3 660.6 242.4 654.5 254.5 654.5Z", + "width": 1000 + }, + "search": [ + "pencil" + ] + }, + { + "uid": "346f9aef245e0c2ded44e31ad7c66acb", + "css": "mode-pvp", + "code": 59477, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M305.8 0C296.1 0 286.4 1.6 276.7 4.9 257.3 11.3 244.3 24.3 237.9 43.7 231.4 63.1 231.4 82.5 237.9 101.9 244.3 121.4 254 137.5 267 150.5L305.8 189.3 344.7 228.2 383.5 267C396.4 279.9 409.4 286.4 422.3 286.4 435.3 286.4 448.2 279.9 461.2 267L500 228.2C512.9 215.2 519.4 202.3 519.4 189.3 519.4 176.4 512.9 163.4 500 150.5L461.2 111.7 422.3 72.8 383.5 34C370.6 21 354.4 11.3 335 4.9 325.2 1.6 315.5 0 305.8 0ZM927.2 0C917.5 0 907.8 1.6 898.1 4.9 878.6 11.3 862.5 21 849.5 34L810.7 72.8 771.8 111.7 733 150.5 694.2 189.3 655.3 228.2 616.5 267 577.7 305.8 538.8 344.7 500 383.5 461.2 422.3 422.3 461.2 383.5 500C370.6 512.9 354.4 522.7 335 529.1 315.5 535.6 296.1 535.6 276.7 529.1 257.3 522.7 241.1 512.9 228.2 500 215.2 487.1 199 477.3 179.6 470.9 160.2 464.4 140.8 464.4 121.4 470.9 101.9 477.3 89 490.3 82.5 509.7 76.1 529.1 76.1 548.5 82.5 568 89 587.4 98.7 603.6 111.7 616.5 124.6 629.5 134.3 645.6 140.8 665 147.2 684.5 147.2 703.9 140.8 723.3 134.3 742.7 124.6 758.9 111.7 771.8L72.8 810.7 34 849.5C21 862.5 11.3 878.6 4.9 898.1-1.6 917.5-1.6 936.9 4.9 956.3 11.3 975.7 24.3 988.7 43.7 995.1 63.1 1001.6 82.5 1001.6 101.9 995.1 121.4 988.7 137.5 979 150.5 966L189.3 927.2 228.2 888.3C241.1 875.4 257.3 865.7 276.7 859.2 296.1 852.8 315.5 852.8 335 859.2 354.4 865.7 370.6 875.4 383.5 888.3 396.4 901.3 412.6 911 432 917.5 451.5 923.9 470.9 923.9 490.3 917.5 509.7 911 522.7 898.1 529.1 878.6 535.6 859.2 535.6 839.8 529.1 820.4 522.7 801 512.9 784.8 500 771.8 487.1 758.9 477.3 742.7 470.9 723.3 464.4 703.9 464.4 684.5 470.9 665 477.3 645.6 487.1 629.5 500 616.5L538.8 577.7 577.7 538.8 616.5 500 655.3 461.2 694.2 422.3 733 383.5 771.8 344.7 810.7 305.8 849.5 267 888.3 228.2 927.2 189.3 966 150.5C979 137.5 988.7 121.4 995.1 101.9 1001.6 82.5 1001.6 63.1 995.1 43.7 988.7 24.3 975.7 11.3 956.3 4.9 946.6 1.6 936.9 0 927.2 0ZM1082.5 466C1072.8 466 1063.1 467.6 1053.4 470.9 1034 477.3 1017.8 487.1 1004.9 500 991.9 512.9 975.7 522.7 956.3 529.1 936.9 535.6 917.5 535.6 898.1 529.1 878.6 522.7 862.5 512.9 849.5 500 836.6 487.1 823.6 480.6 810.7 480.6 797.7 480.6 784.8 487.1 771.8 500L733 538.8C720.1 551.8 713.6 564.7 713.6 577.7 713.6 590.6 720.1 603.6 733 616.5 746 629.5 755.7 645.6 762.1 665 768.6 684.5 768.6 703.9 762.1 723.3 755.7 742.7 746 758.9 733 771.8 720.1 784.8 710.4 801 703.9 820.4 697.4 839.8 697.4 859.2 703.9 878.6 710.4 898.1 723.3 911 742.7 917.5 762.1 923.9 781.6 923.9 801 917.5 820.4 911 836.6 901.3 849.5 888.3 862.5 875.4 878.6 865.7 898.1 859.2 917.5 852.8 936.9 852.8 956.3 859.2 975.7 865.7 991.9 875.4 1004.9 888.3L1043.7 927.2 1082.5 966C1095.5 979 1111.7 988.7 1131.1 995.1 1150.5 1001.6 1169.9 1001.6 1189.3 995.1 1208.7 988.7 1221.7 975.7 1228.2 956.3 1234.6 936.9 1234.6 917.5 1228.2 898.1 1221.7 878.6 1212 862.5 1199 849.5L1160.2 810.7 1121.4 771.8C1108.4 758.9 1098.7 742.7 1092.2 723.3 1085.8 703.9 1085.8 684.5 1092.2 665 1098.7 645.6 1108.4 629.5 1121.4 616.5 1134.3 603.6 1144 587.4 1150.5 568 1157 548.5 1157 529.1 1150.5 509.7 1144 490.3 1131.1 477.3 1111.7 470.9 1101.9 467.6 1092.2 466 1082.5 466Z", + "width": 1233 + }, + "search": [ + "mode-pvp" + ] + }, + { + "uid": "8d74cd519427de451b48df6554aaf593", + "css": "mode-attack", + "code": 59478, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M849.5 34Q868.9 14.6 898.1 4.9 927.2-4.9 956.3 4.9 985.4 14.6 995.1 43.7 1004.9 72.8 995.1 101.9 985.4 131.1 966 150.5 946.6 169.9 927.2 189.3 907.8 208.7 888.3 228.2 868.9 247.6 849.5 267 830.1 286.4 810.7 305.8 791.3 325.2 771.8 344.7 752.4 364.1 733 383.5 713.6 402.9 694.2 422.3 674.8 441.7 655.3 461.2 635.9 480.6 616.5 500 597.1 519.4 577.7 538.8 558.3 558.3 538.8 577.7 519.4 597.1 500 616.5 480.6 635.9 470.9 665 461.2 694.2 470.9 723.3 480.6 752.4 500 771.8 519.4 791.3 529.1 820.4 538.8 849.5 529.1 878.6 519.4 907.8 490.3 917.5 461.2 927.2 432 917.5 402.9 907.8 383.5 888.3 364.1 868.9 335 859.2 305.8 849.5 276.7 859.2 247.6 868.9 228.2 888.3 208.7 907.8 189.3 927.2 169.9 946.6 150.5 966 131.1 985.4 101.9 995.1 72.8 1004.9 43.7 995.1 14.6 985.4 4.9 956.3-4.9 927.2 4.9 898.1 14.6 868.9 34 849.5 53.4 830.1 72.8 810.7 92.2 791.3 111.7 771.8 131.1 752.4 140.8 723.3 150.5 694.2 140.8 665 131.1 635.9 111.7 616.5 92.2 597.1 82.5 568 72.8 538.8 82.5 509.7 92.2 480.6 121.4 470.9 150.5 461.2 179.6 470.9 208.7 480.6 228.2 500 247.6 519.4 276.7 529.1 305.8 538.8 335 529.1 364.1 519.4 383.5 500 402.9 480.6 422.3 461.2 441.7 441.7 461.2 422.3 480.6 402.9 500 383.5 519.4 364.1 538.8 344.7 558.3 325.2 577.7 305.8 597.1 286.4 616.5 267 635.9 247.6 655.3 228.2 674.8 208.7 694.2 189.3 713.6 169.9 733 150.5 752.4 131.1 771.8 111.7 791.3 92.2 810.7 72.8 830.1 53.4 849.5 34", + "width": 1000 + }, + "search": [ + "mode-attack" + ] + }, + { + "uid": "09e5948ca30589e5baa8d27e1c509588", + "css": "mode-survival", + "code": 59479, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M9.7 43.5Q19.3 14.5 48.3 4.8 77.3-4.8 106.3 4.8 135.3 14.5 154.6 33.8 173.9 53.1 193.2 72.5 212.6 91.8 231.9 111.1 251.2 130.4 280.2 140.1 309.2 149.8 347.8 149.8 386.5 149.8 425.1 149.8 463.8 149.8 502.4 149.8 541.1 149.8 579.7 149.8 618.4 149.8 647.3 140.1 676.3 130.4 695.7 111.1 715 91.8 734.3 72.5 753.6 53.1 772.9 33.8 792.3 14.5 821.3 4.8 850.2-4.8 879.2 4.8 908.2 14.5 917.9 43.5 927.5 72.5 927.5 111.1 927.5 149.8 927.5 188.4 927.5 227.1 927.5 265.7 927.5 304.3 927.5 343 927.5 381.6 927.5 420.3 927.5 458.9 927.5 497.6 927.5 536.2 927.5 574.9 927.5 613.5 917.9 642.5 908.2 671.5 888.9 690.8 869.6 710.1 850.2 729.5 830.9 748.8 811.6 768.1 792.3 787.4 772.9 806.8 753.6 826.1 734.3 845.4 715 864.7 695.7 884.1 676.3 903.4 657 922.7 637.7 942 618.4 961.4 599 980.7 570 990.3 541.1 1000 502.4 1000 463.8 1000 425.1 1000 386.5 1000 357.5 990.3 328.5 980.7 309.2 961.4 289.9 942 270.5 922.7 251.2 903.4 231.9 884.1 212.6 864.7 193.2 845.4 173.9 826.1 154.6 806.8 135.3 787.4 115.9 768.1 96.6 748.8 77.3 729.5 58 710.1 38.6 690.8 19.3 671.5 9.7 642.5 0 613.5 0 574.9 0 536.2 0 497.6 0 458.9 0 420.3 0 381.6 0 343 0 304.3 0 265.7 0 227.1 0 188.4 0 149.8 0 111.1 0 72.5 9.7 43.5", + "width": 928 + }, + "search": [ + "mode-survival" + ] + }, + { + "uid": "3a617b3ed2fe766baec5b723b1d9502f", + "css": "command-rally", + "code": 59480, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M166.7 83.3Q208.3 41.7 270.8 20.8 333.3 0 416.7 0 500 0 583.3 0 666.7 0 729.2 20.8 791.7 41.7 833.3 83.3 875 125 916.7 166.7 958.3 208.3 979.2 270.8 1000 333.3 1000 416.7 1000 500 1000 583.3 1000 666.7 979.2 729.2 958.3 791.7 916.7 833.3 875 875 833.3 916.7 791.7 958.3 729.2 979.2 666.7 1000 583.3 1000 500 1000 416.7 1000 333.3 1000 270.8 979.2 208.3 958.3 166.7 916.7 125 875 83.3 833.3 41.7 791.7 20.8 729.2 0 666.7 0 583.3 0 500 0 416.7 0 333.3 20.8 270.8 41.7 208.3 83.3 166.7 125 125 166.7 83.3M437.5 812.5Q500 833.3 562.5 812.5 625 791.7 666.7 750 708.3 708.3 750 666.7 791.7 625 812.5 562.5 833.3 500 812.5 437.5 791.7 375 750 333.3 708.3 291.7 666.7 250 625 208.3 562.5 187.5 500 166.7 437.5 187.5 375 208.3 333.3 250 291.7 291.7 250 333.3 208.3 375 187.5 437.5 166.7 500 187.5 562.5 208.3 625 250 666.7 291.7 708.3 333.3 750 375 791.7 437.5 812.5", + "width": 1000 + }, + "search": [ + "command-rally" + ] + }, + { + "uid": "90fb5a431ca95c46a446c8f4a481d5ce", + "css": "command-attack", + "code": 59481, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M670.2 74.5Q712.8 31.9 776.6 10.6 840.4-10.6 904.3 10.6 968.1 31.9 989.4 95.7 1010.6 159.6 989.4 223.4 968.1 287.2 925.5 329.8 883 372.3 840.4 414.9 797.9 457.4 755.3 500 712.8 542.6 670.2 585.1 627.7 627.7 585.1 670.2 542.6 712.8 542.6 755.3 542.6 797.9 585.1 840.4 627.7 883 627.7 925.5 627.7 968.1 585.1 968.1 542.6 968.1 500 925.5 457.4 883 414.9 883 372.3 883 329.8 925.5 287.2 968.1 223.4 989.4 159.6 1010.6 95.7 989.4 31.9 968.1 10.6 904.3-10.6 840.4 10.6 776.6 31.9 712.8 74.5 670.2 117 627.7 117 585.1 117 542.6 74.5 500 31.9 457.4 31.9 414.9 31.9 372.3 74.5 372.3 117 372.3 159.6 414.9 202.1 457.4 244.7 457.4 287.2 457.4 329.8 414.9 372.3 372.3 414.9 329.8 457.4 287.2 500 244.7 542.6 202.1 585.1 159.6 627.7 117 670.2 74.5", + "width": 1000 + }, + "search": [ + "command-attack" + ] + }, + { + "uid": "17ef812a059c83b5ea3612f860f9569a", + "css": "command-retreat", + "code": 59482, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M352.3 45.5Q397.7 0 443.2 0 488.6 0 511.4 68.2 534.1 136.4 556.8 204.5 579.5 272.7 647.7 295.5 715.9 318.2 806.8 318.2 897.7 318.2 965.9 340.9 1034.1 363.6 1056.8 431.8 1079.5 500 1056.8 568.2 1034.1 636.4 965.9 659.1 897.7 681.8 806.8 681.8 715.9 681.8 647.7 704.5 579.5 727.3 556.8 795.5 534.1 863.6 511.4 931.8 488.6 1000 443.2 1000 397.7 1000 352.3 954.5 306.8 909.1 261.4 863.6 215.9 818.2 170.5 772.7 125 727.3 79.5 681.8 34.1 636.4 11.4 568.2-11.4 500 11.4 431.8 34.1 363.6 79.5 318.2 125 272.7 170.5 227.3 215.9 181.8 261.4 136.4 306.8 90.9 352.3 45.5", + "width": 1068 + }, + "search": [ + "command-retreat" + ] + }, + { + "uid": "1bc31b80669cb5edc2ee5d1370554bc9", + "css": "players", + "code": 59483, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M370.1 55.1Q401.6 23.6 448.8 7.9 496.1-7.9 543.3 7.9 590.6 23.6 622 55.1 653.5 86.6 685 118.1 716.5 149.6 732.3 196.9 748 244.1 732.3 291.3 716.5 338.6 685 370.1 653.5 401.6 653.5 433.1 653.5 464.6 685 496.1 716.5 527.6 748 559.1 779.5 590.6 811 622 842.5 653.5 874 685 905.5 716.5 937 748 968.5 779.5 984.3 826.8 1000 874 984.3 921.3 968.5 968.5 921.3 984.3 874 1000 811 1000 748 1000 685 1000 622 1000 559.1 1000 496.1 1000 433.1 1000 370.1 1000 307.1 1000 244.1 1000 181.1 1000 118.1 1000 70.9 984.3 23.6 968.5 7.9 921.3-7.9 874 7.9 826.8 23.6 779.5 55.1 748 86.6 716.5 118.1 685 149.6 653.5 181.1 622 212.6 590.6 244.1 559.1 275.6 527.6 307.1 496.1 338.6 464.6 338.6 433.1 338.6 401.6 307.1 370.1 275.6 338.6 259.8 291.3 244.1 244.1 259.8 196.9 275.6 149.6 307.1 118.1 338.6 86.6 370.1 55.1", + "width": 992 + }, + "search": [ + "players" + ] + }, + { + "uid": "2073dbd997e5d8e1ffc1322d13ba5585", + "css": "chat", + "code": 59484, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M129 64.5Q161.3 32.3 209.7 16.1 258.1 0 322.6 0 387.1 0 451.6 0 516.1 0 580.6 0 645.2 0 709.7 0 774.2 0 822.6 16.1 871 32.3 903.2 64.5 935.5 96.8 967.7 129 1000 161.3 1016.1 209.7 1032.3 258.1 1032.3 322.6 1032.3 387.1 1032.3 451.6 1032.3 516.1 1016.1 564.5 1000 612.9 967.7 645.2 935.5 677.4 903.2 709.7 871 741.9 822.6 758.1 774.2 774.2 709.7 774.2 645.2 774.2 580.6 774.2 516.1 774.2 451.6 774.2 387.1 774.2 338.7 790.3 290.3 806.5 274.2 854.8 258.1 903.2 241.9 951.6 225.8 1000 193.5 1000 161.3 1000 129 967.7 96.8 935.5 64.5 903.2 32.3 871 16.1 822.6 0 774.2 0 709.7 0 645.2 0 580.6 0 516.1 0 451.6 0 387.1 0 322.6 0 258.1 16.1 209.7 32.3 161.3 64.5 129 96.8 96.8 129 64.5", + "width": 1032 + }, + "search": [ + "chat" + ] + }, + { + "uid": "9dd9e835aebe1060ba7190ad2b2ed951", + "css": "zoom", + "code": 59415, + "src": "fontawesome" + } + ] +} \ No newline at end of file diff --git a/core/assets-raw/fontgen/icons/admin.svg b/core/assets-raw/fontgen/icons/admin.svg new file mode 100644 index 0000000000..8b6e5e5220 --- /dev/null +++ b/core/assets-raw/fontgen/icons/admin.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/book.svg b/core/assets-raw/fontgen/icons/book.svg new file mode 100644 index 0000000000..4ce30ae7ee --- /dev/null +++ b/core/assets-raw/fontgen/icons/book.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/chat.svg b/core/assets-raw/fontgen/icons/chat.svg new file mode 100644 index 0000000000..dab837b908 --- /dev/null +++ b/core/assets-raw/fontgen/icons/chat.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/command-attack.svg b/core/assets-raw/fontgen/icons/command-attack.svg new file mode 100644 index 0000000000..ffd597b7a5 --- /dev/null +++ b/core/assets-raw/fontgen/icons/command-attack.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/command-rally.svg b/core/assets-raw/fontgen/icons/command-rally.svg new file mode 100644 index 0000000000..b402671f69 --- /dev/null +++ b/core/assets-raw/fontgen/icons/command-rally.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/command-retreat.svg b/core/assets-raw/fontgen/icons/command-retreat.svg new file mode 100644 index 0000000000..a608141b9b --- /dev/null +++ b/core/assets-raw/fontgen/icons/command-retreat.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/crafting.svg b/core/assets-raw/fontgen/icons/crafting.svg new file mode 100644 index 0000000000..7f2e56d27c --- /dev/null +++ b/core/assets-raw/fontgen/icons/crafting.svg @@ -0,0 +1,77 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/defense.svg b/core/assets-raw/fontgen/icons/defense.svg new file mode 100644 index 0000000000..0891560c0a --- /dev/null +++ b/core/assets-raw/fontgen/icons/defense.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/distribution.svg b/core/assets-raw/fontgen/icons/distribution.svg new file mode 100644 index 0000000000..f60b2f7251 --- /dev/null +++ b/core/assets-raw/fontgen/icons/distribution.svg @@ -0,0 +1,60 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/effect.svg b/core/assets-raw/fontgen/icons/effect.svg new file mode 100644 index 0000000000..004fecdb71 --- /dev/null +++ b/core/assets-raw/fontgen/icons/effect.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/exit.svg b/core/assets-raw/fontgen/icons/exit.svg new file mode 100644 index 0000000000..2a9a6ddc8f --- /dev/null +++ b/core/assets-raw/fontgen/icons/exit.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/fill.svg b/core/assets-raw/fontgen/icons/fill.svg new file mode 100644 index 0000000000..4435469aac --- /dev/null +++ b/core/assets-raw/fontgen/icons/fill.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/hammer.svg b/core/assets-raw/fontgen/icons/hammer.svg new file mode 100644 index 0000000000..a9ec0312f5 --- /dev/null +++ b/core/assets-raw/fontgen/icons/hammer.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/host.svg b/core/assets-raw/fontgen/icons/host.svg new file mode 100644 index 0000000000..e927c7af2f --- /dev/null +++ b/core/assets-raw/fontgen/icons/host.svg @@ -0,0 +1,72 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/itchio.svg b/core/assets-raw/fontgen/icons/itchio.svg new file mode 100644 index 0000000000..d26eb1780a --- /dev/null +++ b/core/assets-raw/fontgen/icons/itchio.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/line.svg b/core/assets-raw/fontgen/icons/line.svg new file mode 100644 index 0000000000..91e2e2fb29 --- /dev/null +++ b/core/assets-raw/fontgen/icons/line.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/link.svg b/core/assets-raw/fontgen/icons/link.svg new file mode 100644 index 0000000000..34b8a163d7 --- /dev/null +++ b/core/assets-raw/fontgen/icons/link.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/liquid.svg b/core/assets-raw/fontgen/icons/liquid.svg new file mode 100644 index 0000000000..6eb50596d8 --- /dev/null +++ b/core/assets-raw/fontgen/icons/liquid.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/mode-attack.svg b/core/assets-raw/fontgen/icons/mode-attack.svg new file mode 100644 index 0000000000..cc78940688 --- /dev/null +++ b/core/assets-raw/fontgen/icons/mode-attack.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/mode-pvp.svg b/core/assets-raw/fontgen/icons/mode-pvp.svg new file mode 100644 index 0000000000..76c7f31f77 --- /dev/null +++ b/core/assets-raw/fontgen/icons/mode-pvp.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/mode-survival.svg b/core/assets-raw/fontgen/icons/mode-survival.svg new file mode 100644 index 0000000000..aa5d0dcac8 --- /dev/null +++ b/core/assets-raw/fontgen/icons/mode-survival.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/paste.svg b/core/assets-raw/fontgen/icons/paste.svg new file mode 100644 index 0000000000..67a323b6ea --- /dev/null +++ b/core/assets-raw/fontgen/icons/paste.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/pencil.svg b/core/assets-raw/fontgen/icons/pencil.svg new file mode 100644 index 0000000000..f2bfa70403 --- /dev/null +++ b/core/assets-raw/fontgen/icons/pencil.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/players.svg b/core/assets-raw/fontgen/icons/players.svg new file mode 100644 index 0000000000..3cdfa46245 --- /dev/null +++ b/core/assets-raw/fontgen/icons/players.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/power.svg b/core/assets-raw/fontgen/icons/power.svg new file mode 100644 index 0000000000..6d6a5063f2 --- /dev/null +++ b/core/assets-raw/fontgen/icons/power.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/production.svg b/core/assets-raw/fontgen/icons/production.svg new file mode 100644 index 0000000000..74f0f882a9 --- /dev/null +++ b/core/assets-raw/fontgen/icons/production.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/refresh.svg b/core/assets-raw/fontgen/icons/refresh.svg new file mode 100644 index 0000000000..1cde3c7e11 --- /dev/null +++ b/core/assets-raw/fontgen/icons/refresh.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/save.svg b/core/assets-raw/fontgen/icons/save.svg new file mode 100644 index 0000000000..d2b0776e95 --- /dev/null +++ b/core/assets-raw/fontgen/icons/save.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/spray.svg b/core/assets-raw/fontgen/icons/spray.svg new file mode 100644 index 0000000000..a1b0cf95f7 --- /dev/null +++ b/core/assets-raw/fontgen/icons/spray.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/terrain.svg b/core/assets-raw/fontgen/icons/terrain.svg new file mode 100644 index 0000000000..acb45bd0de --- /dev/null +++ b/core/assets-raw/fontgen/icons/terrain.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/trash.svg b/core/assets-raw/fontgen/icons/trash.svg new file mode 100644 index 0000000000..22ed1dee35 --- /dev/null +++ b/core/assets-raw/fontgen/icons/trash.svg @@ -0,0 +1,63 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/turret.svg b/core/assets-raw/fontgen/icons/turret.svg new file mode 100644 index 0000000000..12009fa1f3 --- /dev/null +++ b/core/assets-raw/fontgen/icons/turret.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/units.svg b/core/assets-raw/fontgen/icons/units.svg new file mode 100644 index 0000000000..969b63e096 --- /dev/null +++ b/core/assets-raw/fontgen/icons/units.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/upgrade.svg b/core/assets-raw/fontgen/icons/upgrade.svg new file mode 100644 index 0000000000..9cee75f283 --- /dev/null +++ b/core/assets-raw/fontgen/icons/upgrade.svg @@ -0,0 +1,62 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/core/assets-raw/fontgen/merge.pe b/core/assets-raw/fontgen/merge.pe new file mode 100755 index 0000000000..2dfaf77598 --- /dev/null +++ b/core/assets-raw/fontgen/merge.pe @@ -0,0 +1,3 @@ +Open("core/assets/fonts/font.ttf") +MergeFonts("core/assets-raw/fontgen/out/font.ttf") +Generate("core/assets/fonts/font.ttf") diff --git a/core/assets-raw/sprites/blocks/distribution/underflow-gate.png b/core/assets-raw/sprites/blocks/distribution/underflow-gate.png new file mode 100644 index 0000000000..7eece491ec Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/underflow-gate.png differ diff --git a/core/assets-raw/sprites/blocks/production/separator-liquid.png b/core/assets-raw/sprites/blocks/production/separator-liquid.png index f9adfeb523..0f81574062 100644 Binary files a/core/assets-raw/sprites/blocks/production/separator-liquid.png and b/core/assets-raw/sprites/blocks/production/separator-liquid.png differ diff --git a/core/assets-raw/sprites/blocks/production/separator-spinner.png b/core/assets-raw/sprites/blocks/production/separator-spinner.png new file mode 100644 index 0000000000..d5e9c620c8 Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/separator-spinner.png differ diff --git a/core/assets-raw/sprites/blocks/production/separator.png b/core/assets-raw/sprites/blocks/production/separator.png index a3810f08d8..cefbb02633 100644 Binary files a/core/assets-raw/sprites/blocks/production/separator.png and b/core/assets-raw/sprites/blocks/production/separator.png differ diff --git a/core/assets-raw/sprites/ui/icons/icon-about.png b/core/assets-raw/sprites/ui/icons/icon-about.png deleted file mode 100644 index 3943975b97..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-about.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-add.png b/core/assets-raw/sprites/ui/icons/icon-add.png deleted file mode 100644 index 328c8ca469..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-add.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-admin-badge.png b/core/assets-raw/sprites/ui/icons/icon-admin-badge.png deleted file mode 100644 index 6a2afe9e24..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-admin-badge.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-admin.png b/core/assets-raw/sprites/ui/icons/icon-admin.png deleted file mode 100644 index f4101c0423..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-admin.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-16.png b/core/assets-raw/sprites/ui/icons/icon-arrow-16.png deleted file mode 100644 index 954b1995fd..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-arrow-16.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-down.png b/core/assets-raw/sprites/ui/icons/icon-arrow-down.png deleted file mode 100644 index bf9e1ff860..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-arrow-down.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-left.png b/core/assets-raw/sprites/ui/icons/icon-arrow-left.png deleted file mode 100644 index 15678f32b1..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-arrow-left.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-right.png b/core/assets-raw/sprites/ui/icons/icon-arrow-right.png deleted file mode 100644 index b09556172d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-arrow-right.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow-up.png b/core/assets-raw/sprites/ui/icons/icon-arrow-up.png deleted file mode 100644 index 8a7546126d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-arrow-up.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-arrow.png b/core/assets-raw/sprites/ui/icons/icon-arrow.png deleted file mode 100644 index 954b1995fd..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-arrow.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-back.png b/core/assets-raw/sprites/ui/icons/icon-back.png deleted file mode 100644 index ef470961d6..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-back.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-ban.png b/core/assets-raw/sprites/ui/icons/icon-ban.png deleted file mode 100644 index 1ee4a5c3bf..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-ban.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-break.png b/core/assets-raw/sprites/ui/icons/icon-break.png deleted file mode 100644 index c4b079735c..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-break.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-cancel.png b/core/assets-raw/sprites/ui/icons/icon-cancel.png deleted file mode 100644 index 03ea12174f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-cancel.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-changelog.png b/core/assets-raw/sprites/ui/icons/icon-changelog.png deleted file mode 100644 index e6fbf8d3c1..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-changelog.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-chat.png b/core/assets-raw/sprites/ui/icons/icon-chat.png deleted file mode 100644 index 85f52fa41c..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-chat.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-check.png b/core/assets-raw/sprites/ui/icons/icon-check.png deleted file mode 100644 index db96907362..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-check.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-command-attack.png b/core/assets-raw/sprites/ui/icons/icon-command-attack.png deleted file mode 100644 index 655f819338..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-command-attack.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-command-patrol.png b/core/assets-raw/sprites/ui/icons/icon-command-patrol.png deleted file mode 100644 index acf89f181a..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-command-patrol.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-command-rally.png b/core/assets-raw/sprites/ui/icons/icon-command-rally.png deleted file mode 100644 index 4271a5a321..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-command-rally.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-command-retreat.png b/core/assets-raw/sprites/ui/icons/icon-command-retreat.png deleted file mode 100644 index f40dcfe5cf..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-command-retreat.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-copy.png b/core/assets-raw/sprites/ui/icons/icon-copy.png deleted file mode 100644 index 0f03ee5d04..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-copy.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-crafting.png b/core/assets-raw/sprites/ui/icons/icon-crafting.png deleted file mode 100644 index 3f7022e87b..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-crafting.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-cursor.png b/core/assets-raw/sprites/ui/icons/icon-cursor.png deleted file mode 100644 index 1025a08a9e..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-cursor.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-database.png b/core/assets-raw/sprites/ui/icons/icon-database.png deleted file mode 100644 index 059fd6f219..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-database.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-defense.png b/core/assets-raw/sprites/ui/icons/icon-defense.png deleted file mode 100644 index 2ae509685e..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-defense.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-dev-builds.png b/core/assets-raw/sprites/ui/icons/icon-dev-builds.png deleted file mode 100644 index 27f46b6624..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-dev-builds.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-diagonal.png b/core/assets-raw/sprites/ui/icons/icon-diagonal.png deleted file mode 100644 index 262be1cebc..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-diagonal.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-discord.png b/core/assets-raw/sprites/ui/icons/icon-discord.png deleted file mode 100644 index 76bc4c8c43..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-discord.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-distribution.png b/core/assets-raw/sprites/ui/icons/icon-distribution.png deleted file mode 100644 index 3a202b38e8..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-distribution.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-donate.png b/core/assets-raw/sprites/ui/icons/icon-donate.png deleted file mode 100644 index cad39eb1ba..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-donate.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-dots.png b/core/assets-raw/sprites/ui/icons/icon-dots.png deleted file mode 100644 index a8d656d6cc..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-dots.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-editor.png b/core/assets-raw/sprites/ui/icons/icon-editor.png deleted file mode 100644 index 6cb0a64f9f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-editor.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-effect.png b/core/assets-raw/sprites/ui/icons/icon-effect.png deleted file mode 100644 index 212034645b..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-effect.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-elevation.png b/core/assets-raw/sprites/ui/icons/icon-elevation.png deleted file mode 100644 index cbc30c8cc1..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-elevation.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-eraser.png b/core/assets-raw/sprites/ui/icons/icon-eraser.png deleted file mode 100644 index fc72acc9f2..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-eraser.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-exit.png b/core/assets-raw/sprites/ui/icons/icon-exit.png deleted file mode 100644 index fe1de5d9e4..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-exit.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-f-droid.png b/core/assets-raw/sprites/ui/icons/icon-f-droid.png deleted file mode 100644 index 1a2eca14f2..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-f-droid.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-fdroid.png b/core/assets-raw/sprites/ui/icons/icon-fdroid.png deleted file mode 100644 index 24c7cb884d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-fdroid.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-feathub.png b/core/assets-raw/sprites/ui/icons/icon-feathub.png deleted file mode 100644 index ae1d06bf00..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-feathub.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-file-image.png b/core/assets-raw/sprites/ui/icons/icon-file-image.png deleted file mode 100644 index 254ea95f3d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-file-image.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-file-text.png b/core/assets-raw/sprites/ui/icons/icon-file-text.png deleted file mode 100644 index 41b4fbc342..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-file-text.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-file.png b/core/assets-raw/sprites/ui/icons/icon-file.png deleted file mode 100644 index 0f41e17cbf..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-file.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-fill.png b/core/assets-raw/sprites/ui/icons/icon-fill.png deleted file mode 100644 index 79bc8b2c39..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-fill.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-flip.png b/core/assets-raw/sprites/ui/icons/icon-flip.png deleted file mode 100644 index d81d741434..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-flip.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-floppy-16.png b/core/assets-raw/sprites/ui/icons/icon-floppy-16.png deleted file mode 100644 index 6fd3f90850..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-floppy-16.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-floppy.png b/core/assets-raw/sprites/ui/icons/icon-floppy.png deleted file mode 100644 index e8ba657ab7..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-floppy.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-folder-parent.png b/core/assets-raw/sprites/ui/icons/icon-folder-parent.png deleted file mode 100644 index 160f2be902..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-folder-parent.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-folder.png b/core/assets-raw/sprites/ui/icons/icon-folder.png deleted file mode 100644 index c55313ef32..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-folder.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-github.png b/core/assets-raw/sprites/ui/icons/icon-github.png deleted file mode 100644 index 0de41be50d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-github.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-google-play.png b/core/assets-raw/sprites/ui/icons/icon-google-play.png deleted file mode 100644 index 8464c51159..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-google-play.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-grid.png b/core/assets-raw/sprites/ui/icons/icon-grid.png deleted file mode 100644 index 5427571a16..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-grid.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-home.png b/core/assets-raw/sprites/ui/icons/icon-home.png deleted file mode 100644 index b97dba2a11..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-home.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-host.png b/core/assets-raw/sprites/ui/icons/icon-host.png deleted file mode 100644 index 6253c986bd..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-host.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-info.png b/core/assets-raw/sprites/ui/icons/icon-info.png deleted file mode 100644 index 7e2bb40037..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-info.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-itch.io.png b/core/assets-raw/sprites/ui/icons/icon-itch.io.png deleted file mode 100644 index b5bca0e50a..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-itch.io.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-item.png b/core/assets-raw/sprites/ui/icons/icon-item.png deleted file mode 100644 index 9dd6da2249..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-item.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-line.png b/core/assets-raw/sprites/ui/icons/icon-line.png deleted file mode 100644 index 5ce2cfdc78..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-line.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-link.png b/core/assets-raw/sprites/ui/icons/icon-link.png deleted file mode 100644 index 71446afcc0..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-link.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-liquid-consume.png b/core/assets-raw/sprites/ui/icons/icon-liquid-consume.png deleted file mode 100644 index 48c93ed9d2..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-liquid-consume.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-liquid.png b/core/assets-raw/sprites/ui/icons/icon-liquid.png deleted file mode 100644 index 1306834469..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-liquid.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-load-image.png b/core/assets-raw/sprites/ui/icons/icon-load-image.png deleted file mode 100644 index 88a162b628..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-load-image.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-load-map.png b/core/assets-raw/sprites/ui/icons/icon-load-map.png deleted file mode 100644 index 4aa244ab7c..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-load-map.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-load.png b/core/assets-raw/sprites/ui/icons/icon-load.png deleted file mode 100644 index ecbd0c08cf..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-load.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-loading.png b/core/assets-raw/sprites/ui/icons/icon-loading.png deleted file mode 100644 index 0fd2d5265d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-loading.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-locked.png b/core/assets-raw/sprites/ui/icons/icon-locked.png deleted file mode 100644 index cdf11fe658..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-locked.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-map.png b/core/assets-raw/sprites/ui/icons/icon-map.png deleted file mode 100644 index 92ff76d74f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-map.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-menu-large.png b/core/assets-raw/sprites/ui/icons/icon-menu-large.png deleted file mode 100644 index 36175b9942..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-menu-large.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-menu.png b/core/assets-raw/sprites/ui/icons/icon-menu.png deleted file mode 100644 index 0469f99721..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-menu.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-missing.png b/core/assets-raw/sprites/ui/icons/icon-missing.png deleted file mode 100644 index 6a9c5d9012..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-missing.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-mode-attack.png b/core/assets-raw/sprites/ui/icons/icon-mode-attack.png deleted file mode 100644 index c6aac86259..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-mode-attack.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-mode-pvp.png b/core/assets-raw/sprites/ui/icons/icon-mode-pvp.png deleted file mode 100644 index a98bb81e01..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-mode-pvp.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-mode-survival.png b/core/assets-raw/sprites/ui/icons/icon-mode-survival.png deleted file mode 100644 index c88da7b3b6..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-mode-survival.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-none.png b/core/assets-raw/sprites/ui/icons/icon-none.png deleted file mode 100644 index fcf22bc9da..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-none.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-paste.png b/core/assets-raw/sprites/ui/icons/icon-paste.png deleted file mode 100644 index 606165ed34..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-paste.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-pause.png b/core/assets-raw/sprites/ui/icons/icon-pause.png deleted file mode 100644 index 7471836eaa..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-pause.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-pencil.png b/core/assets-raw/sprites/ui/icons/icon-pencil.png deleted file mode 100644 index 053a283d08..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-pencil.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-pick.png b/core/assets-raw/sprites/ui/icons/icon-pick.png deleted file mode 100644 index dfd7743030..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-pick.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-play-2.png b/core/assets-raw/sprites/ui/icons/icon-play-2.png deleted file mode 100644 index c001e60b04..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-play-2.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-play-custom.png b/core/assets-raw/sprites/ui/icons/icon-play-custom.png deleted file mode 100644 index 78716a2fb0..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-play-custom.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-play.png b/core/assets-raw/sprites/ui/icons/icon-play.png deleted file mode 100644 index 8530e6b09d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-play.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-players.png b/core/assets-raw/sprites/ui/icons/icon-players.png deleted file mode 100644 index be4746291f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-players.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-power.png b/core/assets-raw/sprites/ui/icons/icon-power.png deleted file mode 100644 index 57fbb2f2bd..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-power.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-production.png b/core/assets-raw/sprites/ui/icons/icon-production.png deleted file mode 100644 index fe6c3523c0..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-production.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-quit.png b/core/assets-raw/sprites/ui/icons/icon-quit.png deleted file mode 100644 index 26a9634945..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-quit.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-reddit.png b/core/assets-raw/sprites/ui/icons/icon-reddit.png deleted file mode 100644 index 16be9726df..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-reddit.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-redo.png b/core/assets-raw/sprites/ui/icons/icon-redo.png deleted file mode 100644 index 4c53eb56ef..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-redo.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-refresh.png b/core/assets-raw/sprites/ui/icons/icon-refresh.png deleted file mode 100644 index cd1050f017..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-refresh.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-rename.png b/core/assets-raw/sprites/ui/icons/icon-rename.png deleted file mode 100644 index 4a6731a31b..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-rename.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-resize.png b/core/assets-raw/sprites/ui/icons/icon-resize.png deleted file mode 100644 index ee53c8470f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-resize.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-rotate-arrow.png b/core/assets-raw/sprites/ui/icons/icon-rotate-arrow.png deleted file mode 100644 index 22039f3020..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-rotate-arrow.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-rotate-left.png b/core/assets-raw/sprites/ui/icons/icon-rotate-left.png deleted file mode 100644 index 9b05efec5f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-rotate-left.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-rotate-right.png b/core/assets-raw/sprites/ui/icons/icon-rotate-right.png deleted file mode 100644 index 2009c9394d..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-rotate-right.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-rotate.png b/core/assets-raw/sprites/ui/icons/icon-rotate.png deleted file mode 100644 index 3c989a555f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-rotate.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-save-image.png b/core/assets-raw/sprites/ui/icons/icon-save-image.png deleted file mode 100644 index 5234c4f2f4..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-save-image.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-save-map.png b/core/assets-raw/sprites/ui/icons/icon-save-map.png deleted file mode 100644 index 9066752d13..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-save-map.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-save.png b/core/assets-raw/sprites/ui/icons/icon-save.png deleted file mode 100644 index 1ed3fc4549..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-save.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-settings.png b/core/assets-raw/sprites/ui/icons/icon-settings.png deleted file mode 100644 index 51a969c401..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-settings.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-spray.png b/core/assets-raw/sprites/ui/icons/icon-spray.png deleted file mode 100644 index 17198d657b..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-spray.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-terrain.png b/core/assets-raw/sprites/ui/icons/icon-terrain.png deleted file mode 100644 index cc9c57380e..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-terrain.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-tools.png b/core/assets-raw/sprites/ui/icons/icon-tools.png deleted file mode 100644 index 2ece1ae8f4..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-tools.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-trash-16.png b/core/assets-raw/sprites/ui/icons/icon-trash-16.png deleted file mode 100644 index a1de49233b..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-trash-16.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-trash.png b/core/assets-raw/sprites/ui/icons/icon-trash.png deleted file mode 100644 index e0f419f2f3..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-trash.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-tree.png b/core/assets-raw/sprites/ui/icons/icon-tree.png deleted file mode 100644 index 0731f6a7e5..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-tree.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-trello.png b/core/assets-raw/sprites/ui/icons/icon-trello.png deleted file mode 100644 index 8e63ab3208..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-trello.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-turret.png b/core/assets-raw/sprites/ui/icons/icon-turret.png deleted file mode 100644 index 32fd01b464..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-turret.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-tutorial.png b/core/assets-raw/sprites/ui/icons/icon-tutorial.png deleted file mode 100644 index 40ba90a5e4..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-tutorial.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-undo.png b/core/assets-raw/sprites/ui/icons/icon-undo.png deleted file mode 100644 index cf5dd4c154..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-undo.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-units.png b/core/assets-raw/sprites/ui/icons/icon-units.png deleted file mode 100644 index 1ee9cd9f55..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-units.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-unlocks.png b/core/assets-raw/sprites/ui/icons/icon-unlocks.png deleted file mode 100644 index 36b637b0b9..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-unlocks.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-upgrade.png b/core/assets-raw/sprites/ui/icons/icon-upgrade.png deleted file mode 100644 index 80e416aebe..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-upgrade.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-wiki.png b/core/assets-raw/sprites/ui/icons/icon-wiki.png deleted file mode 100644 index a4395e4ed5..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-wiki.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-workshop.png b/core/assets-raw/sprites/ui/icons/icon-workshop.png deleted file mode 100644 index 74e43e701f..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-workshop.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/icons/icon-zoom.png b/core/assets-raw/sprites/ui/icons/icon-zoom.png deleted file mode 100644 index 02736c1a4b..0000000000 Binary files a/core/assets-raw/sprites/ui/icons/icon-zoom.png and /dev/null differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 8df45a7740..a921dcab9d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -104,6 +104,7 @@ mods.none = [LIGHT_GRAY]No mods found! mods.guide = Modding Guide mods.report = Report Bug mods.openfolder = Open Mod Folder +mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Enabled mod.disabled = [scarlet]Disabled mod.disable = Disable @@ -251,6 +252,7 @@ copylink = Copy Link back = Back data.export = Export Data data.import = Import Data +data.openfolder = Open Data Folder data.exported = Data exported. data.invalid = This isn't valid game data. data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. @@ -531,6 +533,8 @@ error.crashtitle = An error has occured blocks.input = Input blocks.output = Output blocks.booster = Booster +blocks.tiles = Required Tiles +blocks.affinities = Affinities block.unknown = [lightgray]??? blocks.powercapacity = Power Capacity blocks.powershot = Power/Shot @@ -665,6 +669,7 @@ setting.mutesound.name = Mute Sound setting.crashreport.name = Send Anonymous Crash Reports setting.savecreate.name = Auto-Create Saves setting.publichost.name = Public Game Visibility +setting.playerlimit.name = Player Limit setting.chatopacity.name = Chat Opacity setting.lasersopacity.name = Power Laser Opacity setting.bridgeopacity.name = Bridge Opacity @@ -942,6 +947,7 @@ block.inverted-sorter.name = Inverted Sorter block.message.name = Message block.illuminator.name = Illuminator block.overflow-gate.name = Overflow Gate +block.underflow-gate.name = Underflow Gate block.silicon-smelter.name = Silicon Smelter block.phase-weaver.name = Phase Weaver block.pulverizer.name = Pulverizer @@ -1175,6 +1181,7 @@ block.inverted-sorter.description = Processes items like a standard sorter, but block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.\n\n[scarlet]Never use next to production inputs, as they will get clogged by output.[] block.distributor.description = An advanced router. Splits items to up to 7 other directions equally. block.overflow-gate.description = Only outputs to the left and right if the front path is blocked. +block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate. block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. block.rotary-pump.description = An advanced pump. Pumps more liquid, but requires power. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 2c09d6393d..dd3759e71a 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -37,16 +37,16 @@ be.noupdates = Aktualizace nebyla nalezena. be.check = Zkontrolovat aktualizace schematic = Šablona -schematic.add = Ukládám šablonu... +schematic.add = Uložit šablonu... schematics = Šablony schematic.replace = Šablona tohoto jména již existuje. Chceš ji nahradit? schematic.import = Importuji šablonu... schematic.exportfile = Exportovat soubor schematic.importfile = Importovat soubor -schematic.browseworkshop = Procházet dílnu +schematic.browseworkshop = Procházet Workshop na Steamu schematic.copy = Zkopírovat do schránky schematic.copy.import = Importovat ze schránky -schematic.shareworkshop = Sdílet skrze Steam Workshop +schematic.shareworkshop = Sdílet skrze Workshop na Steamu schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Převrátit šablonu schematic.saved = Šablona byla uložena. schematic.delete.confirm = Šablona bude kompletně vyhlazena. @@ -61,16 +61,16 @@ stat.deconstructed = Budov rozebráno:[accent] {0} stat.delivered = Materiálu vysláno: stat.rank = Celková známka: [accent]{0} -launcheditems = [accent]Vyslané předměty[] -launchinfo = [unlaunched][Je třeba [LAUNCH] Tvé jádro, abys získal věci vyznačené modře. +launcheditems = [accent]Získané předměty[] +launchinfo = [unlaunched]Je třeba vyslat zpět Tvé jádro, abys získal věci vyznačené modře.[] map.delete = Jsi si jistý, že chceš smazat mapu "[accent]{0}[]"? level.highscore = Nejvyšší skóre: [accent]{0}[] level.select = Výběr úrovně -level.mode = Herní mód: +level.mode = Herní režim: showagain = Znovu neukazovat coreattack = < Jádro je pod útokem! > nearpoint = [ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKU[] ]\nNebezpečí okamžité smrti! -database = Databáze objektů ve hře +database = Katalog objektů savegame = Uložit hru loadgame = Načíst hru joingame = Připojit se ke hře @@ -100,7 +100,7 @@ feature.unsupported = Tvoje zařízení nepodporuje tuto vlastnost hry. mods.alphainfo = Měj na paměti, že modifikace jsou stále v alfa fázi vývoje a mohou být [scarlet]velmi chybové[].\nNahlaš, prosím, jakékoliv závady na GitHub nebo Discord serveru Mindustry. Děkujeme! mods.alpha = [accent](Alfa)[] mods = Mody -mods.none = [LIGHT_GRAY]Modifikace nebyly nalezeny.[] +mods.none = [lightgray]Modifikace nebyly nalezeny.[] mods.guide = Průvodce modifikacemi mods.report = Nahlásit závadu mods.openfolder = Otevřít složku s modifikacemi @@ -121,10 +121,10 @@ mod.import = Importovat modifikaci mod.import.github = Import modifikaci z GitHubu mod.item.remove = Tato položka je součástí [accent]'{0}'[] modifikace. Pokud ji chcete odstranit, odinstalujte tuto modifikaci. mod.remove.confirm = Tato modifikace bude odstraněna. -mod.author = [LIGHT_GRAY]Autor:[] {0} +mod.author = [lightgray]Autor:[] {0} mod.missing = Toto uložení hra obsahuje modifikace, které byly nedávno aktualizovány, nebo již nejsou nainstalovány. Použití tohoto uložení může vést k chybám. Jsi si jist, že chceš nahrát toto uložení hry?\n[lightgray]Modifikace:\n{0} -mod.preview.missing = Než vystavíš svou modifikaci v dílně, musíš přidat obrázek pro náhled.\nUmísti obrázek pojmenovaný [accent]preview.png[] do složky modifikace a zkus to znovu. -mod.folder.missing = V dílně mohou být vystaveny pouze modifikace ve formě složky.\nAbys převedl modifikaci na formu složky, jednoduše rozbal zip soubor do složky a smaž starý zip soubor. Potom znovu spusť hru nebo znovu načti modifikace. +mod.preview.missing = Než vystavíš svou modifikaci ve Workshopu na Steamu, musíš přidat obrázek pro náhled.\nUmísti obrázek pojmenovaný [accent]preview.png[] do složky modifikace a zkus to znovu. +mod.folder.missing = Ve Workshopu na Steamu mohou být vystaveny pouze modifikace ve formě složky.\nAbys převedl modifikaci na formu složky, jednoduše rozbal zip soubor do složky a smaž starý zip soubor. Potom znovu spusť hru nebo znovu načti modifikace. mod.scripts.unsupported = Tvoje zařízení nepodporuje skripty. Některé modifikace nemusí správně fungovat. about.button = O hře @@ -157,8 +157,8 @@ server.kicked.customClient = Tento server nepodporuje upravené verze hry. Stáh server.kicked.gameover = Konec hry! server.kicked.serverRestarting = Server se restartuje. server.versions = Verze klienta: [accent]{0}[]\nVerze serveru: [accent]{1}[] -host.info = Tento [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]síti Wifi nebo LAN (místní)[] by měl vidět server ve svém listu serverů.\n\nJestliže chcete, aby se uživatelé připojovali odkudkoliv pomocí adresy IP, může být nezbytné nastavit [accent]přesměrování portů[].\n\n[LIGHT_GRAY]Poznámka: Jestliže má někdo problém s připojením k LAN hře, ujisti se, že má program Mindustry povolený přístup k místní síti v nastavení místního firewallu. -join.info = Zde můžeš vložit [accent]adresu IP serveru[], ke kterému se chceš připojit, nebo zkusit nalézt [accent]servery v místní síti[], ke kterým se můžeš připojit.\nJsou podporovány režimy hry více hráčů přes LAN i WAN.\n\n[LIGHT_GRAY]Poznámka: Neexistuje automatický globální seznam serverů Mindustry. Pokud se chceš k někomu připojit pomocí adresy IP, budeš ji muset znát od hostitele. +host.info = Tento [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [lightgray]síti Wifi nebo LAN (místní)[] by měl vidět server ve svém listu serverů.\n\nJestliže chcete, aby se uživatelé připojovali odkudkoliv pomocí adresy IP, může být nezbytné nastavit [accent]přesměrování portů[].\n\n[lightgray]Poznámka: Jestliže má někdo problém s připojením k LAN hře, měl by se předem ujistit, že má program Mindustry povolený přístup k místní síti v nastavení místního firewallu. +join.info = Zde můžeš vložit [accent]adresu IP serveru[], ke kterému se chceš připojit, nebo zkusit nalézt [accent]servery v místní síti[], ke kterým se můžeš připojit.\nJsou podporovány režimy hry více hráčů přes LAN i WAN.\n\n[lightgray]Poznámka: Neexistuje automatický globální seznam serverů Mindustry. Pokud se chceš k někomu připojit pomocí adresy IP, budeš ji muset znát od hostitele. hostserver = Hostovat hru více hráčů invitefriends = Pozvat přátele hostserver.mobile = Hostovat\nhru @@ -240,8 +240,8 @@ save.playtime = Herní čas: {0} warning = Varování. confirm = Potvrdit delete = Smazat -view.workshop = Prohlédnout v dílně -workshop.listing = Upravit popis v dílně +view.workshop = Prohlédnout ve Workshopu na Steamu +workshop.listing = Upravit popis ve Workshopu na Steamu ok = OK open = Otevřít customize = Přizpůsobit pravidla @@ -251,13 +251,14 @@ copylink = Zkopírovat odkaz back = Zpět data.export = Exportovat data data.import = Importovat data +data.openfolder = Otevřít složku s daty data.exported = Data byla exportována. data.invalid = Herní data nejsou v pořádku. data.import.confirm = Import externích dat smaže [scarlet]všechna[] Tvá současná herní data.\n[accent]Toto nelze vrátit zpět![]\n\nPo importu dat se hra bezprostředně sama ukončí. classic.export = Exportovat data pro verzi Classic classic.export.text = [accent]Mindustry[] mělo významnou aktualizaci.\nByly detekovány uložení hry nebo mapy pro předchozí verzi Classic (v3.5 build 40). Chtěl bys exportovat tato uložení do domovského zařízení Tvého telefonu, pro pozdější použití v této verzi Mindustry Classic? quit.confirm = Jsi si jistý, že chceš ukončit hru? -quit.confirm.tutorial = Jsi si jistý?Výuku je možné znovu spustit v [accent]Volby->Hra->Spustit znovu výuku[]. +quit.confirm.tutorial = Jsi si jistý?\Výuku je možné znovu spustit v [accent]Volby->Hra->Spustit znovu výuku[]. loading = [accent]Načítám... reloading = [accent]Načítám modifikace... saving = [accent]Ukládám... @@ -284,17 +285,17 @@ map.nospawn.pvp = Tato mapa nemá nepřátelská jádra, u kterých by se mohli map.nospawn.attack = Tato mapa nemá nepřátelská jádra, která by mohla být zničena. Přidej v editoru do této mapy aspoň jedno [SCARLET]červené[] jádro. map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy. workshop.update = Aktualizovat položku -workshop.error = Chyba při načítání podrobností z dílny: {0} -map.publish.confirm = Jsi si jistý, že chceš vystavit tuto mapu?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami dílny (EULA), jinak se Tvoje mapa nezobrazí.[] -workshop.menu = Vybwer si, co bys chtěl dělat s touto položkou. +workshop.error = Chyba při načítání podrobností z Workshopu na Steamu: {0} +map.publish.confirm = Jsi si jistý, že chceš vystavit tuto mapu?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami Workshopu na Steamu (EULA), jinak se Tvoje mapa nezobrazí.[] +workshop.menu = Vyber si, co bys chtěl dělat s touto položkou. workshop.info = Informace o položce changelog = Seznam změn (volitelně): eula = Smluvní podmínky platformy Steam -missing = Tato položka byla smazána nebo přesunuta.\n[lightgray]Položka bude automaticky odebrána ze seznamu dílny. +missing = Tato položka byla smazána nebo přesunuta.\n[lightgray]Položka bude automaticky odebrána ze seznamu Workshopu na Steamu. publishing = [accent]Publikuji... -publish.confirm = Opravdu chceš toto vystavit?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami dílny (EULA), jinak se Tvoje položky nezobrazí.[] +publish.confirm = Opravdu chceš toto vystavit?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami Workshopu na Steamu (EULA), jinak se Tvoje položky nezobrazí.[] publish.error = Chyba při vystavování položky: {0} -steam.error = Nepodařilo se inicializovat služby platformy Steam.Chyba: {0} +steam.error = Nepodařilo se inicializovat služby platformy Steam.\Chyba: {0} editor.brush = Štětec editor.openin = Otevřít v editoru @@ -308,9 +309,9 @@ editor.waves = Vln: editor.rules = Pravidla: editor.generation = Generace: editor.ingame = Upravit ve hře -editor.publish.workshop = Vystavit v dílně +editor.publish.workshop = Vystavit ve Workshopu na Steamu editor.newmap = Nová mapa -workshop = Dílna +workshop = Workshop na Steamu waves.title = Vlny waves.remove = Odebrat waves.never = @@ -335,7 +336,7 @@ editor.removeunit = Odstranit jednotku editor.teams = Týmy editor.errorload = Chyba při načítání souboru. editor.errorsave = Chyba při ukládání souboru. -editor.errorimage = Toto je obrázek, ne mapa.\nPokud chceš importovat mapu z verze 3.5/sestavení 40, použij položku nabídky 'Importovat starou mapu'. +editor.errorimage = Toto je obrázek, ne mapa.\n\Pokud chceš importovat mapu z verze 3.5/sestavení 40, použij položku nabídky 'Importovat starou mapu'. editor.errorlegacy = Tato mapa je příliš stará a používá formát mapy, který už není podporován. editor.errornot = Toto není soubor mapy. editor.errorheader = Tento soubor mapy je buď neplatný nebo poškozen. @@ -437,15 +438,15 @@ editor = Editor mapeditor = Editor map abandon = Opustit -abandon.text = Tato zóna a všechny její zdroje připadnou nepříteli. +abandon.text = Tato mapa a všechny její zdroje připadnou nepříteli. locked = Zamčeno complete = [lightgray]Dokončeno: requirement.wave = Dosáhni vlny {0} na mapě {1} requirement.core = Znič nepřátelské jádro na mapě {0} requirement.unlock = Odemknuto {0} -resume = Zpět k mapě:\n[lightgray]{0}[] +resume = Zpět do mapy:\n[lightgray]{0}[] bestwave = [lightgray]Nejvyšší vlna: {0} -launch = Vyslat do této zóny Tvé jádro +launch = Vyslat do této mapy Tvé jádro launch.title = Vyslání bylo úspěšné launch.next = [lightgray]další možnost bude až ve vlně {0}[] launch.unable2 = [scarlet]Není možno se vyslat.[] @@ -455,9 +456,9 @@ uncover = Odkrýt mapu configure = Přizpůsobit vybavení bannedblocks = Zakázané bloky addall = Přidat vše -configure.locked = [lightgray]Dosáhni vlny {0},\naby sis mohl přizpůsobit vybavení pro mapu. +configure.locked = [lightgray]{0},\naby sis mohl přizpůsobit vybavení pro mapu.[] configure.invalid = Hodnota musí být číslo mezi 0 a {0}. -zone.unlocked = [lightgray]Mapa {0} byla odemknuta. +zone.unlocked = [lightgray]Mapa {0} byla odemknuta.[] zone.requirement.complete = Bylo dosaženo vlny {0},\nčímž byla splněna podmínka pro mapu {1}. zone.config.unlocked = Odemknuto přizpůsobení vybavení pro mapu:[lightgray]\n{0}[] zone.resources = [lightgray]Byly detekovány tyto suroviny:[] @@ -495,24 +496,24 @@ zone.fungalPass.name = Plísňový průsmyk zone.groundZero.description = Optimální místo, kde znovu začít. Nízký výskyt nepřátel. Několik málo surovin.\nPosbírej co nejvíce olova a mědi.\nBěž dál. zone.frozenForest.description = Dokonce až sem, blízko hor, se dokázaly spóry rozrůst. Mráz je však nemůže zadržet navěky.\n\nPusť se do práce za pomocí energie. Stav spalovací generátory. Nauč se, jak používat opravovací věže. -zone.desertWastes.description = Tyto pustiny jsou rozsáhlé, nepředvídatelné a skrz naskrz se hemží opuštěnými budovami.\nV této oblasti nalezneš uhlí. Spal ho v generátorech na energii nebo syntetizuj na grafit.\n\n[lightgray]Tato výsadková zóna není zaručena[] +zone.desertWastes.description = Tyto pustiny jsou rozsáhlé, nepředvídatelné a skrz naskrz se hemží opuštěnými budovami.\nV této oblasti nalezneš uhlí. Spal ho v generátorech na energii nebo syntetizuj na grafit.\n\n[lightgray]Toto místo přistání nelze zaručit.[] zone.saltFlats.description = Na okraji pouště leží Solné nížiny. V této lokaci se nachází jen několik málo surovin.\n\nNepřítel zde vybudoval zásobovací komplex. Znič jádro v jeho základně. Nenechej kámen na kameni. zone.craters.description = V těchto relikviích starých válek se nahromadilo velké množství vody. Znovu získej tuto oblast. Sbírej písek. Vyrob z něj metasklo. Použij vodu k chlazení svých vrtů a střílen. zone.ruinousShores.description = Za pustinou se nachází pobřeží. Kdysi zde stál obranný pobřežní systém. Moc z něj už dneska nezbylo. Jen základní stavby zůstaly ušetřeny, zbytek se rozpadl na šrot.\nPokračuj ve své expanzi hlouběji. Objev ztracenou technologii. -zone.stainedMountains.description = Dále ve vnitrozemí leží hory, dosud neposkvrněny spórami.\nVytěž titánium, kterým tato oblast oplývá. Nauč se jej používat.\n\nPřítomnost nepřátelských jednotek je zde větší. Radši jim nedej moc času na vyslání jejich nejsilnějších jednotech. -zone.overgrowth.description = Tato přerostlá džungle se nachází blíže ke zdroji spór.\nNepřítel zde zbudoval předsunutou hlídku. Stav jednotky Dagger a znič s jejich pomocí jádro základny. Získej znovu to, co bylo již dávno ztraceno. -zone.tarFields.description = Rozhraní produkční ropné oblasti mezi horami a pouští. Jedna z mála oblastí, kde se stále nachází dehet.\nAčkoliv je oblast opuštěná, stále se v jejím okolí nachází nebezpečné nepřátelské síly. Není radno je podcenit.\n\n[lightgray]Vyzkoumej technologii na zpracování ropy.[] -zone.desolateRift.description = Extrémně nebezpečná zóna. Na úkor prostoru se zde nachází přehršel surovin. Vysoká pravděpodobnost zničení. Opusť tuto oblast co nejdříve to půjde. Nenech se zmást dlouhými prodlevami mezi vlnami nepřátel. +zone.stainedMountains.description = Dále ve vnitrozemí leží hory, dosud neposkvrněny spórami.\nVytěž titan, kterým tato oblast oplývá. Nauč se jej používat.\n\nPřítomnost nepřátelských jednotek je zde větší. Radši jim nedej moc času na vyslání jejich nejsilnějších jednotech. +zone.overgrowth.description = Tato přerostlá džungle se nachází blíže ke zdroji spór.\nNepřítel zde zbudoval předsunutou hlídku. Stav jednotky Dýka a znič s jejich pomocí jádro základny. Získej znovu to, co bylo již dávno ztraceno. +zone.tarFields.description = Rozhraní produkční naftové oblasti mezi horami a pouští. Jedna z mála oblastí, kde se stále nachází dehet.\nAčkoliv je oblast opuštěná, stále se v jejím okolí nachází nebezpečné nepřátelské síly. Není radno je podcenit.\n\n[lightgray]Vyzkoumej technologii na zpracování nafty.[] +zone.desolateRift.description = Extrémně nebezpečná mapa. Na úkor prostoru se zde nachází přehršel surovin. Vysoká pravděpodobnost zničení. Opusť tuto oblast co nejdříve to půjde. Nenech se zmást dlouhými prodlevami mezi vlnami nepřátel. zone.nuclearComplex.description = Bývalá továrna na zpracování thoria, dnes v troskách.\n[lightgray]Objev thorium a jeho široké využití.[]\n\nNepřátelské jednotky se zde nacházejí v hojném počtu, a neustále prohledávají oblast. -zone.fungalPass.description = Přechodová oblast mezi vysokými horami a spórami nasycenou zemí. Nachází se zde malá průzkumná základna Tvého nepřítele.\nZnič ji.\nPoužij jednotky Dagger a Crawler. Znič obě nepřátelské jádra. +zone.fungalPass.description = Přechodová oblast mezi vysokými horami a spórami nasycenou zemí. Nachází se zde malá průzkumná základna Tvého nepřítele.\nZnič ji.\nPoužij mechy Dýka a Slídil. Znič obě nepřátelské jádra. zone.impact0078.description = zone.crags.description = settings.language = Jazyk settings.data = Data hry settings.reset = Nastavit na původní hodnoty -settings.rebind = Přemapovat -settings.resetKey = Vrátit změny +settings.rebind = Změnit +settings.resetKey = Původní settings.controls = Ovládání settings.game = Hra settings.sound = Zvuky @@ -541,7 +542,7 @@ blocks.itemsmoved = Rychlost pohybu blocks.launchtime = Čas mezi vysláním blocks.shootrange = Dostřel blocks.size = Velikost -blocks.liquidcapacity = Kapacita tekutin +blocks.liquidcapacity = Kapacita kapalin blocks.powerrange = Rozsah energie blocks.powerconnections = Nejvyšší počet spojení blocks.poweruse = Spotřeba energie @@ -566,287 +567,288 @@ blocks.ammo = Střelivo bar.drilltierreq = Je vyžadován lepší vrt bar.drillspeed = Rychlost vrtu: {0}/s -bar.pumpspeed = Pump Speed: {0}/s -bar.efficiency = Efektivita: {0}% +bar.pumpspeed = Rychlost pumpy: {0}/s +bar.efficiency = Účinnost: {0}% bar.powerbalance = Energie: {0} bar.powerstored = Uskladněno: {0}/{1} bar.poweramount = Energie celkem: {0} bar.poweroutput = Výstup energie: {0} bar.items = Předměty: {0} -bar.capacity = Kpacita: {0} -bar.liquid = Tekutiny +bar.capacity = Kapacita: {0} +bar.liquid = Chlazení bar.heat = Teplo bar.power = Energie -bar.progress = Proces stavby +bar.progress = Stavba v průběhu bar.spawned = Jednotek: {0}/{1} -bar.input = Input -bar.output = Output +bar.input = Vstup +bar.output = Výstup -bullet.damage = [stat]{0}[lightgray] poškození -bullet.splashdamage = [stat]{0}[lightgray] AOE ~[stat] {1}[lightgray] bloků +bullet.damage = [stat]{0}[lightgray] poškození[] +bullet.splashdamage = [stat]{0}[lightgray] plošného poškození ~[stat] {1}[lightgray] dlaždic bullet.incendiary = [stat]zápalné bullet.homing = [stat]samonaváděcí bullet.shock = [stat]šokové bullet.frag = [stat]trhavé bullet.knockback = [stat]{0}[lightgray] odhození -bullet.freezing = [stat]ledové -bullet.tarred = [stat]tarové -bullet.multiplier = [stat]{0}[lightgray]x násobič střeliva -bullet.reload = [stat]{0}[lightgray]x nabití +bullet.freezing = [stat]mrazivé +bullet.tarred = [stat]dehtové +bullet.multiplier = [stat]{0}[lightgray]x více střel +bullet.reload = [stat]{0}[lightgray]x rychlost střelby -unit.blocks = Bloky -unit.powersecond = jednotek energie/sekunda -unit.liquidsecond = jednotek tekutin/sekundu +unit.blocks = bloky +unit.powersecond = energie/sekunda +unit.liquidsecond = kapalin/sekundu unit.itemssecond = předmětů/sekundu -unit.liquidunits = jednotek tekutin +unit.liquidunits = jednotek kapalin unit.powerunits = jednotek energie unit.degrees = úhly unit.seconds = sekundy -unit.persecond = /sek -unit.timesspeed = x rychlost +unit.persecond = /s +unit.timesspeed = x větší rychlost unit.percent = % unit.items = předměty -unit.thousands = k -unit.millions = mil +unit.thousands = t +unit.millions = m category.general = Všeobecné category.power = Energie -category.liquids = Tekutiny +category.liquids = Kapaliny category.items = Předměty -category.crafting = Vyžaduje +category.crafting = Vstup/Výstup category.shooting = Střílí category.optional = Volitelné vylepšení setting.landscape.name = Uzamknout krajinu setting.shadows.name = Stíny -setting.blockreplace.name = Automatic Block Suggestions +setting.blockreplace.name = Automatický návrh bloků setting.linear.name = Lineární filtrování -setting.hints.name = Hints -setting.buildautopause.name = Auto-Pause Building +setting.hints.name = Rady a tipy +setting.buildautopause.name = Automaticky pozastavit stavění setting.animatedwater.name = Animovaná voda setting.animatedshields.name = Animované štíty -setting.antialias.name = Antialias[LIGHT_GRAY] (vyžaduje restart)[] -setting.indicators.name = Indikátor pro spojence -setting.autotarget.name = Automaticky zaměřuje -setting.keyboard.name = Ovládání myš+klávesnice +setting.antialias.name = Použít antialias [lightgray](vyžaduje restart)[] +setting.indicators.name = Indikátor pro spojence/nepřátele +setting.autotarget.name = Automaticky zaměřovat +setting.keyboard.name = Ovládání myší a klávesnicí setting.touchscreen.name = Ovládání dotykovým displejem -setting.fpscap.name = Max FPS -setting.fpscap.none = žádný +setting.fpscap.name = Strop FPS (snímků/s) +setting.fpscap.none = Žádný setting.fpscap.text = {0} FPS -setting.uiscale.name = Škálování rozhraní[lightgray] (vyžaduje restart)[] -setting.swapdiagonal.name = Vždy pokládat diagonálně -setting.difficulty.training = Trénink -setting.difficulty.easy = lehká -setting.difficulty.normal = normální -setting.difficulty.hard = težká -setting.difficulty.insane = šílená +setting.uiscale.name = Škálování uživatelského rozhraní[lightgray] (vyžaduje restart)[] +setting.swapdiagonal.name = Vždy pokládat úhlopříčně +setting.difficulty.training = Zácviková +setting.difficulty.easy = Lehká +setting.difficulty.normal = Normální +setting.difficulty.hard = Těžká +setting.difficulty.insane = Šílená setting.difficulty.name = Obtížnost: -setting.screenshake.name = Třes obrazu +setting.screenshake.name = Chvění obrazovky setting.effects.name = Zobrazit efekty -setting.destroyedblocks.name = Display Destroyed Blocks -setting.conveyorpathfinding.name = Conveyor Placement Pathfinding -setting.coreselect.name = Allow Schematic Cores +setting.destroyedblocks.name = Zobrazit zničené bloky +setting.conveyorpathfinding.name = Hledat cestu při umisťování pásu +setting.coreselect.name = Povolit jádra v šablonách setting.sensitivity.name = Citlivost ovladače setting.saveinterval.name = Interval automatického ukládání -setting.seconds = {0} Sekund -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds +setting.seconds = {0} sekund +setting.blockselecttimeout.name = Časový limit pro výběr bloku +setting.milliseconds = {0} milisekund setting.fullscreen.name = Celá obrazovka -setting.borderlesswindow.name = Bezokrajové okno[LIGHT_GRAY] (může vyžadovat restart) -setting.fps.name = Ukázat snímky/sekundu -setting.blockselectkeys.name = Show Block Select Keys +setting.borderlesswindow.name = Bezokrajové okno[lightgray] (může vyžadovat restart)[] +setting.fps.name = Ukázat FPS a ping +setting.blockselectkeys.name = Ukázat klávesy při práci s blokem setting.vsync.name = Vertikální synchronizace -setting.pixelate.name = Pixelizovat [LIGHT_GRAY](může snížit výkon) -setting.minimap.name = Ukázat minimapu -setting.position.name = Show Player Position +setting.pixelate.name = Rozpixlovat [lightgray](může snížit výkon)[] +setting.minimap.name = Ukázat mapičku +setting.position.name = Ukázat pozici hráče setting.musicvol.name = Hlasitost hudby -setting.ambientvol.name = Ambient Volume +setting.ambientvol.name = Hlasitost prostředí setting.mutemusic.name = Ztišit hudbu -setting.sfxvol.name = SFX hlasitost -setting.mutesound.name = Ztišit zvuky -setting.crashreport.name = Poslat anonymní spis o zhroucení hry -setting.savecreate.name = Auto-Create Saves -setting.publichost.name = Public Game Visibility -setting.chatopacity.name = Chat Opacity -setting.lasersopacity.name = Power Laser Opacity -setting.playerchat.name = Displej v herním četu -public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. -public.beta = Note that beta versions of the game cannot make public lobbies. -uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +setting.sfxvol.name = Hlasitost efektů +setting.mutesound.name = Ztišit zvuk +setting.crashreport.name = Poslat anonymní hlášení o spadnutí Mindustry +setting.savecreate.name = Automaticky ukládat hru +setting.publichost.name = Veřejná viditelnost hry +setting.chatopacity.name = Průsvitnost kanálu zpráv +setting.lasersopacity.name = Průsvitnost energetického laseru +setting.bridgeopacity.name = Průsvitnost přemostění +setting.playerchat.name = Zobrazit bublinu se zprávami hráče +public.confirm = Chceš Tvoji hru zpřístupnit veřejnosti?\n[accent]Kdokoli se bude moci připojit ke tvé hře.[]\n[lightgray]Toto se dá později změnit v nabídce Volby->Hra->Veřejná viditelnost hry. +public.beta = Poznámka: nevydané verze her nemůžou být veřejné. +uiscale.reset = Škálování uživatelskho rozhraní se změnilo.\nZmáčkni "OK", abys potvrdil toto nastavení.\n[scarlet]Návrat k původním hodnotám proběhne za [accent]{0}[] vteřin...[] uiscale.cancel = Ukončit a odejít -setting.bloom.name = Bloom -keybind.title = Přenastavit klávesy -keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. +setting.bloom.name = Použít filtr Bloom +keybind.title = Změnit klávesy +keybinds.mobile = [scarlet]Většina kláves nefunguje v mobilní verzi hry. Je podporován jen základní pohyb.[] category.general.name = Všeobecné category.view.name = Pohled -category.multiplayer.name = Multiplayer +category.multiplayer.name = Hra více hráčů command.attack = Útok -command.rally = Rally +command.rally = Shromáždění command.retreat = Ústup -placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.clear_building.name = Clear Building -keybind.press = Stiskni klívesu... -keybind.press.axis = Stiskni osu nebo klávesu... -keybind.screenshot.name = Sníměk mapy -keybind.toggle_power_lines.name = Toggle Power Lasers -keybind.move_x.name = Pohyb na X -keybind.move_y.name = Pohyb na Y -keybind.mouse_move.name = Follow Mouse -keybind.dash.name = Sprint -keybind.schematic_select.name = Select Region -keybind.schematic_menu.name = Šablona Menu -keybind.schematic_flip_x.name = Flip Šablona X -keybind.schematic_flip_y.name = Flip Šablona Y -keybind.category_prev.name = Previous Category -keybind.category_next.name = Next Category -keybind.block_select_left.name = Block Select Left -keybind.block_select_right.name = Block Select Right -keybind.block_select_up.name = Block Select Up -keybind.block_select_down.name = Block Select Down -keybind.block_select_01.name = Category/Block Select 1 -keybind.block_select_02.name = Category/Block Select 2 -keybind.block_select_03.name = Category/Block Select 3 -keybind.block_select_04.name = Category/Block Select 4 -keybind.block_select_05.name = Category/Block Select 5 -keybind.block_select_06.name = Category/Block Select 6 -keybind.block_select_07.name = Category/Block Select 7 -keybind.block_select_08.name = Category/Block Select 8 -keybind.block_select_09.name = Category/Block Select 9 -keybind.block_select_10.name = Category/Block Select 10 -keybind.fullscreen.name = Toggle Fullscreen +placement.blockselectkeys = \n[lightgray]Klávesa:[] [{0}, +keybind.clear_building.name = Vyčistit stavění +keybind.press = Stiskni klávesu... +keybind.press.axis = Stiskni osu ovladače nebo klávesu... +keybind.screenshot.name = Snímek mapy +keybind.toggle_power_lines.name = Přepnout zobrazení energetického vedení +keybind.move_x.name = Pohyb vodorovně +keybind.move_y.name = Pohyb svisle +keybind.mouse_move.name = Následovat myš +keybind.dash.name = Sprintovat +keybind.schematic_select.name = Vybrat oblast +keybind.schematic_menu.name = Nabídka šablon +keybind.schematic_flip_x.name = Překlopit šablona podle svislé osy +keybind.schematic_flip_y.name = Překlopit šablona podle vodorovné osy +keybind.category_prev.name = Předchozí kategorie +keybind.category_next.name = Další kategorie +keybind.block_select_left.name = Výběr bloku vlevo +keybind.block_select_right.name = Výběr bloku vpravo +keybind.block_select_up.name = Výběr bloku nahoře +keybind.block_select_down.name = Výběr bloku dole +keybind.block_select_01.name = Výběr kategorie/bloku 1 +keybind.block_select_02.name = Výběr kategorie/bloku 2 +keybind.block_select_03.name = Výběr kategorie/bloku 3 +keybind.block_select_04.name = Výběr kategorie/bloku 4 +keybind.block_select_05.name = Výběr kategorie/bloku 5 +keybind.block_select_06.name = Výběr kategorie/bloku 6 +keybind.block_select_07.name = Výběr kategorie/bloku 7 +keybind.block_select_08.name = Výběr kategorie/bloku 8 +keybind.block_select_09.name = Výběr kategorie/bloku 9 +keybind.block_select_10.name = Výběr kategorie/bloku 10 +keybind.fullscreen.name = Přepnout zobrazení na celou obrazovku keybind.select.name = Vybrat/Střílet -keybind.diagonal_placement.name = Diagonal Placement -keybind.pick.name = Pick Block -keybind.break_block.name = Break Block +keybind.diagonal_placement.name = Umisťovat úhlopříčně +keybind.pick.name = Vybrat blok +keybind.break_block.name = Rozbít blok keybind.deselect.name = Odznačit keybind.shoot.name = Střílet -keybind.zoom.name = přiblížení +keybind.zoom.name = Přiblížení keybind.menu.name = Hlavní nabídka -keybind.pause.name = pauza -keybind.pause_building.name = Pause/Resume Building -keybind.minimap.name = Minimapa -keybind.chat.name = Chat +keybind.pause.name = Pozastavení hry +keybind.pause_building.name = Pozastavit nebo spustit stavění +keybind.minimap.name = Mapička +keybind.chat.name = Kanál zpráv keybind.player_list.name = Seznam hráčů -keybind.console.name = Konzole +keybind.console.name = Terminál keybind.rotate.name = Otočit -keybind.rotateplaced.name = Rotate Existing (Hold) -keybind.toggle_menus.name = Přepínání nabídek -keybind.chat_history_prev.name = Předchozí historie chatu -keybind.chat_history_next.name = Další historie chatu -keybind.chat_scroll.name = Chat posun +keybind.rotateplaced.name = Otočit existující (podržet + klávesa pro Otočení) +keybind.toggle_menus.name = Přepnout zobrazení nabídek +keybind.chat_history_prev.name = Pohyb v historii zpráv zpět +keybind.chat_history_next.name = Pohyb v historii zpráv dopředu +keybind.chat_scroll.name = Rolování kanálu zpráv keybind.drop_unit.name = Zahodit jednotku -keybind.zoom_minimap.name = Přiblížit minimapu -mode.help.title = Popis módů -mode.survival.name = Survival -mode.survival.description = Normální mód. Limitované suroviny a automatické přepínání vln. -mode.sandbox.name = Sandbox -mode.sandbox.description = Nekonečné zdroje a žádný čas pro vlny nepřátel. +keybind.zoom_minimap.name = Přiblížit mapu +mode.help.title = Popis režimů +mode.survival.name = Hra o přežití +mode.survival.description = Klasický režim. Zdroje jsou limitované a vlny nepřátel přicházejí automaticky.\n[gray]Vyžaduje, aby v mapě bylo místo pro líhnutí nepřítel.[] +mode.sandbox.name = Pískoviště +mode.sandbox.description = Zdroje jsou nekonečné, vlny nepřátel nemají automatické načasování. mode.editor.name = Editor -mode.pvp.name = PvP -mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti. +mode.pvp.name = Hráči proti sobě +mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.\n[gray]Vyžaduje na mapě přítomnost alespoň dvou rozdílně zbarvených jader.[] mode.attack.name = Útok mode.attack.description = Znič nepřátelskou základnu.\n[gray]Vyžaduje přítomnost červeného jádra na mapě.[] -mode.custom = Custom Rules +mode.custom = Vlastní pravidla -rules.infiniteresources = Nekonečno surovin -rules.reactorexplosions = Reactor Explosions +rules.infiniteresources = Neomezeně surovin +rules.reactorexplosions = Výbuch reaktoru rules.wavetimer = Časovač vln rules.waves = Vlny -rules.attack = Attack Mode -rules.enemyCheat = Infinite AI Resources -rules.unitdrops = Unit Drops -rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier -rules.unithealthmultiplier = Unit Health Multiplier -rules.blockhealthmultiplier = Block Health Multiplier -rules.playerhealthmultiplier = Hráčovy životy(multiplejer) -rules.playerdamagemultiplier = Hráčův útok (multiplejer) -rules.unitdamagemultiplier = Demič jedmotek (Multiplejer) -rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) -rules.respawntime = Spaumovací čas:[LIGHT_GRAY] (sec) -rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) -rules.buildcostmultiplier = Build Cost Multiplier -rules.buildspeedmultiplier = Build Speed Multiplier -rules.waitForWaveToEnd = Vllny čekají na nepřátele -rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles) -rules.respawns = Max respawns per wave -rules.limitedRespawns = Limit Respawns +rules.attack = Režim útoku +rules.enemyCheat = Neomezeně surovin pro umělou inteligenci +rules.unitdrops = Sesílání jednotek +rules.unitbuildspeedmultiplier = Násobek rychlosti výroby jednotek +rules.unithealthmultiplier = Násobek zdraví jednotek +rules.blockhealthmultiplier = Násobek zdraví bloků +rules.playerhealthmultiplier = Násobek zdraví hráče +rules.playerdamagemultiplier = Násobek útoku hráče +rules.unitdamagemultiplier = Násobek poškození jednotkami +rules.enemycorebuildradius = Poloměr, ve kterém se okolo nepřátelského jádra nesmí stavět: [lightgray](dlaždic)[] +rules.respawntime = Čas znovuzrození: [lightgray](vteřin)[] +rules.wavespacing = Čas rozestupu mezi vlnami: [lightgray](vteřin)[] +rules.buildcostmultiplier = Násobek ceny stavění +rules.buildspeedmultiplier = Násobek rychlosti stavění +rules.waitForWaveToEnd = Vlny čekají na nepřátele +rules.dropzoneradius = Poloměr oblasti pro vylíhnutí: [lightgray](dlaždic)[] +rules.respawns = Maximální počet znovuvylíhnutí za vlnu +rules.limitedRespawns = Maximální počet znovuzrození rules.title.waves = Vlny -rules.title.respawns = Respawns -rules.title.resourcesbuilding = surovyny & Stavby +rules.title.respawns = Znovuzrození +rules.title.resourcesbuilding = Suroviny a stavění rules.title.player = Hráči rules.title.enemy = Nepřátelé rules.title.unit = Jednotky -rules.title.experimental = Experimental -rules.lighting = Lighting -rules.ambientlight = Ambient Light +rules.title.experimental = Experimentální +rules.lighting = Světlo +rules.ambientlight = Světlo prostředí content.item.name = Předměty -content.liquid.name = Tekutiny +content.liquid.name = Kapaliny content.unit.name = Jednotky -content.block.name = Blocks -content.mech.name = Mechy +content.block.name = Bloky +content.mech.name = Mechové item.copper.name = Měď item.lead.name = Olovo item.coal.name = Uhlí -item.graphite.name = Graphite -item.titanium.name = Titánium +item.graphite.name = Grafit +item.titanium.name = Titan item.thorium.name = Thorium item.silicon.name = Křemík -item.plastanium.name = Plastanium +item.plastanium.name = Plastan item.phase-fabric.name = Fázová tkanina -item.surge-alloy.name = Impulzní slitina -item.spore-pod.name = Spore Pod +item.surge-alloy.name = Rázová slitina +item.spore-pod.name = Syntetizér spór item.sand.name = Písek -item.blast-compound.name = Výbušná směs -item.pyratite.name = Pyratite +item.blast-compound.name = Výbušnina +item.pyratite.name = Pyratit item.metaglass.name = Metasklo item.scrap.name = Šrot liquid.water.name = Voda -liquid.slag.name = Rostavené železo -liquid.oil.name = Ropa -liquid.cryofluid.name = Cryofluid +liquid.slag.name = Roztavený kov +liquid.oil.name = Nafta +liquid.cryofluid.name = Chladící kapalina mech.alpha-mech.name = Alfa -mech.alpha-mech.weapon = Těžký Opakovač -mech.alpha-mech.ability = Roj dronů +mech.alpha-mech.weapon = Těžký kulomet +mech.alpha-mech.ability = Regenerace mech.delta-mech.name = Delta mech.delta-mech.weapon = Obloukový generátor -mech.delta-mech.ability = Průtok +mech.delta-mech.ability = Výboj mech.tau-mech.name = Tau -mech.tau-mech.weapon = Restruktní laser -mech.tau-mech.ability = Opravná dávka +mech.tau-mech.weapon = Restrukturní laser +mech.tau-mech.ability = Dávkové léčení mech.omega-mech.name = Omega -mech.omega-mech.weapon = Rojové střely +mech.omega-mech.weapon = Roj raket mech.omega-mech.ability = Obrněná konfigurace mech.dart-ship.name = Šipka -mech.dart-ship.weapon = Opakovač +mech.dart-ship.weapon = Kulomet mech.javelin-ship.name = Oštěp -mech.javelin-ship.weapon = Dávka raket -mech.javelin-ship.ability = Výbojový posilovač +mech.javelin-ship.weapon = Sprška raket +mech.javelin-ship.ability = Posilovač výboje mech.trident-ship.name = Trojzubec -mech.trident-ship.weapon = Bombová zátoka -mech.glaive-ship.name = Glaiva -mech.glaive-ship.weapon = Plamenný opakovač -item.corestorable = [lightgray]Storable in Core: {0} -item.explosiveness = [LIGHT_GRAY]Výbušnost: {0}% -item.flammability = [LIGHT_GRAY]Zápalnost: {0}% -item.radioactivity = [LIGHT_GRAY]Radioaktivita: {0}% -unit.health = [LIGHT_GRAY]Životy: {0} -unit.speed = [LIGHT_GRAY]Rychlost: {0} -mech.weapon = [LIGHT_GRAY]Zbraň: {0} -mech.health = [LIGHT_GRAY]Životy: {0} -mech.itemcapacity = [LIGHT_GRAY]Kapacita předmětů: {0} -mech.minespeed = [LIGHT_GRAY]Rychlost těžení: {0} -mech.minepower = [LIGHT_GRAY]Síla těžení: {0} -mech.ability = [LIGHT_GRAY]Schopnost: {0} -mech.buildspeed = [LIGHT_GRAY]Rychlost stavění: {0}% -liquid.heatcapacity = [LIGHT_GRAY]Kapacita teploty: {0} -liquid.viscosity = [LIGHT_GRAY]Viskozita: {0} -liquid.temperature = [LIGHT_GRAY]Teplota: {0} +mech.trident-ship.weapon = Bombový útok +mech.glaive-ship.name = Šavle +mech.glaive-ship.weapon = Plamenomet +item.corestorable = [lightgray]Úložné místo v jídře: {0}[] +item.explosiveness = [lightgray]Výbušnost: {0}%[] +item.flammability = [lightgray]Zápalnost: {0}%[] +item.radioactivity = [lightgray]Radioaktivita: {0}%[] +unit.health = [lightgray]Životy: {0}[] +unit.speed = [lightgray]Rychlost: {0}[] +mech.weapon = [lightgray]Zbraň: {0}[] +mech.health = [lightgray]Životy: {0}[] +mech.itemcapacity = [lightgray]Kapacita předmětů: {0}[] +mech.minespeed = [lightgray]Rychlost těžení: {0}[] +mech.minepower = [lightgray]Síla těžení: {0}[] +mech.ability = [lightgray]Schopnost: {0}[] +mech.buildspeed = [lightgray]Rychlost stavění: {0}%[] +liquid.heatcapacity = [lightgray]Teplotní kapacita: {0}[] +liquid.viscosity = [lightgray]Viskozita: {0}[] +liquid.temperature = [lightgray]Teplota: {0}[] -block.sand-boulder.name = Balvan písku +block.sand-boulder.name = Pískovec block.grass.name = Tráva block.salt.name = Sůl block.saltrocks.name = Solný kámen block.pebbles.name = Oblázky -block.tendrils.name = Tendrils +block.tendrils.name = Úponky block.sandrocks.name = Písečný kámen block.spore-pine.name = Spórová borovice block.sporerocks.name = Spórové kamení @@ -859,127 +861,128 @@ block.moss.name = Mech block.shrubs.name = Křoví block.spore-moss.name = Spórový mech block.shalerocks.name = Břidlicové kamení -block.scrap-wall.name = Stará zeď -block.scrap-wall-large.name = Velá stará zeď -block.scrap-wall-huge.name = Obří stará zeď -block.scrap-wall-gigantic.name = Gigantická stará zeď -block.thruster.name = Thruster -block.kiln.name = Pec -block.graphite-press.name = Graphitový lis -block.multi-press.name = Všětraný lis -block.constructing = {0} [LIGHT_GRAY](Ve výstavbě) -block.spawn.name = Nepřátelský spawn -block.core-shard.name = Core: Shard -block.core-foundation.name = Core: Foundation -block.core-nucleus.name = Core: Nucleus +block.scrap-wall.name = Rozpadlá zeď +block.scrap-wall-large.name = Velká rozpadlá zeď +block.scrap-wall-huge.name = Obří rozpadlá zeď +block.scrap-wall-gigantic.name = Gigantická rozpadlá zeď +block.thruster.name = Pohon +block.kiln.name = Vysoká pec +block.graphite-press.name = Lis na grafit +block.multi-press.name = Všestranný lis +block.constructing = {0} [lightgray](ve výstavbě)[] +block.spawn.name = Nepřátelská líheň +block.core-shard.name = Jádro: Odštěpek +block.core-foundation.name = Jádro: Základ +block.core-nucleus.name = Jádro: Atom block.deepwater.name = Hluboká voda block.water.name = Voda -block.tainted-water.name = Tainted Water -block.darksand-tainted-water.name = Dark Sand Tainted Water -block.tar.name = Tar +block.tainted-water.name = Zamořená voda +block.darksand-tainted-water.name = Zamořená voda s černým pískem +block.tar.name = Dehet block.stone.name = Kámen block.sand.name = Písek block.darksand.name = Černý písek block.ice.name = Led block.snow.name = Sníh block.craters.name = Krátery -block.sand-water.name = Písková voda -block.darksand-water.name = Černá písková voda +block.sand-water.name = Voda s pískem +block.darksand-water.name = Voda s černým pískem block.char.name = Char -block.holostone.name = Holo stone -block.ice-snow.name = Ice Snow -block.rocks.name = Kameny -block.icerocks.name = Ledové kameny -block.snowrocks.name = Sněhové kameny -block.dunerocks.name = Dune Rocks -block.pine.name = Pine -block.white-tree-dead.name = White Tree Dead -block.white-tree.name = White Tree -block.spore-cluster.name = Spore Cluster -block.metal-floor.name = Železná podlaha -block.metal-floor-2.name = Železná Podlaha -block.metal-floor-3.name = železná Podlaha3 -block.metal-floor-5.name = Železná podlaha 5 -block.metal-floor-damaged.name = Rozbytáb -block.dark-panel-1.name = Dark Panel 1 -block.dark-panel-2.name = Dark Panel 2 -block.dark-panel-3.name = Dark Panel 3 -block.dark-panel-4.name = Dark Panel 4 -block.dark-panel-5.name = Dark Panel 5 -block.dark-panel-6.name = Dark Panel 6 -block.dark-metal.name = Dark Metal -block.ignarock.name = Igna Rock -block.hotrock.name = Hot Rock +block.holostone.name = Blok kamene +block.ice-snow.name = Zasněžený led +block.rocks.name = Skály +block.icerocks.name = Ledové skály +block.snowrocks.name = Sněhové skály +block.dunerocks.name = Písečné duny +block.pine.name = Borovice +block.white-tree-dead.name = Bílá souška +block.white-tree.name = Bílý strom +block.spore-cluster.name = Shluk spór +block.metal-floor.name = Kovový povrch 1 +block.metal-floor-2.name = Kovový povrch 2 +block.metal-floor-3.name = Kovový povrch 3 +block.metal-floor-5.name = Kovový povrch 4 +block.metal-floor-damaged.name = Poškozený kovový povrch +block.dark-panel-1.name = Tmavá deska 1 +block.dark-panel-2.name = Tmavá deska 2 +block.dark-panel-3.name = Tmavá deska 3 +block.dark-panel-4.name = Tmavá deska 4 +block.dark-panel-5.name = Tmavá deska 5 +block.dark-panel-6.name = Tmavá deska 6 +block.dark-metal.name = Tmavý kov +block.ignarock.name = Třaskavec +block.hotrock.name = Horký kámen block.magmarock.name = Magmatický kámen block.cliffs.name = Útesy block.copper-wall.name = Měděná zeď block.copper-wall-large.name = Velká měděná zeď -block.titanium-wall.name = Titaniová zeď -block.titanium-wall-large.name = Velká titaniová zeď -block.plastanium-wall.name = Plastaniová zeď -block.plastanium-wall-large.name = Velká plastaniová zeď -block.phase-wall.name = Fázová stěna -block.phase-wall-large.name = Velká fázová stěna -block.thorium-wall.name = Thoriová stěna -block.thorium-wall-large.name = Velká thoriová stěna +block.titanium-wall.name = Titanová zeď +block.titanium-wall-large.name = Velká titanová zeď +block.plastanium-wall.name = Plastanová zeď +block.plastanium-wall-large.name = Velká plastanová zeď +block.phase-wall.name = Fázová zeď +block.phase-wall-large.name = Velká fázová zeď +block.thorium-wall.name = Thoriová zeď +block.thorium-wall-large.name = Velká thoriová zeď block.door.name = Dveře block.door-large.name = Velké dveře -block.duo.name = Duo -block.scorch.name = Scorch -block.scatter.name = Scatter -block.hail.name = Hail -block.lancer.name = Lancer +block.duo.name = Střálna Duo +block.scorch.name = Palivec +block.scatter.name = Rozsévač +block.hail.name = Kroupomet +block.lancer.name = Kopiník block.conveyor.name = Dopravník -block.titanium-conveyor.name = Titániový dopravník +block.titanium-conveyor.name = Titanoový dopravník block.armored-conveyor.name = Obrněný dopravník -block.armored-conveyor.description = Přepravuje předměty stejně rychle jako titaniový přepravník. Je obrněný a déle vydrží, avšak nepřijímá předměty z boku z ničeho jiného než jiných přepravníků. +block.armored-conveyor.description = Přepravuje předměty stejně rychle jako titanový přepravník, ale má navíc brnění. Přijímá předměty ze srtan pouze z jiných přepravníků. block.junction.name = Křižovatka block.router.name = Směrovač -block.distributor.name = Distributor -block.sorter.name = Dělička +block.distributor.name = Rozdělovač +block.sorter.name = Třídička block.inverted-sorter.name = Obrácená třídička block.message.name = Zpráva -block.illuminator.name = Illuminator -block.illuminator.description = A small, compact, configurable light source. Requires power to function. -block.overflow-gate.name = Brána přetečení -block.silicon-smelter.name = Silicon Smelter +block.illuminator.name = Osvětlovač +block.illuminator.description = Malý, kompaktní, konfigurovatelný zdroj světla. Vyžaduje pro svoje fungování energii. +block.overflow-gate.name = Brána s přepadem +block.underflow-gate.name = Brána s podtokem +block.silicon-smelter.name = Křemíková huť block.phase-weaver.name = Tkalcovna pro fázovou tkaninu block.pulverizer.name = Rozmělňovač -block.cryofluidmixer.name = Cryofluid mixér +block.cryofluidmixer.name = Míchačka na chladící kapalinu block.melter.name = Tavírna block.incinerator.name = Spalovna -block.spore-press.name = Spore Press -block.separator.name = Separátor -block.coal-centrifuge.name = Coal Centrifuge +block.spore-press.name = Lis na spóry +block.separator.name = Oddělovač +block.coal-centrifuge.name = Odstředivka na uhlí block.power-node.name = Energetický uzel block.power-node-large.name = Velký energetický uzel -block.surge-tower.name = Surge Tower -block.diode.name = Battery Diode +block.surge-tower.name = Přepěťová věž +block.diode.name = Bateriová dioda block.battery.name = Baterie block.battery-large.name = Velká baterie block.combustion-generator.name = Spalovací generátor block.turbine-generator.name = Turbínový generátor -block.differential-generator.name = Differential Generator -block.impact-reactor.name = Impact Reactor +block.differential-generator.name = Rozdílový Generator +block.impact-reactor.name = Rázový reaktor block.mechanical-drill.name = Mechanický vrt block.pneumatic-drill.name = Pneumatický vrt block.laser-drill.name = Laserový vrt -block.water-extractor.name = Vodní extraktor +block.water-extractor.name = Vrt na vodu block.cultivator.name = Kultivátor -block.dart-mech-pad.name = Dart Mech Pad -block.delta-mech-pad.name = Plošina pro Delta Mech -block.javelin-ship-pad.name = Plošina pro Oštěp Mech +block.dart-mech-pad.name = Plošina pro mecha Alfa +block.delta-mech-pad.name = Plošina pro mecha Delta +block.javelin-ship-pad.name = Plošina pro loď Oštěp block.trident-ship-pad.name = Plošina pro loď Trojzubec -block.glaive-ship-pad.name = Plošina pro loď Glaiva -block.omega-mech-pad.name = Plošina pro Omega Mech -block.tau-mech-pad.name = Plošina pro Tau Mech +block.glaive-ship-pad.name = Plošina pro loď Šavle +block.omega-mech-pad.name = Plošina pro mecha Omega +block.tau-mech-pad.name = Plošina pro mecha Tau block.conduit.name = Potrubí -block.mechanical-pump.name = Mechanická pumpa +block.mechanical-pump.name = Mechanické čerpadlo block.item-source.name = Zdroj předmětů -block.item-void.name = Prázdnota pro předměty -block.liquid-source.name = Zdroj tekutin -block.liquid-void.name = Liquid Void -block.power-void.name = Prázdnota pro energii +block.item-void.name = Černá díra na předměty (/dev/null) +block.liquid-source.name = Zdroj kapalin +block.liquid-void.name = Černá díra na kapaliny (/dev/null) +block.power-void.name = Černá díra na energii (/dev/null) block.power-source.name = Nekonečný zdroj energie block.unloader.name = Odbavovač block.vault.name = Trezor @@ -988,262 +991,263 @@ block.swarmer.name = Rojiště block.salvo.name = Salva block.ripple.name = Vlnění block.phase-conveyor.name = Fázový přepravník -block.bridge-conveyor.name = Mostový přepravník -block.plastanium-compressor.name = Kompresor na plastanium -block.pyratite-mixer.name = Pyratit mixér -block.blast-mixer.name = Výbušninový mixér +block.bridge-conveyor.name = Přemostění přepravníku +block.plastanium-compressor.name = Kompresor na plastan +block.pyratite-mixer.name = Míchačka na pyratit +block.blast-mixer.name = Míchačka na výbušninu block.solar-panel.name = Solární panel block.solar-panel-large.name = Velký solární panel -block.oil-extractor.name = Ropný extraktor +block.oil-extractor.name = Vrt na naftu block.command-center.name = Řídící středisko -block.draug-factory.name = Draug Miner Drone Factory -block.spirit-factory.name = Továrna na Spirit drony -block.phantom-factory.name = Továrna na Fantom drony -block.wraith-factory.name = Továrna na Wraithy -block.ghoul-factory.name = Továrna na Ghůl bombardéry -block.dagger-factory.name = Továrna na Dagger mechy -block.crawler-factory.name = Továrna na Crawler mechy -block.titan-factory.name = Továrna na Titán mechy -block.fortress-factory.name = Továrna na Fortress mechy -block.revenant-factory.name = Továrna na Revenanty -block.repair-point.name = Opravný bod +block.draug-factory.name = Továrna na těžící drony Dragoun +block.spirit-factory.name = Továrna na opravovací drony Spirit +block.phantom-factory.name = Továrna na stavící drony Fantóm +block.wraith-factory.name = Továrna na stíhačky Přízrak +block.ghoul-factory.name = Továrna na bombardéry Ghúl +block.dagger-factory.name = Továrna na mechy Dýka +block.crawler-factory.name = Továrna na mechy Slídil +block.titan-factory.name = Továrna na mechy Titán +block.fortress-factory.name = Továrna na mechy Pevnost +block.revenant-factory.name = Továrna na stíhačky Mstitel +block.repair-point.name = Opravovací bod block.pulse-conduit.name = Pulzní potrubí -block.plated-conduit.name = Plated Conduit +block.plated-conduit.name = Plátované potrubí block.phase-conduit.name = Fázové potrubí -block.liquid-router.name = Směrovač tekutin -block.liquid-tank.name = Nádrž na tekutiny -block.liquid-junction.name = Křižovatka tekutin -block.bridge-conduit.name = Mostové potrubí -block.rotary-pump.name = Rotační pumpa +block.liquid-router.name = Směrovač kapalin +block.liquid-tank.name = Nádrž na kapaliny +block.liquid-junction.name = Křižovatka kapalin +block.bridge-conduit.name = Přemostění potrubí +block.rotary-pump.name = Rotační čerpadlo block.thorium-reactor.name = Thoriový reaktor -block.mass-driver.name = Hromadný distributor +block.mass-driver.name = Hromadný přenašeč block.blast-drill.name = Tlakovzdušný vrt -block.thermal-pump.name = Termální pumpa -block.thermal-generator.name = Termální generátor -block.alloy-smelter.name = Slitinová pec -block.mender.name = Mender +block.thermal-pump.name = Tepelné čerpadlo +block.thermal-generator.name = Tepelný generátor +block.alloy-smelter.name = Slitinová huť +block.mender.name = Opravář block.mend-projector.name = Opravný projektor -block.surge-wall.name = Impulzní stěna -block.surge-wall-large.name = Velká impulzní stěna +block.surge-wall.name = Rázová stěna +block.surge-wall-large.name = Velká rázová stěna block.cyclone.name = Cyklón -block.fuse.name = Fůze +block.fuse.name = Fúze block.shock-mine.name = Šoková mina -block.overdrive-projector.name = Vysokorychlostní projektor +block.overdrive-projector.name = Urychlující projektor block.force-projector.name = Silový projektor block.arc.name = Oblouk -block.rtg-generator.name = RTG generátor -block.spectre.name = Spektr +block.rtg-generator.name = RTG +block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Kontejnér -block.launch-pad.name = Launch Pad -block.launch-pad-large.name = Large Launch Pad -team.blue.name = modrá -team.crux.name = červená -team.sharded.name = orange -team.orange.name = oranžová -team.derelict.name = derelict -team.green.name = zelená -team.purple.name = fialová -unit.spirit.name = Spirit dron -unit.draug.name = Draug Miner Drone -unit.phantom.name = Fantom dron -unit.dagger.name = Dagger -unit.crawler.name = Crawler -unit.titan.name = Titán -unit.ghoul.name = Ghůl bombardér -unit.wraith.name = Wraith -unit.fortress.name = Pevnost -unit.revenant.name = Revenant -unit.eruptor.name = Eruptor -unit.chaos-array.name = Chaos Array -unit.eradicator.name = Eradicator -unit.lich.name = Lich -unit.reaper.name = Reaper +block.launch-pad.name = Vysílací plošina +block.launch-pad-large.name = Velká vysílací plošina +team.blue.name = modrý +team.crux.name = červený +team.sharded.name = oranžový +team.orange.name = oranžový +team.derelict.name = opuštěný +team.green.name = zelený +team.purple.name = fialový +unit.spirit.name = Opravovací dron Spirit +unit.draug.name = Těžící dron Dragoun +unit.phantom.name = Stavící drom Fantóm +unit.dagger.name = Mech Dýka +unit.crawler.name = Mech Slídil +unit.titan.name = Mech Titán +unit.ghoul.name = Bombardér Ghúl +unit.wraith.name = Stíhačka Přízrak +unit.fortress.name = Mech Pevnost +unit.revenant.name = Stíhačka Mstitel +unit.eruptor.name = Lávovec +unit.chaos-array.name = Čirý chaos +unit.eradicator.name = Likvidátor +unit.lich.name = Kostěj nesmrtelný +unit.reaper.name = Rozparovač tutorial.next = [lightgray] -tutorial.intro = Vítej ve [scarlet]výuce Mindustry.[]\nZačni [accent] těžením mědi[] - klikni na měděnou žílu v blízkosti jádra.\n\n[accent]{0}/{1} copper -tutorial.intro.mobile = Vítej ve [scarlet]výuce Mindustry.[]\nPohybuj se táhnutím do stran.\nPřibližuj a oddaluj [accent]2 prsty [].\nZačni [accent] těžením mědi[] - přibliž se k měděné žíle v blízkosti jádra a klepni na ni.\n\n[accent]{0}/{1} mědi -tutorial.drill = Manuální těžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\nPostav jeden na měděnou rudu. -tutorial.drill.mobile = Manuální těžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\nKlepni na vrt v záložce dole vpravo.\nVyber [accent] mechanický vrt[].\nPolož ho klepnutím na měděnou žílu a následně potvrď [accent] fajfkou[] níže.\nStiskni [accent] X [] pro zrušení stavby. -tutorial.blockinfo = Každý blok má jiné vlastnosti. Každý vrt může těžit pouze některé suroviny.\nNa tyto vlastnosti se můžeš podívat [accent] klepnutím na "?" ve stavebním menu.[]\n\n[accent] Nyní se podívej na vlastnosti mechanického vrtu.[] -tutorial.conveyor = [accent]Dopravníky[] jsou zapotřebí k dopravě materiálu k jádru.\nVytvoř řadu dopravníků od vrtu až k jádru -tutorial.conveyor.mobile = [accent]Dopravníky[] jsou zapotřebí k dopravě materiálu k jádru.\nVytvoř řadu dopravníku od vrtu až k jádru.\n[accent] Pokládej dopravníky v řadě dlouhým stiskem prstu[] a táhnutím v požadovaném směru.\n\n[accent]{0}/{1} přepravníků položeno v řadě\n[accent]0/1 předmětů doručeno -tutorial.turret = Defenzivní stavby musí být postaveny za účelem obrany vůči[LIGHT_GRAY] nepříteli[].\nPostav střílnu Duo blízko svého jádra. -tutorial.drillturret = Duo střílny požadují[accent] měděnou munici []jako střelivo.\nPolož mechanický vrt blízko střílny pro zásobování mědí. -tutorial.pause = Během boje můžeš[accent] pauznout hru.[]\nBěhem pauzy je možné plánovat stavbu budov.\n\n[accent]Pauzni mezerníkem. -tutorial.pause.mobile = Během boje můžeš[accent] pauznout hru.[]\nBěhem pauzy je možné plánovat stavbu budov.\n\n[accent]Pauzu dáš tímhle tlačítkem vlevo nahoře. -tutorial.unpause = Teď zmáčkni mezerník znova a odpauzuj hru. -tutorial.unpause.mobile = Teď ho zmáčkni znova a odpauzuj hru. -tutorial.breaking = Často je nutné bloky i ničit.\n[accent]Drž pravé tlačítko[] a táhni pro výběr oblasti bloků ke zničení.[]\n\n[accent]Znič všechny bloky šrotu vlevo od Tvého jádra. -tutorial.breaking.mobile = Často je nutné bloky i ničit.\n[accent]Vyber rozebírací mód[] a klepni na blok, který chceš zničit.\nZnič celou oblast delším stiskem prstu[] a táhnutím v nějakém směru.\nZmáčkni fajfku pro potvrzení zničení.\n\n[accent]Znič všechny bloky šrotu vlevo od Tvého jádra. -tutorial.withdraw = Někdy je třeba odebírat předměty přímo z bloků.\n[accent]Klikni na blok[], ve kterém jsou předměty a pak [accent]klikni na předmět[] z jeho inventáře.\nVícero předmětů může být odebráno [accent]kliknutím a držením[].\n\n[accent]Odeber nějakou měď z jádra.[] -tutorial.deposit = Vložit předměty dovnitř bloku můžeš přetažením z Tvé lodi na cílový blok.\n\n[accent]Vlož svou měď zpět do jádra.[] -tutorial.waves = [LIGHT_GRAY] Nepřítel[] se přibližuje.\n\nUbraň své jádro po dobu 2 vln, postav více střílen. -tutorial.waves.mobile = [lightgray] Nepřítel[] se přibližuje.\n\nUbraň své jádro po dobu 2 vln. Tvá loď bude automaticky střílet po nepřátelských jednotkách.\nPostav více střílen a vrtů. Natěž více mědi. -tutorial.launch = Jakmile dosáhneš určité vlny, budeš moci [accent]vyslat své jádro zpět[]. Opustíš tím svou základnu a [accent]získáš suroviny uložené v jádře[].\nZískané suroviny mohou být použity pro výzkum nových technologií.\n\n[accent]Stiskni tlačítko pro vyslání jádra. +tutorial.intro = Vítej ve [scarlet]výuce Mindustry[]. Zde se dozvíš základy hraní.\nPoznámka: výuka předpokládá [accent]výchozí klávesy[] v nastavení, pokud jsi je změnil, bude třeba to vzít v potaz.\nPoužij [accent][[WASD][] pro pohyb a [accent]kolečko myši[] pro přibližování a oddalování.\nZačni [accent]těžením mědi[]. Přibliž se k měděné žíle u Tvého jádra a klikni na ni pro zahájení těžby.\n\n[accent]{0}/{1} mědi[] +tutorial.intro.mobile = Vítej ve [scarlet]výuce Mindustry[].\nPohybuj se táhnutím prstem do strany.\nPřibližuj a oddaluj mapu [accent]2 prsty[].\nZačni [accent] těžením mědi[]. Přibliž se k měděné žíle u Tvého jádra a ťupni na ni pro zahájení těžby.\n\n[accent]{0}/{1} mědi[] +tutorial.drill = Sám vidíš, že ruční těžba není moc efektivní.\n[accent]Vrty[] umožňují těžit automaticky.\nKlikni na vrt v nabídce v pravém dolním rohu.\nVyber [accent]mechanický vrt[]. Umisti jej kliknutím na měděnou žílu.\nTaké můžeš vybrat mechanický vrt stiskem kláves [accent][[2][] a následně [accent][[1][] rychle po sobě, nezávisle na tom, jaká záložka je v nabídce zrovna otevřena.\n[accent]Pravým klikem[] přerušíš stavění. +tutorial.drill.mobile = Sám vidíš, že ruční těžba není moc efektivní.\n[accent]Vrty[] umožňují těžit automaticky.\nŤupni na vrt v nabídce v pravém dolním rohu.\nVyber [accent]mechanický vrt[]. Umisti jej klikutím na měděnou žílu ťupnutím a následně zaškrtni [accent]fajfku[] na spodku nabídky pro potvrzení volby.\nŤupnutím na [accent]X[] přerušíš stavění. +tutorial.blockinfo = Každý blok má jiné vlastnosti. Každý vrt může těžit pouze některé suroviny.\nPro zobrazení informací a statistik o bloku [accent]zvol "?" při vybraném bloku ve stavební nabídce[].\n\nNyní se podívej na [accent]vlastnosti mechanického vrtu[]. +tutorial.conveyor = Pro dopravu materiálu k jádru jsou zapotřebí [accent]dopravníky[].\nVytvoř řadu dopravníků od vrtu až k jádru.\nDrž zmáčknuté [accent]levé tlačítko myši[], abys umístil dopravníky v jedné řadě.\nKdyž zmáčkneš [accent]Ctrl[], řada dopravníků se bude umisťovat navíc úhlopříčně.\nPoužij [accent]kolečko myši[] pro otáčení bloku před umístěním.\n[accent]Umísti dopravníky tak, abys dopravil měď do jádra[]. +tutorial.conveyor.mobile = Pro dopravu materiálu k jádru jsou zapotřebí [accent]dopravníky[].\nVytvoř řadu dopravníků od vrtu až k jádru.\n[accent]Pokládej dopravníky v řadě ťupnutím a delším prstu[] a táhnutím v požadovaném směru.\n[accent]Umísti dopravníky tak, abys dopravil měď do jádra[]. +tutorial.turret = Jakmile se materiál dostane do jádra, může být použit pro stavbu.\nPamatuj si, že ne všechno lze použít pro stavbu.\nVěci, které melze použít jako stavební materiál, jako například [accent]uhlí[] nebo [accent]šrot[], nelze do jádra uložit, a zasekne tak celý dopravník na vstupu.\nPro odehnání útočných jednotek [lightgray]nepřítele[] od jádra je třeba postavit obranné stavby.\nPostav [accent]střílnu Duo[] poblíž svého jádra. +tutorial.drillturret = Střílny Duo potřebují jako střelivo [accent]měď[].\nPolož mechanický vrt blízko střílny.\nPro zásobování mědí veď dopravníky od vrtu ke střílně.\n\n[accent]Doručeno střeliva: {0}/{1}[] +tutorial.pause = Během hry, například v boji, můžeš [accent]pozastavit hru[].\nPři pozastavení můžeš naplánovat stavbu do fronty.\n\n[accent]Pozastav hru mezerníkem[]. +tutorial.pause.mobile =Během hry, například v boji, můžeš [accent]pozastavit hru[].\nPři pozastavení můžeš naplánovat stavbu do fronty.\n\n[accent]Pozastavení hry probedeš ťupnutím na dvě čárky vlevo nahoře. +tutorial.unpause = Teď zmáčkni mezerník znova a pokračuj ve hře. +tutorial.unpause.mobile = Teď ťupni na ikonu na stejném místě a pokračuj ve hře. +tutorial.breaking = Bloky je třeba nejen stavět, ale Často rozbít.\n[accent]Drž pravé tlačítko myšu[] a táhni s ní pro výběr bloků, které potřebuješ rozbít.\n\n[accent]Znič všechen šrot vlevo od Tvého jádra použitím blokového výběru[]. +tutorial.breaking.mobile = Bloky je třeba nejen stavět, ale Často rozbít.\n[accent]Ťupnu na ikonku kladiva dole[] a pak ťupni na blok, který chceš rozbít.\nRozbití více bloků se provádí delším podržením prstu a táhnutím.\nRozbití dokončíš ťupnutím na fajfku.\n\n[accent]Znič všechen šrot vlevo od Tvého jádra použitím blokového výběru[]. +tutorial.withdraw = Někdy je třeba odebírat předměty přímo z bloků.\n[accent]Klikni na blok[], ve kterém jsou předměty a pak [accent]klikni na předmět[] z inventáře bloku.\nVícero předmětů může být odebráno [accent]ťupnutím a držením[].\n\n[accent]Odeber trochu mědi z jádra[]. +tutorial.deposit = Vložit předměty do bloku můžeš přetažením z Tvé lodi na cílový blok.\n\n[accent]Vlož odebranou měď zprátky do Tvého jádra[]. +tutorial.waves = [lightgray]Nepřítel[] se přibližuje.\n\nUbraň své jádro po dobu 2 vln. [accent]Klikni levým tlačítkem[] pro střílení.\nPostav více střílen a vrtů. Natěž více mědi. +tutorial.waves.mobile = [lightgray]Nepřítel[] se přibližuje.\n\nUbraň své jádro po dobu 2 vln. Tvá loď bude automaticky střílet po nepřátelských jednotkách.\nPostav více střílen a vrtů. Natěž více mědi. +tutorial.launch = Jakmile dosáhneš určité vlny, budeš moci [accent]vyslat své jádro zpět[]. Opustíš tím svou základnu a [accent]získáš suroviny uložené v jádře[].\nZískané suroviny mohou být použity pro výzkum nových technologií.\n\n[accent]Stiskni tlačítko pro vyslání jádra zpět[]. -item.copper.description = Užitečný strukturální materiál. Používá se rozsáhle v ostatních typech bloků. -item.lead.description = Základní počáteční materiál. Požívá se rozsáhle v elektronice a v blocích pro transport tekutin. -item.metaglass.description = Velmi důležitá součást všeho, co se týká tekutin -item.graphite.description = Stlačený uhlík, používaný v elektronických komponentách a též jako munice. -item.sand.description = Běžný materiál rozšířeně používaný v spalování slitin. -item.coal.description = Běžné a snadno dostupné palivo, pochází z Ostravy. -item.titanium.description = Vzácný, velice lehký kov, používá se rozsáhle v trasportu tekutin, vrtech a letounech. -item.thorium.description = Hustý, radioaktivní materiál, používá se jako strukturální podpora a jako nuklearní palivo. -item.scrap.description = Staré železo které se dá přepracovat na grafit měď olovo titánium a písek -item.silicon.description = Extrémně užitečný polovodič, aplikuje se v solárních panelech a v komplexní elektronice. -item.plastanium.description = Lehký, kujný materiál, používá se v pokročilém letectví a jako fragmentační střelivo. -item.phase-fabric.description = Skoro beztížná substance používaná v pokročilé elektronice a v sebeopravné technologii. -item.surge-alloy.description = Pokročilá slitina s unikátními elektronickými vlastnostmi. -item.spore-pod.description = Used for conversion into oil, explosives and fuel. -item.blast-compound.description = Těkavá směs používaná v bombácha a výbušninách. Dá se spalovat ale jako palivo se nedoporučuje. -item.pyratite.description = Extrémně vznětlivá substance, používá ve vznětovém střelivu. -liquid.water.description = Nejčastěji se používá ke chlazení a zpracování odpadu. -liquid.slag.description = Rostavený scrap pou žívá se k vírobě olova mědi a grafitu. -liquid.oil.description = Může být spálen, vybouchnout nebo použit jako chlazení. -liquid.cryofluid.description = Nejefektivnější tekutina pro chlazení. -mech.alpha-mech.description = Standartní mech. Má slušnou rychlost a poškození; Může vytvořit až 3 drony Pro zvýšenou ofenzivní způsobilost. -mech.delta-mech.description = Rychlý, lehce obrněný mech vytvořený pro udeř a uteč akce. Působí malé poškození vůči struktůrám, ale může zneškodnit velkou skupinu nepřátelských jednotek velmi rychle svýmy elektro-obloukovými zbraněmi -mech.tau-mech.description = Podpůrný mech. Léčí spojenecké stavby a jednotky střelbou do nich. Může léčit i spojence ve svém poli působení. -mech.omega-mech.description = Objemný a velice dovře obrněný mech, určen pro útok v přední linii. Jeho schopnost obrnění blokuje až 90% příchozího poškození. -mech.dart-ship.description = Standartní loď. Poměrně rychlá a lehká, má malou ofenzívu a pomalou rychlost těžení. -mech.javelin-ship.description = Loď stylu udeř a uteč. Zpočátku pomalý ale umí akcelerovat do obrovské rychlosti a létat u nepřátelských základen a působit značné škody svými elektrickými zbraněmi a raketami. -mech.trident-ship.description = Těžký bombardér. Docela dobře obrněný. -mech.glaive-ship.description = Obrovská, dobře obrněná střelecká loď. Vybavena zápalným opakovačem. Dobrá akcelerace a maximální rychlost. -unit.draug.description = Jednoduchý těžící dron. Levný a postradatelný. Automaticky těží měď a olovo v blízkosti. Natěžené suroviny donese do nejbližšího jádra. -unit.spirit.description = Startovní dron. Standardně se objevuje u jádra. Automaticky těží rudy a opravuje stavby. -unit.phantom.description = Pokročilý dron. Automaticky těží rudy a opravuje stavby. Podstatně víc efektivní než Spirit dron. -unit.dagger.description = Základní pozemní jednotka. Efektivní ve velkém počtu. -unit.crawler.description = Pozemní jednotka zkonstruovaná z okřesané železné kostry a připlácnutých výbušnin. Vydrží málo a exploduje při kontaktu. -unit.titan.description = Pokročilá, obrněná pozemní jednotka. Útočí jak na pozemní tak vzdušné nepřátelské jednotky. -unit.fortress.description = Težká, pozemní artilérní jednotka. -unit.eruptor.description = Těžký protibudovní mech. Střílí proud žhavé kapaliny na nepřátelské budovy. Zapaluje a roztavuje vše v cestě. -unit.wraith.description = Rychlý, udeř a uteč stíhací letoun. -unit.ghoul.description = Těžký, kobercový bombardér. -unit.revenant.description = A heavy, hovering missile array. +item.copper.description = Nejběžnější stavební materiál. Používá se ve všech typech bloků. +item.lead.description = Základní materiál. Používá se v energetických blocích a při přepravě kapalin. +item.metaglass.description = Velmi tvrdá skleněná sloučenina. Hodně používaná pro ukládání a rozvod kapalin. +item.graphite.description = Mineralizovaný uhlík, používaný v energetických komponentách a též jako munice. +item.sand.description = Běžný materiál, který se hojně používá při slévání a tavení. +item.coal.description = Zkamenělé rostliny, zformované dávno před vznikem mapy. Používané běžně jako palivo a pro vyrobu dalších materálů. +item.titanium.description = Vzácný, velice lehký kov, využívaný hojně při přepravě kapalin, ve vrtech a při výrobě letových strojů. +item.thorium.description = Hutný, radioaktivní materiál, využívaný jako strukturální podpora a nuklearní palivo. +item.scrap.description = Zbytky starých struktur a jednotek. Obsahuje stopové množství mnoha různých kovů. +item.silicon.description = Extrémně užitečný polovodič. Využívá se v solárních panelech, pokročilých energetických blocích a jako munice do samonaváděcích střel ve střílnách. +item.plastanium.description = Lehký, kujný materiál, využívaný v pokročilém letectví a jako tříštivá munice. +item.phase-fabric.description = Takřka nehmotná substance používaná v pokročilých energetických blocích a v samoopravných technologiích. +item.surge-alloy.description = Vyspělá slitina s jedinečnými energetickými vlastnostmi. +item.spore-pod.description = Umělé spór, syntetizované pro průmyslové účely z atmosférických koncentrací. Jejich využití spočívá v přeměně na naftu, výbušniny a jako palivo. +item.blast-compound.description = Nestálá směs používaná v bombách a výbušninách. Syntetizuje se ze spórových tobolek a těkavých substancí. Nedoporučuje se využívat jako palivo. +item.pyratite.description = Extrémně vznětlivá substance, používaná ve zápalném střelivu. +liquid.water.description = Nejužitečnější kapalina. Hojně využívaná jak chlazení do strojů a též pro výrobu spór. +liquid.slag.description = Různé různé druhy roztaveného kovu smíchané dohromady. Lze je rozdělit na jednotlivé minerály, nebo se tato slitina dá použít jako munice při střílení na nepřátelské jednotky. +liquid.oil.description = Kapalina použitá při pokročilé výrobě materiálů. Může být přeměněna na uhlí, nebo při rozprášení a zapálení použita jako zbraň. +liquid.cryofluid.description = Netečná, nereznoucí kapalina, vytvořená z vody a titanu. Má extrémně vysokou tepelnou kapacitu. Hojně se používá jako chladicí kapalina. +mech.alpha-mech.description = Standardní mech. Je založen na mechovi Dýka, s vylepšeným brněním a schopnostmi stavět. Dává více poškození, než Šipka. +mech.delta-mech.description = Rychlý, lehce obrněný mech stvořený pro bleskové útočné akce. Proti stavbám sice způsobuje jen malé poškození, ale umí zlikvidovat početné skupiny nepřátelských jednotek velmi rychle pomocí výbojových zbraní. +mech.tau-mech.description = Podpůrný mech. Léčí spojenecké bloky pomocí vystřelení opravných dávek. V dosahu svého působení může léčit i spojenecké jednotky. +mech.omega-mech.description = Objemný a velice dobře obrněný mech, určený pro útok v přední linii. Jeho plátování zblokuje až 90% příchozího poškození. +mech.dart-ship.description = Standardní loď. Umí rychle težit suroviny. Je dostatečně rychlá a lehká, ale má jen malou útočnou schopnost. +mech.javelin-ship.description = Loď pro bleskové útoky. Zpočátku je pomalá, ale dokáže zrychlit na velkou rychlost a přelétávat nad nepřátelskými základnami. Způsobuje přitom značné škody svými energetickými zbraněmi a raketami. +mech.trident-ship.description = Těžký bombardér. Umí dvě věci: pomáhat při stavění a ničit nepřátelské opevnění. Je dostatečně dobře obrněn. +mech.glaive-ship.description = Obrovská, dobře obrněná střelecká loď. Je vybavena plamenometem a má výbornou schopnost manévrů. +unit.draug.description = Jednoduchý těžící dron. Levný a postradatelný. Automaticky těží měď a olovo ve své blízkosti. Natěžené suroviny donese do nejbližšího jádra. +unit.spirit.description = Modifikovaný dron Dragoun, upravený pro opravu staveb, namísto těžení. Automaticky opravuje poškozené bloky v oblasti svého působení. +unit.phantom.description = Pokročilý dron. Následuje uživatele. Pomáhá při stavění. +unit.dagger.description = Základní pozemní jednotka. Levná výroba. Zdrcující ve velkém houfu. +unit.crawler.description = Pozemní jednotka sestávající z oholené železné kostry s přilepenými výbušninami. Vydrží málo a exploduje při kontaktu s nepřáteli. +unit.titan.description = Vyspělá obrněná pozemní jednotka. Útočí jak na pozemní, tak vzdušné nepřátelské cíle. Je vybavena dvěma změnšenými plamenomety třídy Palivec. +unit.fortress.description = Těžký dělostřelecký mech. Je vybaven dvěma upravenými kanóny typu Kroupomet pro útok dalekého dosahu proti nepřátelským jednotkám a stavbám. +unit.eruptor.description = Těžký mech navržený na ničení budov. Pálí proudy rozžhaveného kovu na nepřátelská opevnění. Taví a zapaluje vše v cestě. +unit.wraith.description = Rychlá stíhačka pro bleskové útoky. Cílí na generátory energie. +unit.ghoul.description = Těžký bombardér pro kobercový nálet. Trhá nepřátelské struktury, cílí na kritickou infrastrukturu. +unit.revenant.description = Těžký vznášející se mrak raket. block.message.description = Ukládá zprávu. Používá se pro komunikaci mezi spojenci. -block.graphite-press.description = Přeměňuje neforemné kusy uhlí do ušlechtilých výlisků graphitu. -block.multi-press.description = Vylepšená verze graphitového lisu. Využívá vodu a energii k rychlejšímu a efektivnějšímu zpracování uhlí. -block.silicon-smelter.description = Redukuje písek s vysoce čistým koksem za účelem výroby křemíku. -block.kiln.description = Přetavuje písek a olovo do metaskla. Vyžaduje malé množství energie. -block.plastanium-compressor.description = Produkuje plastánium za pomocí titánia a ropy. -block.phase-weaver.description = Produkuje fázovou tkaninu z radioaktivního thoria a velkého množství písku. -block.alloy-smelter.description = Produkuje impulzní slitinu z titánia, olova, křemíku a mědi. -block.cryofluidmixer.description = Kombinuje vodu a titánium do cryofluid, která je více efektivní pro chlazení. -block.blast-mixer.description = Používá ropu k přeměně pyratitu do méně hořlavé ale více explozivní těkavé směsi. -block.pyratite-mixer.description = Míchá uhlí, olovo a písek do velice hořlavého pyratitu. -block.melter.description = Taví kámen při velice vysokých teplotách na lávu. -block.separator.description = Vystaví kámen velkému tlaku vody k získání různých materiálů obsažené v kameni. -block.spore-press.description = Vylisuje ze spórů ropu. -block.pulverizer.description = Drtí kámen na písek. Užitečné když se v oblasti nenalézá písek. -block.coal-centrifuge.description = Solidifes oil into chunks of coal. -block.incinerator.description = Zbaví tě přebytku předmětů. -block.power-void.description = Prázdnota pro veškerou energii vstupující do něj. Jen pro Sandbox. -block.power-source.description = Nekonečný zdroj energie. Jen pro Sandbox. -block.item-source.description = Nekonečný zdroj předmětů. Jen pro Sandbox. -block.item-void.description = Likviduje jakéhokoliv vstupní předmět bež použití energie. Jen pro Sandbox. -block.liquid-source.description = Nekonečný zdroj tekutin. Jen pro Sandbox. -block.liquid-void.description = Removes any liquids. Sandbox only. -block.copper-wall.description = Levný defenzivní blok.\nUžitečný k obraně Tvé základny a střílen v prvotních vlnách nepřátel. -block.copper-wall-large.description = Levný defenzivní blok.\nUžitečný k obraně Tvé základny a střílen v prvotních vlnách nepřátel.\nZabírá více polí. -block.titanium-wall.description = Středně dobrý obranný blok.\nPoskytuje středně dobrou obranu proti nepřátelům. -block.titanium-wall-large.description = Středně dobrý obranný blok.\nPoskytuje středně dobrou obranu proti nepřátelům.\nZabírá více polí. -block.plastanium-wall.description = Speciální typ zdi, která je schopná absorbovat elektrické oblouky a blokuje energetické připojení. -block.plastanium-wall-large.description = Speciální typ zdi, která je schopná absorbovat elektrické oblouky a blokuje energetické připojení.\nZabírá více polí. -block.thorium-wall.description = Sílný defenzivní blok.\nDobrá obrana vůči nepřátelům. -block.thorium-wall-large.description = Sílný defenzivní blok.\nDobrá obrana vůči nepřátelům..\nZabírá více polí. -block.phase-wall.description = Není tak silná, jako zeď Thoria, ale odráží nepřátelské projektily dokud nejsou moc silné. -block.phase-wall-large.description = Není tak silná, jako zeď Thoria, ale odráží nepřátelské projektily dokud nejsou moc silné.\nZabírá více polí. -block.surge-wall.description = Nejsilnější defenzivní blok.\nMá malou šanci vystřelit elektrický paprsek vůči útočníkovi. -block.surge-wall-large.description = Nejsilnější defenzivní blok.\nMá malou šanci vystřelit elektrický paprsek vůči útočníkovi.\nZabírá více polí. -block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz. -block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.\nZabírá více polí. -block.mender.description = Pravidelně opravuje bloky ve svém okolí. Mezi vlnami opraví zátarasy.\nVolitelně lze využít křemíku pro posílení dosahu a efektivity. -block.mend-projector.description = Kontinuálně léčí bloky v poli svého působení. -block.overdrive-projector.description = Zrychluje funkce blízkých struktůr jako jsou vrty a dopravníky. -block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, chrání jednotky a budovy uvnitř sebe vůči střelám. -block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Skoro neviditelné nepřáteli. -block.conveyor.description = Základní blok přepravy předmětů. Nese předměty kupředu a automaticky plní střílny nebo bloky výroby do kterých směřují. dá se otáčet do různých směrů. -block.titanium-conveyor.description = Pokročilý blok přepravy předmětů. Nese předměty rychleji jak standardní dopravníky. -block.junction.description = Chová se jako most pro dva křížící se pásy dopravníků. Užitečný při situaci kdy dva rozdílné dopravníky dopravují dva rozdílné materiálny na rozdílné místa. -block.bridge-conveyor.description = Pokročilý blok přepravy předmětů. Dovoluje transport předmětů až přez tři pole jakéhokoliv terénu nebo budovy. -block.phase-conveyor.description = Pokročilý blok přepravy předmětů. Využívá energii k přepravě od jednoho bodu k druhému po velice dlouhé vzdálenosti. -block.sorter.description = Třídí předměty. Jestli je předmět shodný s výběrem, je mu dovoleno projít. Naopak neshodné předměty jsou vypuštěny do prava nebo do leva. -block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead. -block.router.description = Příijmá předměty z jednoho směru a posílá je rovnoměrně do zbylých tří směrů. Užitečný při rozdělení jednoho zdroje směřující do různých cílů. -block.distributor.description = Pokročilý směrovač, který z libovolného počtu vstupů vytvoří libovolný počet výstupu a rozdělí přísun předmětů rovnoměrně do každého z nich, obdoba Multiplexeru a Demultiplexeru. -block.overflow-gate.description = Kombinace distributoru a děličky která má výstup do leva nebo do prava jen pokud je přední strana zablokovaná. -block.mass-driver.description = Ultimátní blok přepravy předmětů. Sbírá několik druhů předmětů a vystřelí je k dalšímu hromadnému distributoru přes veliké vzdálenosti. -block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje energii k provozu. -block.rotary-pump.description = Pokročilá pumpa která, zdvojnásobuje přísun tekutin za použití energie. -block.thermal-pump.description = Ultimátní pumpa. Trojnásobně rychlejší než mechanická pumpa a jediná pumpa která dokáže pracovat s lávou. -block.conduit.description = Základní blok přepravy tekutin. Funguje jako dopravník, ale na tekutiny, chápeš ne ? Užívá se s extraktory, pumpami nebo jiným potrubím. -block.pulse-conduit.description = Pokročilý blok přepravy tekutin. Přepravuje tekutiny rychleji a více než standardní potrubí. -block.plated-conduit.description = Moves liquids at the same rate as pulse conduits, but possesses more armor. Does not accept fluids from the sides by anything other than conduits.\nLeaks less. -block.liquid-router.description = Příjmá tekutiny z jednoho směru a vypouští je rovnoměrně do zbylých tří směrů. Dokáže uložit na krátkou dobu nějaký obsah tekutin. Užitečný při rozdělení jednoho zdroje směřující do různých cílů. -block.liquid-tank.description = Uloží velké množství tekutin. Použíj ho pro vyrovnávací zásoby vody když je příděl nestabilní nebo jako záložní chlazení pro generátory. -block.liquid-junction.description = Chová se jako most pro dvě křížící se potrubí. Užitečný v situacích když dvě rozdílné potrubí nesou rozdílný obsah na rozdílná místa. -block.bridge-conduit.description = Pokročilý blok přepravy tekutin. Dovoluje transportovat tekutiny až přez tři pole jakéhokoliv terénu nebo budovy. -block.phase-conduit.description = Pokročilý blok přepravy tekutin. Používá energii k teleportu tekutin do druhého bodu přez několik polí. -block.power-node.description = Vysílá energii mezi propojenými uzly. Dokáže se propojit až se čtyřmi uzly či stavbami najednou. Uzel bude dostávat zásobu energie a bude ji distribuovat mezi připojené bloky. -block.power-node-large.description = Má větší dosah než standardní energetický uzel and a dokáže propojit až 6 staveb nebo uzly. -block.surge-tower.description = Energetický uzel s extrémním dosahem, ale méně dostupnými přípojkami. -block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. -block.battery.description = Ukládá energii kdykoliv kdy je nadbytek ,poskytuje energii kdykolik když je pokles energie v síti, tak dlouho doku zbývá kapacita. -block.battery-large.description = Uloží více energie než standardní baterie. -block.combustion-generator.description = Generuje energii spalováním ropy nebo jinných hořlavých materiálů. -block.thermal-generator.description = Generuje obrovské množství energie z lávy. -block.turbine-generator.description = Více efektivní než spalovací generátor, ale vyžaduje dodatečný přísun vody. +block.graphite-press.description = Přeměňuje neforemné kusy uhlí do ušlechtilých výlisků grafitu. +block.multi-press.description = Vylepšená verze lisu na grafit. Využívá vodu a energii k rychlejšímu a efektivnějšímu zpracování uhlí. +block.silicon-smelter.description = Redukuje písek vyčištěným uhlím, čímž vyrábí křemík. +block.kiln.description = Taví písek a olovo na směs známou jako metasklo. Vyžaduje k běhu malé množství energie. +block.plastanium-compressor.description = Produkuje plastanu z titanu a nafty. +block.phase-weaver.description = Produkuje fázovou tkaninu z radioaktivního thoria a písku. Spotřebuje k tomu výrazné množství energie. +block.alloy-smelter.description = Produkuje rázovou slitinu z titanu, olova, křemíku a mědi. +block.cryofluidmixer.description = Míchá vodu a jemný titanová prášek do chladící kapaliny, nezbytné například pro thoriový reaktor. +block.blast-mixer.description = Drtí a míchá shluky spór s pyratitem, čímž vzniká výbušnina. +block.pyratite-mixer.description = Míchá uhlí, olovo a písek do vysoce hořlavého pyratitu. +block.melter.description = Taví šrot do roztaveného kovu pro další zpracování, nebo pro munici do střílny Vlna. +block.separator.description = Odděluje z roztaveného kovu jednotlivé minerální součásti, které na výstupu zchlazuje do pevné formy. +block.spore-press.description = Lisuje ze spór pod enormním tlakem naftu. +block.pulverizer.description = Drtí šrot na jemný písek. +block.coal-centrifuge.description = Tuhne naftu do kusů uhlí. +block.incinerator.description = Vypaří jakékoliv nadbytečné předměty nebo kapaliny, které mu pošleš. +block.power-void.description = Zničí jakoukoliv energii, kterou bloku pošleš. Jen pro režim Pískoviště. +block.power-source.description = Nekonečný zdroj energie. Jen pro Pískoviště. +block.item-source.description = Nekonečný zdroj předmětů. Jen pro Pískoviště. +block.item-void.description = Zničí jakýkoliv vstupní předmět, který bloku pošleš. Jen pro Pískoviště. +block.liquid-source.description = Nekonečný zdroj kapalin. Jen pro Pískoviště. +block.liquid-void.description = Zničí jakoukoliv kapalinu, kterou bloku pošleš. Jen pro Pískoviště. +block.copper-wall.description = Levný obranný blok.\nUžitečný k obraně Tvého jádra a střílen pro prvních několik vln nepřátel. +block.copper-wall-large.description = Levný obranný blok.\nUžitečný k obraně Tvého jádra a střílen pro prvních několik vln nepřátel.\nZabírá více dlaždic. +block.titanium-wall.description = Středně silný obranný blok.\nPoskytuje středně dobrou obranu proti nepřátelům. +block.titanium-wall-large.description = Středně silný obranný blok.\nPoskytuje středně dobrou obranu proti nepřátelům.\nZabírá více dlaždic. +block.plastanium-wall.description = Speciální typ zdi, která je schopná absorbovat energetické výboje a blokuje automaticky energetické vedení, například mezi uzly. +block.plastanium-wall-large.description = Speciální typ zdi, která je schopná absorbovat energetické výboje a blokuje automaticky energetické vedení, například mezi uzly.\nZabírá více dlaždic. +block.thorium-wall.description = Silný obranný blok.\nSlušná obrana před nepřáteli. +block.thorium-wall-large.description = Silný obranný blok.\nSlušná obrana před nepřáteli.\nZabírá více dlaždic. +block.phase-wall.description = Zeď potažená speciální odrazivou sloučeninou na fázové bázi. Odráží při nárazu většinu střel. +block.phase-wall-large.description = Zeď potažená speciální odrazivou sloučeninou na fázové bázi. Odráží při nárazu většinu střel.\nZabírá více dlaždic. +block.surge-wall.description = Extrémně odolný obranný blok.\nPři zásahu střelou akumuluje energii, kterou pak náhodně uvolňuje ve formě výboje. +block.surge-wall-large.description = Extrémně odolný obranný blok.\nPři zásahu střelou akumuluje energii, kterou pak náhodně uvolňuje ve formě výboje.\nZabírá více dlaždic. +block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím/tupnutím na ně. +block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím/ťupnutím na ně.\nZabírají více dlaždic. +block.mender.description = Pravidelně opravuje bloky ve svém poli působnosti. Dobré pro opravu obranného systému mezi vlnami.\nVolitelně lze využít křemíku pro posílení dosahu a efektivity. +block.mend-projector.description = Vylepšená verze Opraváře. Opravuje bloky ve svém poli působnosti.\nVolitelně lze využít fízové tkaniny pro posílení dosahu a efektivity. +block.overdrive-projector.description = Zrychluje funkce budov v okolí.\nVolitelně lze využít křemíku pro posílení dosahu a efektivity. +block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, které chrání jednotky a budovy uvnitř před poškozením.\nPokud dostane moc poškození, tak se přehřeje. Volitelně lze použít chlazení pro snížení přehřívání a fázové tkaniny pro zvětšené dosahu štítu. +block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Takřka neviditelné pro nepřátele (a i v nabídce bloků :) ). +block.conveyor.description = Základní blok pro přepravu předmětů. Unáší předměty kupředu a automaticky plní vhodná úložiště (budovy, kontejnery, jádro), které po cestě potká. Lze jej otáčet dle potřeby. +block.titanium-conveyor.description = Pokročilý blok pro přepravu předmětů. Přenáší předměty rychleji, než základní dopravník. +block.junction.description = Chová se jako most pro dva křížící se pásy dopravníků. Užitečný při situaci, kdy dva rozdílné dopravníky dopravují dva rozdílné materiály přes jedno pole. +block.bridge-conveyor.description = Pokročilý blok pro přepravu předmětů. Dovoluje transport předmětů až přes tři pole, a to přes jakýkoliv terén nebo budovu. +block.phase-conveyor.description = Pokročilý blok pro přepravu předmětů. Využívá energii k teleportaci předmětů na vzdálenost několika dlaždic mezi jiným propojeným fázovým dopravníkem. +block.sorter.description = Třídí předměty. Pokud je předmět shodný s výběrem, je poslán rovně dál. Jinak je předmět je odbočen do strany. +block.inverted-sorter.description = Třídí předměty. Pokud je předmět shodný s výběrem, je odbočen do strany. Jinak je předmět je poslán rovně dál. +block.router.description = Přijímá předměty z jednoho směru a posílá je rovnoměrně do zbylých tří směrů. Užitečný pro rozdělení předmětů z jednoho zdroje do různých cílů, jako odbočení z dopravníků a podobně.\n\n[scarlet]Pozor, nepoužívejte pro vstup do produkční budovy, jinak se bude ucpávat výstupními předměty[]. +block.distributor.description = Pokročilý směrovač. Rozděluje předměty rovnoměrně až do 7 dalších směrů. +block.overflow-gate.description = Předměty jsou poslány do strany, pokud je směr vpřed zablokován. Užitečné například pro zpracování přebytečného materiálu, pokud je primární příjemce saturován. +block.underflow-gate.description = Předměty jsou poslány vpřed, pokud je směr do strany zablokován. Užitečné například pro zpracování přebytečného materiálu, pokud je primární příjemce saturován. +block.mass-driver.description = Ultimátní blok pro přepravu předmětů. Sebere několik předmětů a vystřelí je k dalšímu hromadnému distributoru přes několik dlaždic. Vyžaduje ke své funkci energii. +block.mechanical-pump.description = Levné čerpadlo s pomalým průtokem, nevyžaduje však energii k provozu. +block.rotary-pump.description = Pokročilé čerpadlo, které za pomoci energie vyčerpá větší množství kapalin, než standardní. +block.thermal-pump.description = Ultimátní čerpadlo. Nejrychlejší čerpání kapalin. +block.conduit.description = Základní blok pro přepravu kapalin. Unáší kapaliny vpřed. Používá se s čerpadly, v některých vrtech a nebo ve spojení s jiným potrubím. +block.pulse-conduit.description = Pokročilý blok přepravy kapalin. Přepravuje kapaliny rychleji a má větší kapacitu, než základní potrubí. +block.plated-conduit.description = Přenáší kapaliny stejně rychle jako pulzní potrubí, ale díky oplátování má větší výdržnost. Ze stran přijímá kapaliny pouze z dalších potrubí.\nV případě poškození má menší ztrátu kapaliny. +block.liquid-router.description = Přijímá kapaliny z jednoho směru a vypouští je rovnoměrně do zbylých tří směrů. Dokáže pojmout i určitý objem kapalin do vnitřího úložiště. Používá se při rozdělení kapaliny z jednoho zdroje směřující do různých cílů. +block.liquid-tank.description = Ukládá velké množství kapalin. Používá se pro vyrovnávání zásob vody, když je přítok nestabilní nebo jako záložní chlazení pro životně důležité stavby. +block.liquid-junction.description = Chová se jako most pro dvě křížící se potrubí. Používá se v situacích, kdy dvě rozdílná potrubí vedou rozdílný obsah přes jedno místo. +block.bridge-conduit.description = Pokročilý blok přepravy kapalin. Dovoluje přenášet kapaliny přes tři dlaždice napříč jakýmkoliv terénem nebo přes budovy. +block.phase-conduit.description = Pokročilý blok pro přepravu kapalib. Využívá energii k teleportaci kapalin na vzdálenost několika dlaždic mezi jiným propojeným fázovým potrubím. +block.power-node.description = Přenáší energii mezi propojenými uzly. Uzel získává energii z nebo dodává energii do bloků ve svém poli působnosti. +block.power-node-large.description = Pokročilý energerický uzel. Má větší dosah než základní uzel. +block.surge-tower.description = Energetický uzel s extrémním dosahem, ale méně dostupnými přípojkami pro ostatní bloky, než ostatní uzly. +block.diode.description = Energie z baterie přes tento blok protéká jen jedním směrem, a to jen za podmínky, že a druhé straně je méně energie (například vybitá baterie). +block.battery.description = Ukládá energii v případě nadbytku v síti a poskytuje energii kdykolik, když se energetické síti nedostává (záporný rozdíl). +block.battery-large.description = Ukládá více energie, než základní baterie. +block.combustion-generator.description = Generuje energii spalováním hořlaných materiálů, jako je například uhlí. +block.thermal-generator.description = Pokud je umístěn na teplotně aktivní místo (jako je magmatický kámen), dokáže z tepla generovat energii. +block.turbine-generator.description = Pokročilý spalovací generátor. Efektivnější, ale vyžaduje dodatečný přísun vody pro produkci páry. block.differential-generator.description = Generuje velké množství energie. Využívá teplotního rozdílu mezi chladící kapalinou a hořícím pyratitem. -block.rtg-generator.description = Rádioizotopní Termoelektrický Generátor nevyžaduje chlazení, za to generuje méně energie než Thoriový generátor. -block.solar-panel.description = Poskytuje malé množství energie ze slunce. -block.solar-panel-large.description = Poskytuje mnohem lepší zdroj energie než standardní solární panel, za to je mnohem nákladnější na stavbu. -block.thorium-reactor.description = Generuje obrovské množství energie z radioaktivního thoria. Vyžaduje konstantní chlazení. Způsobí velikou explozi je-li zásobován nedostatečným množstvím chlazení. Výstup energie závisí na plnosti obsahu generátoru, základní generování energie se aktivuje při poloviční kapacitě. -block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. -block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole, natrvalo a pomalu produkuje materiál na který byl položen. -block.pneumatic-drill.description = Vylepšený vrt, který je rychlejší a je schopen zpracovat tvrdší materiály za pomocí tlaku. -block.laser-drill.description = Dovoluje vrtat ještě rychleji díky laserové technologii, požaduje energii k provozu. Dodatečně, dokáže vrtat žíly radioaktivního thoria. -block.blast-drill.description = Ultimátní vrt, vyžaduje velké množství energie k provozu. -block.water-extractor.description = Extrahuje vodu ze země. Vhodný k použití když se v oblasti nenachází zdroj vody. -block.cultivator.description = Kultivuje půdu vodou za účelem získání biohmoty. -block.oil-extractor.description = Vyžaduje velké množství energie na extrakci ropy z písku. Použíj ho když se v oblasti nenachází žádný zdroj ropy. -block.core-shard.description = První verze jádra. V případě, že je zničeno, veškerý kontakt s regionem je ztracen. Nedopusťte aby se to stalo. -block.core-foundation.description = Druhá, lépe obrněná verze jádra. Pojme více surovin. -block.core-nucleus.description = Třetí a finální iterace vývoje jádra. Extrémně obrněná, extrémně prostorná. -block.vault.description = Ukládá velké množství předmětů každého typu. Připojené kontejnéry, trezory nebo jádra se budou chovat jako samostatné skladovací jednotky. [LIGHT_GRAY]Odbavovač[] lze použít pro odbavení předmětů z trezoru. -block.container.description = Ukládá malé množství předmětů každého typu. Připojené kontejnéry, trezory nebo jádra se budou chovat jako samostatné skladovací jednotky. [LIGHT_GRAY]Odbavovač[] lze použít pro odbavení předmětů z kontejnéru. -block.unloader.description = Vykládá předměty z kontejnéru, trezoru nebo jádra na dopravník nebo přímo do produktivních bloků. Druh předmětu pro vykládání lze změnit kliknutím na odbavovač. -block.launch-pad.description = Posílá dávky předmětů do vesmíru bez nutnosti vysílat jádro. Nedokončený. -block.launch-pad-large.description = Vylepšený Launch Pad. Větší úložný prostor, častěji vysílán do vesmíru. -block.duo.description = Malá, levná střílna. -block.scatter.description = Protivzdušná střílna střední velikosti. Střílí hrstky olova nebo šrotu. -block.scorch.description = Spálí nepřátele v blízkosti na prach. Velmi efektivní na malé vzdálenosti. -block.hail.description = Malá artilérní střílna. -block.wave.description = Středně vělká, rychle pálící střílna, která střílí krystalizované bubliny. -block.lancer.description = Středně velká střílna, která střílí nabité elektrické paprsky. -block.arc.description = Malá střílna, která střílí elektřinu v náhodném oblouku po nepřátelských jednotkách. -block.swarmer.description = Středně velká střílna, která střílí rakety v dávkách. -block.salvo.description = Středně velká střílna, která střílí v salvách. -block.fuse.description = Velká střílna, která střílí paprsky krátkého dosahu. -block.ripple.description = Velká artilérní střílna, která vystřelí několik projektilů najednou. -block.cyclone.description = Velká rychle pálící střílna. -block.spectre.description = Velká střílna, která vystřelí dva mocné projektily naráz. -block.meltdown.description = Velká střílna, která vystřelí mocný paprsek dalekého dosahu. -block.command-center.description = Umožňuje zadávat příkazy k pohybu spojeneckých jednotek po mapě.\nUmožňuje výběr mezi patrolováním, útokem na nepřítele, či návratem k jádru nebo továrně. Pokud se na mapě nenachází nepřátelské jádro, jednotky budou patrolovat v útočném režimu. -block.draug-factory.description = Produkuje těžící Draug drony. -block.spirit-factory.description = Produkuje lehké drony, kteří teží minerály a opravují budovy -block.phantom-factory.description = Produkuje pokročilé drony kteří jsou podstatně efektivnější jak spirit droni. -block.wraith-factory.description = Produkuje rychlé, udeř a uteč stíhače. -block.ghoul-factory.description = Produkuje těžké kobercové bombardéry. -block.revenant-factory.description = Produkuje vzdušné, težké laserové stíhače.. -block.dagger-factory.description = Produkuje standardní pozemní jednotky. -block.crawler-factory.description = Produces fast self-destructing swarm units. -block.titan-factory.description = Produkuje pokročilé, orněné pozemní jednotky. -block.fortress-factory.description = Produkuje těžké artilérní, pozmení jednotky. -block.repair-point.description = Kontinuálně léčí nejbližší budovy a jednotky. -block.dart-mech-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za základního útočného mecha.\nAktivuj kliknutím, když se nacházíš nad platformou. -block.delta-mech-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za rychlého, lehce obrněného mecha určeného pro udeř a uteč operace.\nAktivuj kliknutím, když se nacházíš nad platformou. -block.tau-mech-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za na podpůrného mecha, který léčí spojenecké budovy a jednotky.\nAktivuj kliknutím, když se nacházíš nad platformou. -block.omega-mech-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za objemného dobře obrněného mecha, určeného pro útok v přední linii.\nAktivuj kliknutím, když se nacházíš nad platformou. -block.javelin-ship-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za silný a rychlý stíhač s bleskovými zbraněmi.\nAktivuj kliknutím, když se nacházíš nad platformou. -block.trident-ship-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za docela dobře obrněného těžkého bombardéru.\nAktivuj kliknutím, když se nacházíš nad platformou. -block.glaive-ship-pad.description = Zanech zde své aktuální plavidlo a vyměň ho za velkou, dobře obrněnou střeleckou loď.\nAktivuj kliknutím, když se nacházíš nad platformou. +block.rtg-generator.description = Radioizotopní termoenergetický generátor (RTG) je jednoduchý, spolehlivý generátor. Využívá tepla z rozpadu radioaktivních složek ke generování menších dávek energie. +block.solar-panel.description = Základní solární panel pro generování malého množství energie ze Slunce. +block.solar-panel-large.description = Výrazně efektivnější verze solárního panelu pro generování energie ze Slunce. +block.thorium-reactor.description = Generuje významné množství energie z thoria. Vyžaduje nepřetržité chlazení. Je-li chlazen nedostatečně, způsobí značnou explozi. Výstup energie závisí na míře naplnění generátoru, základní generování energie se aktivuje při plné kapacitě. +block.impact-reactor.description = Vyspělý generátor, schopný vytvářet při maximálním výkonu obrovská množství energie. Vyžaduje však značné množství energie pro nastartování celého procesu. +block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole (ruda, písek) natrvalo a pomalu produkuje odpovídající materiál. Umí těžit jen základní rudy. +block.pneumatic-drill.description = Vylepšený vrt, který je schopen těžit i titan. Těží vyšší rychlostí než mechanický vrt. +block.laser-drill.description = Vrtá rychleji než penumatický vrt díky laserové technologii, ale vyžaduje ke svému fungování energii. Dokáže navrtat i rudné žíly thoria. +block.blast-drill.description = Ultimátní vrt, vyžadující k provozu značné množství energie. +block.water-extractor.description = Extrahuje podzemní vodu. Vhodný pro místa, kde se nevyskytuje povrchová voda. +block.cultivator.description = Kultivuje drobounké koncentrace spór v atmosféře do formy vhodné pro průmyslové využití spór. +block.oil-extractor.description = Vyžaduje značné množství energie, písku a vody na těžení nafty. +block.core-shard.description = První verze jádra. Pokud je zničeno, veškerý kontakt s mapou je ztracen. Nedopusť, aby se to stalo. +block.core-foundation.description = Druhá cerze jádra. Je lépe obrněná a pojme více surovin. +block.core-nucleus.description = Třetí a konečná iterace vývoje jádra. Velmi dobře obrněná. Dokáže skladovat významné množství zdrojů. +block.vault.description = Ukládá velké množství předmětů od každého typu. K vyskladnění věcí z trezoru je možné použít odbavovač. +block.container.description = Ukládá menší množství předmětů od každého typu. K vyskladnění věcí z kontejneru je možné použít odbavovač. +block.unloader.description = Vyskladňuje předměty z kontejneru, trezoru nebo jádra na dopravník nebo přímo do produktivních bloků. Druh předmětu pro vyskladnění lze nastavit kliknutím nebo ťupnutím na odbavovač. +block.launch-pad.description = Vysílá dávky předmětů z mapy bez nutnosti vyslat zpět jádro. +block.launch-pad-large.description = Vylepšená verze vysílací plošiny. Má větší úložný prostor a vysílá předměty z mapy častěji. +block.duo.description = Malá, levná střílna. Užitečná proti pozemním jednotkám. +block.scatter.description = Základní protivzdušná střílna. Střílí kusy olova nebo pláty šrotu na nepřátelské jednotky. +block.scorch.description = Sežehne pozemní jednotky blízkosti. Velmi efektivní na malé vzdálenosti. +block.hail.description = Malá dělostřelecká střílna na dělší vzdálenosti. +block.wave.description = Středně velká střílna. Pálí po nepřítelích proudy kapaliny (například roztaveného kovu). Umí automaticky uhasit oheň, pokud je zásobena vodou. +block.lancer.description = Středně velká střílna proti pozemním jednotkám. Po nabití se střílí mocné energetické paprsky. +block.arc.description = Malá energetická střílna. Pálí výboje po nepřátelských jednotkách. +block.swarmer.description = Středně velká střílna s raketami. Útočí na pozemní i vzdušné cíle. Pálí samonaváděcí střely. +block.salvo.description = Větší, pokročilejší verze střílny Duo. Pálí na nepřátele rychlé dávky střel. +block.fuse.description = Velká střílna s krátkým dosahem. Pálí trojice energetických paprsků blízké nepřátele. +block.ripple.description = Extrémně silná dělostřelecká střílna. Pálí na dálku shluky střel na nepřátelské jednotky. +block.cyclone.description = Velká protiletecká a protipozemní střílna. Pálí explodující dávky na nepřítele v okolí. +block.spectre.description = Velká střílna s kanónem s dvěma hlavněmi. Střílí velké náboje, které pronikají brněním jak pozemních, tak vzdušných nepřátelských cílů. +block.meltdown.description = Masivní laserový kanón. Nabije se a pak pálí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení. +block.command-center.description = Vydává příkazy spojeneckým jednotkám na mapě.\nInstruuje jednotky k útoku na nepřátelské jádro, návratu do jádra nebo továrny a ke shromáždění se. Pokud se na mapě nepřátelské jádro nenachází, jednotky budou v útočném režimu držet hlídku. +block.draug-factory.description = Vyrábí těžící drony Dragoun. +block.spirit-factory.description = Vyrábí drony, které opravují budovy. +block.phantom-factory.description = Vyrábí drony s pokročilou konstrukcí. +block.wraith-factory.description = Produkuje rychlé stíhače pro bleskový útok. +block.ghoul-factory.description = Vyrábí těžké bombardéry pro kobercové nálety. +block.revenant-factory.description = Vyrábí těžké jednotky na bázi raket. +block.dagger-factory.description = Vyrábí základní pozemní jednotky. +block.crawler-factory.description = Vyrábí roje rychlých sebezničujících jednotek. +block.titan-factory.description = Vyrábí pokročilé obrněné pozemní jednotky. +block.fortress-factory.description = Vyrábí těžké dělostřelecké pozemní jednotky. +block.repair-point.description = Nepřetržitě léčí nejbližší poškozenou jednotku v poli své působnosti. +block.dart-mech-pad.description = Umožňuje přeměnu Tvého vozidla na základního útočného mecha.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. +block.delta-mech-pad.description = Umožňuje přeměnu Tvého vozidla na lehkého obrněného mecha pro bleskový útok.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. +block.tau-mech-pad.description = Umožňuje přeměnu Tvého vozidla na pokročilého podpůrného mecha.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. +block.omega-mech-pad.description = Umožňuje přeměnu Tvého vozidla na těžce obrněného mecha s raketami.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. +block.javelin-ship-pad.description = Umožňuje přeměnu Tvého vozidla na rychlou, lehce obrněnou stíhačku.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. +block.trident-ship-pad.description = Umožňuje přeměnu Tvého vozidla na těžkého podpůrného bombardéra.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. +block.glaive-ship-pad.description = Umožňuje přeměnu Tvého vozidla na velkou, dobře obrněnou střeleckou loď.\nAktivuj kliknutím nebo ťupnutím, když se nacházíš nad plošinou. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index b0a3cd5953..f61896411f 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -141,14 +141,14 @@ players = {0} Spieler online players.single = {0} Spieler online server.closing = [accent]Schließe den Server ... server.kicked.kick = Du wurdest vom Server gekickt! -server.kicked.whitelist = Du bist nicht auf der Whitelist. +server.kicked.whitelist = Du bist hier nicht auf der Whitelist. server.kicked.serverClose = Server geschlossen. server.kicked.vote = Es wurde abgestimmt, dich zu kicken. Tschüss. server.kicked.clientOutdated = Veralteter Client! Aktualisiere dein Spiel! server.kicked.serverOutdated = Veralteter Server! Bitte den Host um ein Update! server.kicked.banned = Du wurdest vom Server verbannt. server.kicked.typeMismatch = Der Server ist nicht mit deinem Versionstyp kompatibel. -server.kicked.playerLimit = Der Server ist voll.\nWarte für einen freien Platz. +server.kicked.playerLimit = Dieser Server ist voll. Warte auf einen freien Platz. server.kicked.recentKick = Du wurdest gerade gekickt.\nWarte bevor du dich wieder verbindest. server.kicked.nameInUse = Es ist bereits ein Spieler \nmit diesem Namen auf dem Server. server.kicked.nameEmpty = Dein Name muss mindestens einen Buchstaben oder eine Zahl enthalten. @@ -190,7 +190,7 @@ server.version = [lightgray]Version: {0} server.custombuild = [yellow]Benutzerdefinierter Build confirmban = Bist du sicher, dass du diesen Spieler verbannen möchtest? confirmkick = Bist du sicher, dass du diesen Spieler kicken willst? -confirmvotekick = Willst du wirklich eine Abstimmung zum kicken des spielers machen? +confirmvotekick = Bist du sicher diesen Spieler mit einer Abstimmung rauszuwerfen? confirmunban = Bist du sicher, dass du die Verbannung des Spielers rückgängig machen willst? confirmadmin = Bist du sicher, dass du diesen Spieler zu einem Admin machen möchtest? confirmunadmin = Bis du sicher, dass dieser Spieler kein Admin mehr sein soll? @@ -199,9 +199,9 @@ joingame.ip = IP: disconnect = Verbindung unterbrochen. disconnect.error = Verbindungsfehler. disconnect.closed = Verbindung geschlossen. -disconnect.timeout = Zu langer Verbindungsversuch. +disconnect.timeout = Zeit Überschreitung. disconnect.data = Fehler beim Laden der Welt! -cantconnect = Unfähig, dem Spiel beizutreten ([accent]{0}[]). +cantconnect = Nicht möglich beizutreten ([accent]{0}[]). connecting = [accent] Verbinde... connecting.data = [accent] Welt wird geladen... server.port = Port: @@ -226,7 +226,7 @@ save.rename = Umbenennen save.rename.text = Neuer Name selectslot = Wähle einen Spielstand slot = [accent] Platz {0} -editmessage = Edit Message +editmessage = Nachricht bearbeiten save.corrupted = [accent] Datei beschädigt oder ungültig! empty = on = An @@ -392,7 +392,7 @@ filters.empty = [LIGHT_GRAY]Keine Filter! Füge einen mit dem unteren Knopf hinz filter.distort = Verzerren filter.noise = Rauschen filter.median = Mittelwert -filter.oremedian = Ore Median +filter.oremedian =Erz Median filter.blend = Mischen filter.defaultores = Standard Erze filter.ore = Erz @@ -569,11 +569,11 @@ bar.drillspeed = Bohrgeschwindigkeit: {0}/s bar.pumpspeed = Pump Speed: {0}/s bar.efficiency = Effizienz: {0}% bar.powerbalance = Strom: {0} -bar.powerstored = Stored: {0}/{1} +bar.powerstored = Gespeichert: {0}/{1} bar.poweramount = Strom: {0} bar.poweroutput = Stromgeneration: {0} bar.items = Items: {0} -bar.capacity = Capacity: {0} +bar.capacity = Kapazität: {0} bar.liquid = Flüssigkeit bar.heat = Hitze bar.power = Strom @@ -800,7 +800,7 @@ item.pyratite.name = Pyratit item.metaglass.name = Metaglass item.scrap.name = Schrott liquid.water.name = Wasser -liquid.slag.name = Schlacke +liquid.slag.name = Lava liquid.oil.name = Öl liquid.cryofluid.name = Kryoflüssigkeit mech.alpha-mech.name = Alpha @@ -820,7 +820,7 @@ mech.dart-ship.weapon = Mehrlader mech.javelin-ship.name = Javelin mech.javelin-ship.weapon = Raketensalve mech.javelin-ship.ability = Statische Entladung -mech.trident-ship.name = Trident +mech.trident-ship.name = Dreizack mech.trident-ship.weapon = Bombenschacht mech.glaive-ship.name = Glaive mech.glaive-ship.weapon = Flammen-Mehrlader @@ -924,9 +924,9 @@ block.thorium-wall.name = Thorium-Mauer block.thorium-wall-large.name = Große Thorium-Mauer block.door.name = Tor block.door-large.name = Großes Tor -block.duo.name = Duo -block.scorch.name = Flammenwerfer -block.scatter.name = Scatter +block.duo.name = Doppelgeschütz +block.scorch.name = Scatter +block.scatter.name = Luftgeschütz block.hail.name = Streuer block.lancer.name = Lanzer block.conveyor.name = Förderband @@ -938,7 +938,7 @@ block.router.name = Verteiler block.distributor.name = Großer Verteiler block.sorter.name = Sortierer block.inverted-sorter.name = Inverted Sorter -block.message.name = Message +block.message.name = Nachricht block.illuminator.name = Illuminator block.illuminator.description = A small, compact, configurable light source. Requires power to function. block.overflow-gate.name = Überlauftor @@ -969,7 +969,7 @@ block.cultivator.name = Kultivierer block.dart-mech-pad.name = Dart Mech-Pad block.delta-mech-pad.name = Delta Mech-Pad block.javelin-ship-pad.name = Javelin Luftschiff-Pad -block.trident-ship-pad.name = Trident Luftschiff-Pad +block.trident-ship-pad.name = Dreizack Luftschiff-Pad block.glaive-ship-pad.name = Glaive Luftschiff-Pad block.omega-mech-pad.name = Omega Mech-Pad block.tau-mech-pad.name = Tau Mech-Pad @@ -986,7 +986,7 @@ block.vault.name = Tresor block.wave.name = Welle block.swarmer.name = Schwärmer block.salvo.name = Salve -block.ripple.name = Riffel +block.ripple.name = Zerstörer block.phase-conveyor.name = Phasen-Transportband block.bridge-conveyor.name = Brücken-Transportband block.plastanium-compressor.name = Plastanium-Verdichter @@ -995,7 +995,7 @@ block.blast-mixer.name = Sprengmixer block.solar-panel.name = Solarpanel block.solar-panel-large.name = Großes Solarpanel block.oil-extractor.name = Öl-Extraktor -block.command-center.name = Command Center +block.command-center.name = Kommandozentrum block.draug-factory.name = Draug Miner-Drohnenfactory block.spirit-factory.name = Spirit-Drohnenfabrik block.phantom-factory.name = Phantom-Drohnenfabrik @@ -1010,7 +1010,7 @@ block.repair-point.name = Reparaturpunkt block.pulse-conduit.name = Impulskanal block.plated-conduit.name = Plated Conduit block.phase-conduit.name = Phasenkanal -block.liquid-router.name = Flüssigkeits-Router +block.liquid-router.name = Flüssigkeits-Verteiler block.liquid-tank.name = Flüssigkeitstank block.liquid-junction.name = Flüssigkeits-Kreuzung block.bridge-conduit.name = Kanalbrücke @@ -1120,7 +1120,7 @@ unit.eruptor.description = Ein schwerer Mech, der Strukturen abbaut. Feuert eine unit.wraith.description = Eine schneller Abfangjäger. unit.ghoul.description = Ein schwerer Flächenbomber. unit.revenant.description = Eine schwere, schwebende Raketengruppe. -block.message.description = Stores a message. Used for communication between allies. +block.message.description = Benutzt um Nachrichten mit Verbündeten auszutauschen. block.graphite-press.description = Komprimiert Kohlestücke zu reinen Graphitplatten. block.multi-press.description = Eine aktualisierte Version der Graphitpresse. Setzt Wasser und Strom ein, um Kohle schnell und effizient zu verarbeiten. block.silicon-smelter.description = Reduziert Sand mit hochreinem Kohlenstoff, um Silizium zu produzieren. @@ -1236,7 +1236,7 @@ block.wraith-factory.description = Produziert schnelle Abfangjäger. block.ghoul-factory.description = Produziert schwere Flächenbomber. block.revenant-factory.description = Produziert schwere Raketen basierte Flugeinheiten. block.dagger-factory.description = Produziert Standard-Bodeneinheiten. -block.crawler-factory.description = Produziert schnelle selbstzerstörende Schwarmeinheiten. +block.crawler-factory.description = Produziert schnelle, selbstzerstörende Schwarmeinheiten. block.titan-factory.description = Produziert fortgeschrittene, gepanzerte Bodeneinheiten. block.fortress-factory.description = Produziert schwere Artillerie-Bodeneinheiten. block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 6694bc95ad..602e48455c 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -10,16 +10,16 @@ link.dev-builds.description = Versiones de desarrollo inestables link.trello.description = Tablero de Trello oficial para las características planificadas link.itch.io.description = itch.io es la página donde podes descargar las versiones para PC y web link.google-play.description = Ficha en la Google Play Store -link.f-droid.description = F-Droid catalogue listing +link.f-droid.description = F-Droid listado del catálogo link.wiki.description = Wiki oficial de Mindustry -link.feathub.description = Suggest new features +link.feathub.description = Sugerir nuevas funciones linkfail = ¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles. screenshot = Captura de pantalla guardada en {0} screenshot.invalid = Mapa demasiado grande, no hay suficiente memoria para la captura de pantalla. gameover = Tu núcleo ha sido destruido. gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! highscore = [accent]¡Nueva mejor puntuación! -copied = Copied. +copied = Copiado. load.sound = Sonidos load.map = Mapas @@ -29,28 +29,28 @@ load.system = Sistema load.mod = Mods load.scripts = Scripts -be.update = A new Bleeding Edge build is available: -be.update.confirm = Download it and restart now? -be.updating = Updating... -be.ignore = Ignore -be.noupdates = No updates found. -be.check = Check for updates +be.update = Una nueva versión de Bleeding Edge está disponible: +be.update.confirm = Descargar y reiniciar ahora? +be.updating = Actualizando... +be.ignore = Ignorar +be.noupdates = No se encontraron actualizaciones. +be.check = Revisando actualizaciones -schematic = Schematic -schematic.add = Save Schematic... -schematics = Schematics -schematic.replace = Un schematic con ese nombre ya existe. ¿Deseas remplazarlo? -schematic.import = Import Schematic... -schematic.exportfile = Export File -schematic.importfile = Import File -schematic.browseworkshop = Browse Workshop +schematic = Esquemático +schematic.add = Guardada esquemática... +schematics = Esquemáticas +schematic.replace = Una esquemática con ese nombre ya existe. ¿Deseas remplazarlo? +schematic.import = Importar esquemática... +schematic.exportfile = Exportar archivo +schematic.importfile = Importar archivo +schematic.browseworkshop = Buscar en el taller schematic.copy = Copiar al portapapeles. schematic.copy.import = Importar desde el portapapeles. schematic.shareworkshop = Compartir en la Workshop -schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar Schematic -schematic.saved = Schematic guardado. -schematic.delete.confirm = This schematic will be utterly eradicated. -schematic.rename = Renombrar Schematic +schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar esquemática +schematic.saved = Esquemática guardada. +schematic.delete.confirm = Esta esquemática será completamente erradicado. +schematic.rename = Renombrar esquemática schematic.info = {0}x{1}, {2} bloques stat.wave = Oleadas Derrotadas:[accent] {0} @@ -78,7 +78,7 @@ customgame = Partida personalizada newgame = Nueva Partida none = minimap = Minimapa -position = Position +position = Posición close = Cerrar website = Sitio web quit = Salir @@ -89,43 +89,43 @@ continue = Continuar maps.none = [LIGHT_GRAY]¡No se han encontrado mapas! invalid = Invalido pickcolor = Pick Color -preparingconfig = Preparing Config -preparingcontent = Preparing Content -uploadingcontent = Uploading Content -uploadingpreviewfile = Uploading Preview File -committingchanges = Comitting Changes +preparingconfig = Preparando Configuración +preparingcontent = Preparando Contenido +uploadingcontent = Subiendo Contenido +uploadingpreviewfile = Subiendo Archivo de Vista Previa +committingchanges = Cometiendo Cambios done = Hecho feature.unsupported = Tu dispositivo no soporta esta función. -mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord. +mods.alphainfo = Ten en cuenta que los mods estan en versión Alpha, y[scarlet] pueden tener varios problemas[].\nReporta cualquier error que encuentres en la página de GitHub de Mindustry o Discord. mods.alpha = [accent](Alpha) mods = Mods -mods.none = [LIGHT_GRAY]No mods found! +mods.none = [LIGHT_GRAY]No se encontraron Mods! mods.guide = Guia de Modding -mods.report = Reportar Bug +mods.report = Reportar Error mods.openfolder = Abrir carpeta de mods -mod.enabled = [lightgray]Enabled -mod.disabled = [scarlet]Disabled -mod.disable = Disable +mod.enabled = [lightgray]Activado +mod.disabled = [scarlet]Desactivado +mod.disable = Desactivar mod.delete.error = Fallo al elminar el mod. Quizás el archivo esta en uso. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} -mod.missingdependencies = [scarlet]Missing dependencies: {0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. -mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. -mod.enable = Enable -mod.requiresrestart = The game will now close to apply the mod changes. -mod.reloadrequired = [scarlet]Reload Required -mod.import = Import Mod +mod.requiresversion = [scarlet]Requiere mínima versión del juego: [accent]{0} +mod.missingdependencies = [scarlet]Dependencias faltantes: {0} +mod.erroredcontent = [scarlet]Errores de contenido +mod.errors = Ocurrieron fallos al cargar el contenido. +mod.noerrorplay = [scarlet]Tienes mods con fallos.[]Deshabilita las modificaciones afectadas o arregla los errores antes de jugar. +mod.nowdisabled = [scarlet]Al/Los Mod/s '{0}'le esta/n faltando dependencias:[accent] {1}\n[lightgray]Estos mods necesitan descargarse primero.\nEste mod será automaticamente desactivado. +mod.enable = Activar +mod.requiresrestart = El juego se cerrará para aplicar los mods. +mod.reloadrequired = [scarlet]Se requiere actualizar +mod.import = Importar mod mod.import.github = Importar Mod de Github -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.item.remove = Este objeto es parte del[accent] '{0}'[] mod. Para removerlo, desisntala ese mod. mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar? -mod.author = [LIGHT_GRAY]Author:[] {0} -mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} -mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again. -mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods. -mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly. +mod.author = [LIGHT_GRAY]Autor:[] {0} +mod.missing = Este guardado contiene modificaciones que has actualizado recientemente o que ya no has instalado. Guardar corrupción puede ocurrir. ¿Estás seguro de que quieres cargarlo?\n[lightgray]Mods:\n{0} +mod.preview.missing = Antes de publicar este mod en el taller, debe agregar una vista previa de la imagen.\nColoque una imagen llamada[accent] preview.png[] en la carpeta del mod e intente nuevamente. +mod.folder.missing = Solo las modificaciones en forma de carpeta se pueden publicar en el taller.\nPara convertir cualquier mod en una carpeta, simplemente descomprima su archivo en una carpeta y elimine el zip anterior, luego reinicie su juego o vuelva a cargar sus mods. +mod.scripts.unsupported = Su dispositivo no admite scripts mod. Algunas modificaciones no funcionarán correctamente. about.button = Acerca de name = Nombre: @@ -141,32 +141,32 @@ players = {0} jugadores online players.single = {0} jugador online server.closing = [accent]Cerrando servidor... server.kicked.kick = ¡Has sido expulsado del servidor! -server.kicked.whitelist = You are not whitelisted here. +server.kicked.whitelist = No estas en la lista blanca aqui. server.kicked.serverClose = El servidor ha cerrado. server.kicked.vote = Te han expulsado por voto. Adiós! server.kicked.clientOutdated = ¡Cliente desactualizado! ¡Actualiza tu juego! server.kicked.serverOutdated = ¡Servidor desactualizado! ¡Pídele al anfitrión que lo actualice! -server.kicked.banned = Has sido baneado del servidor. -server.kicked.typeMismatch = This server is not compatible with your build type. -server.kicked.playerLimit = This server is full. Wait for an empty slot. +server.kicked.banned = Has sido expulsado del servidor. +server.kicked.typeMismatch = Este servidor no es compatible con su tipo de compilación. +server.kicked.playerLimit = Este servidor está lleno. Espera un espacio vacío. server.kicked.recentKick = Has sido expulsado recientemente.\nEspera para poder conectarte de nuevo. server.kicked.nameInUse = Ya hay alguien con ese\nnombre en el servidor. server.kicked.nameEmpty = Tu nombre debe por lo menos contener un carácter o número. server.kicked.idInUse = ¡Ya estás en el servidor! Conectarse con dos cuentas no está permitido. server.kicked.customClient = Este servidor no soporta versiones personalizadas. Descarga una versión oficial. server.kicked.gameover = ¡Fin del juego! -server.kicked.serverRestarting = The server is restarting. +server.kicked.serverRestarting = Se esta reiniciando el servidor. server.versions = Tu versión:[accent] {0}[]\nVersión del servidor:[accent] {1}[] -host.info = El botón [accent]host[] hostea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall. +host.info = El botón [accent]host[] crea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall. join.info = Aquí, puedes escribir la [accent]IP de un server[] para conectarte, o descubrir servidores de [accent]red local[] para conectarte.\nLAN y WAN es soportado para jugar en multijugador.\n\n[LIGHT_GRAY]Nota: No hay una lista automática global de servidores; si quieres conectarte por IP, tendrás que preguntarle al anfitrión por la IP. -hostserver = Hostear Servidor +hostserver = Crear Servidor invitefriends = Invitar Amigos -hostserver.mobile = Hostear\nJuego +hostserver.mobile = Crear\nJuego host = Servidor hosting = [accent]Abriendo servidor... hosts.refresh = Actualizar hosts.discovering = Descubrir partidas LAN -hosts.discovering.any = Discovering games +hosts.discovering.any = Descubrir juegos server.refreshing = Actualizando servidor... hosts.none = [lightgray]¡No se han encontrado partidas LAN! host.invalid = [scarlet]No se ha podido conectar al anfitrión. @@ -174,11 +174,11 @@ trace = Rastrear Jugador trace.playername = Nombre de jugador: [accent]{0} trace.ip = IP: [accent]{0} trace.id = ID Única: [accent]{0} -trace.mobile = Mobile Client: [accent]{0} +trace.mobile = Cliente de movíl: [accent]{0} trace.modclient = Cliente Personalizado: [accent]{0} invalidid = ¡ID de cliente inválida! Envía un informe del error. -server.bans = Baneos -server.bans.none = ¡Ningún usuario ha sido baneado! +server.bans = Expulsiones +server.bans.none = ¡Ningún usuario ha sido expulsado! server.admins = Administradores server.admins.none = ¡Ningún administrador ha sido encontrado! server.add = Agregar Servidor @@ -190,7 +190,7 @@ server.version = [lightgray]Versión: {0} server.custombuild = [yellow]Versión personalizada confirmban = ¿Estás seguro de querer banear este jugador? confirmkick = ¿Estás seguro de querer expulsar este jugador? -confirmvotekick = Are you sure you want to vote-kick this player? +confirmvotekick = ¿Estás seguro de querer hechar por votación a este jugador? confirmunban = ¿Estás seguro de querer desbanear este jugador? confirmadmin = ¿Estás seguro de querer hacer administrador a este jugador? confirmunadmin = ¿Estás seguro de querer quitar los permisos de administrador a este jugador? @@ -199,7 +199,7 @@ joingame.ip = IP: disconnect = Desconectado. disconnect.error = Error en la conexión. disconnect.closed = Conexión cerrada. -disconnect.timeout = Timed out. +disconnect.timeout = Desconectado. disconnect.data = ¡Se ha fallado la carga de datos del mundo! cantconnect = No es posible unirse a la partida ([accent]{0}[]). connecting = [accent]Conectando... @@ -207,7 +207,7 @@ connecting.data = [accent]Cargando datos del mundo... server.port = Puerto: server.addressinuse = ¡La dirección ya está en uso! server.invalidport = ¡El número de puerto es invalido! -server.error = [crimson]Error hosteando el servidor: error [accent]{0} +server.error = [crimson]Error creando el servidor: error [accent]{0} save.new = Nuevo Punto de Guardado save.overwrite = ¿Estás seguro de querer sobrescribir\neste punto de guardado? overwrite = Sobrescribir @@ -240,8 +240,8 @@ save.playtime = Tiempo de juego: {0} warning = Aviso. confirm = Confirmar delete = Borrar -view.workshop = View In Workshop -workshop.listing = Edit Workshop Listing +view.workshop = Ver en el taller +workshop.listing = Editar el listado del taller ok = OK open = Abrir customize = Personalizar @@ -252,19 +252,19 @@ back = Atrás data.export = Exportar Datos data.import = Importar Datos data.exported = Datos exportados. -data.invalid = This isn't valid game data. -data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. +data.invalid = Esta data del juego no es valida. +data.import.confirm = Importando los datos externos borrará[scarlet] todo[] tu progreso.\n[accent]Esto no se puede rehacer![]\n\nUna vez que los datos hayan sido importados, el juego saldrá automaticamente. classic.export = Export Classic Data -classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? +classic.export.text = [accent]Mindustry[] acaba de tener una actualización importante.\nClásica (v3.5 build 40) guardado o mapa se han detectado. ¿Desea exportar estos archivos guardados a la carpeta de inicio de su teléfono para usarlos en la aplicación Mindustry Classic? quit.confirm = ¿Estás seguro de querer salir de la partida? quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo in[accent] Ajustes->Juego->Volver a hacer tutorial.[] loading = [accent]Cargando... reloading = [accent]Recargando mods... saving = [accent]Guardando... -cancelbuilding = [accent][[{0}][] to clear plan -selectschematic = [accent][[{0}][] to select+copy -pausebuilding = [accent][[{0}][] to pause building -resumebuilding = [scarlet][[{0}][] to resume building +cancelbuilding = [accent][[{0}][] para impiar el plan +selectschematic = [accent][[{0}][] para seleccionar+copiar +pausebuilding = [accent][[{0}][] para pausar la construcción +resumebuilding = [scarlet][[{0}][] para resumir la construcción wave = [accent]Oleada {0} wave.waiting = Oleada en {0} wave.waveInProgress = [LIGHT_GRAY]Oleada en progreso @@ -283,18 +283,18 @@ map.nospawn = ¡Este mapa no tiene ningún núcleo en el cual pueda aparecer el map.nospawn.pvp = ¡Este mapa no tiene ningún núcleo enemigo para que aparezca el jugador! Añade un núcleo[SCARLET] red[] a este mapa en el editor. map.nospawn.attack = ¡Este mapa no tiene núcleos para que el jugador ataque! Añade núcleos[SCARLET] red[] a este mapa en el editor. map.invalid = Error cargando el mapa: archivo corrupto o inválido. -workshop.update = Update Item -workshop.error = Error fetching workshop details: {0} -map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! -workshop.menu = Select what you would like to do with this item. -workshop.info = Item Info -changelog = Changelog (optional): -eula = Steam EULA -missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. -publishing = [accent]Publishing... -publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up! -publish.error = Error publishing item: {0} -steam.error = Failed to initialize Steam services.\nError: {0} +workshop.update = Actualizar artículo +workshop.error = Error al obtener detalles del taller: {0} +map.publish.confirm = ¿Estás seguro de que deseas publicar este mapa?\n\n[lightgray]¡Asegúrese de aceptar primero el EULA del taller, o sus mapas no aparecerán! +workshop.menu = Seleccione lo que le gustaría hacer con este artículo. +workshop.info = Información del artículo +changelog = Lista de cambios (optional): +eula = EULA de Steam +missing = Este artículo ha sido movido o removido.\n[lightgray]La lista del taller ahora se ha desvinculado automáticamente. +publishing = [accent]Publicando... +publish.confirm = ¿Estás seguro de que quieres publicar esto?\n\n[lightgray]¡Asegúrese de aceptar primero el EULA del taller, o sus artículos no aparecerán! +publish.error = Error publicando el artículo: {0} +steam.error = Error al inicializar los servicios de Steam.\nError: {0} editor.brush = Pincel editor.openin = Abrir en el Editor @@ -303,14 +303,14 @@ editor.oregen.info = Generación de Minerales: editor.mapinfo = Info del Mapa editor.author = Autor: editor.description = Descripción: -editor.nodescription = A map must have a description of at least 4 characters before being published. +editor.nodescription = Un mapa debe tener una descripción de al menos 4 caracteres antes de ser publicado. editor.waves = Oleadas: editor.rules = Normas: editor.generation = Generación: editor.ingame = Editar dentro del juego -editor.publish.workshop = Publish On Workshop +editor.publish.workshop = Publicar en el taller editor.newmap = Nuevo Mapa -workshop = Workshop +workshop = Taller waves.title = Oleadas waves.remove = Borrar waves.never = @@ -330,7 +330,7 @@ editor.default = [LIGHT_GRAY] details = Detalles... edit = Editar... editor.name = Nombre: -editor.spawn = Spawn Unit +editor.spawn = Aparecer unidad editor.removeunit = Borrar Unidad editor.teams = Equipos editor.errorload = Error cargando el archivo:\n[accent]{0} @@ -370,7 +370,7 @@ editor.resizemap = Cambiar Tamaño del Mapa editor.mapname = Nombre del Mapa: editor.overwrite = [accent]¡Advertencia!\nEsto sobrescribe un mapa ya existente. editor.overwrite.confirm = [scarlet]¡Advertencia![] Un mapa con ese nombre ya existe. ¿Estás seguro de querer sobrescribirlo? -editor.exists = A map with this name already exists. +editor.exists = Un mapa con estre nombre ya existe. editor.selectmap = Selecciona un mapa para cargar: toolmode.replace = Sustituir @@ -392,11 +392,11 @@ filters.empty = [LIGHT_GRAY]¡No hay filtros! Añade uno con el botón de abajo. filter.distort = Distorsionar filter.noise = Ruido filter.median = Median -filter.oremedian = Ore Median +filter.oremedian = Veta Median filter.blend = Mezcla filter.defaultores = Vetas por defecto filter.ore = Vetas -filter.rivernoise = River Noise +filter.rivernoise = Ruido de rio filter.mirror = Espejo filter.clear = Despejar filter.option.ignore = Ignorar @@ -408,15 +408,15 @@ filter.option.mag = Magnitud filter.option.threshold = Umbral filter.option.circle-scale = Escala del círculo filter.option.octaves = Octaves -filter.option.falloff = Falloff +filter.option.falloff = Caída filter.option.angle = Ángulo filter.option.block = Bloque filter.option.floor = Suelo -filter.option.flooronto = Target Floor +filter.option.flooronto = Suelo objetivo filter.option.wall = Muro filter.option.ore = Veta -filter.option.floor2 = Secondary Floor -filter.option.threshold2 = Secondary Threshold +filter.option.floor2 = Piso secundario +filter.option.threshold2 = Umbral secundario filter.option.radius = Radio filter.option.percentile = Porcentaje @@ -453,13 +453,13 @@ launch.confirm = Esto lanzará todos los recursos al núcleo.\nNo podrás volver launch.skip.confirm = Si saltas la oleada ahora, no podrás lanzar recursos hasta unas oleadas después. uncover = Descubrir configure = Configurar carga inicial -bannedblocks = Banned Blocks -addall = Add All +bannedblocks = Bloques prohibidos +addall = Añadir todo configure.locked = [LIGHT_GRAY]Alcanza la oleada {0}\npara configurar la carga inicial. configure.invalid = La cantidad debe estar entre 0 y {0}. zone.unlocked = [LIGHT_GRAY]{0} desbloqueado. zone.requirement.complete = Oleada {0} alcanzada:\nrequerimientos de la zona {1} cumplidos. -zone.config.unlocked = Loadout unlocked:[lightgray]\n{0} +zone.config.unlocked = Carga desbloqueada:[lightgray]\n{0} zone.resources = Recursos Detectados: zone.objective = [lightgray]Objetivo: [accent]{0} zone.objective.survival = Sobrevivir @@ -483,10 +483,10 @@ zone.desertWastes.name = Ruinas del Desierto zone.craters.name = Los Cráteres zone.frozenForest.name = Bosque Congelado zone.ruinousShores.name = Costas Ruinosas -zone.stainedMountains.name = Stained Mountains +zone.stainedMountains.name = Montañas Manchadas zone.desolateRift.name = Grieta Desolada zone.nuclearComplex.name = Complejo de Producción Nuclear -zone.overgrowth.name = Overgrowth +zone.overgrowth.name = Crecimiento Excesivo zone.tarFields.name = Campos de Alquitrán zone.saltFlats.name = Salinas zone.impact0078.name = Impacto 0078 @@ -512,16 +512,16 @@ settings.language = Idioma settings.data = Datos del Juego settings.reset = Reiniciar por los de defecto settings.rebind = Reasignar -settings.resetKey = Reset +settings.resetKey = Reiniciar settings.controls = Controles settings.game = Juego settings.sound = Sonido settings.graphics = Gráficos settings.cleardata = Limpiar Datos del Juego... -settings.clear.confirm = ¿Estas seguro de querer limpiar estos datos?\n¡Esta acción no puede deshacerse! +settings.clear.confirm = ¿Estas seguro de querer purificar estos datos?\n¡Esta acción no puede deshacerse! settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y atajos de teclado.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente. paused = [accent] < Pausado > -clear = Clear +clear = Purificar banned = [scarlet]Baneado yes = Sí no = No @@ -543,7 +543,7 @@ blocks.shootrange = Rango de Disparo blocks.size = Tamaño blocks.liquidcapacity = Capacidad de Líquidos blocks.powerrange = Rango de Energía -blocks.powerconnections = Max Connections +blocks.powerconnections = Conexiones maximas blocks.poweruse = Consumo de Energía blocks.powerdamage = Energía/Daño blocks.itemcapacity = Capacidad de Objetos @@ -566,7 +566,7 @@ blocks.ammo = Munición bar.drilltierreq = Se requiere un mejor taladro. bar.drillspeed = Velocidad del Taladro: {0}/s -bar.pumpspeed = Pump Speed: {0}/s +bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% bar.powerbalance = Energía: {0} bar.powerstored = Almacenados: {0}/{1} @@ -579,18 +579,18 @@ bar.heat = Calor bar.power = Energía bar.progress = Progreso de construcción bar.spawned = Unidades: {0}/{1} -bar.input = Input -bar.output = Output +bar.input = Entrada +bar.output = Salida bullet.damage = [stat]{0}[lightgray] daño bullet.splashdamage = [stat]{0}[lightgray] daño de área ~[stat] {1}[lightgray] casillas -bullet.incendiary = [stat]incendiaria -bullet.homing = [stat]homing -bullet.shock = [stat]shock -bullet.frag = [stat]frag +bullet.incendiary = [stat]Incendiaria +bullet.homing = [stat]Rastreadora +bullet.shock = [stat]Electrizante +bullet.frag = [stat]Explosiva bullet.knockback = [stat]{0}[lightgray]Empuje bullet.freezing = [stat]Congelación -bullet.tarred = [stat]tarred +bullet.tarred = [stat]Relantizado bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munición bullet.reload = [stat]{0}[lightgray]x recarga @@ -615,19 +615,19 @@ category.items = Objetos category.crafting = Fabricación category.shooting = Disparo category.optional = Mejoras Opcionales -setting.landscape.name = Lock Landscape +setting.landscape.name = Bloquear modo paisaje setting.shadows.name = Sombras setting.blockreplace.name = Sugerir bloques al construir -setting.linear.name = Linear Filtering -setting.hints.name = Hints -setting.buildautopause.name = Auto-Pause Building +setting.linear.name = Filtrado Lineal +setting.hints.name = Pistas +setting.buildautopause.name = Auto-pausar construcción setting.animatedwater.name = Agua Animada setting.animatedshields.name = Escudos Animados setting.antialias.name = Antialias[LIGHT_GRAY] (necesita reiniciar)[] setting.indicators.name = Indicadores de Aliados setting.autotarget.name = Auto apuntado setting.keyboard.name = Controles de Ratón+Teclado -setting.touchscreen.name = Touchscreen Controls +setting.touchscreen.name = Controles táctiles setting.fpscap.name = Máx FPS setting.fpscap.none = Nada setting.fpscap.text = {0} FPS @@ -642,17 +642,17 @@ setting.difficulty.name = Dificultad: setting.screenshake.name = Movimiento de la Pantalla setting.effects.name = Mostrar Efectos setting.destroyedblocks.name = Mostrar bloques destruidos -setting.conveyorpathfinding.name = Conveyor Placement Pathfinding -setting.coreselect.name = Allow Schematic Cores +setting.conveyorpathfinding.name = Colocación del transportador en búsqueda de caminos +setting.coreselect.name = Permitir núcleos esquemáticos setting.sensitivity.name = Sensibilidad del Control setting.saveinterval.name = Intervalo del Autoguardado setting.seconds = {0} Segundos -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds +setting.blockselecttimeout.name = Tiempo de espera de selección de bloque +setting.milliseconds = {0} milisegundos setting.fullscreen.name = Pantalla Completa setting.borderlesswindow.name = Ventana sin Bordes[LIGHT_GRAY] (podría requerir un reinicio) setting.fps.name = Mostrar FPS -setting.blockselectkeys.name = Show Block Select Keys +setting.blockselectkeys.name = Mostrar teclas de selección de bloque setting.vsync.name = Vsync (Limita los fps a los Hz de tu pantalla) setting.pixelate.name = Pixelar [LIGHT_GRAY](podría reducir el rendimiento) setting.minimap.name = Mostrar Minimapa @@ -664,83 +664,83 @@ setting.sfxvol.name = Volumen de los efectos de sonido setting.mutesound.name = Silenciar Sonido setting.crashreport.name = Enviar informes de fallos anónimos setting.savecreate.name = Crear puntos de guardado automáticamente -setting.publichost.name = Public Game Visibility +setting.publichost.name = Visibilidad del juego público setting.chatopacity.name = Opacidad del Chat setting.lasersopacity.name = Opacidad de los rayos láser setting.playerchat.name = Mostrar el chat in-game -public.confirm = Do you want to make your game public?\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. +public.confirm = ¿Quieres hacer público tu juego?\n[lightgray]Esto se puede cambiar más tarde en Configuración->Juego->Visibilidad pública del juego. public.beta = Recuerda que en las versiones beta del juego no puedes crear partidas públicas. uiscale.reset = La escala de la interfaz ha sido modificada con éxito.\nPulsa "OK" para conservar esta escala.\n[scarlet]Deshaciendo los cambios y saliendo al menu en [accent] {0}[]segundos... uiscale.cancel = Cancelar & Salir -setting.bloom.name = Bloom +setting.bloom.name = Brillo keybind.title = Cambiar accesos de teclado keybinds.mobile = [scarlet]Los accesos del teclado aquí mostrados no estan disponible en Móviles o Tablets. Solo aceptan movimiento básico. category.general.name = General category.view.name = Visión category.multiplayer.name = Multijugador command.attack = Atacar -command.rally = Rally +command.rally = Patrullar command.retreat = Retirarse placement.blockselectkeys = \n[lightgray]Key: [{0}, keybind.clear_building.name = Limpiar construcción keybind.press = Presiona una tecla... keybind.press.axis = Pulsa un eje o botón... keybind.screenshot.name = Captura de pantalla de Mapa -keybind.toggle_power_lines.name = Toggle Power Lasers +keybind.toggle_power_lines.name = Activar láser de potencia keybind.move_x.name = Mover x keybind.move_y.name = Mover y -keybind.mouse_move.name = Follow Mouse +keybind.mouse_move.name = Seguír al ratón keybind.dash.name = Correr -keybind.schematic_select.name = Select Region -keybind.schematic_menu.name = Schematic Menu -keybind.schematic_flip_x.name = Girar schematic X -keybind.schematic_flip_y.name = Girar schematic Y -keybind.category_prev.name = Previous Category -keybind.category_next.name = Next Category -keybind.block_select_left.name = Block Select Left -keybind.block_select_right.name = Block Select Right -keybind.block_select_up.name = Block Select Up -keybind.block_select_down.name = Block Select Down -keybind.block_select_01.name = Category/Block Select 1 -keybind.block_select_02.name = Category/Block Select 2 -keybind.block_select_03.name = Category/Block Select 3 -keybind.block_select_04.name = Category/Block Select 4 -keybind.block_select_05.name = Category/Block Select 5 -keybind.block_select_06.name = Category/Block Select 6 -keybind.block_select_07.name = Category/Block Select 7 -keybind.block_select_08.name = Category/Block Select 8 -keybind.block_select_09.name = Category/Block Select 9 -keybind.block_select_10.name = Category/Block Select 10 +keybind.schematic_select.name = Seleccionar región +keybind.schematic_menu.name = Menu de esquémas +keybind.schematic_flip_x.name = Girar esquemática desde X +keybind.schematic_flip_y.name = Girar esquemática desde Y +keybind.category_prev.name = Categoría anterior +keybind.category_next.name = Siguiente categoría +keybind.block_select_left.name = Seleccionar bloque a la izquierda +keybind.block_select_right.name = Seleccionar bloque a la derecha +keybind.block_select_up.name = Seleccionar bloque hacia arriba +keybind.block_select_down.name = Seleccionar bloque hacia abajo +keybind.block_select_01.name = Seleccionar categoría / bloque 1 +keybind.block_select_02.name = Seleccionar categoría / bloque 2 +keybind.block_select_03.name = Seleccionar categoría / bloque 3 +keybind.block_select_04.name = Seleccionar categoría / bloque 4 +keybind.block_select_05.name = Seleccionar categoría / bloque 5 +keybind.block_select_06.name = Seleccionar categoría / bloque 6 +keybind.block_select_07.name = Seleccionar categoría / bloque 7 +keybind.block_select_08.name = Seleccionar categoría / bloque 8 +keybind.block_select_09.name = Seleccionar categoría / bloque 9 +keybind.block_select_10.name = Seleccionar categoría / bloque 10 keybind.fullscreen.name = Intercambiar con Pantalla Completa keybind.select.name = Seleccionar keybind.diagonal_placement.name = Construcción Diagonal -keybind.pick.name = Pick Block +keybind.pick.name = Elegir bloque keybind.break_block.name = Destruir Bloque keybind.deselect.name = Deseleccionar keybind.shoot.name = Disparar keybind.zoom.name = Zoom keybind.menu.name = Menú keybind.pause.name = Pausa -keybind.pause_building.name = Pause/Resume Building +keybind.pause_building.name = Pausar/Resumir construcción keybind.minimap.name = Minimapa keybind.chat.name = Chat keybind.player_list.name = Lista de jugadores keybind.console.name = Consola keybind.rotate.name = Rotar -keybind.rotateplaced.name = Rotate Existing (Hold) +keybind.rotateplaced.name = Rotar existente (mantener) keybind.toggle_menus.name = Alternar menús keybind.chat_history_prev.name = Historial de chat anterior keybind.chat_history_next.name = Historial de chat siguiente -keybind.chat_scroll.name = Chat scroll -keybind.drop_unit.name = drop unit +keybind.chat_scroll.name = Desplazamiento de chat +keybind.drop_unit.name = Caida de la unidad keybind.zoom_minimap.name = Zoom minimapa mode.help.title = Descripción de modos mode.survival.name = Supervivencia mode.survival.description = El modo normal. Recursos limitados y oleadas automáticas. -mode.sandbox.name = Sandbox +mode.sandbox.name = Caja de arena mode.sandbox.description = Recursos ilimitados y sin temporizador para las oleadas. mode.editor.name = Editor -mode.pvp.name = PvP +mode.pvp.name = JcJ mode.pvp.description = Pelea contra otros jugadores localmente. mode.attack.name = Ataque mode.attack.description = No hay oleadas, el objetivo es destruir la base enemiga. @@ -755,17 +755,17 @@ rules.enemyCheat = Recursos infinitos de la IA rules.unitdrops = REcursos de las Unidades rules.unitbuildspeedmultiplier = Multiplicador de velocidad de creación de unidades rules.unithealthmultiplier = Multiplicador de la vida de las unidades -rules.blockhealthmultiplier = Block Health Multiplier +rules.blockhealthmultiplier = Multiplicador de salud de bloque rules.playerhealthmultiplier = Multiplicador de la vida del jugador rules.playerdamagemultiplier = Multiplicador del daño del jugador rules.unitdamagemultiplier = Multiplicador del daño de unidades rules.enemycorebuildradius = Radio de No-Construcción del Núcleo Enemigo:[LIGHT_GRAY] (casillas) -rules.respawntime = Tiempo de reaparición:[LIGHT_GRAY] (sec) -rules.wavespacing = Tiempo entre oleadas:[LIGHT_GRAY] (sec) +rules.respawntime = Tiempo de reaparición:[LIGHT_GRAY] (seg) +rules.wavespacing = Tiempo entre oleadas:[LIGHT_GRAY] (seg) rules.buildcostmultiplier = Multiplicador de coste de construcción rules.buildspeedmultiplier = Multiplicador de velocidad de construcción rules.waitForWaveToEnd = Las oleadas esperan a los enemigos -rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles) +rules.dropzoneradius = Radio de zona de caída:[LIGHT_GRAY] (casillas) rules.respawns = Reapariciones máximas por oleada rules.limitedRespawns = Límite de reapariciones rules.title.waves = Oleadas @@ -775,8 +775,8 @@ rules.title.player = Jugadores rules.title.enemy = Enemigos rules.title.unit = Unidades rules.title.experimental = Experimental -rules.lighting = Lighting -rules.ambientlight = Ambient Light +rules.lighting = Iluminación +rules.ambientlight = Iluminación ambiental content.item.name = Objetos content.liquid.name = Líquidos @@ -789,18 +789,18 @@ item.coal.name = Carbón item.graphite.name = Grafito item.titanium.name = Titanio item.thorium.name = Torio -item.silicon.name = Silicio +item.silicon.name = Silicona item.plastanium.name = Plastanio item.phase-fabric.name = Tejido de fase item.surge-alloy.name = Aleación Eléctrica -item.spore-pod.name = Spore Pod +item.spore-pod.name = Vaina de esporas item.sand.name = Arena item.blast-compound.name = Compuesto Explosivo item.pyratite.name = Pirotita item.metaglass.name = Metacristal item.scrap.name = Chatarra liquid.water.name = Agua -liquid.slag.name = Escoria +liquid.slag.name = Fundido liquid.oil.name = Petróleo liquid.cryofluid.name = Criogénico mech.alpha-mech.name = Alpha @@ -821,10 +821,10 @@ mech.javelin-ship.name = Jabalina mech.javelin-ship.weapon = Ráfaga de misiles mech.javelin-ship.ability = Potenciador de descarga mech.trident-ship.name = Tridente -mech.trident-ship.weapon = Bomb Bay +mech.trident-ship.weapon = Bahía de bombardeo mech.glaive-ship.name = Glaive mech.glaive-ship.weapon = Repetidor de Llamas -item.corestorable = [lightgray]Storable in Core: {0} +item.corestorable = [lightgray]Guardable en el núcleo: {0} item.explosiveness = [LIGHT_GRAY]Explosividad: {0} item.flammability = [LIGHT_GRAY]Inflamabilidad: {0} item.radioactivity = [LIGHT_GRAY]Radioactividad: {0} @@ -835,7 +835,7 @@ mech.health = [LIGHT_GRAY]Vida: {0} mech.itemcapacity = [LIGHT_GRAY]Capacidad de objetos: {0} mech.minespeed = [LIGHT_GRAY]Velocidad de minado: {0} mech.minepower = [LIGHT_GRAY]Potencia de minado: {0} -mech.ability = [LIGHT_GRAY]Hablidad: {0} +mech.ability = [LIGHT_GRAY]Habilidad: {0} mech.buildspeed = [LIGHT_GRAY]Velocidad de Construcción: {0}% liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0} liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0} @@ -845,14 +845,14 @@ block.sand-boulder.name = Piedra de Arena block.grass.name = Hierba block.salt.name = Sal block.saltrocks.name = Rocas de Sal -block.pebbles.name = Pebbles -block.tendrils.name = Tendrils +block.pebbles.name = Guijarros +block.tendrils.name = Zarcillos block.sandrocks.name = Rocas de arena -block.spore-pine.name = Spore Pine +block.spore-pine.name = Pino de esporas block.sporerocks.name = Rocas de espora block.rock.name = Roca -block.snowrock.name = Snow Rock -block.snow-pine.name = Snow Pine +block.snowrock.name = Roca de nieve +block.snow-pine.name = Pino de nieve block.shale.name = Pizarra block.shale-boulder.name = Piedra de Pizarra block.moss.name = Musgo @@ -863,7 +863,7 @@ block.scrap-wall.name = Muro de Chatarra block.scrap-wall-large.name = Muro de Chatarra grande block.scrap-wall-huge.name = Muro de Chatarra muy grande block.scrap-wall-gigantic.name = Muro de Chatarra gigante -block.thruster.name = Thruster +block.thruster.name = Propulsor block.kiln.name = Horno block.graphite-press.name = Prensa de grafito block.multi-press.name = Multi-Prensa @@ -871,11 +871,11 @@ block.constructing = {0}\n[LIGHT_GRAY](Construyendo) block.spawn.name = Punto de generación block.core-shard.name = Núcleo: Fragmento block.core-foundation.name = Núcleo: Fundación -block.core-nucleus.name = Núcleo: Nucleus +block.core-nucleus.name = Núcleo: Núcleo block.deepwater.name = Aguas profundas block.water.name = Agua block.tainted-water.name = Agua Contaminada -block.darksand-tainted-water.name = Dark Sand Tainted Water +block.darksand-tainted-water.name = Agua Contaminada con Arena Oscura block.tar.name = Alquitrán block.stone.name = Piedra block.sand.name = Arena @@ -883,10 +883,10 @@ block.darksand.name = Arena Oscura block.ice.name = Hielo block.snow.name = Nieve block.craters.name = Cráteres -block.sand-water.name = Arena Agua -block.darksand-water.name = Agua Arena Oscura -block.char.name = Char -block.holostone.name = Holo stone +block.sand-water.name = Agua con Arena +block.darksand-water.name = Agua con Arena Oscura +block.char.name = Charbonizado +block.holostone.name = Piedra hologramatica block.ice-snow.name = Hielo Nieve block.rocks.name = Rocas block.icerocks.name = Rocas de hielo @@ -908,7 +908,7 @@ block.dark-panel-4.name = Panel Oscuro 4 block.dark-panel-5.name = Panel Oscuro 5 block.dark-panel-6.name = Panel Oscuro 6 block.dark-metal.name = Metal Oscuro -block.ignarock.name = Roca Igna +block.ignarock.name = Roca Ignea block.hotrock.name = Roca Caliente block.magmarock.name = Roca de Magma block.cliffs.name = Acantilados @@ -916,8 +916,8 @@ block.copper-wall.name = Muro de Cobre block.copper-wall-large.name = Muro de Cobre grande block.titanium-wall.name = Muro de Titanio block.titanium-wall-large.name = Muro de Titanio grande -block.plastanium-wall.name = Plastanium Wall -block.plastanium-wall-large.name = Large Plastanium Wall +block.plastanium-wall.name = Muro de Plastanio +block.plastanium-wall-large.name = Muro de Plastanio grande block.phase-wall.name = Muro de Fase grande block.phase-wall-large.name = Muro de Fase grande block.thorium-wall.name = Pared de Torio @@ -925,24 +925,24 @@ block.thorium-wall-large.name = Muro de Torio grande block.door.name = Puerta block.door-large.name = Puerta Grande block.duo.name = Dúo -block.scorch.name = Scorch +block.scorch.name = Quemador block.scatter.name = Scatter block.hail.name = Granizo block.lancer.name = Lancero block.conveyor.name = Cinta Transportadora block.titanium-conveyor.name = Cinta Transportadora de Titanio -block.armored-conveyor.name = Armored Conveyor +block.armored-conveyor.name = Cinta Transportadora Acorazada block.armored-conveyor.description = Mueve items a la misma veolcidad que una cinta de titanio, pero tiene mas armadura. No acepta entradas por los lados a menos que sean lineas transportadoras. block.junction.name = Cruce block.router.name = Enrutador block.distributor.name = Distribuidor block.sorter.name = Clasificador -block.inverted-sorter.name = Inverted Sorter -block.message.name = Message -block.illuminator.name = Illuminator -block.illuminator.description = A small, compact, configurable light source. Requires power to function. +block.inverted-sorter.name = Clasificador Invertido +block.message.name = Mensaje +block.illuminator.name = Iluminador +block.illuminator.description = Una fuente de luz pequeña, compacta y configurable. Requiere poder para funcionar. block.overflow-gate.name = Compuerta de Desborde -block.silicon-smelter.name = Horno para Silicio +block.silicon-smelter.name = Horno para Silicona block.phase-weaver.name = Tejedor de Fase block.pulverizer.name = Pulverizador block.cryofluidmixer.name = Mezclador de Criogénicos @@ -953,8 +953,8 @@ block.separator.name = Separador block.coal-centrifuge.name = Centrifugador de Carbón block.power-node.name = Nodo de Energía block.power-node-large.name = Nodo de Energía Grande -block.surge-tower.name = Surge Tower -block.diode.name = Battery Diode +block.surge-tower.name = Torre de sobretensión +block.diode.name = Diodo de batería block.battery.name = Batería block.battery-large.name = Batería Grande block.combustion-generator.name = Generador de Combustión @@ -966,7 +966,7 @@ block.pneumatic-drill.name = Taladro neumático block.laser-drill.name = Taladro Láser block.water-extractor.name = Extractor de Agua block.cultivator.name = Cultivador -block.dart-mech-pad.name = Pad de mecanoide Dart +block.dart-mech-pad.name = Pad de mecanoide Dardo block.delta-mech-pad.name = Pad de mecanoide Delta block.javelin-ship-pad.name = Pad de nave Jabalina block.trident-ship-pad.name = Pad de nave Tridente @@ -978,7 +978,7 @@ block.mechanical-pump.name = Bomba Mecánica block.item-source.name = Fuente de objetos block.item-void.name = Vacío de objetos block.liquid-source.name = Fuente de líquidos -block.liquid-void.name = Liquid Void +block.liquid-void.name = Vacío de líquidos block.power-void.name = Vacío de energía block.power-source.name = Energía Infinita block.unloader.name = Descargador @@ -995,20 +995,20 @@ block.blast-mixer.name = Mezclador de Explosivos block.solar-panel.name = Panel Solar block.solar-panel-large.name = Panel Solar Grande block.oil-extractor.name = Extractor de Petróleo -block.command-center.name = Command Center -block.draug-factory.name = Fábrica de Drones Mineros Draug +block.command-center.name = Centro de Comando +block.draug-factory.name = Fábrica de Drones Mineros Primitivos block.spirit-factory.name = Fábrica de Drones Espíritu block.phantom-factory.name = Fábrica de Drones Fantasmales -block.wraith-factory.name = Fábrica de Wraith Fighter -block.ghoul-factory.name = Fábrica de Ghoul Bomber -block.dagger-factory.name = Fábrica de mecanoide Daga -block.crawler-factory.name = Fábrica de mecanoide Oruga -block.titan-factory.name = Fábrica de mecanoide Titán -block.fortress-factory.name = Fábrica de mecanoide Fortress -block.revenant-factory.name = Fábrica de Revenant Fighter +block.wraith-factory.name = Fábrica de Peleador Infernal +block.ghoul-factory.name = Fábrica de Bombardero Fantasmal +block.dagger-factory.name = Fábrica de Mecanoide Daga +block.crawler-factory.name = Fábrica de Mecanoide Oruga +block.titan-factory.name = Fábrica de Mecanoide Titán +block.fortress-factory.name = Fábrica de Mecanoide Fortress +block.revenant-factory.name = Fábrica de Peleador Revenante block.repair-point.name = Punto de Reparación block.pulse-conduit.name = Conducto de Pulso -block.plated-conduit.name = Plated Conduit +block.plated-conduit.name = Conducto Chapado block.phase-conduit.name = Conducto de Fase block.liquid-router.name = Enrutador de Líquidos block.liquid-tank.name = Tanque de Líquidos @@ -1020,23 +1020,23 @@ block.mass-driver.name = Teletransportador Masivo block.blast-drill.name = Taladro de explosión block.thermal-pump.name = Bomba Térmica block.thermal-generator.name = Generador Térmico -block.alloy-smelter.name = Alloy Smelter +block.alloy-smelter.name = Fundidor de Materia block.mender.name = Reparador block.mend-projector.name = Proyector de reparación -block.surge-wall.name = Muro de Surge -block.surge-wall-large.name = Muro de Surge grande +block.surge-wall.name = Muro de Sobretensión +block.surge-wall-large.name = Muro de Sobretensión grande block.cyclone.name = Ciclón -block.fuse.name = Fuse -block.shock-mine.name = Mina Shock +block.fuse.name = Fusible +block.shock-mine.name = Mina electrizante block.overdrive-projector.name = Proyector de sobremarcha block.force-projector.name = Proyector de fuerza block.arc.name = Arco block.rtg-generator.name = Generador RTG block.spectre.name = Espectro -block.meltdown.name = Meltdown +block.meltdown.name = Fusión de Reactor block.container.name = Contenedor block.launch-pad.name = Pad de Lanzamiento -block.launch-pad-large.name = Pad de Lanzammiento Grande +block.launch-pad-large.name = Pad de Lanzamiento Grande team.blue.name = Azul team.crux.name = rojo team.sharded.name = naranja @@ -1045,32 +1045,32 @@ team.derelict.name = derelict team.green.name = Verde team.purple.name = Púrpura unit.spirit.name = Dron Espíritu -unit.draug.name = Dron Minero Draug +unit.draug.name = Dron Minero Primitivo unit.phantom.name = Dron Fantasmal unit.dagger.name = Daga unit.crawler.name = Oruga unit.titan.name = Titán -unit.ghoul.name = Ghoul Bomber -unit.wraith.name = Wraith Fighter -unit.fortress.name = Fortress -unit.revenant.name = Revenant -unit.eruptor.name = Eruptor -unit.chaos-array.name = Chaos Array +unit.ghoul.name = Bombardero Fantasmal +unit.wraith.name = Peleador Infernal +unit.fortress.name = Fortaleza +unit.revenant.name = Revenante +unit.eruptor.name = Erupcionador +unit.chaos-array.name = Matriz del caos unit.eradicator.name = Erradicador unit.lich.name = Lich -unit.reaper.name = Reaper +unit.reaper.name = Segador tutorial.next = [lightgray] tutorial.intro = Has entrado en el[scarlet]Tutorial de Mindustry.[]\nComienza[accent]minando cobre[]. Toca en una veta de cobre cercana al núcleo para hacer esto.\n\n[accent]{0}/{1} cobre -tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper +tutorial.intro.mobile = Has entrado en el[scarlet] Tutorial de Mindustry.[]\nArrastra la pantalla para moverte.\n[accent]Pellizca con 2 dedos [] para alejar y hacercar la vista.\nComienza por[accent] minar cobre[]. Muevete cerca de el, luego toque una veta de mineral de cobre cerca de su núcleo para hacer esto.\n\n[accent]{0}/{1} cobre tutorial.drill = Minar manualmente es ineficiente.\nLos [accent]taladros pueden minar automáticamente.\nColoca uno en una veta de cobre. tutorial.drill.mobile = Minar manualmente es ineficiente.\nLos [accent]Taladros[] pueden minar automáticamente.\nToca la sección de taladros el la esquina de abajo a la derecha.\nSelecciona el[accent]taladro mecánico[].\nColócalo en una veta de cobre tocándola, después pulsa el [accent]botón de confirmación de debajo para confirmar tu selección.\nPulsa el[accent]botón "X" para cancelar la construcción. tutorial.blockinfo = Cada bloque tiene diferentes estadísticas. Cada taladro solo puede minar ciertos minerales.\nPara comprobar la información y estadísticas de un bloque,[accent] toca el botón "?" mientras lo tienes seleccionado en el menú de construcción.[]\n\n[accent]Accede a las estadísticas del Taladro Mecánico ahora.[] tutorial.conveyor = Las [accent]Cintas Transportadoras[] se usan para transportar recursos al núcleo.\nConstruye una línea de transportadores del taladro al núcleo. tutorial.conveyor.mobile = Las [accent]Cintas Transportadoras[] se usan para transportar recursos al núcleo.\nConstruye una línea de transportadores del taladro al núcleo.\n[accent] Construye una línea manteniendo el dedo unos segundos[] y arrastrando hacia una dirección.\n\n[accet]{0}/{1} cintas colocadas en línea\n[ccent]]0/1 recursos transportados. tutorial.turret = Se tiene que construir estructuras defensivas para repeler el [LIGHT_GRAY]enemy[].\nConstruye una torreta dúo cerca de tu base. -tutorial.drillturret = Los dúos requieren[accent] copper ammo[]para disparar.\nColoca un taladro junto a la torre para darle cobre. +tutorial.drillturret = Los dúos requieren[accent] munición de cobre[]para disparar.\nColoca un taladro junto a la torre para darle cobre. tutorial.pause = Durante la batalla, puedes[accent]pausar el juego.[]\nPuedes dejar estructuras en cola mientras pausas.\n\n[accent]Pulsa Espacio para pausar. -tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause. +tutorial.pause.mobile = Durante la batalla, puedes[accent] pausar el juego.[]\nPuedes dejar estructuras en cola mientras pausas.\n\n[accent]Pulsa este boton de arriba a la izquierda para pausar. tutorial.unpause = Ahora toca Espacio otra vez para dejar de pausar. tutorial.unpause.mobile = Ahora tócalo otra vez para dejar de pausar. tutorial.breaking = Muchas veces hace falta destruir bloques.\n[accent]Mantén el botón derecho[] para destruir todos los bloques en una selección.[]\n\n[accent]Destruye todos los bloques de chatarra de la izquierda de tu núcleo usando selección de área. @@ -1110,7 +1110,7 @@ mech.javelin-ship.description = Una nave de ataque y retirada. Aunque inicialmen mech.trident-ship.description = Un bombardero pesado. Razonablemente bien equipado. mech.glaive-ship.description = Una nave pistolera grande y bien armada. Equipada con un repetidor incendiario. Buena aceleración y velocidad máxima. unit.draug.description = Un dron minero primitivo. Barato de producir. Reciclable. Mina cobre y plomo cercanos automáticamente. Transporta los recursos minados al núcleo más cercano. -unit.spirit.description = Un dron draug modificaado, diseñado para reparar en vez de minar. Repara automáticamente cualquier bloque dañado en la zona. +unit.spirit.description = Un dron minero primitivo modificado, diseñado para reparar en vez de minar. Repara automáticamente cualquier bloque dañado en la zona. unit.phantom.description = Un dron avanzado. Mina automáticamente minerales, recoge objetos y repra bloques. Bastante más efectivo que un dron normal. unit.dagger.description = Una unidad terrestre. Útil con enjambres. unit.crawler.description = Una unidad terrestre que consiste en un marco desmontado con una gran cantidad de explosivos en la parte superior. No es muy duradero. Explota en contacto enemigo. @@ -1120,14 +1120,14 @@ unit.eruptor.description = Un mecanoide pesado diseñado para destruir estructur unit.wraith.description = Una unidad interceptora rápida. unit.ghoul.description = Una unidad bombardera pesada. Usa compuesto explosivo o pirotita como munición. unit.revenant.description = Una unidad aérea pesada con misiles. -block.message.description = Stores a message. Used for communication between allies. +block.message.description = Almacena un mensaje. Se utiliza para comunicarse entre aliados. block.graphite-press.description = Comprime carbón en piezas de grafito puro. block.multi-press.description = Una versión mejorada de la prensa de grafito. Utiliza agua y energía para procesar carbón rápida y eficientemente. -block.silicon-smelter.description = Reduce la arena con carbón puro. Produce silicio. +block.silicon-smelter.description = Reduce la arena con carbón puro. Produce silicicona. block.kiln.description = Funde arena y plomo en metacristal. Requiere cantidades pequeñas de energía. block.plastanium-compressor.description = Produce plastanio con aceite y titanio. block.phase-weaver.description = Produce tejido de fase del torio radioactivo y altas cantidades de arena. -block.alloy-smelter.description = Produce "surge alloy" con titanio, plomo, silicio y cobre. +block.alloy-smelter.description = Produce "surge alloy" con titanio, plomo, silicicona y cobre. block.cryofluidmixer.description = Combina agua y titanio en líquido criogénico, que es mucho más eficiente para enfriar. block.blast-mixer.description = Usa aceite para transformar pirotita en un objeto menos inflamable pero más explosivo: compuesto explosivo. block.pyratite-mixer.description = Mezcla carbón, plomo y arena en pirotita altamente inflamable. @@ -1137,18 +1137,18 @@ block.spore-press.description = Comprime esporas en petróleo. block.pulverizer.description = Despedaza la piedra en arena. Útil cuando no hay arena natural. block.coal-centrifuge.description = Solidifica petróleo en piezas de carbón. block.incinerator.description = Se deshace de cualquier líquido o material excesivo. -block.power-void.description = Elimina toda la energía que se le da. Solo en sandbox. -block.power-source.description = Da energía infinita. Solo en sandbox. -block.item-source.description = Da objetos infinitos. Solo en sandbox. -block.item-void.description = Destruye cuanquier objeto que va a él sin necesitar energía. Solo en sandbox. -block.liquid-source.description = Da líquido infinito. Solo en sandbox. -block.liquid-void.description = Removes any liquids. Sandbox only. +block.power-void.description = Elimina toda la energía que se le da. Solo en Caja de Arena. +block.power-source.description = Da energía infinita. Solo en Caja de Arena. +block.item-source.description = Da objetos infinitos. Solo en Caja de Arena. +block.item-void.description = Destruye cuanquier objeto que va a él sin necesitar energía. Solo en Caja de Arena. +block.liquid-source.description = Da líquido infinito. Solo en Caja de Arena. +block.liquid-void.description = Elimina cualquier liquido que entra sin necesitar energía. Solo en Caja de Arena. block.copper-wall.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas. block.copper-wall-large.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.\nOcupa múltiples casillas. block.titanium-wall.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos. block.titanium-wall-large.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos.\nOcupa múltiples casillas. -block.plastanium-wall.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections. -block.plastanium-wall-large.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.\nSpans multiple tiles. +block.plastanium-wall.description = Un tipo especial de pared que absorbe los arcos eléctricos y bloquea las conexiones automáticas de los nodos de potencia.. +block.plastanium-wall-large.description = Un tipo especial de pared que absorbe los arcos eléctricos y bloquea las conexiones automáticas de los nodos de potencia.\nOcupa múltiples casillas. block.thorium-wall.description = Un bloque defensivo fuerte.\nBuena protección contra enemigos. block.thorium-wall-large.description = Un bloque defensivo fuerte.\nBuena protección contra enemigos.\nOcupa múltiples casillas. block.phase-wall.description = No es tan fuerte como un muro de torio pero rebota balas al enemigo si no son demasiado fuertes. @@ -1168,7 +1168,7 @@ block.junction.description = Actúa como puente para dos transportadores que se block.bridge-conveyor.description = Bloque avanado de transporte. Puede transportar objetos por encima hasta 3 casillas de cualquier terreno o construcción. block.phase-conveyor.description = Bloque de transporte avanzado. Usa energía para transportar objetos a otro transportador de fase conectado por varias casillas. block.sorter.description = Clasifica objetos. Si un objeto es igual al seleccionado, pasará al frente. Si no, el objeto saldrá por la izquierda y la derecha. -block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead. +block.inverted-sorter.description = Procesa elementos como un clasificador estándar, pero en su lugar genera elementos seleccionados a los lados. block.router.description = Acepta objetos de una dirección y deja objetos equitativamente en hasta 3 direcciones diferentes. Útil para dividir los materiales de una fuente de recursos a múltiples objetivos. block.distributor.description = Un enrutador avanzado que distribuye objetos equitativamente en hasta otras 7 direcciones. block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. @@ -1178,7 +1178,7 @@ block.rotary-pump.description = Una bomba avanzada. Bombea más líquido, pero r block.thermal-pump.description = La mejor bomba. block.conduit.description = Bloque de transporte de líquidos básico. Funciona como un transportador, pero con líquidos. Usado con bombas, extractores u otros conductos. block.pulse-conduit.description = Bloque de transporte de líquidos avanzado. Transporta líquidos más rápidamente y almacena más que los conductos estándar. -block.plated-conduit.description = Moves liquids at the same rate as pulse conduits, but possesses more armor. Does not accept fluids from the sides by anything other than conduits.\nLeaks less. +block.plated-conduit.description = Mueve líquidos a la misma velocidad que los conductos de pulso, pero posee más armadura. No acepta líquidos de los lados por otra cosa que no sean conductos.\nGotea menos. block.liquid-router.description = Acepta líquidos de una dirección y los deja en hasta 3 direcciones equitativamente. También puede amacenar cierta capacidad de líquido. Útil para dividir los líquidos de una fuente a varios objetivos. block.liquid-tank.description = Almacena una gran cantidad de líquidos. Úsalo para crear almacenes cuando no hay una demanda constante de materiales o para asegurarse de enfriar bloques vitales. block.liquid-junction.description = Actúa como un puente para dos condusctos que se cruzan. Útil en situaciones en las que hay dos conductos con líquidos diferentes a diferentes lugares. @@ -1187,13 +1187,13 @@ block.phase-conduit.description = Bloque de transporte de líquidos avanzado. Us block.power-node.description = Transmite energía a nodos conectados, conecta hasta cuatro fuentes de energía, edificios que usan energía o nodos. El nodo obtendrá o transmitirá energía de cualquier bloque adyacente. block.power-node-large.description = Tiene un radio más amplio que el nodo de energía y conecta hasta seis fuentes de energía, edificios que usan energía o nodos. block.surge-tower.description = Un nodo con un gran alcance con menos conexiones disponibles. -block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. +block.diode.description = La energía de la batería puede fluir a través de este bloque en una sola dirección, pero solo si el otro lado tiene menos energía almacenada. block.battery.description = Guarda energía cuando hay abundancia y proporciona energía cuando hay escasez de energía mientras la batería tenga energía. block.battery-large.description = Almacena mucha más energía que una batería normal. block.combustion-generator.description = Genera energía quemando aceite o matteriales inflamables. block.thermal-generator.description = Genera una gran cantidad de energía con la lava. block.turbine-generator.description = Más eficiente que un generador de combustión, pero requiere agua adicional. -block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.differential-generator.description = Genera grandes cantidades de energía. Utiliza la diferencia de temperatura entre el fluído criogenico y la quema de piratita. block.rtg-generator.description = Un generador radioisótropo termoeléctrico que no necesita enfriamiento pero proporciona menos energía que un reactor de torio. block.solar-panel.description = Proporciona una pequeña cantidad de energía procedente del sol. block.solar-panel-large.description = Genera un mucho mejor suministro de energía que un panel solar estándar, pero también es mucho más caro de construir. @@ -1228,8 +1228,8 @@ block.ripple.description = Una torre de artillería grande que dispara varios di block.cyclone.description = Una torre de disparo rápido grande. block.spectre.description = Una torre grande que dispara dos balas poderosas de una vez. block.meltdown.description = Una torre grande que dispara rayos poderosos de largo alcance. -block.command-center.description = Issues movement commands to allied units across the map.\nCauses units to patrol, attack an enemy core or retreat to the core/factory. When no enemy core is present, units will default to patrolling under the attack command. -block.draug-factory.description = Producedrones mineros Draug. +block.command-center.description = Emite comandos de movimiento a las unidades aliadas en el mapa.\nHace que las unidades patrullen, ataquen un núcleo enemigo o se retiren al núcleo / fábrica. When no enemy core is present, units will default to patrolling under the attack command. +block.draug-factory.description = Producedrones mineros primitivos. block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques. block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu. block.wraith-factory.description = Produce unidades aéreas rápidas e interceptoras. diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index a4c189dca4..cefc5181ec 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -3,7 +3,7 @@ credits = Tekijät contributors = Kääntäjät ja avustajat discord = Liity Mindustryn Discordiin! link.discord.description = Mindustryn virallinen Discord-keskusteluhuone -link.reddit.description = The Mindustry subreddit +link.reddit.description = Mindustry subreddit link.github.description = Pelin lähdekoodi link.changelog.description = Lista päivityksien muutoksista link.dev-builds.description = Epävakaat kehitysversiot @@ -19,47 +19,47 @@ screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole gameover = Peli ohi gameover.pvp = [accent] {0}[] joukkue voittaa! highscore = [accent]Uusi ennätys! -copied = Copied. +copied = Kopioitu. -load.sound = Sounds -load.map = Maps -load.image = Images -load.content = Content -load.system = System -load.mod = Mods -load.scripts = Scripts +load.sound = Ääni +load.map = Kartat +load.image = Kuvat +load.content = Sisältö +load.system = Systeemi +load.mod = Modit +load.scripts = Skriptit be.update = A new Bleeding Edge build is available: -be.update.confirm = Download it and restart now? -be.updating = Updating... -be.ignore = Ignore -be.noupdates = No updates found. -be.check = Check for updates +be.update.confirm = Lataa se ja käynnistä peli uudelleen? +be.updating = Päivitetään... +be.ignore = Sivuuta +be.noupdates = Ei päivityksiä saatavilla. +be.check = Tarkista päivityksiä -schematic = Schematic -schematic.add = Save Schematic... -schematics = Schematics -schematic.replace = A schematic by that name already exists. Replace it? -schematic.import = Import Schematic... -schematic.exportfile = Export File -schematic.importfile = Import File -schematic.browseworkshop = Browse Workshop -schematic.copy = Copy to Clipboard -schematic.copy.import = Import from Clipboard -schematic.shareworkshop = Share on Workshop -schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic -schematic.saved = Schematic saved. -schematic.delete.confirm = This schematic will be utterly eradicated. -schematic.rename = Rename Schematic -schematic.info = {0}x{1}, {2} blocks +schematic = Kaavio +schematic.add = Tallenna Kaavio... +schematics = Kaaviot +schematic.replace = Kaavio tällä nimellä on jo olemassa. Haluatko korvata sen? +schematic.import = Tuo Kaavio... +schematic.exportfile = Luo Tiedosto +schematic.importfile = Tuo Tiedosto +schematic.browseworkshop = Selaa Työpajaa +schematic.copy = Kopioi Leikepöydälle +schematic.copy.import = Tou Leikepöydälle +schematic.shareworkshop = Jaa työpajaan +schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Käännä Kaavio +schematic.saved = Kaavio tallennettu. +schematic.delete.confirm = Tämä kaavio poistetaan. +schematic.rename = Uudelleennimeä Kaavio +schematic.info = {0}x{1}, {2} palikkaa -stat.wave = Aaltoja voitettu:[accent] {0} +stat.wave = Tasoja voitettu:[accent] {0} stat.enemiesDestroyed = Vihollisia tuhottu:[accent] {0} stat.built = Rakennuksia rakennettu:[accent] {0} stat.destroyed = Rakennuksia tuhottu:[accent] {0} stat.deconstructed = Rakennuksia purettu:[accent] {0} stat.delivered = Resursseja laukaistu: -stat.rank = Lopullinen arvo: [accent]{0} +stat.rank = Lopullinen arvosana: [accent]{0} launcheditems = [accent]Laukaistut tavarat launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue. @@ -78,49 +78,49 @@ customgame = Mukautettu peli newgame = Uusi peli none = minimap = Pienoiskartta -position = Position +position = Sijainti close = Sulje website = Verkkosivu quit = Poistu -save.quit = Save & Quit +save.quit = Tallenna ja Poistu maps = Kartat -maps.browse = Browse Maps +maps.browse = Selaa Karttoja continue = Jatka maps.none = [lightgray]Karttoja ei löytynyt! -invalid = Invalid -pickcolor = Pick Color +invalid = Invalidi +pickcolor = Valitse väri preparingconfig = Preparing Config preparingcontent = Preparing Content uploadingcontent = Uploading Content uploadingpreviewfile = Uploading Preview File committingchanges = Comitting Changes -done = Done -feature.unsupported = Your device does not support this feature. +done = Valmis +feature.unsupported = Sinun laitteesi ei tue tätä toimintoa. -mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord. +mods.alphainfo = Pidä mielessä että modit ovat alpha-tilassa, ja[scarlet] ne voivat olla virheellisiä[].\nRaportoi kaikki virheet Mindustry GitHub-sivuille tai Discordiin. mods.alpha = [accent](Alpha) -mods = Mods -mods.none = [LIGHT_GRAY]No mods found! -mods.guide = Modding Guide -mods.report = Report Bug -mods.openfolder = Open Mod Folder -mod.enabled = [lightgray]Enabled -mod.disabled = [scarlet]Disabled -mod.disable = Disable -mod.delete.error = Unable to delete mod. File may be in use. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} -mod.missingdependencies = [scarlet]Missing dependencies: {0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. +mods = Modit +mods.none = [LIGHT_GRAY]Modeja ei löytynyt! +mods.guide = Modaamisen opas +mods.report = Raportoi ohjelmistovirhe +mods.openfolder = Avaa Modikansio +mod.enabled = [lightgray]Käytössä +mod.disabled = [scarlet]Epäkäytössä +mod.disable = Laita pois päältä +mod.delete.error = Modia ei pystynyt poistamaan. Tiedosto voi olla käytössä. +mod.requiresversion = [scarlet]Tarvitsee vähintää pelin version: [accent]{0} +mod.missingdependencies = [scarlet]Tarvitsee nämä modit: {0} +mod.erroredcontent = [scarlet]Sisältö Virheet +mod.errors = Virheitä on tapahtunut pelin ladatessa. +mod.noerrorplay = [scarlet]Sinulla on virheellisiä modeja.[] Joko poista ne käytöstä tai korjaa virheet. mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. -mod.enable = Enable -mod.requiresrestart = The game will now close to apply the mod changes. -mod.reloadrequired = [scarlet]Reload Required -mod.import = Import Mod +mod.enable = Käytä +mod.requiresrestart = Peli suljetaan jotta muutokset voisivat toteutua. +mod.reloadrequired = [scarlet]Vaatii Uudelleenkäynnistystä +mod.import = Tuo Modi mod.import.github = Import GitHub Mod mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. -mod.remove.confirm = This mod will be deleted. +mod.remove.confirm = Tämä modi poistetaan. mod.author = [LIGHT_GRAY]Author:[] {0} mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again. @@ -143,34 +143,34 @@ server.closing = [accent]Suljetaan palvelinta... server.kicked.kick = Sinut on potkittu palvelimelta! server.kicked.whitelist = You are not whitelisted here. server.kicked.serverClose = Palvelin suljettu. -server.kicked.vote = You have been vote-kicked. Goodbye. +server.kicked.vote = Sinut on äänetetty pois. Hyvästi. server.kicked.clientOutdated = Pelisi on vanhentunut! Päivitä se! -server.kicked.serverOutdated = Outdated server! Ask the host to update! +server.kicked.serverOutdated = Vanhentunut palvelin! Pyydä isäntää päivittämään! server.kicked.banned = Sinulla on portikielto tälle palvelimelle. server.kicked.typeMismatch = This server is not compatible with your build type. -server.kicked.playerLimit = This server is full. Wait for an empty slot. +server.kicked.playerLimit = Tämä palvelin on täynnä. Odota vapaata tilaa. server.kicked.recentKick = Sinut on potkittu äskettäin.\nOdota ennen kuin yhdistät uudestaan. server.kicked.nameInUse = Joku tuon niminen\non jo tällä palvelimella. server.kicked.nameEmpty = Valitsemasi nimi on virheellinen. server.kicked.idInUse = Olet jo tällä palvelimella! Kahdella käyttäjällä yhdistäminen ei ole sallittua. server.kicked.customClient = Tämä palvelin ei tue muokattuja versioita. Lataa virallinen versio. server.kicked.gameover = Peli ohi! -server.kicked.serverRestarting = The server is restarting. +server.kicked.serverRestarting = Tämä palvelin on uudelleenkäynnistymässä. server.versions = Versiosi:[accent] {0}[]\nPalvelimen versio:[accent] {1}[] host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. Note that public networks sometimes do not allow server discovery. join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP. -hostserver = Host Multiplayer Game -invitefriends = Invite Friends +hostserver = Pidä yllä monipelaaja peliä +invitefriends = Pyydä Ystäviä hostserver.mobile = Host\nGame host = Host hosting = [accent]Avataan palvelinta... hosts.refresh = Päivitä -hosts.discovering = Discovering LAN games -hosts.discovering.any = Discovering games +hosts.discovering = Etsitään LAN pelejä +hosts.discovering.any = Etsitään Pelejä server.refreshing = Päivitetään palvelimen tietoja -hosts.none = [lightgray]No local games found! -host.invalid = [scarlet]Can't connect to host. -trace = Trace Player +hosts.none = [lightgray]Paikallisia pelejä ei löytynyt! +host.invalid = [scarlet]Isäntään ei voitu yhdistää. +trace = Seuraa Pelaajaa trace.playername = Pelaajanimi: [accent]{0} trace.ip = IP-osoite: [accent]{0} trace.id = Uniikki tunniste: [accent]{0} @@ -188,17 +188,17 @@ server.outdated = [crimson]Vanhentunut palvelin![] server.outdated.client = [crimson]Vanhentunut asiakasohjelma![] server.version = [gray]v{0} {1} server.custombuild = [yellow]Custom Build -confirmban = Are you sure you want to ban this player? -confirmkick = Are you sure you want to kick this player? -confirmvotekick = Are you sure you want to vote-kick this player? -confirmunban = Are you sure you want to unban this player? -confirmadmin = Are you sure you want to make this player an admin? +confirmban = Oletko varma että haluat potkia tämän pelaajan? +confirmkick = Oletko varma että haluat poistaa tämän pelaajan? +confirmvotekick = Oletko varma että haluat äänestää tämän pelaajan potkituksi? +confirmunban = Oletko varma että haluat päästää tämän pelaajan takaisin? +confirmadmin = Oletko varma että haluat antaa pelaajalle hallinto-oikeuksia? confirmunadmin = Are you sure you want to remove admin status from this player? joingame.title = Liity peliin joingame.ip = Osoite: -disconnect = Disconnected. -disconnect.error = Connection error. -disconnect.closed = Connection closed. +disconnect = Yhteys katkaistu. +disconnect.error = Yhteysvirhe. +disconnect.closed = Yhteys poistettu. disconnect.timeout = Timed out. disconnect.data = Failed to load world data! cantconnect = Unable to join game ([accent]{0}[]). @@ -212,7 +212,7 @@ save.new = New Save save.overwrite = Are you sure you want to overwrite\nthis save slot? overwrite = Overwrite save.none = No saves found! -saveload = Saving... +saveload = Tallennetaan... savefail = Failed to save game! save.delete.confirm = Are you sure you want to delete this save? save.delete = Delete @@ -220,7 +220,7 @@ save.export = Export Save save.import.invalid = [accent]This save is invalid! save.import.fail = [crimson]Failed to import save: [accent]{0} save.export.fail = [crimson]Failed to export save: [accent]{0} -save.import = Import Save +save.import = Tuo Tallennus save.newslot = Tallennuksen nimi: save.rename = Nimeä uudelleen save.rename.text = Uusi nimi: @@ -265,8 +265,8 @@ cancelbuilding = [accent][[{0}][] to clear plan selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building -wave = [accent]Aalto {0} -wave.waiting = [lightgray]Wave in {0} +wave = [accent]Taso {0} +wave.waiting = [lightgray]Seuraava taso {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Odotetaan... waiting.players = Odotetaan pelaajia... @@ -275,7 +275,7 @@ wave.enemy = [lightgray]{0} vihollinen jäljellä loadimage = Lataa kuva saveimage = Tallenna kuva unknown = Tuntematon -custom = Custom +custom = Mukautettu builtin = Sisäänrakennettu map.delete.confirm = Oletko varma että haluat poistaa tämän kartan? Poistoa ei voi peruuttaa! map.random = [accent]Satunnainen kartta @@ -296,30 +296,30 @@ publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure publish.error = Error publishing item: {0} steam.error = Failed to initialize Steam services.\nError: {0} -editor.brush = Brush +editor.brush = Sivellin editor.openin = Avaa editorissa editor.oregen = Ore Generation editor.oregen.info = Ore Generation: editor.mapinfo = Kartan tiedot -editor.author = Author: +editor.author = Tekijä: editor.description = Kuvaus: -editor.nodescription = A map must have a description of at least 4 characters before being published. -editor.waves = Aallot: +editor.nodescription = Kartan kuvaksessa täytyy olla vähintään neljä kirjainta ennen julkaisua. +editor.waves = Tasot: editor.rules = Säännöt: -editor.generation = Generation: -editor.ingame = Edit In-Game -editor.publish.workshop = Publish On Workshop +editor.generation = Generaatio: +editor.ingame = Muokka pelin sisällä +editor.publish.workshop = Julkaise työpajaan editor.newmap = Uusi kartta -workshop = Workshop -waves.title = Aallot -waves.remove = Remove +workshop = Työpaja +waves.title = Tasot +waves.remove = Poista waves.never = waves.every = every waves.waves = wave(s) -waves.perspawn = per spawn +waves.perspawn = per spawni waves.to = to -waves.boss = Boss -waves.preview = Preview +waves.boss = Pomo +waves.preview = Esikatselu waves.edit = Muokkaa... waves.copy = Kopioi leikepöydälle waves.load = Lataa leikepöydältä @@ -327,11 +327,11 @@ waves.invalid = Invalid waves in clipboard. waves.copied = Aallot kopioitu. waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [lightgray] -details = Details... +details = Yksityiskohdat... edit = Muokkaa... editor.name = Nimi: -editor.spawn = Spawn Unit -editor.removeunit = Remove Unit +editor.spawn = Spawni yksikkö +editor.removeunit = Poista yksikkö editor.teams = Joukkueet editor.errorload = Virhe ladattaessa tiedostoa:\n[accent]{0} editor.errorsave = Virhe tallennettaessa tiedostoa:\n[accent]{0} @@ -341,10 +341,10 @@ editor.errornot = This is not a map file. editor.errorheader = This map file is either not valid or corrupt. editor.errorname = Map has no name defined. Are you trying to load a save file? editor.update = Päivitä -editor.randomize = Randomize -editor.apply = Apply -editor.generate = Generate -editor.resize = Resize +editor.randomize = Satunnaista +editor.apply = Käytä +editor.generate = Generoi +editor.resize = Säädä kokoa editor.loadmap = Lataa kartta editor.savemap = Tallenna kartta editor.saved = Tallennettu! @@ -370,12 +370,12 @@ editor.resizemap = Resize Map editor.mapname = Kartan nimi: editor.overwrite = [accent]Warning!\nThis overwrites an existing map. editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? -editor.exists = A map with this name already exists. -editor.selectmap = Select a map to load: +editor.exists = Kartta tällä nimellä on jo olemassa. +editor.selectmap = Valitse kartta ladattavaksi: -toolmode.replace = Replace +toolmode.replace = Korvaa toolmode.replace.description = Draws only on solid blocks. -toolmode.replaceall = Replace All +toolmode.replaceall = Korvaa kaikki toolmode.replaceall.description = Replace all blocks in map. toolmode.orthogonal = Orthogonal toolmode.orthogonal.description = Draws only orthogonal lines. @@ -424,48 +424,48 @@ width = Leveys: height = Korkeus: menu = Valikko play = Pelaa -campaign = Campaign +campaign = Polku load = Lataa save = Tallenna fps = FPS: {0} ping = Ping: {0}ms language.restart = Please restart your game for the language settings to take effect. settings = Asetukset -tutorial = Perehdytys -tutorial.retake = Re-Take Tutorial -editor = Editor -mapeditor = Map Editor +tutorial = Tutoriaali +tutorial.retake = Uusita Tutoriaali +editor = Editori +mapeditor = Kartan Editori abandon = Hylkää abandon.text = This zone and all its resources will be lost to the enemy. locked = Lukittu complete = [lightgray]Reach: -requirement.wave = Reach Wave {0} in {1} -requirement.core = Destroy Enemy Core in {0} -requirement.unlock = Unlock {0} +requirement.wave = Pääse Tasolle {0} kartassa {1} +requirement.core = Tuhoa vihollise ydin kartassa {0} +requirement.unlock = Avaa {0} resume = Resume Zone:\n[lightgray]{0} -bestwave = [lightgray]Best Wave: {0} +bestwave = [lightgray]Paras taso: {0} launch = < LAUNCH > -launch.title = Launch Successful +launch.title = Onnistunut laukaisu launch.next = [lightgray]next opportunity at wave {0} launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. -uncover = Uncover +launch.confirm = Tämä laukaisee kaikki resourssit ytimestäsi.\nEt voi enää palata takaisin. +launch.skip.confirm = Jos ohitat nyt, voit laukaista vasta myöhemmissä tasoissa. +uncover = Paljasta configure = Configure Loadout -bannedblocks = Banned Blocks -addall = Add All +bannedblocks = Kielletyt Palikat +addall = Lisää kaikki configure.locked = [lightgray]Unlock configuring loadout: Wave {0}. configure.invalid = Amount must be a number between 0 and {0}. zone.unlocked = [lightgray]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.unlocked = Loadout unlocked:[lightgray]\n{0} -zone.resources = [lightgray]Resources Detected: -zone.objective = [lightgray]Objective: [accent]{0} -zone.objective.survival = Survive +zone.resources = [lightgray]Resoursseja havaittu: +zone.objective = [lightgray]Objectiivi: [accent]{0} +zone.objective.survival = Selviydy zone.objective.attack = Destroy Enemy Core -add = Add... -boss.health = Boss Health +add = Lisää... +boss.health = Pomon elinpisteet connectfail = [crimson]Connection error:\n\n[accent]{0} error.unreachable = Server unreachable.\nIs the address spelled correctly? @@ -478,209 +478,209 @@ error.io = Network I/O error. error.any = Unknown network error. error.bloom = Failed to initialize bloom.\nYour device may not support it. -zone.groundZero.name = Ground Zero -zone.desertWastes.name = Desert Wastes -zone.craters.name = The Craters -zone.frozenForest.name = Frozen Forest -zone.ruinousShores.name = Ruinous Shores -zone.stainedMountains.name = Stained Mountains -zone.desolateRift.name = Desolate Rift -zone.nuclearComplex.name = Nuclear Production Complex -zone.overgrowth.name = Overgrowth -zone.tarFields.name = Tar Fields -zone.saltFlats.name = Salt Flats -zone.impact0078.name = Impact 0078 -zone.crags.name = Crags -zone.fungalPass.name = Fungal Pass +zone.groundZero.name = Vaara Alue +zone.desertWastes.name = Aavikon Jätteet +zone.craters.name = Kraatterit +zone.frozenForest.name = Jäätynyt Metsä +zone.ruinousShores.name = Tuhoisa Ranta +zone.stainedMountains.name = Tahravuoret +zone.desolateRift.name = Autio Syvänne +zone.nuclearComplex.name = Ydinvoima Kompleksi +zone.overgrowth.name = Liikakasvu +zone.tarFields.name = Terva Pellot +zone.saltFlats.name = Suolainen Tasanne +zone.impact0078.name = Isku 0078 +zone.crags.name = Kalliot +zone.fungalPass.name = Sienilaakso -zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. -zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -zone.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +zone.groundZero.description = Suotuisa alue aloittaa peli. Matala vaarataso. Vähän resoursseja.\nKerää mahdollisimman paljon kuparia ja lyijyä.\nJatka eteenpäin. +zone.frozenForest.description = Jopa täällä, lähellä vuoria, asustaa itiöitä. Mutta ne eivöt voi elää ikuisesti jäätävässä ilmastossa.\n\nAloita matkasi energiaan. Rakenna polttogeneraattoreita. Opettele korjaajien käyttö. +zone.desertWastes.description = Valtavia määriä jätteitä ränsityneiden rakennuksien seassa.\nVoit löytää hiiltä. Polta se energiaksi, tai tiivistä siitä grafiittia.\n\n[lightgray]Laskeutumiskohta on epävarma. +zone.saltFlats.description = Aavikoiden reunoilla on suolainen tasanne. Vain vähän resoursse on saatavilla.\n\nVihollinen on rakentanut resurssi hankinnan. Hävitä vihollisen ydin. Älä jätä mitään jäljelle. +zone.craters.description = Vettä on kertynyt tähän kraatteriin vanhojen sotien jäänteinä. Ota alue itsellesi. Kerää hiekkaa. Sulata metallilasia. Pumppaa vettä jäähdyttääksesi kaivausporia ja tykkejä. +zone.ruinousShores.description = Jätteiden takaa, löydät rantaviivan. Kerran täma paikka asutti sotilasjoukkoja. Paljoa jäljella ei ole. Vain perus puolustus rekenteet ovat vahingoittumattomia, kaakki muu on romua.\nJatka laajentamista eteenpäin. Tutki teknologiaa. +zone.stainedMountains.description = Alankoa vuroien sisämaassa, löydät paljon itiöelämää.\nOta talteen runsas titaani jota täältä löytyy. Opi käyttämään sitä.\n\nVihollinen on läasnäoleva. Älä anna heille liikaa aikaa lähettää heidän vahvimpia aseitaan. +zone.overgrowth.description = Tämä alue on ylikasvanut, lähempänä itiöiden pesäkettä.\nVihollinen on muodostanut etuvartion. Rakenna titaani yksikköjä. Tuhoa vihollinen. Hanki se alue joka joskus on menetetty. +zone.tarFields.description = Öljytuotannon laitamia, vuorien ja aavikkojen välissä. Yksi ainoista paikosta joissa on tervalähde.\nLöydät vaarallisia vihollis joukkoja täältä hylätystä paikasta. Älä aliarvio niitä.\n\n[lightgray]Tutki öljyprosessointi mekanismeja jos mahdollista. +zone.desolateRift.description = Extremaalisen vaarallinen alue. Runsaasti resursseja, mutta vain vähän tilaa. Korke riski eliminaatiolle. Lähde mahdollisimman nopeasti. Älä tule huijatuksi pitkien taukojen vihollisten hyökkäyksien vällillä. +zone.nuclearComplex.description = Entinen laitos tehty toriumin tuotantoa ja prosessointia varten, nykyään vain rauniota.\n[lightgray]Tutki toriumin monia hyödyllisiä käyttötarkoituksia.\n\nVihollinen on läsnä isoin joukkoin kokoajan partioimassa tunkeilijoilta. +zone.fungalPass.description = Siirtymis alue korkeiden ja matalien vuorien välillä, itiöiden peitossa. Pieni vihollis tiedustelu tukikohta on täällä. Tuhoa se.\nKäytä Dagger- ja Crawler yksikköjä. Tuhoa kaksi vihollisydintä. zone.impact0078.description = zone.crags.description = -settings.language = Language -settings.data = Game Data -settings.reset = Reset to Defaults -settings.rebind = Rebind -settings.resetKey = Reset -settings.controls = Controls -settings.game = Game -settings.sound = Sound -settings.graphics = Graphics -settings.cleardata = Clear Game Data... -settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done cannot be undone! -settings.clearall.confirm = [scarlet]WARNING![]\nThis will clear all data, including saves, maps, unlocks and keybinds.\nOnce you press 'ok' the game will wipe all data and automatically exit. -paused = [accent]< Paused > -clear = Clear -banned = [scarlet]Banned -yes = Yes -no = No -info.title = Info +settings.language = Kieli +settings.data = Peli Data +settings.reset = Nollaa Asetukset +settings.rebind = Uudelleenaseta +settings.resetKey = Aseta Uudelleen +settings.controls = Kontrollit +settings.game = Peli +settings.sound = Ääni +settings.graphics = Grafiikat +settings.cleardata = Tyhjennä Pelin Data... +settings.clear.confirm = Oletko varma että haluat tyhjentää pelin datan?\nMitä on tehty ei voi peruuttaa! +settings.clearall.confirm = [scarlet]WARNING![]\nTämä poistaa kaiken datan, mukaanlukien kesken olevat pelit, kartat, avatut asiat ja kontrolliasetukset.\nKun painat 'ok' kaikki datasi poistetaan ja peli suljetaan. +paused = [accent]< Pysäytetty > +clear = Tyhjä +banned = [scarlet]Kielletty +yes = Kyllä +no = Ei +info.title = Informaatio error.title = [crimson]An error has occured error.crashtitle = An error has occured -blocks.input = Input -blocks.output = Output -blocks.booster = Booster +blocks.input = Sisääntulo +blocks.output = Ulostulo +blocks.booster = Boostaa block.unknown = [lightgray]??? -blocks.powercapacity = Power Capacity -blocks.powershot = Power/Shot -blocks.damage = Damage -blocks.targetsair = Targets Air -blocks.targetsground = Targets Ground -blocks.itemsmoved = Move Speed -blocks.launchtime = Time Between Launches -blocks.shootrange = Range -blocks.size = Size -blocks.liquidcapacity = Liquid Capacity -blocks.powerrange = Power Range -blocks.powerconnections = Max Connections -blocks.poweruse = Power Use -blocks.powerdamage = Power/Damage -blocks.itemcapacity = Item Capacity -blocks.basepowergeneration = Base Power Generation -blocks.productiontime = Production Time -blocks.repairtime = Block Full Repair Time -blocks.speedincrease = Speed Increase -blocks.range = Range -blocks.drilltier = Drillables -blocks.drillspeed = Base Drill Speed -blocks.boosteffect = Boost Effect -blocks.maxunits = Max Active Units -blocks.health = Health -blocks.buildtime = Build Time -blocks.buildcost = Build Cost -blocks.inaccuracy = Inaccuracy -blocks.shots = Shots -blocks.reload = Shots/Second -blocks.ammo = Ammo +blocks.powercapacity = Energiakapasiteetti +blocks.powershot = Energiaa/Ammus +blocks.damage = Vahinko +blocks.targetsair = Hyökkää Ilmaan +blocks.targetsground = Hyökkää Maahan +blocks.itemsmoved = Liikkumisnopeus +blocks.launchtime = Aika Laukaisujen Välillä +blocks.shootrange = Kantama +blocks.size = Koko +blocks.liquidcapacity = Neste Kapasiteetti +blocks.powerrange = Energia Kantama +blocks.powerconnections = Maksimi konnektio määrä +blocks.poweruse = Energian Käyttö +blocks.powerdamage = Energia/Vahinko +blocks.itemcapacity = Tavara Kapasiteetti +blocks.basepowergeneration = Kanta Enegian Generointi +blocks.productiontime = Produktion Aika +blocks.repairtime = Kokonaisen Palikan Korjaus Aika +blocks.speedincrease = Nopeuden Kasvu +blocks.range = Etäisyys +blocks.drilltier = Porattavat +blocks.drillspeed = Kanta Poran Nopeus +blocks.boosteffect = Boostaamisen Vaikutus +blocks.maxunits = Maksimi Määrä Yksikköjä +blocks.health = Elämäpisteet +blocks.buildtime = Rakentamisen Aika +blocks.buildcost = Rakentamisen Hinta +blocks.inaccuracy = Epätarkkuus +blocks.shots = Ammusta +blocks.reload = Ammusta/Sekunnissa +blocks.ammo = Ammus -bar.drilltierreq = Better Drill Required -bar.drillspeed = Drill Speed: {0}/s -bar.pumpspeed = Pump Speed: {0}/s -bar.efficiency = Efficiency: {0}% -bar.powerbalance = Power: {0}/s -bar.powerstored = Stored: {0}/{1} -bar.poweramount = Power: {0} -bar.poweroutput = Power Output: {0} -bar.items = Items: {0} -bar.capacity = Capacity: {0} -bar.liquid = Liquid -bar.heat = Heat -bar.power = Power -bar.progress = Build Progress -bar.spawned = Units: {0}/{1} -bar.input = Input -bar.output = Output +bar.drilltierreq = Parempi Pora Vaadittu +bar.drillspeed = Poran Nopeus: {0}/s +bar.pumpspeed = Pumpun Nopeus: {0}/s +bar.efficiency = Tehokkuus: {0}% +bar.powerbalance = Energia: {0}/s +bar.powerstored = Säilöttynä: {0}/{1} +bar.poweramount = Energia: {0} +bar.poweroutput = Energian Ulostulo: {0} +bar.items = Tavaroita: {0} +bar.capacity = Kapasiteetti: {0} +bar.liquid = Neste +bar.heat = Lämpö +bar.power = Energia +bar.progress = Rakennuksen Edistys +bar.spawned = Yksikköjä: {0}/{1} +bar.input = Sisääntulo +bar.output = Ulostulo -bullet.damage = [stat]{0}[lightgray] damage -bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles -bullet.incendiary = [stat]incendiary -bullet.homing = [stat]homing -bullet.shock = [stat]shock -bullet.frag = [stat]frag +bullet.damage = [stat]{0}[lightgray] Vahinko +bullet.splashdamage = [stat]{0}[lightgray] Alue vahinko ~[stat] {1}[lightgray] palikkaa +bullet.incendiary = [stat]sytyttävä +bullet.homing = [stat]itseohjautuva +bullet.shock = [stat]shokki +bullet.frag = [stat]sirpaloituva bullet.knockback = [stat]{0}[lightgray] knockback -bullet.freezing = [stat]freezing -bullet.tarred = [stat]tarred -bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier -bullet.reload = [stat]{0}[lightgray]x fire rate +bullet.freezing = [stat]jäädyttävä +bullet.tarred = [stat]tervattu +bullet.multiplier = [stat]{0}[lightgray]x ammusten multiplikaatio +bullet.reload = [stat]{0}[lightgray]x ammunta nopeus -unit.blocks = blocks -unit.powersecond = power units/second -unit.liquidsecond = liquid units/second -unit.itemssecond = items/second -unit.liquidunits = liquid units -unit.powerunits = power units -unit.degrees = degrees -unit.seconds = seconds -unit.persecond = /sec -unit.timesspeed = x speed +unit.blocks = palikat +unit.powersecond = energia yksikköä/sekunti +unit.liquidsecond = neste yksikköä/sekunti +unit.itemssecond = esinettä/sekunti +unit.liquidunits = neste yksikköä +unit.powerunits = energia yksikköä +unit.degrees = astetta +unit.seconds = sekunttia +unit.persecond = /s +unit.timesspeed = x nopeus unit.percent = % -unit.items = items -unit.thousands = k +unit.items = esinettä +unit.thousands = t unit.millions = mil -category.general = General -category.power = Power -category.liquids = Liquids -category.items = Items -category.crafting = Input/Output -category.shooting = Shooting -category.optional = Optional Enhancements -setting.landscape.name = Lock Landscape -setting.shadows.name = Shadows -setting.blockreplace.name = Automatic Block Suggestions -setting.linear.name = Linear Filtering -setting.hints.name = Hints -setting.buildautopause.name = Auto-Pause Building -setting.animatedwater.name = Animated Water -setting.animatedshields.name = Animated Shields -setting.antialias.name = Antialias[lightgray] (requires restart)[] -setting.indicators.name = Enemy/Ally Indicators -setting.autotarget.name = Auto-Target -setting.keyboard.name = Mouse+Keyboard Controls -setting.touchscreen.name = Touchscreen Controls -setting.fpscap.name = Max FPS -setting.fpscap.none = None +category.general = Yleinen +category.power = Energia +category.liquids = Neste +category.items = Tavarat +category.crafting = Ulos/Sisääntulo +category.shooting = Ammunta +category.optional = Mahdolliset Lumoukset +setting.landscape.name = Lukitse tasavaakaan +setting.shadows.name = Varjot +setting.blockreplace.name = Automaattisia Palikka Suosituksia +setting.linear.name = Lineararien Filteeraus +setting.hints.name = Vihjeet +setting.buildautopause.name = Automaattisest Pysäytä Rakentaessa +setting.animatedwater.name = Animoitu Vesi +setting.animatedshields.name = Animoitu Kilpi +setting.antialias.name = Antialiaasi[lightgray] (vaatii uudelleenkäynnistyksen)[] +setting.indicators.name = Vihollis/Puolulais Indikaattorit +setting.autotarget.name = Automaatinen Tähtäys +setting.keyboard.name = Hiiri+Näppäimistö Kontrollit +setting.touchscreen.name = Kosketusnäyttö kontrollit +setting.fpscap.name = Maksimi FPS +setting.fpscap.none = Ei Mitään setting.fpscap.text = {0} FPS -setting.uiscale.name = UI Scaling[lightgray] (require restart)[] -setting.swapdiagonal.name = Always Diagonal Placement -setting.difficulty.training = Training -setting.difficulty.easy = Easy -setting.difficulty.normal = Normal -setting.difficulty.hard = Hard -setting.difficulty.insane = Insane -setting.difficulty.name = Difficulty: -setting.screenshake.name = Screen Shake -setting.effects.name = Display Effects -setting.destroyedblocks.name = Display Destroyed Blocks +setting.uiscale.name = UI Koko[lightgray] (vaatii uudelleenkäynnistyksen)[] +setting.swapdiagonal.name = Aina Vino Korvaus +setting.difficulty.training = Treeni +setting.difficulty.easy = Helppo +setting.difficulty.normal = Keskivaikea +setting.difficulty.hard = Haastava +setting.difficulty.insane = Järjetön +setting.difficulty.name = Vaikeustaso: +setting.screenshake.name = Näytön keikkuminen +setting.effects.name = Naytön Efektit +setting.destroyedblocks.name = Näytä Tuhoutuneet Palikat setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.coreselect.name = Allow Schematic Cores -setting.sensitivity.name = Controller Sensitivity -setting.saveinterval.name = Save Interval -setting.seconds = {0} Seconds +setting.sensitivity.name = Kontrollin Herkkyys +setting.saveinterval.name = Tallennuksen Aikaväli +setting.seconds = {0} Sekunttia setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds +setting.milliseconds = {0} millisekunttia setting.fullscreen.name = Fullscreen -setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) -setting.fps.name = Show FPS -setting.blockselectkeys.name = Show Block Select Keys +setting.borderlesswindow.name = Borderless Window[lightgray] (vaatii uudelleenkäynnistyksen) +setting.fps.name = Näytä FPS +setting.blockselectkeys.name = Bäytä Palikan Selektio Kontrollit setting.vsync.name = VSync -setting.pixelate.name = Pixelate[lightgray] (disables animations) -setting.minimap.name = Show Minimap -setting.position.name = Show Player Position -setting.musicvol.name = Music Volume -setting.ambientvol.name = Ambient Volume -setting.mutemusic.name = Mute Music -setting.sfxvol.name = SFX Volume -setting.mutesound.name = Mute Sound +setting.pixelate.name = Pixeloi[lightgray] (poistaa animaation käytöstä) +setting.minimap.name = Näytä Minimappi +setting.position.name = Näytä pelaajan sijainti +setting.musicvol.name = Musiikin Äänenvoimakkuus +setting.ambientvol.name = Tausta Äänet +setting.mutemusic.name = Sulje Musiikki +setting.sfxvol.name = SFX Volyymi +setting.mutesound.name = Sulje Äänet setting.crashreport.name = Send Anonymous Crash Reports -setting.savecreate.name = Auto-Create Saves +setting.savecreate.name = Luo Automaattisesti Tallennukset setting.publichost.name = Public Game Visibility -setting.chatopacity.name = Chat Opacity -setting.lasersopacity.name = Power Laser Opacity -setting.playerchat.name = Display In-Game Chat +setting.chatopacity.name = Chatin Läpinäkymättömyys +setting.lasersopacity.name = Energia Laaserin Läpinäkymattämyys +setting.playerchat.name = Näytä Pelinsisäinen Keskustelu public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. public.beta = Note that beta versions of the game cannot make public lobbies. uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... -uiscale.cancel = Cancel & Exit +uiscale.cancel = Peruuta ja Poistu setting.bloom.name = Bloom keybind.title = Rebind Keys keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = View category.multiplayer.name = Multiplayer -command.attack = Attack -command.rally = Rally -command.retreat = Retreat +command.attack = Hyökkää +command.rally = Kutsu Koolle +command.retreat = Palaa placement.blockselectkeys = \n[lightgray]Key: [{0}, keybind.clear_building.name = Clear Building keybind.press = Press a key... @@ -692,7 +692,7 @@ keybind.move_y.name = Move y keybind.mouse_move.name = Follow Mouse keybind.dash.name = Dash keybind.schematic_select.name = Select Region -keybind.schematic_menu.name = Schematic Menu +keybind.schematic_menu.name = Kaavio Valikko keybind.schematic_flip_x.name = Flip Schematic X keybind.schematic_flip_y.name = Flip Schematic Y keybind.category_prev.name = Previous Category @@ -711,7 +711,7 @@ keybind.block_select_07.name = Category/Block Select 7 keybind.block_select_08.name = Category/Block Select 8 keybind.block_select_09.name = Category/Block Select 9 keybind.block_select_10.name = Category/Block Select 10 -keybind.fullscreen.name = Toggle Fullscreen +keybind.fullscreen.name = Vaihda Fullscreen keybind.select.name = Select/Shoot keybind.diagonal_placement.name = Diagonal Placement keybind.pick.name = Pick Block @@ -722,8 +722,8 @@ keybind.zoom.name = Zoom keybind.menu.name = Menu keybind.pause.name = Pause keybind.pause_building.name = Pause/Resume Building -keybind.minimap.name = Minimap -keybind.chat.name = Chat +keybind.minimap.name = Minimappi +keybind.chat.name = Chatti keybind.player_list.name = Player list keybind.console.name = Console keybind.rotate.name = Rotate @@ -736,20 +736,20 @@ keybind.drop_unit.name = Drop Unit keybind.zoom_minimap.name = Zoom minimap mode.help.title = Description of modes mode.survival.name = Survival -mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play. -mode.sandbox.name = Sandbox -mode.sandbox.description = Infinite resources and no timer for waves. -mode.editor.name = Editor +mode.survival.description = Normaali moodi. Rajoitettu määrä resursseja ja tasoilla on aika.\n[gray]Vaatii vihollis spawneja kartassa. +mode.sandbox.name = Hiekkalaatikko +mode.sandbox.description = Ikuisesti resursseja ja tasoilla ei ole aikaa. +mode.editor.name = Editori mode.pvp.name = PvP mode.pvp.description = Fight against other players locally.\n[gray]Requires at least 2 differently-colored cores in the map to play. mode.attack.name = Attack mode.attack.description = Destroy the enemy's base. No waves.\n[gray]Requires a red core in the map to play. mode.custom = Custom Rules -rules.infiniteresources = Infinite Resources -rules.reactorexplosions = Reactor Explosions -rules.wavetimer = Wave Timer -rules.waves = Waves +rules.infiniteresources = Ikuisesti Resursseja +rules.reactorexplosions = Reaktori Räjähdykset +rules.wavetimer = Tasojen Aikaraja +rules.waves = Tasot rules.attack = Attack Mode rules.enemyCheat = Infinite AI (Red Team) Resources rules.unitdrops = Unit Drops @@ -778,31 +778,31 @@ rules.title.experimental = Experimental rules.lighting = Lighting rules.ambientlight = Ambient Light -content.item.name = Items -content.liquid.name = Liquids -content.unit.name = Units -content.block.name = Blocks -content.mech.name = Mechs -item.copper.name = Copper -item.lead.name = Lead -item.coal.name = Coal -item.graphite.name = Graphite -item.titanium.name = Titanium -item.thorium.name = Thorium -item.silicon.name = Silicon -item.plastanium.name = Plastanium -item.phase-fabric.name = Phase Fabric -item.surge-alloy.name = Surge Alloy -item.spore-pod.name = Spore Pod +content.item.name = Tavarat +content.liquid.name = Nesteet +content.unit.name = Yksiköt +content.block.name = Palikat +content.mech.name = Yksikkö +item.copper.name = Kupari +item.lead.name = Lyijy +item.coal.name = Hiili +item.graphite.name = Grafiitti +item.titanium.name = Titaani +item.thorium.name = Torium +item.silicon.name = Pii +item.plastanium.name = Plastaniumi +item.phase-fabric.name = Kiihde Kuitu +item.surge-alloy.name = Taite Seos +item.spore-pod.name = Itiö Palko item.sand.name = Hiekka -item.blast-compound.name = Blast Compound -item.pyratite.name = Pyratite -item.metaglass.name = Metaglass -item.scrap.name = Scrap +item.blast-compound.name = Räjähde Yhdiste +item.pyratite.name = Pyratiitti +item.metaglass.name = Metallilasi +item.scrap.name = Romu liquid.water.name = Vesi -liquid.slag.name = Slag -liquid.oil.name = Oil -liquid.cryofluid.name = Cryofluid +liquid.slag.name = Kuona +liquid.oil.name = Öljy +liquid.cryofluid.name = Kryoneste mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Heavy Repeater mech.alpha-mech.ability = Regeneration @@ -824,22 +824,22 @@ mech.trident-ship.name = Trident mech.trident-ship.weapon = Bomb Bay mech.glaive-ship.name = Glaive mech.glaive-ship.weapon = Flame Repeater -item.corestorable = [lightgray]Storable in Core: {0} -item.explosiveness = [lightgray]Explosiveness: {0}% +item.corestorable = [lightgray]Säilöttävissä Ytimeen: {0} +item.explosiveness = [lightgray]Räjädysmäisyys: {0}% item.flammability = [lightgray]Flammability: {0}% item.radioactivity = [lightgray]Radioactivity: {0}% -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Speed: {0} -mech.weapon = [lightgray]Weapon: {0} -mech.health = [lightgray]Health: {0} -mech.itemcapacity = [lightgray]Item Capacity: {0} -mech.minespeed = [lightgray]Mining Speed: {0}% -mech.minepower = [lightgray]Mining Power: {0} -mech.ability = [lightgray]Ability: {0} -mech.buildspeed = [lightgray]Building Speed: {0}% -liquid.heatcapacity = [lightgray]Heat Capacity: {0} -liquid.viscosity = [lightgray]Viscosity: {0} -liquid.temperature = [lightgray]Temperature: {0} +unit.health = [lightgray]Elämäpisteet: {0} +unit.speed = [lightgray]Nopeus: {0} +mech.weapon = [lightgray]Ase: {0} +mech.health = [lightgray]Elämäpisteet: {0} +mech.itemcapacity = [lightgray]Tavara Kapasiteetti: {0} +mech.minespeed = [lightgray]Louhimis Nopeus: {0}% +mech.minepower = [lightgray]Louhimis Voima: {0} +mech.ability = [lightgray]Spesiaalikyky: {0} +mech.buildspeed = [lightgray]Rakennus Nopeus: {0}% +liquid.heatcapacity = [lightgray]Lämpö Kapasiteetti: {0} +liquid.viscosity = [lightgray]Tahmeus: {0} +liquid.temperature = [lightgray]Lämpö: {0} block.sand-boulder.name = Sand Boulder block.grass.name = Grass @@ -865,24 +865,24 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.graphite-press.name = Graphite Press -block.multi-press.name = Multi-Press -block.constructing = {0} [lightgray](Constructing) -block.spawn.name = Enemy Spawn -block.core-shard.name = Core: Shard -block.core-foundation.name = Core: Foundation -block.core-nucleus.name = Core: Nucleus -block.deepwater.name = Deep Water -block.water.name = Water -block.tainted-water.name = Tainted Water +block.graphite-press.name = Grafiitti Puristin +block.multi-press.name = Multi-Puristin +block.constructing = {0} [lightgray](Rakentamassa) +block.spawn.name = Vihollis Spawni +block.core-shard.name = Ydin: Siru +block.core-foundation.name = Ydin: Pohjaus +block.core-nucleus.name = Ydin: Tuma +block.deepwater.name = Syvä Vesi +block.water.name = Vesi +block.tainted-water.name = Pilattu Vesi block.darksand-tainted-water.name = Dark Sand Tainted Water -block.tar.name = Tar -block.stone.name = Stone -block.sand.name = Sand -block.darksand.name = Dark Sand -block.ice.name = Ice -block.snow.name = Snow -block.craters.name = Craters +block.tar.name = Terva +block.stone.name = Kivi +block.sand.name = Hiekka +block.darksand.name = Tumma Hiekka +block.ice.name = Jää +block.snow.name = Lumi +block.craters.name = Kraatterit block.sand-water.name = Sand water block.darksand-water.name = Dark Sand Water block.char.name = Char diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 5e9baad124..fd746bb659 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -33,14 +33,14 @@ be.update = Una nuova build Bleeding Edge è disponibile: be.update.confirm = Vuoi scaricarla e riavviare il gioco adesso? be.updating = Aggiornamento in corso... be.ignore = Ignora -be.noupdates = Nessun aggiornamento trovato. +be.noupdates = Nessun aggiornamento disponibile. be.check = Verifica aggiornamenti schematic = Schematica schematic.add = Salva Schematica... schematics = Schematiche schematic.replace = Una schematica con questo nome esiste già. Sostituirla? -schematic.import = Importa schematica... +schematic.import = Importa schematica schematic.exportfile = Esporta File schematic.importfile = Importa File schematic.browseworkshop = Naviga nel Workshop @@ -79,7 +79,7 @@ newgame = Nuova partita none = minimap = Minimappa position = Posizione -close = Chiuso +close = Chiudi website = Sito Web quit = Esci save.quit = Salva ed Esci @@ -138,7 +138,7 @@ research.list = [lightgray]Ricerca: research = Ricerca researched = [lightgray]{0} cercati. players = {0} giocatori online -players.single = {0} giocatori online +players.single = {0} giocatore online server.closing = [accent]Chiusura server... server.kicked.kick = Sei stato cacciato dal server! server.kicked.whitelist = Non sei presente nella whitelist. @@ -157,7 +157,7 @@ server.kicked.customClient = Questo server non supporta i client personalizzati. server.kicked.gameover = Game over! server.kicked.serverRestarting = Il server si sta riavviando. server.versions = Versione client:[accent] {0}[]\nVersione server:[accent] {1}[] -host.info = Il pulsante [accent]Ospita[] ospita un server sulla porta [scarlet]6567[].[] Chiunque sulla stessa [lightgray]rete Wi-Fi o locale[] dovrebbe essere in grado di vedere il server nell'elenco server.\nSe vuoi che le persone siano in grado di connettersi ovunque tramite il tuo IP, è richiesto il [accent]port forwarding[].\n\n[lightgray]Nota: se qualcuno sta riscontrando problemi durante la connessione al gioco LAN, assicurati di aver consentito a Mindustry di accedere alla rete locale nelle impostazioni del firewall. +host.info = Il pulsante [accent]Ospita[] ospita un server sulla porta [scarlet]6567[].[] Chiunque sulla stessa [lightgray]rete Wi-Fi o locale[] dovrebbe essere in grado di vedere il server nell'elenco server.\nSe vuoi che le persone siano in grado di connettersi ovunque tramite il tuo IP, è necessario eseguire il [accent]port forwarding[].\n\n[lightgray]Nota: se qualcuno sta riscontrando problemi durante la connessione al gioco LAN, assicurati di aver consentito a Mindustry di accedere alla rete locale nelle impostazioni del firewall. join.info = Qui è possibile inserire l'[accent]IP del server[] a cui connettersi, o scoprire [accent]un server sulla rete locale[] disponibile.\nSono supportati sia il multiplayer LAN che WAN.\n\n[lightgray]Nota: non esiste un elenco automatico dei server globali; se desideri connetterti a qualcuno tramite il suo IP, è necessario chiedere all'host il proprio IP. hostserver = Ospita Server invitefriends = Invita Amici @@ -251,6 +251,7 @@ copylink = Copia link back = Indietro data.export = Esporta Salvataggio data.import = Importa Salvataggio +data.openfolder = Apri Cartella\nSalvataggi data.exported = Dati esportati. data.invalid = Questi non sono dati di gioco validi. data.import.confirm = Importare dati di gioco esterni sovrascriverà[scarlet] tutti[] i tuoi progressi attuali.\n[accent]L'operazione è irreversibile![]\n\nUna volta importati i dati, il gioco si chiuderà immediatamente. @@ -263,7 +264,7 @@ reloading = [accent]Ricaricamento delle mods... saving = [accent]Salvataggio in corso... cancelbuilding = [accent][[{0}][] per pulire la selezione selectschematic = [accent][[{0}][] per selezionare+copiare -pausebuilding = [accent][[{0}][] to pause building +pausebuilding = [accent][[{0}][] per smettere di costruire resumebuilding = [scarlet][[{0}][] per riprendere a costruire wave = [accent]Ondata {0} wave.waiting = [lightgray]Ondata tra {0} @@ -464,7 +465,7 @@ zone.resources = [lightgray]Risorse Trovate: zone.objective = [lightgray]Obiettivo: [accent]{0} zone.objective.survival = Sopravvivere zone.objective.attack = Distruggere il Nucleo Nemico -add = Aggiungi... +add = Aggiungi boss.health = Vita del Boss connectfail = [crimson]Impossibile connettersi al server:\n\n[accent] {0} @@ -531,6 +532,8 @@ error.crashtitle = Si è verificato un errore blocks.input = Ingresso blocks.output = Uscita blocks.booster = Potenziamenti +blocks.tiles = Blocchi Richiesti +blocks.affinities = Affinità block.unknown = [lightgray]??? blocks.powercapacity = Capacità Energetica blocks.powershot = Danno/Colpo @@ -642,7 +645,7 @@ setting.difficulty.name = Difficoltà: setting.screenshake.name = Movimento dello Schermo setting.effects.name = Visualizza Effetti setting.destroyedblocks.name = Mostra Blocchi Distrutti -setting.conveyorpathfinding.name = Conveyor Placement Pathfinding +setting.conveyorpathfinding.name = Posizionamento Nastri Trasportatori Intelligente setting.coreselect.name = Consenti Schematiche dei Nuclei setting.sensitivity.name = Sensibilità del Controller setting.saveinterval.name = Intervallo di Salvataggio Automatico @@ -666,8 +669,9 @@ setting.crashreport.name = Invia rapporti anonimi sugli arresti anomali setting.savecreate.name = Salvataggio Automatico setting.publichost.name = Gioco Visibile Pubblicamente setting.chatopacity.name = Opacità Chat -setting.lasersopacity.name = Opacità Laser d'Energia -setting.playerchat.name = Mostra Chat in-game +setting.lasersopacity.name = Opacità Raggi Energetici +setting.bridgeopacity.name = Opacità Nastri e Condotti Sopraelevati +setting.playerchat.name = Mostra Chat public.confirm = Vuoi rendere la tua partita pubblica?\n[accent]Chiunque sarà in grado di accedere alle tue partite.\n[lightgray]Questo può essere modificato più tardi in Impostazioni->Gioco->Partite Pubbliche. public.beta = Nota che le versioni beta del gioco non possono creare lobby pubbliche. uiscale.reset = La scala dell'interfaccia utente è stata modificata.\nPremere 'OK' per confermare questa scala.\n[scarlet]Ripristina ed esci in [accent] {0}[] secondi... @@ -932,7 +936,6 @@ block.lancer.name = Lanciere block.conveyor.name = Nastro Trasportatore block.titanium-conveyor.name = Nastro Avanzato block.armored-conveyor.name = Nastro Corazzato -block.armored-conveyor.description = Trasporta gli oggetti alla stessa velocità del nastro avanzato, ma è più resistente. Accetta input dai lati solo da altri nastri. block.junction.name = Incrocio block.router.name = Distributore block.distributor.name = Distributore Grande @@ -942,6 +945,7 @@ block.message.name = Messaggio block.illuminator.name = Lanterna block.illuminator.description = Una piccola, compatta sorgente di luce. Richiede energia per funzionare. block.overflow-gate.name = Separatore per Eccesso +block.underflow-gate.name = Separatore per Eccesso Inverso block.silicon-smelter.name = Fonderia block.phase-weaver.name = Tessitore di Fase block.pulverizer.name = Polverizzatore @@ -1137,12 +1141,12 @@ block.spore-press.description = Comprime le spore in petrolio. block.pulverizer.description = Polverizza la pietra.\nUtile quando manca la sabbia naturale. block.coal-centrifuge.description = Solidifica il petrolio in pezzi di carbone. block.incinerator.description = Elimina qualsiasi oggetto o liquido in eccesso. -block.power-void.description = Elimina tutta l'energia che riceve, esiste solo nella modalità creativa. -block.power-source.description = Produce energia infinita, esiste solo nella modalità creativa. -block.item-source.description = Produce oggetti infiniti, esiste solo nella modalità creativa. -block.item-void.description = Elimina gli oggetti che vi entrano senza bisogno di energia, esiste solo nella modalità creativa. +block.power-void.description = Elimina tutta l'energia che riceve. Esiste solo nella modalità creativa. +block.power-source.description = Produce energia infinita. Esiste solo nella modalità creativa. +block.item-source.description = Produce oggetti infiniti. Esiste solo nella modalità creativa. +block.item-void.description = Elimina gli oggetti che vi entrano senza bisogno di energia. Esiste solo nella modalità creativa. block.liquid-source.description = Emette continuamente liquidi. Esiste solo nella modalità creativa. -block.liquid-void.description = Elimina i liquidi in entrata, esiste solo nella modalità creativa. +block.liquid-void.description = Elimina i liquidi in entrata. Esiste solo nella modalità creativa. block.copper-wall.description = Un blocco difensivo economico.\nUtile per proteggere il Nucleo e le torrette nelle prime ondate. block.copper-wall-large.description = Un blocco difensivo economico.\nUtile per proteggere il Nucleo e le torrette nelle prime ondate.\nOccupa più blocchi. block.titanium-wall.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici. @@ -1162,17 +1166,19 @@ block.mend-projector.description = Ripara periodicamente blocchi nelle vicinanze block.overdrive-projector.description = Aumenta la velocità di edifici vicini come trivelle e nastri trasportatori. block.force-projector.description = Crea un campo di forza esagonale attorno a sé, proteggendo gli edifici e le unità all'interno da danni causati da proiettili. block.shock-mine.description = Danneggia i nemici che la calpestano. Quasi invisibile al nemico. -block.conveyor.description = Nastro di base. Sposta gli oggetti in avanti e li deposita automaticamente in altri blocchi. Ruotabile. +block.conveyor.description = Nastro di base. Sposta gli oggetti in avanti e li deposita automaticamente in altri blocchi. È rotabile. block.titanium-conveyor.description = Nastro avanzato. Sposta gli oggetti più velocemente dei nastri standard. +block.armored-conveyor.description = Trasporta gli oggetti alla stessa velocità del nastro avanzato, ma è più resistente. Accetta input dai lati solo da altri nastri. block.junction.description = Permette di incrociare nastri che trasportano materiali diversi in posizioni diverse. block.bridge-conveyor.description = Consente il trasporto di oggetti fino a 3 blocchi ad un altro nastro sopraelevato.\nPuò passare sopra ad altri blocchi od edifici. block.phase-conveyor.description = Nastro avanzato. Consuma energia per teletrasportare gli oggetti su un altro nastro di fase collegato. block.sorter.description = Divide gli oggetti. Se l'oggetto corrisponde a quello selezionato, Può passare. Altrimenti viene espulso sui lati. -block.inverted-sorter.description = Elabora gli oggetti come uno smistatore standard, ma in uscita dà gli elementi selezionati ai lati. +block.inverted-sorter.description = Elabora gli oggetti come uno filtro standard, ma in uscita dà gli elementi selezionati ai lati. block.router.description = Accetta gli elementi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Utile per suddividere i materiali da una fonte a più destinazioni. block.distributor.description = Un distributore avanzato che divide gli oggetti in altre 7 direzioni allo stesso modo. -block.overflow-gate.description = Una combinazione di un incrocio e di un distributore, che distribuisce sui suoi lati se in nastro difronte si satura. -block.mass-driver.description = Ultimo blocco di trasporto di oggetti. Raccoglie diversi oggetti e poi li spara su un'altra Lìlancia materiali a lungo raggio. +block.overflow-gate.description = Distribuisce gli oggetti ai lati se il nastro davanti a sé è saturo. +block.underflow-gate.description = L'opposto di un separatore per eccesso. Distribuisce gli oggetti nel nastro davanti a sé se i nastri a destra e a sinistra sono saturi. +block.mass-driver.description = Ultimo blocco di trasporto di oggetti. Raccoglie diversi oggetti e poi li spara su un'altra lancia materiali a lungo raggio. block.mechanical-pump.description = Una pompa economica a bassa efficienza, ma nessun consumo di energia. block.rotary-pump.description = Una pompa avanzata che raddoppia la velocità consumando energia. block.thermal-pump.description = La pompa migliore. Tre volte più veloce di una pompa meccanica e l'unica pompa in grado di recuperare la lava. diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index d2d9b54b9a..28efe4d483 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -29,12 +29,12 @@ load.system = 시스템 load.mod = 모드 load.scripts = 스크립트 -be.update = A new Bleeding Edge build is available: -be.update.confirm = Download it and restart now? -be.updating = Updating... -be.ignore = Ignore -be.noupdates = No updates found. -be.check = Check for updates +be.update = 새로운 블리딩 엣지 버전이 출시되었습니다. +be.update.confirm = 다운로드 후 게임을 재시작하시겠습니까? +be.updating = 업데이트 중... +be.ignore = 무시 +be.noupdates = 새로운 업데이트가 발견되지 않았습니다. +be.check = 업데이트 확인 schematic = 설계도 schematic.add = 설계도 저장하기 @@ -98,15 +98,15 @@ done = 완료 feature.unsupported = 당신의 기기는 이 기능을 지원하지 않습니다. mods.alphainfo = 현재의 모드는 첫 번째 시도이며, 그리고[scarlet] 버그가 매우 많음을 명심하십시오[].\n만약 버그를 발견할경우 Mindustry 깃허브 또는 디스코드로 제보해주세요. -mods.alpha = [scarlet](Alpha) +mods.alpha=[accent](시험적 기능) mods = 모드 mods.none = [LIGHT_GRAY]추가한 모드가 없습니다! mods.guide = 모드 가이드 mods.report = 문제 신고 mods.openfolder = 모드 폴더 열기 -mod.enabled = [lightgray]활성화 -mod.disabled = [scarlet]비활성화 -mod.disable = 비활성화 +mod.enabled=[blue]활성화 +mod.disabled=[scarlet]적용 안됨 +mod.disable=[lightgray]비활성화 mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다. mod.requiresversion = [scarlet]게임의 버전이 낮아 모드를 활성화할 수 없습니다!\n[scarlet]요구되는 게임 버전 : [accent]{0} mod.missingdependencies = [scarlet]의존되는 모드: {0} @@ -114,7 +114,7 @@ mod.erroredcontent = [scarlet]컨텐츠 오류 mod.errors = 컨텐츠를 불러오는 중 오류가 발생하였습니다. mod.noerrorplay = [scarlet]모드에 오류가 존재합니다.[] 해당 오류가 발생하는 모드를 비활성화하거나 모드의 오류를 고친 후 플레이가 가능합니다. mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 : [accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다. -mod.enable = 활성화 +mod.enable=활성화 mod.requiresrestart = 모드 변경사항을 적용하기 위해 게임을 종료합니다. mod.reloadrequired = [scarlet]새로고침 예정됨 mod.import = 모드 추가 @@ -123,8 +123,8 @@ mod.item.remove = 이것은 모드[accent] '{0}'[]의 자원입니다. 이 자 mod.remove.confirm = 이 모드를 삭제하시겠습니까? mod.author = [LIGHT_GRAY]제작자 : [] {0} mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 현재 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0} -mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요. -mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오. +mod.preview.missing=Workshop에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요. +mod.folder.missing=Workshop에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오. mod.scripts.unsupported = 당신의 기기는 모드스크립트를 지원하지 않습니다. 모드의 일부 기능이 작동하지 않을 수 있습니다. about.button = 정보 @@ -155,10 +155,10 @@ server.kicked.nameEmpty = 당신의 닉네임이 비어있습니다. server.kicked.idInUse = 이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다. server.kicked.customClient = 이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요. server.kicked.gameover = 코어가 파괴되었습니다... -server.kicked.serverRestarting = The server is restarting. +server.kicked.serverRestarting = 서버가 재시작합니다. server.versions = 클라이언트 버전 : [accent] {0}[]\n서버 버전 : [accent] {1}[] host.info = [accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHT_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 하시거나 VPN을 사용하셔야 합니다.\n\n[LIGHT_GRAY]참고: LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인해주세요. -join.info = 여기서 서버 추가를 누르신 후, [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원합니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속하려면 직접 서버 주소를 찾아서 적으셔야합니다.[]\n\n[ROYAL]한국의 서버로는 [accent]mindustry.kr[]의 6567, 6568포트와 [accent]server1.mindustry.r-e.kr[]의 8000, 8002 포트가 있습니다.\n서버 주소 입력방법은 < 주소:포트 >의 형식입니다.\n[royal]포트가 없을 시에는 그냥 주소만 입력하시면 됩니다.\n\n[royal]예시) mindustry.kr의 6567포트\nmindustry.kr:6567\n포트가 6567일 경우에는 :6567을 생략할 수 있습니다. +join.info = 여기서 서버 추가를 누르신 후, [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원합니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속하려면 직접 서버 주소를 찾아서 적으셔야합니다.[]\n\n[ROYAL]한국의 서버로는 [accent]mindustry.kr[]가 있습니다.\n서버 주소 입력방법은 < 주소:포트 >의 형식입니다.\n[royal]포트가 없을 시에는 그냥 주소만 입력하시면 됩니다.\n\n[royal]예시) mindustry.kr의 6567포트\nmindustry.kr:6567\n포트가 6567일 경우에는 :6567을 생략할 수 있습니다. hostserver = 서버 열기 invitefriends = 친구 초대 hostserver.mobile = 서버\n열기 @@ -240,8 +240,8 @@ save.playtime = 플레이타임 : {0} warning = 경고. confirm = 확인 delete = 삭제 -view.workshop = 워크샵에서 보기 -workshop.listing = 워크샵 목록 편집하기 +view.workshop=Workshop에서 보기 +workshop.listing=Workshop 목록 편집하기 ok = 확인 open = 열기 customize = 맞춤설정 @@ -310,7 +310,7 @@ editor.generation = 맵 생성 설정 : editor.ingame = 인게임 편집 editor.publish.workshop = 워크샵 업로드 editor.newmap = 신규 맵 -workshop = 워크샵 +workshop=Workshop waves.title = 단계 waves.remove = 삭제 waves.never = 여기까지 유닛생성 @@ -377,15 +377,15 @@ toolmode.replace = 재배치 toolmode.replace.description = 블록을 배치합니다. toolmode.replaceall = 모두 재배치 toolmode.replaceall.description = 맵에 있는 모든 블록을 재배치합니다. -toolmode.orthogonal = 직교 -toolmode.orthogonal.description = 직교로 블록을 배치합니다. +toolmode.orthogonal=직각 +toolmode.orthogonal.description=직각으로 블록을 배치합니다. toolmode.square = 정사각형 toolmode.square.description = 정사각형 형태의 브러시. toolmode.eraseores = 자원 초기화 toolmode.eraseores.description = 자원만 초기화합니다. toolmode.fillteams = 팀 채우기 toolmode.fillteams.description = 블록 대신 팀 건물로 채웁니다. -toolmode.drawteams = 팀 그리기 +toolmode.drawteams=팀 색상으로 그리기 toolmode.drawteams.description = 블록 대신 팀 건물을 배치합니다. filters.empty = [LIGHT_GRAY]필터가 없습니다!! 아래 버튼을 눌러 추가하세요. @@ -580,7 +580,7 @@ bar.power = 전력 bar.progress = 생산 진행도 bar.spawned = 최대 {1}기 중 {0}기 생산됨 bar.input = 입력 -bar.output = Output +bar.output = bullet.damage = [lightgray]피해량 : [stat]{0}[] bullet.splashdamage = [lightgray]범위 피해량 : [stat]{0}[] / [lightgray]피해 범위 : [stat]{1}[lightgray] 타일 @@ -643,7 +643,7 @@ setting.screenshake.name = 화면 흔들기 setting.effects.name = 화면 효과 setting.destroyedblocks.name = 부서진 블럭 표시 setting.conveyorpathfinding.name = 교차기 자동 설치 -setting.coreselect.name = Allow Schematic Cores +setting.coreselect.name = Schematic Cores 켜기 setting.sensitivity.name = 컨트롤러 감도 setting.saveinterval.name = 저장 간격 setting.seconds = {0} 초 @@ -690,7 +690,7 @@ keybind.toggle_power_lines.name = 전력 라인 허용 keybind.move_x.name = 오른쪽 / 왼쪽 이동 keybind.move_y.name = 위 / 아래 이동 keybind.mouse_move.name = 커서를 따라서 이동 -keybind.dash.name = 달리기 +keybind.dash.name = 부스터 keybind.schematic_select.name = 영역 설정 keybind.schematic_menu.name = 설계도 메뉴 keybind.schematic_flip_x.name = 설계도 X축 뒤집기 @@ -755,7 +755,7 @@ rules.enemyCheat = 무한한 적 자원 rules.unitdrops = 유닛 처치시 자원 약탈 rules.unitbuildspeedmultiplier = 유닛 제조속도 배수 rules.unithealthmultiplier = 유닛 체력 배수 -rules.blockhealthmultiplier = Block Health Multiplier +rules.blockhealthmultiplier = 건물 체력 배수 rules.playerhealthmultiplier = 플레이어 체력 배수 rules.playerdamagemultiplier = 플레이어 공격력 배수 rules.unitdamagemultiplier = 유닛 공격력 배수 @@ -978,7 +978,6 @@ block.mechanical-pump.name = 기계식 펌프 block.item-source.name = 아이템 소스 block.item-void.name = 아이템 삭제 장치 block.liquid-source.name = 무한 액체공급 장치 -block.liquid-void.name = Liquid Void block.power-void.name = 방전장치 block.power-source.name = 무한 전력공급 장치 block.unloader.name = 언로더 @@ -1142,7 +1141,6 @@ block.power-source.description = 무한한 전력을 공급해주는 블록입 block.item-source.description = 자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다.\n샌드박스에서만 건설가능. block.item-void.description = 자원을 사라지게 만듭니다.\n샌드박스에서만 건설가능. block.liquid-source.description = 무한한 액체를 출력합니다.\n샌드박스에서만 건설가능. -block.liquid-void.description = Removes any liquids. Sandbox only. block.copper-wall.description = 게임 시작 초기에 방어용으로 적합합니다. block.copper-wall-large.description = 구리 벽 4개를 뭉친 블럭입니다. block.titanium-wall.description = 흑연이 생산될 즈음에 사용하기 적합합니다. diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index 1375245580..f845f98200 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -12,7 +12,7 @@ link.itch.io.description = Pagina da Itch.io com os Descarregamentos link.google-play.description = Listamento do google play store link.f-droid.description = F-Droid catalogue listing link.wiki.description = Wiki oficial do Mindustry -link.feathub.description = Suggest new features +link.feathub.description = Sugerir novas funcionalidades linkfail = Falha ao abrir a ligação\nO Url foi copiado screenshot = Screenshot gravado para {0} screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura. @@ -29,12 +29,12 @@ load.system = Sistema load.mod = Mods load.scripts = Scripts -be.update = A new Bleeding Edge build is available: -be.update.confirm = Download it and restart now? -be.updating = Updating... -be.ignore = Ignore -be.noupdates = No updates found. -be.check = Check for updates +be.update = Uma nova versão do Bleeding Edge está disponível: +be.update.confirm = Transferir e reiniciar agora? +be.updating = A atualizar... +be.ignore = Ignora +be.noupdates = Atualizações não encontradas. +be.check = A Verificar por atualizações schematic = Esquema schematic.add = Gravar Esquema... @@ -62,7 +62,7 @@ stat.delivered = Recursos lançados: stat.rank = Rank Final: [accent]{0} launcheditems = [accent]Itens lançados -launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue. +launchinfo = [unlaunched][[LAUNCH] seu núcleo para obter os itens indicados em azul. map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"? level.highscore = Melhor\npontuação: [accent] {0} level.select = Seleção de Fase @@ -108,18 +108,18 @@ mod.enabled = [lightgray]Ativado mod.disabled = [scarlet]Desativado mod.disable = Desativar mod.delete.error = Incapaz de apagar o mod. Ficheiro já em uso. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} +mod.requiresversion = [scarlet]Requer versão minima de jogo: [accent]{0} mod.missingdependencies = [scarlet]Dependências ausentes: {0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. +mod.erroredcontent = [scarlet]Erros de conteudo +mod.errors = Ocorreram erros ao carregar o conteúdo. +mod.noerrorplay = [scarlet]Tens mods com erros.[] Desative os mods afetados ou corrija os erros antes de jogar. mod.nowdisabled = [scarlet]Mod '{0}' está faltando dependências:[accent] {1}\n[lightgray]Esses mods precisam ser baixados primeiro. NEste mod será automaticamente desativado mod.enable = Ativar mod.requiresrestart = O jogo será fechado agora para aplicar as alterações no mod. -mod.reloadrequired = [scarlet]Reload Required +mod.reloadrequired = [scarlet]É necessario recarregar mod.import = Importar Mod mod.import.github = Importar Mod pelo GitHub -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.item.remove = Este item faz parte do [accent] '{0}'[] mod. Para lhe remover, desinstala o mod. mod.remove.confirm = Este mod irá ser apagado. mod.author = [LIGHT_GRAY]Autor:[] {0} mod.missing = Este save contém mods que foram recentemente atualizados ou que não estão mais instalados. Ao guardar pode ocorreu corrupção. Tem certeza de que deseja carregá-lo?\n[lightgray]Mods:\n{0} diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 35e6b5be56..1e7f44254e 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -251,6 +251,7 @@ copylink = Скопировать ссылку back = Назад data.export = Экспортировать данные data.import = Импортировать данные +data.openfolder = Открыть папку с данными data.exported = Данные экспортированы. data.invalid = Эти игровые данные являются недействительными. data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] Ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, Ваша игра немедленно закроется. @@ -531,6 +532,8 @@ error.crashtitle = Произошла ошибка blocks.input = Вход blocks.output = Выход blocks.booster = Ускоритель +blocks.tiles = Необходимые плитки +blocks.affinities = Увеличение эффективности block.unknown = [lightgray]??? blocks.powercapacity = Вместимость энергии blocks.powershot = Энергия/Выстрел @@ -607,7 +610,7 @@ unit.timesspeed = x скорость unit.percent = % unit.items = предметов unit.thousands = тыс -unit.millions = мил +unit.millions = млн category.general = Основные category.power = Энергия category.liquids = Жидкости @@ -666,7 +669,9 @@ setting.crashreport.name = Отправлять анонимные отчёты setting.savecreate.name = Автоматическое создание сохранений setting.publichost.name = Общедоступность игры setting.chatopacity.name = Непрозрачность чата +setting.playerlimit.name = Лимит игроков setting.lasersopacity.name = Непрозрачность лазеров энергоснабжения +setting.bridgeopacity.name = Непрозрачность мостов setting.playerchat.name = Отображать облака чата над игроками public.confirm = Вы хотите, чтобы Ваша игра стала публичной?\n[accent] Любой игрок сможет присоединиться к Вашем играм.\n[lightgray]Позже, это можно будет изменить в Настройки->Игра->Общедоступность игры. public.beta = Имейте в виду, что бета-версия игры не может делать игры публичными. @@ -942,6 +947,7 @@ block.message.name = Сообщение block.illuminator.name = Осветитель block.illuminator.description = Маленький, компактный, настраиваемый источник света. Требуется энергия для работы. block.overflow-gate.name = Избыточный затвор +block.underflow-gate.name = Избыточный шлюз block.silicon-smelter.name = Кремниевый плавильный завод block.phase-weaver.name = Фазовый ткач block.pulverizer.name = Измельчитель @@ -978,7 +984,7 @@ block.mechanical-pump.name = Механическая помпа block.item-source.name = Источник предметов block.item-void.name = Предметный вакуум block.liquid-source.name = Источник жидкостей -block.liquid-void.name = Liquid Void +block.liquid-void.name = Жидкостный вакуум block.power-void.name = Энергетический вакуум block.power-source.name = Источник энергии block.unloader.name = Разгрузчик @@ -1128,7 +1134,7 @@ block.kiln.description = Выплавляет песок и свинец в со block.plastanium-compressor.description = Производит пластан из нефти и титана. block.phase-weaver.description = Синтезирует фазовую ткань из радиоактивного тория и песка. Требуется огромное количество энергии для работы. block.alloy-smelter.description = Объединяет титан, свинец, кремний и медь для производства кинетического сплава. -block.cryofluidmixer.description = Смешивает воду и мелкий титановый порошок титана в криогеннную жидкость. Неотъемлемая часть при использования ториевого реактора +block.cryofluidmixer.description = Смешивает воду и мелкий титановый порошок в криогеннную жидкость. Неотъемлемая часть при использования ториевого реактора block.blast-mixer.description = Раздавливает и смешивает скопления спор с пиротитом для получения взрывчатого вещества. block.pyratite-mixer.description = Смешивает уголь, свинец и песок в легковоспламеняющийся пиротит. block.melter.description = Плавит металлолом в шлак для дальнейшей обработки или использования в турелях «Волна». @@ -1142,7 +1148,7 @@ block.power-source.description = Бесконечно выводит энерг block.item-source.description = Бесконечно выводит элементы. Только песочница. block.item-void.description = Уничтожает любые предметы. Только песочница. block.liquid-source.description = Бесконечно выводит жидкости. Только песочница. -block.liquid-void.description = Removes any liquids. Sandbox only. +block.liquid-void.description = Уничтожает любые жидкости. Только песочница. block.copper-wall.description = Дешёвый защитный блок.\nПолезен для защиты ядра и турелей в первые несколько волн. block.copper-wall-large.description = Дешёвый защитный блок.\nПолезен для защиты ядра и турелей в первые несколько волн.\nРазмещается на нескольких плитках. block.titanium-wall.description = Умеренно сильный защитный блок.\nОбеспечивает умеренную защиту от врагов. @@ -1172,6 +1178,7 @@ block.inverted-sorter.description = Работает с предметами т block.router.description = Принимает предмет в одном направлении и выводит их до 3 других направлений в равной степени. Полезен для разделения материалов из одного источника на несколько целей.\n\n[scarlet]Никогда не используйте рядом с заводами и т.п., так как маршрутизатор будет забит выходными предметами.[] block.distributor.description = Расширенный маршрутизатор. Разделяет предметы до 7 других направлений в равной степени. block.overflow-gate.description = Выводит предметы влево и вправо, только если передний путь заблокирован. +block.underflow-gate.description = Противоположность избыточного затвора. Выводит предметы вперёд только в том случае, если левый и правый пути заблокированы. block.mass-driver.description = Самый продвинутый транспортный блок. Собирает несколько предметов и затем стреляет ими в другую катапульту на большом расстоянии. Требуется энергия для работы. block.mechanical-pump.description = Дешёвый насос с низкой производительностью, но без энергопотребления. block.rotary-pump.description = Продвинутый насос. Качает больше жидкости, но требуют энергию. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index b78e537eff..3bfa58ede8 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -251,6 +251,7 @@ copylink = Скопіювати посилання back = Назад data.export = Вивантажити дані data.import = Завантажити дані +data.openfolder = Відкрити теку з даними data.exported = Дані вивантажено. data.invalid = Це не дійсні ігрові дані. data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється. @@ -587,7 +588,7 @@ bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat bullet.incendiary = [stat]запальний bullet.homing = [stat]самонаведення bullet.shock = [stat]шок -bullet.frag = [stat]осколкова граната +bullet.frag = [stat]шкода по ділянці bullet.knockback = [stat]{0}[lightgray] відкидання bullet.freezing = [stat]заморожування bullet.tarred = [stat]дьогтьовий @@ -667,6 +668,7 @@ setting.savecreate.name = Автоматичне створення збереж setting.publichost.name = Загальнодоступність гри setting.chatopacity.name = Непрозорість чату setting.lasersopacity.name = Непрозорість лазерів енергопостачання +setting.bridgeopacity.name = Місткість мостів setting.playerchat.name = Відображати хмару чата над гравцями public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[lightgray]Це можна змінити у Налаштування→Гра→Загальнодоступність гри public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри. @@ -1033,7 +1035,7 @@ block.force-projector.name = Силовий проектор block.arc.name = Дуга block.rtg-generator.name = Радіоізотопний термоелектричний генератор block.spectre.name = Спектр -block.meltdown.name = Випалювач +block.meltdown.name = Розплавитель block.container.name = Склад block.launch-pad.name = Стартовий майданчик block.launch-pad-large.name = Великий стартовий майданчик @@ -1056,7 +1058,7 @@ unit.fortress.name = Фортеця unit.revenant.name = Потойбічний вбивця unit.eruptor.name = Вивиргатель unit.chaos-array.name = Масив хаосу -unit.eradicator.name = Випалювач +unit.eradicator.name = Викорінювач unit.lich.name = Лич unit.reaper.name = Жнець tutorial.next = [lightgray]<Натисніть для продовження> @@ -1198,7 +1200,7 @@ block.rtg-generator.description = Простий, надійний генера block.solar-panel.description = Забезпечує невелику кількість енергії від сонця. block.solar-panel-large.description = Значно ефективніша версія стандартної сонячної панелі. block.thorium-reactor.description = Виробляє значну кількість енергії з торію. Вимагає постійного охолодження. Вибухне сильно, якщо подаватиметься недостатньо кількості теплоносія. Вихідна потужність залежить від повноти, базова потужність генерується на повній потужності. -block.impact-reactor.description = Удосконалений генератор, здатний створювати величезну кількість енергії при максимальній ефективності. Для швидкого запуску процесу потрібно значне введення енергії. +block.impact-reactor.description = Удосконалений генератор, здатний створювати величезну кількість енергії при максимальній ефективності. Для запуску процесу потрібно значні обсяги енергії. block.mechanical-drill.description = Недорогий бур. Розміщуючи їх на відповідних плитках, виводить предмети повільним темпом нескінченно. Здатний видобувати лише мідь, свинець і вугілля. block.pneumatic-drill.description = Вдосконалений бур, здатний добувати титан. Шахти швидше, ніж механічна дриль. block.laser-drill.description = Дозволяє виконувати свердління ще швидше за допомогою лазерної технології, але вимагає енергії. Здатний до видобутку торію. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 884ac22dd0..db38a26842 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -12,7 +12,7 @@ link.itch.io.description = itch.io 上的 PC 版下载 link.google-play.description = Google Play 页面 link.f-droid.description = F-Droid 页面 link.wiki.description = Mindustry 官方 Wiki -link.feathub.description = Suggest new features +link.feathub.description = 提出新特性的建议 linkfail = 打开链接失败!\n网址已复制到您的剪贴板。 screenshot = 屏幕截图已保存到 {0} screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 @@ -29,12 +29,13 @@ load.system = 系统加载中 load.mod = 模组加载中 load.scripts = Scripts -be.update = A new Bleeding Edge build is available: -be.update.confirm = Download it and restart now? -be.updating = Updating... -be.ignore = Ignore -be.noupdates = No updates found. -be.check = Check for updates + +be.update = 发现游戏最新版本: +be.update.confirm = 现在下载并重启游戏? +be.updating = 更新... +be.ignore = 忽略 +be.noupdates = 未发现更新。 +be.check = 检测更新 schematic = 蓝图 schematic.add = 保存蓝图… @@ -110,22 +111,22 @@ mod.disable = 禁用 mod.delete.error = 无法删除模组。可能文件被占用。 mod.requiresversion = [scarlet]所需的游戏版本:[accent]{0} mod.missingdependencies = [scarlet]缺少依赖条件:{0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. +mod.erroredcontent = [scarlet]内容(content)错误 +mod.errors = 读取内容(content)时发生错误. +mod.noerrorplay = [scarlet]你的模组发生了错误.[] 禁用相关模组或修复错误后才能进入游戏. mod.nowdisabled = [scarlet]“{0}”模组缺少依赖条件:[accent] {1}\n[lightgray]需要先下载上述模组。\n此模组现在将自动禁用。 mod.enable = 启用 mod.requiresrestart = 需要重启使模组生效。 mod.reloadrequired = [scarlet]需要重启 mod.import = 导入模组 mod.import.github = 导入 GitHub 模组 -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.item.remove = 这个物品是[accent] '{0}'[]模组的一部分. 删除物品需要先卸载此模组. mod.remove.confirm = 此模组将被删除。 mod.author = [LIGHT_GRAY]作者:[] {0} mod.missing = 此存档包含您最近已更新或者现在未安装的模组。存档可能会损坏。确定要加载它吗?\n[lightgray]模组:\n{0} mod.preview.missing = 在创意工坊中发布此模组前,您必须添加一则预览图像。\n请将名为[accent] preview.png[] 的图像放入模组文件夹,然后重试。 mod.folder.missing = 只有文件夹形式的模组能在创意工坊上发布。\n若要将任何模组转换为文件夹,只需将其文件解压缩到文件夹中并删除旧压缩包,然后重新启动游戏或重新加载模组。 -mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly. +mod.scripts.unsupported = 你的设备不支持模组脚本,一些模组可能不会正确工作。 about.button = 关于 name = 名字: @@ -155,7 +156,7 @@ server.kicked.nameEmpty = 无效的名字! server.kicked.idInUse = 你已在这个服务器上!不允许用两个账号连接。 server.kicked.customClient = 这个服务器不支持自定义版本。请下载官方版本。 server.kicked.gameover = 游戏结束! -server.kicked.serverRestarting = The server is restarting. +server.kicked.serverRestarting = 服务器正在重启. server.versions = 客户端版本:[accent] {0}[]\n服务器版本:[accent] {1}[] host.info = [accent]创建局域网游戏[]按钮会在[scarlet] 6567 []端口运行一个服务器。[]\n任何在同一个[lightgray] Wi-Fi 或本地网络[]下的人应该都可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过 IP 地址连接,你需要设定[accent]端口转发[]。\n\n[lightgray]注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了 Mindustry 访问本地网络。 join.info = 您可以输入[accent]服务器的 IP 地址[]来连接,或寻找[accent]本地网络[]中的服务器来连接。\n支持局域网或广域网的多人游戏。\n\n[lightgray]注意:没有全球服务器列表;如果你想通过 IP 地址连接某个服务器,你需要向房主询问 IP 地址。 @@ -325,7 +326,7 @@ waves.copy = 复制到剪贴板 waves.load = 从剪贴板读取 waves.invalid = 剪贴板中的波次信息无效。 waves.copied = 波次信息已复制。 -waves.none = 没有定义敌人。\n请注意,空布局将自动替换为默认布局。 +waves.none = 没有定义敌人。\n请注意,这将自动替换为默认的敌人列表。 editor.default = [lightgray]<默认> details = 详情… edit = 编辑… @@ -453,7 +454,7 @@ launch.confirm = 您将装载并发射核心中的所有资源。\n此地图将 launch.skip.confirm = 如果现在跳过,在下一个发射窗口到来前,您都无法发射。 uncover = 解锁 configure = 设定装运的数量 -bannedblocks = 禁用方块 +bannedblocks = 禁用建筑 addall = 添加所有 configure.locked = [lightgray]完成{0}\n解锁装运配置。 configure.invalid = 数量必须是0到{0}之间的数字。 @@ -512,7 +513,7 @@ settings.language = 语言 settings.data = 游戏数据 settings.reset = 恢复默认设置 settings.rebind = 重新绑定 -settings.resetKey = Reset +settings.resetKey = 重置按键 settings.controls = 控制 settings.game = 游戏 settings.sound = 声音 @@ -549,7 +550,7 @@ blocks.powerdamage = 功率/损伤 blocks.itemcapacity = 物品容量 blocks.basepowergeneration = 基础能源输出 blocks.productiontime = 生产时间 -blocks.repairtime = 方块完全修复时间 +blocks.repairtime = 建筑完全修复时间 blocks.speedincrease = 提速 blocks.range = 范围 blocks.drilltier = 可钻探矿物 @@ -591,8 +592,8 @@ bullet.frag = [stat] 分裂 bullet.knockback = [stat]{0}[lightgray] 击退 bullet.freezing = [stat] 冰冻 bullet.tarred = [stat] 减速 -bullet.multiplier = [stat]{0}[lightgray]x 弹药数量 -bullet.reload = [stat]{0}[lightgray]x 装弹 +bullet.multiplier = [stat]{0}[lightgray]x 装弹数量 +bullet.reload = [stat]{0}[lightgray]x 装弹速度 unit.blocks = 方块 unit.powersecond = 能量/秒 @@ -617,7 +618,7 @@ category.shooting = 发射 category.optional = 可选的增强 setting.landscape.name = 锁定横屏 setting.shadows.name = 影子 -setting.blockreplace.name = 自动推荐块 +setting.blockreplace.name = 自动推荐合适的建筑 setting.linear.name = 抗锯齿 setting.hints.name = 提示 setting.buildautopause.name = 自动暂停建造 @@ -632,7 +633,7 @@ setting.fpscap.name = 最大FPS setting.fpscap.none = 无 setting.fpscap.text = {0} FPS setting.uiscale.name = UI缩放比例[lightgray](需要重新启动)[] -setting.swapdiagonal.name = 自动铺设 +setting.swapdiagonal.name = 自动斜线建造 setting.difficulty.training = 训练 setting.difficulty.easy = 简单 setting.difficulty.normal = 普通 @@ -641,18 +642,18 @@ setting.difficulty.insane = 疯狂 setting.difficulty.name = 难度: setting.screenshake.name = 屏幕抖动 setting.effects.name = 显示效果 -setting.destroyedblocks.name = 显示摧毁的块 -setting.conveyorpathfinding.name = 传送带放置寻路 -setting.coreselect.name = Allow Schematic Cores +setting.destroyedblocks.name = 显示摧毁的建筑 +setting.conveyorpathfinding.name = 传送带自动寻路 +setting.coreselect.name = 允许蓝图包含核心 setting.sensitivity.name = 控制器灵敏度 setting.saveinterval.name = 自动保存间隔 setting.seconds = {0} 秒 -setting.blockselecttimeout.name = 块选择超时 +setting.blockselecttimeout.name = 建筑选择超时 setting.milliseconds = {0} 毫秒 setting.fullscreen.name = 全屏 setting.borderlesswindow.name = 无边框窗口[lightgray](可能需要重启) setting.fps.name = 显示 FPS 和网络延迟 -setting.blockselectkeys.name = 显示块选择按键 +setting.blockselectkeys.name = 显示建筑选择按键 setting.vsync.name = 垂直同步 setting.pixelate.name = 像素画面 [lightgray](禁用动画) setting.minimap.name = 显示小地图 @@ -667,6 +668,7 @@ setting.savecreate.name = 自动创建存档 setting.publichost.name = 游戏公开可见 setting.chatopacity.name = 聊天界面不透明度 setting.lasersopacity.name = 能量激光不透明度 +setting.bridgeopacity.name = 桥梁不透明度 setting.playerchat.name = 显示玩家聊天气泡 public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。\n[lightgray]您之后可以在 设置->游戏->游戏公开可见 更改。 public.beta = 请注意,测试版的游戏不能公开可见。 @@ -697,25 +699,25 @@ keybind.schematic_flip_x.name = 水平翻转 keybind.schematic_flip_y.name = 竖直翻转 keybind.category_prev.name = 上一分类 keybind.category_next.name = 下一分类 -keybind.block_select_left.name = 块选择向左 -keybind.block_select_right.name = 块选择向右 -keybind.block_select_up.name = 块选择向上 -keybind.block_select_down.name = 块选择向下 -keybind.block_select_01.name = 分类/块选择 1 -keybind.block_select_02.name = 分类/块选择 2 -keybind.block_select_03.name = 分类/块选择 3 -keybind.block_select_04.name = 分类/块选择 4 -keybind.block_select_05.name = 分类/块选择 5 -keybind.block_select_06.name = 分类/块选择 6 -keybind.block_select_07.name = 分类/块选择 7 -keybind.block_select_08.name = 分类/块选择 8 -keybind.block_select_09.name = 分类/块选择 9 -keybind.block_select_10.name = 分类/块选择 10 +keybind.block_select_left.name = 建筑朝向向左 +keybind.block_select_right.name = 建筑朝向向右 +keybind.block_select_up.name = 建筑朝向向上 +keybind.block_select_down.name = 建筑朝向向下 +keybind.block_select_01.name = 分类/建筑选择 1 +keybind.block_select_02.name = 分类/建筑选择 2 +keybind.block_select_03.name = 分类/建筑选择 3 +keybind.block_select_04.name = 分类/建筑选择 4 +keybind.block_select_05.name = 分类/建筑选择 5 +keybind.block_select_06.name = 分类/建筑选择 6 +keybind.block_select_07.name = 分类/建筑选择 7 +keybind.block_select_08.name = 分类/建筑选择 8 +keybind.block_select_09.name = 分类/建筑选择 9 +keybind.block_select_10.name = 分类/建筑选择 10 keybind.fullscreen.name = 切换全屏 keybind.select.name = 选择/射击 -keybind.diagonal_placement.name = 自动铺设 -keybind.pick.name = 选择方块 -keybind.break_block.name = 破坏方块 +keybind.diagonal_placement.name = 斜线建造 +keybind.pick.name = 选择建筑 +keybind.break_block.name = 破坏建筑 keybind.deselect.name = 取消选择 keybind.shoot.name = 射击 keybind.zoom.name = 缩放 @@ -755,7 +757,7 @@ rules.enemyCheat = 敌人(红队)无限资源 rules.unitdrops = 敌人出生点 rules.unitbuildspeedmultiplier = 单位生产速度倍数 rules.unithealthmultiplier = 单位生命倍数 -rules.blockhealthmultiplier = Block Health Multiplier +rules.blockhealthmultiplier = 建筑生命倍数 rules.playerhealthmultiplier = 玩家生命倍数 rules.playerdamagemultiplier = 玩家伤害倍数 rules.unitdamagemultiplier = 单位伤害倍数 @@ -824,7 +826,7 @@ mech.trident-ship.name = Trident mech.trident-ship.weapon = 炸弹 mech.glaive-ship.name = Glaive mech.glaive-ship.weapon = 火焰机枪 -item.corestorable = [lightgray]Storable in Core: {0} +item.corestorable = [lightgray]核心可存储: {0} item.explosiveness = [lightgray]爆炸性:{0}% item.flammability = [lightgray]易燃性:{0}% item.radioactivity = [lightgray]放射性:{0}% @@ -933,7 +935,7 @@ block.conveyor.name = 传送带 block.titanium-conveyor.name = 钛传送带 block.armored-conveyor.name = 装甲传送带 block.armored-conveyor.description = 运送物品,与钛传送带一样的速度,但有更强的装甲。除其他传送带,不接受任何边的输入。 -block.junction.name = 交叉器 +block.junction.name = 连接器 block.router.name = 路由器 block.distributor.name = 分配器 block.sorter.name = 分类器 @@ -942,6 +944,7 @@ block.message.name = 信息板 block.illuminator.name = 照明器 block.illuminator.description = 小型、紧凑、可配置的光源。需要能量运行。 block.overflow-gate.name = 溢流门 +block.underflow-gate.name = 反向溢流门 block.silicon-smelter.name = 硅冶炼厂 block.phase-weaver.name = 相织布编织器 block.pulverizer.name = 粉碎机 @@ -978,7 +981,7 @@ block.mechanical-pump.name = 机械泵 block.item-source.name = 无限物品 block.item-void.name = 物品黑洞 block.liquid-source.name = 无限液体 -block.liquid-void.name = Liquid Void +block.liquid-void.name = 液体黑洞 block.power-void.name = 能源黑洞 block.power-source.name = 无限能源 block.unloader.name = 装卸器 @@ -1057,14 +1060,14 @@ unit.revenant.name = 亡魂 unit.eruptor.name = 暴君 unit.chaos-array.name = 混沌者 unit.eradicator.name = 根除者 -unit.lich.name = 尸鬼 +unit.lich.name = 巫妖 unit.reaper.name = 死神 tutorial.next = [lightgray]<点击以继续> tutorial.intro = 您已进入[scarlet] Mindustry 教程[]。[]\n使用[accent][[WASD][]键移动主角和视角。\n[accent]按住[[Ctrl]并转动鼠标滚轮[]缩放视野。\n让我们从[accent]采集铜矿[]开始。先移动到铜矿旁边,然后点按矿脉附近散落的矿物。\n\n[accent]{0}/{1} 铜 tutorial.intro.mobile = 您已进入[scarlet] Mindustry 教程[]。\n在屏幕上滑动来继续。\n[accent]双指捏合[] 来缩小和放大。\n让我们从[accent]采集铜矿[]开始。先移动到铜矿旁边,然后点按矿脉附近散落的矿物。\n\n[accent]铜 {0}/{1} tutorial.drill = 手动采矿效率不高。\n[accent]钻头[]可以自动采矿。\n让我们在在铜矿上放一个。\n点击右下角的钻头菜单。\n选择[accent]机械钻头[]。\n单击将其放置在铜矿上。\n[accent]右键单击[]来停止。 tutorial.drill.mobile = 手动采矿效率不高。\n[accent]钻头[]可以自动采矿。\n点右下角的钻头菜单。\n选择[accent]机械钻头[]。\n点一下将其放在铜矿上,点[accent]对号[]来确定。\n点[accent]叉号[]来取消。 -tutorial.blockinfo = 每种方块都有其独特的数据。每个钻头只能开采部分矿石。\n若要查看块的信息和统计信息,[accent]在菜单中点击问号。[]\n\n[accent]现在查看机械钻头的数据吧。[] +tutorial.blockinfo = 每种钻头都有其独特的数据。每个钻头只能开采部分矿石。\n若要查看建筑的详细信息,[accent]在菜单中点击问号。[]\n\n[accent]现在查看机械钻头的数据吧。[] tutorial.conveyor = [accent]传送带[]可以把物资传送到核心。\n请在钻头到核心间建造一条传送带。 tutorial.conveyor.mobile = [accent]传送带[]可以把物资传送到核心。\n请在钻头到核心间建造一条传送带。\n[accent]长按数秒[]并向一个方向拖动来直线放置。\n\n[accent]{0}/{1} 条传送带\n[accent]0/1 物品 tutorial.turret = 必须建造防御建筑来击退[lightgray]敌人[]。\n请在核心附近造一个双管炮。 @@ -1073,20 +1076,20 @@ tutorial.pause = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您 tutorial.pause.mobile = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n[accent]点击左上角的按钮以暂停。 tutorial.unpause = 现在再次按空格以继续。 tutorial.unpause.mobile = 现在再次点按以继续。 -tutorial.breaking = 方块经常需要拆除。\n[accent]按住鼠标右键[]来拆除选中的方块。[]\n\n[accent]使用范围拆除来拆除核心左侧的废墙。 -tutorial.breaking.mobile = 方块经常需要拆除。\n[accent]选择拆除模式[],点击方块以拆除。\n[accent]长按几秒[]并拖动来范围拆除。\n点击对号来确定。\n\n[accent]使用范围拆除来拆除核心左侧的废墙。 -tutorial.withdraw = 有时,从方块中取出物品是必要的。\n[accent]点击有物品的方块[],然后[accent]点击在方框中的物品[]。\n可以通过[accent]点击或长按[]来取出物品。\n\n[accent]从核心中取出一些铜[]。 -tutorial.deposit = 将物品从机甲拖向方块来放下物品。\n\n[accent]将铜放回核心[]。 +tutorial.breaking = 建筑经常需要拆除。\n[accent]按住鼠标右键[]来拆除选中的建筑。[]\n\n[accent]使用范围拆除来拆除核心左侧的废墙。 +tutorial.breaking.mobile = 建筑经常需要拆除。\n[accent]选择拆除模式[],点击建筑以拆除。\n[accent]长按几秒[]并拖动来范围拆除。\n点击对号来确定。\n\n[accent]使用范围拆除来拆除核心左侧的废墙。 +tutorial.withdraw = 有时,从建筑中取出物品是必要的。\n[accent]点击包含物品的建筑[],然后[accent]点击在方框中的物品[]。\n可以通过[accent]点击或长按[]来取出物品。\n\n[accent]从核心中取出一些铜[]。 +tutorial.deposit = 将物品从机甲拖向建筑来放下物品。\n\n[accent]将铜放回核心[]。 tutorial.waves = [lightgray]敌人[]来了。\n\n保护核心,防御两波攻击。造更多的炮塔。[accent]点击[]以射击。\n建造更多的炮塔和钻头,并采更多的矿。 tutorial.waves.mobile = [lightgray]敌人[]来了。\n\n保护核心,防御两波攻击。造更多的炮塔。你的机甲将对敌人自动开火。\n建造更多的炮塔和钻头,并采更多的矿。 tutorial.launch = 进入特定波次后,你可以[accent]发射核心(起飞)[],[accent]带走核心中的所有资源[]并抛下所有的建筑。\n装运的资源可用于研究科技。\n\n[accent]点击发射按钮。 -item.copper.description = 最基本的的结构材料。在各种类型的方块中被广泛使用。 +item.copper.description = 最基本的的建筑材料。在各种类型的建筑中被广泛使用。 item.lead.description = 一种基本的电力材料。广泛用于电子设备和液体输送模块。 item.metaglass.description = 一种致密坚硬的复合玻璃。广泛用于液体输送和存储。 -item.graphite.description = 矿化碳,用于弹药和电路绝缘。 +item.graphite.description = 一种高密度的碳材料,用于弹药和电器元件。 item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。 -item.coal.description = 植物的化石,常见且容易获得,常用作燃料或其他资源的生产。 +item.coal.description = 在农耕文明前就形成的植物化石,常见且容易获得,常用作燃料或其他资源的生产。 item.titanium.description = 一种罕见的超轻金属,被广泛运用于液体运输、钻头和飞机。 item.thorium.description = 一种致密的放射性金属,用作结构支撑和核燃料。 item.scrap.description = 一种废弃的建筑物及废弃单位的残骸,富含多种金属元素。 @@ -1110,7 +1113,7 @@ mech.javelin-ship.description = 一艘一击即退的攻击船。虽然最初很 mech.trident-ship.description = 为建造和摧毁敌人防御工事而建造的重型轰炸机。有相当好的装甲。 mech.glaive-ship.description = 一种大型的装甲厚重的武装直升机。配备火焰机枪。有优秀的加速能力和最快的速度。 unit.draug.description = 一种原始的采矿机。生产成本低,消耗品。在附近自动开采铜和铅。将开采的资源输送到最近的核心。 -unit.spirit.description = 一种改进的德鲁格无人机,设计用于维修而不是采矿。自动修复该区域中任何损坏的块。 +unit.spirit.description = 采矿机的改进版本,用于维修而不是采矿。自动修复该区域中任何损坏的建筑。 unit.phantom.description = 一种先进的无人机。跟随玩家并协助建造。 unit.dagger.description = 一种最基本的地面机甲。生产成本低。集群使用时比较有用。 unit.crawler.description = 一种地面装置,由一个框架和绑在上面的烈性炸药组成。不是特别耐用。与敌人接触后爆炸。 @@ -1120,14 +1123,14 @@ unit.eruptor.description = 一种用来拆除建筑物的重型机甲。在敌 unit.wraith.description = 一种快速、一击即退的拦截器机甲。目标是发电机。 unit.ghoul.description = 一种重型地毯式轰炸机。瞄准关键的基础设施来击溃敌人的基地。 unit.revenant.description = 一种发射导弹的重型飞行机甲。 -block.message.description = 储存一条消息。用于盟友间的交流。 +block.message.description = 保存一条文字信息。用于队友之间进行交流。 block.graphite-press.description = 将煤块压缩成纯石墨片材料。 block.multi-press.description = 石墨压缩机的升级版。利用水和电力快速高效地处理煤炭。 block.silicon-smelter.description = 用高纯度的焦炭来加工沙子以生产硅。 block.kiln.description = 将铅和沙子熔炼成钢化玻璃,需要少量电力。 block.plastanium-compressor.description = 用石油和钛生产塑钢。 block.phase-weaver.description = 用放射性钍和大量沙子生产相织物。 -block.alloy-smelter.description = 用钛、铅、硅和铜生产浪涌合金。 +block.alloy-smelter.description = 用钛、铅、硅和铜生产巨浪合金。 block.cryofluidmixer.description = 将水和细的钛粉混成冷却液。钍反应堆的必备之物。 block.blast-mixer.description = 用油料将硫转化为不易燃但更具爆炸性的爆炸化合物。 block.pyratite-mixer.description = 将煤、铅和沙子混合成高度易燃的硫。 @@ -1142,56 +1145,57 @@ block.power-source.description = 无限输出能量。仅限沙盒。 block.item-source.description = 无限输出物品。仅限沙盒。 block.item-void.description = 销毁输入的所有物品。仅限沙盒。 block.liquid-source.description = 无限输出液体。仅限沙盒。 -block.liquid-void.description = Removes any liquids. Sandbox only. -block.copper-wall.description = 廉价的防御方块。\n适合在前几个波次中保护核心和炮塔。 -block.copper-wall-large.description = 廉价的防御方块。\n适合在前几个波次中保护核心和炮塔。\n占多个方格。 -block.titanium-wall.description = 中等强度的防御方块。\n提供中等强度的防御以抵御敌人。 -block.titanium-wall-large.description = 中等强度的防御方块。\n提供中等强度的防御以防敌人攻击。\n占多个方格。 -block.plastanium-wall.description = 一种特殊的防御方块,能吸收电弧、自动与能量节点连接。 -block.plastanium-wall-large.description = 一种特殊的防御方块,能吸收电弧、自动与能量节点连接。\n占多个方格。 -block.thorium-wall.description = 强大的防御方块。\n可以很好的防御敌人。 -block.thorium-wall-large.description = 强大的防御方块。\n很好地防御敌人。\n占多个方格。 +block.liquid-void.description = 销毁输入的所有液体。仅限沙盒 +block.copper-wall.description = 廉价的防御建筑。\n适合在前几个波次中保护核心和炮塔。 +block.copper-wall-large.description = 廉价的防御建筑。\n适合在前几个波次中保护核心和炮塔。\n占多个方格。 +block.titanium-wall.description = 中等强度的防御建筑。\n提供中等强度的防御以抵御敌人。 +block.titanium-wall-large.description = 中等强度的防御建筑。\n提供中等强度的防御以防敌人攻击。\n占多个方格。 +block.plastanium-wall.description = 一种特殊的防御建筑,能吸收电弧、自动与能量节点连接。 +block.plastanium-wall-large.description = 一种特殊的防御建筑,能吸收电弧、自动与能量节点连接。\n占多个方格。 +block.thorium-wall.description = 强大的防御建筑。\n可以很好的防御敌人。 +block.thorium-wall-large.description = 强大的防御建筑。\n很好地防御敌人。\n占多个方格。 block.phase-wall.description = 没有钍墙那样坚固,但是它可以使不太强的弹药发生偏转。 block.phase-wall-large.description = 没有钍墙那样坚固,但是它可以使不太强的弹药发生偏转。\n占多个方格。 -block.surge-wall.description = 强大的防御方块。\n有很小的机会向攻击者发射闪电。 -block.surge-wall-large.description = 强大的防御方块。\n有很小的机会向攻击者发射闪电。\n占多个方格。 -block.door.description = 一扇小门。点按切换它的打开/关闭状态。 -block.door-large.description = 一扇大门。点按切换它的打开/关闭状态。\n占多个方格。 -block.mender.description = 定期修理附近的方块,使防御系统在波次之间得到修复。\n可选使用硅来提高修复范围和修复效率。 +block.surge-wall.description = 强大的防御建筑。\n被攻击时有很小的机会向攻击者发射闪电。 +block.surge-wall-large.description = 强大的防御建筑。\n被攻击时有很小的机会向攻击者发射闪电。\n占多个方格。 +block.door.description = 一扇门。点按切换它的打开/关闭状态。 +block.door-large.description = 一扇大型门。点按切换它的打开/关闭状态。\n占多个方格。 +block.mender.description = 定期修理附近的建筑,使防御系统在波次之间得到修复。\n可选使用硅来提高修复范围和修复效率。 block.mend-projector.description = 修理者的升级版,定期修复附近的建筑物。 block.overdrive-projector.description = 提高附近建筑物的速度,如钻头和传送带。 block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热,可以使用冷却液降温。相织物可用于增加屏障大小。 block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。 -block.conveyor.description = 初级物资传送带。将物品向前输送并在可能时运入建筑。可旋转方向。 -block.titanium-conveyor.description = 高级物资传送带。运送物品的速度优于初级传送带。 -block.junction.description = 两条传送带的交叉桥连接。适用于两条不同方向的传送带要分别将不同的物品运送到不同的位置。 +block.conveyor.description = 初级物品传送带。将物品向前输送并在可能时运入建筑。可旋转方向。 +block.titanium-conveyor.description = 高级物品传送带。运送物品的速度快于初级传送带。 +block.junction.description = 两条交叉传送带的桥梁。用于连接两条不同的传输线路使其互不影响。 block.bridge-conveyor.description = 先进的物品运输方块。允许跨越任意地形或建筑物运输物品,最多跨越3格。 -block.phase-conveyor.description = 先进的传送带,使用电力将物品传送到距离几个块的相位传送带上。 +block.phase-conveyor.description = 先进的传送带,使用电力将物品传送到距离几个方块的相位传送带上。 block.sorter.description = 对物品进行分类,如果物品与所选种类相同,则允许其通过。否则,物品将从左边和右边输出。 -block.inverted-sorter.description = 同分类器一样分类物品,但所选物品输出到左边和右边。 -block.router.description = 从一个方向接受物品,并将它们平均输出到其他3个方向。可以将材料分成多份。 -block.distributor.description = 改进的路由器,可将物品输出到周围的最多7个其他方向。 -block.overflow-gate.description = 仅在前路被阻塞时向左和右输出。 -block.mass-driver.description = 终极传送带,收集若干物品后将其射到远处的另一个质量驱动器。 -block.mechanical-pump.description = 一种廉价泵,输出速度慢,但无需能量。 +block.inverted-sorter.description = 像分类器一样处理物品,但却是向两侧输出选定的物品。 +block.router.description = 从一个方向接受物品,并将它们平均输出到其他3个方向。可以将材料分成多份\n\n[scarlet]永远不要把它与生产建筑相连,因为它会被产出的产品阻塞[]。 +block.distributor.description = 大型路由器,可将物品输出到周围的最多7个其他方向。 +block.overflow-gate.description = 当前方被阻塞时才会向左和右输出,用于处理多余的物品。 +block.underflow-gate.description = 与溢流门相反。 当左右均堵塞时才向前方运输。 +block.mass-driver.description = 终极物品传输器,收集若干物品后将其射到远处的另一个质量驱动器。 +block.mechanical-pump.description = 一种廉价液体泵,输出速度慢,但无需能量。 block.rotary-pump.description = 先进液泵。泵送更多液体,但需要能量。 block.thermal-pump.description = 终级液泵。 block.conduit.description = 基本液体传输管道。像传送带一样工作,但仅适用于液体。用于从泵或其他导管中提取液体。 block.pulse-conduit.description = 高级液体传输管道。比普通导管更快地输送液体且能储存更多液体。 -block.plated-conduit.description = 转移液体的速度与脉冲导管相同,但护甲更强。两侧只接受通过导管传入液体。\n更少泄漏。 +block.plated-conduit.description = 转移液体的速度与脉冲导管相同,但护甲更强。两侧只接受通过导管传入液体。\n发生泄漏时泄漏较少。 block.liquid-router.description = 接受一个方向的液体并将它们平均输出到其他3个方向。同时可以储存一定量的液体。用于将液体从一个源分往多个目标。 -block.liquid-tank.description = 存储大量液体,可在材料需求不恒定作为缓冲区,或作为供给冷却液体的保障设施。 -block.liquid-junction.description = 两条管道的交叉桥连接。适用于两条不同方向的导管要将不同的液体输送到不同的位置。 -block.bridge-conduit.description = 先进的液体传输方块。可以跨越任何地形或建筑物,最多跨越3格来传输液体。 -block.phase-conduit.description = 先进的液体传输方块。使用电力将液体传送到多个块上的连接管道。 +block.liquid-tank.description = 存储大量液体,可在材料需求不恒定时作为缓冲区,或作为供给冷却液体的保障设施。 +block.liquid-junction.description = 两条交叉管道的桥梁。适用连接两条不同方向的导管线路。 +block.bridge-conduit.description = 先进的液体传输建筑。可以跨越任何地形或建筑物,最多跨越3格来传输液体。 +block.phase-conduit.description = 先进的液体传输建筑。使用电力将液体传送到多个方块上的连接管道。 block.power-node.description = 将电源传输到连接的节点上。节点将接收来自任何方块的能量或向任何方块供给能量。 block.power-node-large.description = 更大范围、更多连接点的高级能量节点。 block.surge-tower.description = 连接数低但范围很远的能量节点。 -block.diode.description = 此方块上的电能只能单向流动,仅当对方的储能更低时流动。 -block.battery.description = 存储能量作为缓冲,在能源亏空时提供。 +block.diode.description = 此方块上的电能只能单向流动,仅当另一侧的电池储能更低时输送电力。 +block.battery.description = 存储能量作为缓冲,在发电量不足时提供保障。 block.battery-large.description = 比普通电池容量更大。 block.combustion-generator.description = 燃烧煤等材料发电。 -block.thermal-generator.description = 放置在炽热的地方发电。 +block.thermal-generator.description = 放置在炽热的地形上能够发电。 block.turbine-generator.description = 先进的火力发电机,效率更高,但需要水来产生蒸汽。 block.differential-generator.description = 利用低温流体与燃烧的硫之间的温差产生大量能量。 block.rtg-generator.description = 一种简单可靠的发电机。利用放射性化合物的衰变产生的热量,以缓慢的速度产生能量。 @@ -1206,9 +1210,9 @@ block.blast-drill.description = 终极钻头,需要大量能量。 block.water-extractor.description = 从地下提取水。当附近没有水源时使用它。 block.cultivator.description = 将微小的孢子培养成工业用的孢子荚。 block.oil-extractor.description = 使用大量能量、沙子和水提炼石油。 -block.core-shard.description = 初代核心。一旦被摧毁,与该地区的所有连接都将断开。不要让它被摧毁。 -block.core-foundation.description = 二代核心。血量更高。可以存储更多资源。 -block.core-nucleus.description = 三代核心,也是最新一代,血量非常高。能存储大量资源。 +block.core-shard.description = 小型核心。一旦被摧毁,与该地区的所有连接都将断开。不要让它被摧毁。 +block.core-foundation.description = 中型核心。血量更高。可以存储更多资源。 +block.core-nucleus.description = 大型核心,也是最强大的,血量非常高。能存储大量资源。 block.vault.description = 存储大量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。[lightgray]卸载器[]可从仓库中提取物品。 block.container.description = 存储少量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。[lightgray]卸载器[]可从容器中提取物品。 block.unloader.description = 将物品从容器、仓库或你的核心中提取到传送带或直接提取到相邻的方块。点击卸载器本身更改所要卸载的物品类型。 @@ -1218,9 +1222,9 @@ block.duo.description = 小而便宜的炮塔,对地很有效。 block.scatter.description = 基本型防空炮塔。向空中敌人喷出一团铅或废料。 block.scorch.description = 小型炮塔,点燃任何靠近它的地面敌人。近距离非常有效。 block.hail.description = 小型远程炮台。 -block.wave.description = 中型快速炮塔,射出液体泡泡。有液体输入时自动灭火。 +block.wave.description = 中型快速炮塔,射出液体泡泡。使用水或者冷却液时能够自动灭火。 block.lancer.description = 中型对地炮塔。会充能并发射强力的的能量束。 -block.arc.description = 小型炮塔,发射电弧。 +block.arc.description = 小型炮塔,发射电弧。电弧无法穿过塑钢墙。 block.swarmer.description = 中型炮塔,对空对地,发射跟踪爆炸导弹。 block.salvo.description = 双管炮的升级版。中型,快速射出一串子弹。 block.fuse.description = 大型近程炮塔,发射三道刺穿敌人的短程光束。 @@ -1228,7 +1232,7 @@ block.ripple.description = 大型远程炮台,非常强力,向远处的敌 block.cyclone.description = 大型炮塔,对空对地,发射在敌人周围引爆的爆炸物。 block.spectre.description = 超大型炮塔,对空对地,一次射出两颗强大的穿甲弹药。 block.meltdown.description = 超大型激光炮塔,充能之后持续发射光束,需要冷却剂。 -block.command-center.description = 在地图上向联盟单位发出移动命令。\n使部队巡逻、攻击一个敌人核心,或者撤退到核心/工厂。当没有敌人核心时,得到攻击命令的部队默认执行巡逻。 +block.command-center.description = 在地图上向联盟单位发出移动命令。\n使部队攻击一个敌人核心,或者撤退到核心/工厂或者集合。当没有敌人核心时,得到攻击命令的部队默认向最近的敌人出现的地方集结。 block.draug-factory.description = 生产德鲁格釆矿机。 block.spirit-factory.description = 生产幽灵修理机。 block.phantom-factory.description = 生产幻影建造机。 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index aad624d1e2..a519738a82 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -251,7 +251,8 @@ copylink = 複製連結 back = 返回 data.export = 匯出數據 data.import = 匯入數據 -data.exported = 數據已匯出. +data.openfolder = 開啟檔案資料夾 +data.exported = 數據已匯出。 data.invalid = 這不是有效的遊戲資料。 data.import.confirm = 導入外部數據將覆蓋您當前[scarlet]所有的[]遊戲數據,\n[accent]這個動作不能撤銷![]\n\n匯入數據後,您的遊戲將立即退出。 classic.export = 匯出 Classic 數據 @@ -667,6 +668,7 @@ setting.savecreate.name = 自動建立存檔 setting.publichost.name = 公開遊戲可見度 setting.chatopacity.name = 聊天框不透明度 setting.lasersopacity.name = 激光不透明度 +setting.bridgeopacity.name = 橋透明度 setting.playerchat.name = 在遊戲中顯示聊天框 public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]以後可以在“設置”->“遊戲”->“公開遊戲可見度”中進行更改。 public.beta = 請注意,該遊戲的Beta版本無法公開遊戲大廳。 @@ -942,6 +944,7 @@ block.message.name = 訊息板 block.illuminator.name = 照明燈 block.illuminator.description = 小、緊湊而且可調整的光源。需要能源來運作。 block.overflow-gate.name = 溢流器 +block.underflow-gate.name = 反向溢流器 block.silicon-smelter.name = 煉矽廠 block.phase-weaver.name = 相織布編織器 block.pulverizer.name = 粉碎機 @@ -978,7 +981,7 @@ block.mechanical-pump.name = 機械泵 block.item-source.name = 物品源 block.item-void.name = 物品虛空 block.liquid-source.name = 液體源 -block.liquid-void.name = Liquid Void +block.liquid-void.name = 液體虛空 block.power-void.name = 能量虛空 block.power-source.name = 無限能量源 block.unloader.name = 裝卸器 @@ -1078,7 +1081,7 @@ tutorial.breaking.mobile = 方塊經常需要被拆除。\n[accent]選擇拆除 tutorial.withdraw = 在某些情況下,直接從方塊中取出物品是必要的。\n[accent]點擊有物品的方塊[],然後[accent]點擊在方框中的物品[]以將其取出。\n可以通過[accent]點擊或長按[]來取出物品。\n\n[accent]從核心中取出一些銅。[] tutorial.deposit = 通過將物品從船上拖到目標方塊,將物品放入方塊中。\n\n[accent]將您的銅放到核心中。[] tutorial.waves = [lightgray]敵人[]來臨。\n\n保護核心抵抗兩波攻擊。\n建造更多的砲塔和鑽頭。開採更多的銅。 -tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper. +tutorial.waves.mobile = [lightgray]敵人[]來臨。\n\n保護核心抵抗兩波攻擊。您的飛船會自動向敵人開火。\n建造更多的砲塔和鑽頭。開採更多的銅。 tutorial.launch = 一旦您達到特定的波數, 您就可以[accent] 發射核心[],放棄防禦並[accent]獲取核心中的所有資源。[]\n這些資源可以用於研究新科技。\n\n[accent]按下發射按鈕。 item.copper.description = 最基本的結構材料。在各種類型的方塊中廣泛使用。 @@ -1142,7 +1145,7 @@ block.power-source.description = 無限輸出能量。僅限沙盒。 block.item-source.description = 無限輸出物品。僅限沙盒。 block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。 block.liquid-source.description = 無限輸出液體。僅限沙盒。 -block.liquid-void.description = Removes any liquids. Sandbox only. +block.liquid-void.description = 銷毀所有輸入的液體。僅限沙盒。 block.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。 block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。 block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。 @@ -1169,9 +1172,10 @@ block.bridge-conveyor.description = 高級的物品運輸方塊。允許跨過 block.phase-conveyor.description = 高級物品傳輸方塊。使用能量將物品傳送到幾個方塊外連接的相織輸送帶。 block.sorter.description = 對物品進行分類。如果物品與所選種類匹配,則允許其通過。否則,物品將從左邊和右邊輸出。 block.inverted-sorter.description = 處理物品的方式類似於分類器,但將所選擇的物品輸出到側面。 -block.router.description = 接受來自一個方向的物品並將它們平均輸出到最多3個其他方向。用於將物品從一個來源分割為多個目標。 +block.router.description = 接受來自一個方向的物品並將它們平均輸出到最多3個其他方向。用於將物品從一個來源分割為多個目標。\n\n[[scarlet]]不建議緊貼在生產型方塊旁使用,可能導致其被產出堵塞。[] block.distributor.description = 高級的分配器,可將物品均分到最多7個其他方向。 -block.overflow-gate.description = 如果前面被擋住,則向左邊和右邊輸出物品。 +block.overflow-gate.description = 如果前面被阻擋,則向左邊和右邊輸出物品。 +block.underflow-gate.description = 反向的溢流器。如果側面被阻擋,則向前方輸出物品。 block.mass-driver.description = 終極物品運輸方塊。收集大量物品,然後將它們射向另一個質量驅動器。需要能源以運作。 block.mechanical-pump.description = 一種便宜的泵,輸出速度慢,但不使用能量。 block.rotary-pump.description = 高級的泵。抽更多液體,但需要能量。 diff --git a/core/assets/fonts/font.ttf b/core/assets/fonts/font.ttf index 6b585dcbdd..d6b1c442ab 100644 Binary files a/core/assets/fonts/font.ttf and b/core/assets/fonts/font.ttf differ diff --git a/core/assets/fonts/icon.ttf b/core/assets/fonts/icon.ttf new file mode 100644 index 0000000000..0cde9685b5 Binary files /dev/null and b/core/assets/fonts/icon.ttf differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties new file mode 100755 index 0000000000..4c46c9d3d0 --- /dev/null +++ b/core/assets/icons/icons.properties @@ -0,0 +1,221 @@ +63743=spawn|block-spawn-medium +63742=deepwater|block-deepwater-medium +63741=water|block-water-medium +63740=tainted-water|block-tainted-water-medium +63739=darksand-tainted-water|block-darksand-tainted-water-medium +63738=sand-water|block-sand-water-medium +63737=darksand-water|block-darksand-water-medium +63736=tar|block-tar-medium +63735=stone|block-stone-medium +63734=craters|block-craters-medium +63733=char|block-char-medium +63732=ignarock|block-ignarock-medium +63731=hotrock|block-hotrock-medium +63730=magmarock|block-magmarock-medium +63729=sand|block-sand-medium +63728=darksand|block-darksand-medium +63727=holostone|block-holostone-medium +63726=grass|block-grass-medium +63725=salt|block-salt-medium +63724=snow|block-snow-medium +63723=ice|block-ice-medium +63722=ice-snow|block-ice-snow-medium +63721=cliffs|block-cliffs-medium +63720=rocks|block-rocks-medium +63719=sporerocks|block-sporerocks-medium +63718=rock|block-rock-medium +63717=snowrock|block-snowrock-medium +63716=icerocks|block-icerocks-medium +63715=snowrocks|block-snowrocks-medium +63714=dunerocks|block-dunerocks-medium +63713=sandrocks|block-sandrocks-medium +63712=saltrocks|block-saltrocks-medium +63711=spore-pine|block-spore-pine-medium +63710=snow-pine|block-snow-pine-medium +63709=pine|block-pine-medium +63708=shrubs|block-shrubs-medium +63707=white-tree-dead|block-white-tree-dead-medium +63706=white-tree|block-white-tree-medium +63705=spore-cluster|block-spore-cluster-medium +63704=shale|block-shale-medium +63703=shalerocks|block-shalerocks-medium +63702=shale-boulder|block-shale-boulder-medium +63701=sand-boulder|block-sand-boulder-medium +63700=moss|block-moss-medium +63699=spore-moss|block-spore-moss-medium +63698=metal-floor|block-metal-floor-medium +63697=metal-floor-damaged|block-metal-floor-damaged-medium +63696=metal-floor-2|block-metal-floor-2-medium +63695=metal-floor-3|block-metal-floor-3-medium +63694=metal-floor-5|block-metal-floor-5-medium +63693=dark-panel-1|block-dark-panel-1-medium +63692=dark-panel-2|block-dark-panel-2-medium +63691=dark-panel-3|block-dark-panel-3-medium +63690=dark-panel-4|block-dark-panel-4-medium +63689=dark-panel-5|block-dark-panel-5-medium +63688=dark-panel-6|block-dark-panel-6-medium +63687=dark-metal|block-dark-metal-medium +63686=pebbles|block-pebbles-medium +63685=tendrils|block-tendrils-medium +63684=ore-copper|block-ore-copper-medium +63683=ore-lead|block-ore-lead-medium +63682=ore-scrap|block-ore-scrap-medium +63681=ore-coal|block-ore-coal-medium +63680=ore-titanium|block-ore-titanium-medium +63679=ore-thorium|block-ore-thorium-medium +63678=graphite-press|block-graphite-press-medium +63677=multi-press|block-multi-press-medium +63676=silicon-smelter|block-silicon-smelter-medium +63675=kiln|block-kiln-medium +63674=plastanium-compressor|block-plastanium-compressor-medium +63673=phase-weaver|block-phase-weaver-medium +63672=alloy-smelter|block-alloy-smelter-medium +63671=cryofluidmixer|block-cryofluidmixer-medium +63670=blast-mixer|block-blast-mixer-medium +63669=pyratite-mixer|block-pyratite-mixer-medium +63668=melter|block-melter-medium +63667=separator|block-separator-medium +63666=spore-press|block-spore-press-medium +63665=pulverizer|block-pulverizer-medium +63664=coal-centrifuge|block-coal-centrifuge-medium +63663=incinerator|block-incinerator-medium +63662=copper-wall|block-copper-wall-medium +63661=copper-wall-large|block-copper-wall-large-medium +63660=titanium-wall|block-titanium-wall-medium +63659=titanium-wall-large|block-titanium-wall-large-medium +63658=plastanium-wall|block-plastanium-wall-medium +63657=plastanium-wall-large|block-plastanium-wall-large-medium +63656=thorium-wall|block-thorium-wall-medium +63655=thorium-wall-large|block-thorium-wall-large-medium +63654=phase-wall|block-phase-wall-medium +63653=phase-wall-large|block-phase-wall-large-medium +63652=surge-wall|block-surge-wall-medium +63651=surge-wall-large|block-surge-wall-large-medium +63650=door|block-door-medium +63649=door-large|block-door-large-medium +63648=scrap-wall|block-scrap-wall-medium +63647=scrap-wall-large|block-scrap-wall-large-medium +63646=scrap-wall-huge|block-scrap-wall-huge-medium +63645=scrap-wall-gigantic|block-scrap-wall-gigantic-medium +63644=thruster|block-thruster-medium +63643=mender|block-mender-medium +63642=mend-projector|block-mend-projector-medium +63641=overdrive-projector|block-overdrive-projector-medium +63640=force-projector|block-force-projector-medium +63639=shock-mine|block-shock-mine-medium +63638=conveyor|block-conveyor-medium +63637=titanium-conveyor|block-titanium-conveyor-medium +63636=armored-conveyor|block-armored-conveyor-medium +63635=junction|block-junction-medium +63634=bridge-conveyor|block-bridge-conveyor-medium +63633=phase-conveyor|block-phase-conveyor-medium +63632=sorter|block-sorter-medium +63631=inverted-sorter|block-inverted-sorter-medium +63630=router|block-router-medium +63629=distributor|block-distributor-medium +63628=overflow-gate|block-overflow-gate-medium +63627=mass-driver|block-mass-driver-medium +63626=mechanical-pump|block-mechanical-pump-medium +63625=rotary-pump|block-rotary-pump-medium +63624=thermal-pump|block-thermal-pump-medium +63623=conduit|block-conduit-medium +63622=pulse-conduit|block-pulse-conduit-medium +63621=plated-conduit|block-plated-conduit-medium +63620=liquid-router|block-liquid-router-medium +63619=liquid-tank|block-liquid-tank-medium +63618=liquid-junction|block-liquid-junction-medium +63617=bridge-conduit|block-bridge-conduit-medium +63616=phase-conduit|block-phase-conduit-medium +63615=power-node|block-power-node-medium +63614=power-node-large|block-power-node-large-medium +63613=surge-tower|block-surge-tower-medium +63612=diode|block-diode-medium +63611=battery|block-battery-medium +63610=battery-large|block-battery-large-medium +63609=combustion-generator|block-combustion-generator-medium +63608=thermal-generator|block-thermal-generator-medium +63607=turbine-generator|block-turbine-generator-medium +63606=differential-generator|block-differential-generator-medium +63605=rtg-generator|block-rtg-generator-medium +63604=solar-panel|block-solar-panel-medium +63603=solar-panel-large|block-solar-panel-large-medium +63602=thorium-reactor|block-thorium-reactor-medium +63601=impact-reactor|block-impact-reactor-medium +63600=mechanical-drill|block-mechanical-drill-medium +63599=pneumatic-drill|block-pneumatic-drill-medium +63598=laser-drill|block-laser-drill-medium +63597=blast-drill|block-blast-drill-medium +63596=water-extractor|block-water-extractor-medium +63595=cultivator|block-cultivator-medium +63594=oil-extractor|block-oil-extractor-medium +63593=core-shard|block-core-shard-medium +63592=core-foundation|block-core-foundation-medium +63591=core-nucleus|block-core-nucleus-medium +63590=vault|block-vault-medium +63589=container|block-container-medium +63588=unloader|block-unloader-medium +63587=launch-pad|block-launch-pad-medium +63586=launch-pad-large|block-launch-pad-large-medium +63585=duo|block-duo-medium +63584=scatter|block-scatter-medium +63583=scorch|block-scorch-medium +63582=hail|block-hail-medium +63581=wave|block-wave-medium +63580=lancer|block-lancer-medium +63579=arc|block-arc-medium +63578=swarmer|block-swarmer-medium +63577=salvo|block-salvo-medium +63576=fuse|block-fuse-medium +63575=ripple|block-ripple-medium +63574=cyclone|block-cyclone-medium +63573=spectre|block-spectre-medium +63572=meltdown|block-meltdown-medium +63571=draug-factory|block-draug-factory-medium +63570=spirit-factory|block-spirit-factory-medium +63569=phantom-factory|block-phantom-factory-medium +63568=command-center|block-command-center-medium +63567=wraith-factory|block-wraith-factory-medium +63566=ghoul-factory|block-ghoul-factory-medium +63565=revenant-factory|block-revenant-factory-medium +63564=dagger-factory|block-dagger-factory-medium +63563=crawler-factory|block-crawler-factory-medium +63562=titan-factory|block-titan-factory-medium +63561=fortress-factory|block-fortress-factory-medium +63560=repair-point|block-repair-point-medium +63559=dart-mech-pad|block-dart-mech-pad-medium +63558=delta-mech-pad|block-delta-mech-pad-medium +63557=tau-mech-pad|block-tau-mech-pad-medium +63556=omega-mech-pad|block-omega-mech-pad-medium +63555=javelin-ship-pad|block-javelin-ship-pad-medium +63554=trident-ship-pad|block-trident-ship-pad-medium +63553=glaive-ship-pad|block-glaive-ship-pad-medium +63552=power-source|block-power-source-medium +63551=power-void|block-power-void-medium +63550=item-source|block-item-source-medium +63549=item-void|block-item-void-medium +63548=liquid-source|block-liquid-source-medium +63547=liquid-void|block-liquid-void-medium +63546=message|block-message-medium +63545=illuminator|block-illuminator-medium +63544=copper|item-copper-icon +63543=lead|item-lead-icon +63542=metaglass|item-metaglass-icon +63541=graphite|item-graphite-icon +63540=sand|item-sand-icon +63539=coal|item-coal-icon +63538=titanium|item-titanium-icon +63537=thorium|item-thorium-icon +63536=scrap|item-scrap-icon +63535=silicon|item-silicon-icon +63534=plastanium|item-plastanium-icon +63533=phase-fabric|item-phase-fabric-icon +63532=surge-alloy|item-surge-alloy-icon +63531=spore-pod|item-spore-pod-icon +63530=blast-compound|item-blast-compound-icon +63529=pyratite|item-pyratite-icon +63528=water|liquid-water-icon +63527=slag|liquid-slag-icon +63526=oil|liquid-oil-icon +63525=cryofluid|liquid-cryofluid-icon +63524=underflow-gate|block-underflow-gate-medium +63523=plastanium-conveyor|block-plastanium-conveyor-medium diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index 37fbbb1048..ce47c0beab 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/sprites.atlas b/core/assets/sprites/sprites.atlas index 10b866b905..eb9c286ae2 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -20,7 +20,7 @@ mend-projector-top index: -1 mender-top rotate: false - xy: 1788, 925 + xy: 1481, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -34,497 +34,497 @@ overdrive-projector-top index: -1 shock-mine rotate: false - xy: 1743, 857 + xy: 1492, 883 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-arrow rotate: false - xy: 1954, 1129 + xy: 1929, 1139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 1988, 1129 + xy: 1328, 1087 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 1954, 1061 + xy: 1328, 1053 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 center rotate: false - xy: 1988, 1095 + xy: 1328, 1019 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-0 rotate: false - xy: 1278, 971 + xy: 890, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-full rotate: false - xy: 1278, 971 + xy: 890, 851 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-1 rotate: false - xy: 890, 851 + xy: 389, 15 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-2 rotate: false - xy: 1278, 937 + xy: 423, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-3 rotate: false - xy: 389, 15 + xy: 457, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-0 rotate: false - xy: 423, 10 + xy: 491, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-1 rotate: false - xy: 457, 10 + xy: 525, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-2 rotate: false - xy: 491, 10 + xy: 559, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-3 rotate: false - xy: 525, 10 + xy: 593, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-0 rotate: false - xy: 559, 10 + xy: 627, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-1 rotate: false - xy: 593, 10 + xy: 661, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-2 rotate: false - xy: 627, 12 + xy: 911, 11 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-3 rotate: false - xy: 661, 12 + xy: 945, 11 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-0 rotate: false - xy: 1236, 887 + xy: 695, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-1 rotate: false - xy: 1312, 971 + xy: 729, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-2 rotate: false - xy: 1312, 937 + xy: 763, 10 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-3 rotate: false - xy: 911, 11 + xy: 1158, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-0 rotate: false - xy: 945, 11 + xy: 1158, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-1 rotate: false - xy: 1278, 903 + xy: 1192, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-2 rotate: false - xy: 1312, 903 + xy: 1158, 1113 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-3 rotate: false - xy: 1209, 827 + xy: 1192, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 1988, 1027 + xy: 1345, 835 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 1368, 1035 + xy: 1345, 801 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 1402, 1027 + xy: 1345, 767 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 1436, 1019 + xy: 1345, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 1470, 1019 + xy: 1345, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 1504, 1019 + xy: 1345, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 1301, 835 + xy: 1345, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 1335, 835 + xy: 1345, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 1369, 843 + xy: 1345, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 1369, 809 + xy: 1345, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 1538, 993 + xy: 1345, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 1572, 993 + xy: 1397, 1175 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 1606, 993 + xy: 1396, 1141 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 1640, 993 + xy: 1396, 1107 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 1674, 993 + xy: 1396, 1073 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 1708, 993 + xy: 1396, 1039 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 1742, 993 + xy: 1396, 1005 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 1776, 993 + xy: 1396, 971 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 1810, 993 + xy: 1390, 937 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-0-0 rotate: false - xy: 1890, 959 + xy: 1481, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-1-0 rotate: false - xy: 1856, 891 + xy: 1481, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-2-0 rotate: false - xy: 1890, 925 + xy: 1353, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-3-0 rotate: false - xy: 1924, 959 + xy: 1353, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-4-0 rotate: false - xy: 1890, 891 + xy: 1353, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-5-0 rotate: false - xy: 1924, 925 + xy: 1353, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-6-0 rotate: false - xy: 1958, 959 + xy: 1353, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 1743, 823 + xy: 1515, 815 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 1777, 857 + xy: 1515, 781 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 1743, 789 + xy: 1515, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 1777, 823 + xy: 1515, 713 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 1811, 857 + xy: 1515, 679 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 1777, 789 + xy: 1515, 645 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 1811, 823 + xy: 1515, 611 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 1845, 857 + xy: 1515, 577 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 1811, 789 + xy: 1515, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 1845, 823 + xy: 1515, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 1879, 857 + xy: 1515, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 1845, 789 + xy: 1523, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 1879, 823 + xy: 1523, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 1913, 857 + xy: 1523, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 1879, 789 + xy: 1523, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 1913, 823 + xy: 1523, 305 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 1947, 857 + xy: 1523, 271 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 1913, 789 + xy: 1301, 263 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 1947, 823 + xy: 1301, 229 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -538,21 +538,28 @@ mass-driver-base index: -1 phase-conveyor-arrow rotate: false - xy: 1856, 959 + xy: 1481, 611 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 1822, 891 + xy: 1481, 577 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 1856, 925 + xy: 1481, 543 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +underflow-gate + rotate: false + xy: 1301, 161 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -699,56 +706,56 @@ pneumatic-drill-top index: -1 water-extractor rotate: false - xy: 1135, 1365 + xy: 1201, 1431 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 1201, 1431 + xy: 1201, 1365 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 1201, 1365 + xy: 1135, 1299 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 1135, 1299 + xy: 1267, 1431 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 1209, 691 + xy: 1192, 1113 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 1580, 1129 + xy: 1209, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 1852, 1197 + xy: 1311, 807 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 1716, 1027 + xy: 1328, 985 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -874,175 +881,175 @@ rubble-8-1 index: -1 bridge-conduit-arrow rotate: false - xy: 1988, 1163 + xy: 1329, 1189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 1988, 1163 + xy: 1329, 1189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 1920, 1061 + xy: 1328, 1155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 1954, 1095 + xy: 1328, 1121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 1546, 1027 + xy: 1362, 1141 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 1580, 1027 + xy: 1362, 1107 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 1614, 1027 + xy: 1362, 1073 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 1648, 1027 + xy: 1362, 1039 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 1648, 1027 + xy: 1362, 1039 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 1648, 1027 + xy: 1362, 1039 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 1648, 1027 + xy: 1362, 1039 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 1682, 1027 + xy: 1362, 1005 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 1750, 1027 + xy: 1322, 951 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 1784, 1027 + xy: 1322, 917 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 1818, 1027 + xy: 1322, 883 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 1852, 1027 + xy: 1362, 971 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 1852, 1027 + xy: 1362, 971 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 1886, 1027 + xy: 1356, 937 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 1920, 1027 + xy: 1356, 903 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 1954, 1027 + xy: 1356, 869 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate rotate: false - xy: 1686, 925 + xy: 1413, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate-top rotate: false - xy: 1720, 959 + xy: 1447, 577 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 1686, 891 + xy: 1413, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 1720, 925 + xy: 1447, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 1754, 959 + xy: 1447, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1070,133 +1077,133 @@ liquid-tank-top index: -1 phase-conduit-arrow rotate: false - xy: 1822, 959 + xy: 1481, 713 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 1788, 891 + xy: 1481, 679 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 1822, 925 + xy: 1481, 645 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-cap rotate: false - xy: 1924, 891 + xy: 1353, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-0 rotate: false - xy: 1958, 925 + xy: 1387, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-1 rotate: false - xy: 1992, 959 + xy: 1387, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-2 rotate: false - xy: 1958, 891 + xy: 1421, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-3 rotate: false - xy: 1992, 925 + xy: 1387, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-4 rotate: false - xy: 1992, 891 + xy: 1421, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-5 rotate: false - xy: 1505, 849 + xy: 1455, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-6 rotate: false - xy: 1505, 815 + xy: 1387, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 1539, 857 + xy: 1455, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 1539, 823 + xy: 1387, 305 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 1573, 857 + xy: 1421, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 1539, 789 + xy: 1455, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 1573, 823 + xy: 1421, 305 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 1607, 857 + xy: 1455, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery rotate: false - xy: 1209, 793 + xy: 1226, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-battery-full rotate: false - xy: 1209, 793 + xy: 1226, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1217,7 +1224,7 @@ block-battery-large-full index: -1 combustion-generator-top rotate: false - xy: 1988, 1061 + xy: 1363, 1175 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1238,14 +1245,14 @@ differential-generator-top index: -1 diode-arrow rotate: false - xy: 1369, 775 + xy: 1379, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-top rotate: false - xy: 1380, 993 + xy: 1379, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1301,14 +1308,14 @@ impact-reactor-plasma-3 index: -1 power-source rotate: false - xy: 1505, 781 + xy: 1421, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 1675, 857 + xy: 1489, 305 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1329,7 +1336,7 @@ thorium-reactor-lights index: -1 turbine-generator-top rotate: false - xy: 1069, 1431 + xy: 1069, 1365 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1455,21 +1462,21 @@ plastanium-compressor-top index: -1 pulverizer rotate: false - xy: 1573, 789 + xy: 1455, 305 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 1607, 823 + xy: 1489, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 1641, 857 + xy: 1489, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1481,51 +1488,58 @@ separator-liquid orig: 64, 64 offset: 0, 0 index: -1 -spore-press +separator-spinner rotate: false - xy: 1143, 596 + xy: 1143, 662 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -spore-press-frame0 +spore-press rotate: false xy: 1143, 530 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -spore-press-frame1 +spore-press-frame0 rotate: false xy: 1143, 464 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -spore-press-frame2 +spore-press-frame1 rotate: false xy: 1185, 398 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -spore-press-liquid +spore-press-frame2 rotate: false xy: 1185, 332 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 -spore-press-top +spore-press-liquid rotate: false xy: 1185, 266 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +spore-press-top + rotate: false + xy: 1177, 200 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 unloader-center rotate: false - xy: 2015, 857 + xy: 1301, 127 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1539,7 +1553,7 @@ arc-heat index: -1 block-1 rotate: false - xy: 1209, 759 + xy: 1158, 1079 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1567,7 +1581,7 @@ block-4 index: -1 hail-heat rotate: false - xy: 1069, 1257 + xy: 887, 1593 size: 40, 40 orig: 40, 40 offset: 0, 0 @@ -1616,14 +1630,14 @@ salvo-panel-right index: -1 scorch-heat rotate: false - xy: 1675, 823 + xy: 1421, 271 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 1267, 1365 + xy: 1201, 1299 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1742,7 +1756,7 @@ rally-point index: -1 repair-point-base rotate: false - xy: 1641, 823 + xy: 1489, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1763,7 +1777,7 @@ revenant-factory-top index: -1 spirit-factory-top rotate: false - xy: 1143, 662 + xy: 1143, 596 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1777,7 +1791,7 @@ titan-factory index: -1 wraith-factory-top rotate: false - xy: 1201, 1299 + xy: 1333, 1431 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1791,14 +1805,14 @@ door-large-open index: -1 door-open rotate: false - xy: 1380, 959 + xy: 1379, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 insulator-wall rotate: false - xy: 1414, 985 + xy: 1431, 1189 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -1854,49 +1868,49 @@ scrap-wall-large4 index: -1 scrap-wall2 rotate: false - xy: 1709, 857 + xy: 1455, 271 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall3 rotate: false - xy: 1675, 789 + xy: 1489, 271 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall4 rotate: false - xy: 1709, 823 + xy: 1492, 917 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall5 rotate: false - xy: 1709, 823 + xy: 1492, 917 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bullet rotate: false - xy: 1095, 7 + xy: 1153, 14 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 1149, 14 + xy: 1207, 14 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 casing rotate: false - xy: 2038, 2031 + xy: 1176, 993 size: 8, 16 orig: 8, 16 offset: 0, 0 @@ -1910,7 +1924,7 @@ circle-end index: -1 circle-mid rotate: false - xy: 2022, 1030 + xy: 1575, 546 size: 1, 199 orig: 1, 199 offset: 0, 0 @@ -1924,7 +1938,7 @@ circle-shadow index: -1 error rotate: false - xy: 1991, 1331 + xy: 1749, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -1980,35 +1994,35 @@ scale_marker index: -1 scorch1 rotate: false - xy: 1243, 673 + xy: 1335, 189 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch2 rotate: false - xy: 1243, 571 + xy: 1498, 1053 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch3 rotate: false - xy: 1243, 469 + xy: 1498, 951 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch4 rotate: false - xy: 1251, 367 + xy: 1526, 849 size: 28, 100 orig: 28, 100 offset: 0, 0 index: -1 scorch5 rotate: false - xy: 1273, 673 + xy: 1549, 747 size: 28, 100 orig: 28, 100 offset: 0, 0 @@ -2022,28 +2036,28 @@ shell index: -1 shell-back rotate: false - xy: 1186, 861 + xy: 1371, 1209 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shot rotate: false - xy: 1709, 789 + xy: 1492, 849 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 transfer rotate: false - xy: 979, 259 + xy: 2043, 1231 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 1981, 857 + xy: 1301, 195 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2057,7 +2071,7 @@ transfer-end index: -1 white rotate: false - xy: 1209, 464 + xy: 1251, 266 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -2071,7 +2085,7 @@ arc index: -1 block-arc-full rotate: false - xy: 1209, 725 + xy: 1226, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2085,42 +2099,42 @@ block-blast-drill-full index: -1 block-bridge-conduit-full rotate: false - xy: 1209, 657 + xy: 1260, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 1209, 657 + xy: 1260, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-bridge-conveyor-full rotate: false - xy: 1209, 623 + xy: 1158, 1045 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 1209, 623 + xy: 1158, 1045 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-char-full rotate: false - xy: 1209, 589 + xy: 1260, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cliffs-full rotate: false - xy: 1209, 555 + xy: 1226, 1113 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2141,14 +2155,14 @@ coal-centrifuge index: -1 block-combustion-generator-full rotate: false - xy: 1209, 521 + xy: 1192, 1079 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 1209, 521 + xy: 1192, 1079 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2169,7 +2183,7 @@ command-center index: -1 block-conduit-full rotate: false - xy: 1209, 487 + xy: 1294, 1181 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2190,28 +2204,28 @@ container index: -1 block-conveyor-full rotate: false - xy: 695, 10 + xy: 1158, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 695, 10 + xy: 1158, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-copper-wall-full rotate: false - xy: 729, 10 + xy: 1294, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 729, 10 + xy: 1294, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2274,7 +2288,7 @@ core-shard index: -1 block-craters-full rotate: false - xy: 763, 10 + xy: 1260, 1113 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2316,70 +2330,70 @@ block-dagger-factory-full index: -1 block-dark-metal-full rotate: false - xy: 1334, 1013 + xy: 1226, 1079 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-1-full rotate: false - xy: 1346, 979 + xy: 1192, 1045 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-2-full rotate: false - xy: 1346, 945 + xy: 1294, 1113 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-3-full rotate: false - xy: 1346, 911 + xy: 1260, 1079 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-4-full rotate: false - xy: 1270, 869 + xy: 1226, 1045 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-5-full rotate: false - xy: 1304, 869 + xy: 1192, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-6-full rotate: false - xy: 1346, 877 + xy: 1294, 1079 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-full rotate: false - xy: 1342, 1181 + xy: 1260, 1045 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-tainted-water-full rotate: false - xy: 1342, 1147 + xy: 1226, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-water-full rotate: false - xy: 1342, 1113 + xy: 1294, 1045 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2400,7 +2414,7 @@ dart-mech-pad index: -1 block-deepwater-full rotate: false - xy: 1342, 1079 + xy: 1260, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2435,14 +2449,14 @@ differential-generator index: -1 block-diode-full rotate: false - xy: 1376, 1205 + xy: 1294, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 diode rotate: false - xy: 1376, 1205 + xy: 1294, 1011 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2463,14 +2477,14 @@ distributor index: -1 block-door-full rotate: false - xy: 1376, 1171 + xy: 1186, 977 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door rotate: false - xy: 1376, 1171 + xy: 1186, 977 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2498,14 +2512,14 @@ block-draug-factory-full index: -1 block-dunerocks-full rotate: false - xy: 1376, 1137 + xy: 1186, 943 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-duo-full rotate: false - xy: 1376, 1103 + xy: 1220, 977 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2575,70 +2589,70 @@ graphite-press index: -1 block-grass-full rotate: false - xy: 1410, 1197 + xy: 1186, 909 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hail-full rotate: false - xy: 1410, 1163 + xy: 1254, 977 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-holostone-full rotate: false - xy: 1410, 1129 + xy: 1220, 943 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hotrock-full rotate: false - xy: 1410, 1095 + xy: 1186, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-full rotate: false - xy: 1376, 1069 + xy: 1288, 977 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-snow-full rotate: false - xy: 1410, 1061 + xy: 1254, 943 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icerocks-full rotate: false - xy: 1444, 1189 + xy: 1220, 909 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ignarock-full rotate: false - xy: 1444, 1155 + xy: 1288, 943 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-illuminator-full rotate: false - xy: 1478, 1189 + xy: 1254, 909 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator rotate: false - xy: 1478, 1189 + xy: 1254, 909 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2652,56 +2666,56 @@ block-impact-reactor-full index: -1 block-incinerator-full rotate: false - xy: 1444, 1121 + xy: 1220, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 incinerator rotate: false - xy: 1444, 1121 + xy: 1220, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-inverted-sorter-full rotate: false - xy: 1478, 1155 + xy: 1288, 909 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 inverted-sorter rotate: false - xy: 1478, 1155 + xy: 1288, 909 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-item-source-full rotate: false - xy: 1444, 1087 + xy: 1254, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source rotate: false - xy: 1444, 1087 + xy: 1254, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-item-void-full rotate: false - xy: 1478, 1121 + xy: 1288, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void rotate: false - xy: 1478, 1121 + xy: 1288, 875 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2722,14 +2736,14 @@ javelin-ship-pad index: -1 block-junction-full rotate: false - xy: 1478, 1087 + xy: 1209, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction rotate: false - xy: 1478, 1087 + xy: 1209, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2792,35 +2806,35 @@ launch-pad-large index: -1 block-liquid-junction-full rotate: false - xy: 1444, 1053 + xy: 1209, 807 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 1444, 1053 + xy: 1209, 807 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-router-full rotate: false - xy: 1478, 1053 + xy: 1243, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-source-full rotate: false - xy: 1512, 1189 + xy: 1209, 773 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source rotate: false - xy: 1512, 1189 + xy: 1209, 773 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2834,21 +2848,21 @@ block-liquid-tank-full index: -1 block-liquid-void-full rotate: false - xy: 1512, 1155 + xy: 1277, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-void rotate: false - xy: 1512, 1155 + xy: 1277, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-magmarock-full rotate: false - xy: 1512, 1121 + xy: 1243, 807 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2869,14 +2883,14 @@ block-mechanical-drill-full index: -1 block-mechanical-pump-full rotate: false - xy: 1512, 1087 + xy: 1209, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 1512, 1087 + xy: 1209, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2890,14 +2904,14 @@ block-meltdown-full index: -1 block-melter-full rotate: false - xy: 1512, 1053 + xy: 1277, 807 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter rotate: false - xy: 1512, 1053 + xy: 1277, 807 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -2918,70 +2932,70 @@ mend-projector index: -1 block-mender-full rotate: false - xy: 1546, 1197 + xy: 1243, 773 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender rotate: false - xy: 1546, 1197 + xy: 1243, 773 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-message-full rotate: false - xy: 1546, 1163 + xy: 1209, 705 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message rotate: false - xy: 1546, 1163 + xy: 1209, 705 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-2-full rotate: false - xy: 1580, 1197 + xy: 1277, 773 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-3-full rotate: false - xy: 1546, 1129 + xy: 1243, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-5-full rotate: false - xy: 1580, 1163 + xy: 1209, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-damaged-full rotate: false - xy: 1614, 1197 + xy: 1277, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-full rotate: false - xy: 1546, 1095 + xy: 1243, 705 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-moss-full rotate: false - xy: 1614, 1163 + xy: 1277, 705 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3023,256 +3037,46 @@ omega-mech-pad index: -1 block-ore-coal-full rotate: false - xy: 1648, 1197 + xy: 1243, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-coal-medium - rotate: false - xy: 1648, 1197 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-coal-large - rotate: false - xy: 887, 1635 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-coal-small - rotate: false - xy: 873, 1 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-coal-tiny - rotate: false - xy: 797, 26 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-coal-xlarge - rotate: false - xy: 1448, 1381 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 block-ore-copper-full rotate: false - xy: 1546, 1061 + xy: 1209, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-copper-medium - rotate: false - xy: 1546, 1061 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-copper-large - rotate: false - xy: 887, 1593 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-copper-small - rotate: false - xy: 1342, 1053 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-copper-tiny - rotate: false - xy: 797, 8 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-copper-xlarge - rotate: false - xy: 1498, 1381 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 block-ore-lead-full rotate: false - xy: 1580, 1095 + xy: 1277, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-lead-medium - rotate: false - xy: 1580, 1095 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-lead-large - rotate: false - xy: 887, 1551 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-lead-small - rotate: false - xy: 1224, 861 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-lead-tiny - rotate: false - xy: 204, 1129 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-lead-xlarge - rotate: false - xy: 1548, 1381 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 block-ore-scrap-full rotate: false - xy: 1614, 1129 + xy: 1243, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-scrap-medium - rotate: false - xy: 1614, 1129 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-scrap-large - rotate: false - xy: 607, 1375 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-scrap-small - rotate: false - xy: 259, 1379 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-scrap-tiny - rotate: false - xy: 566, 929 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-scrap-xlarge - rotate: false - xy: 1598, 1381 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 block-ore-thorium-full rotate: false - xy: 1648, 1163 + xy: 1209, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-thorium-medium - rotate: false - xy: 1648, 1163 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-thorium-large - rotate: false - xy: 673, 1243 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-thorium-small - rotate: false - xy: 960, 966 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-thorium-tiny - rotate: false - xy: 660, 831 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-thorium-xlarge - rotate: false - xy: 1648, 1381 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 block-ore-titanium-full rotate: false - xy: 1682, 1197 + xy: 1277, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-titanium-medium - rotate: false - xy: 1682, 1197 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-titanium-large - rotate: false - xy: 945, 752 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-titanium-small - rotate: false - xy: 901, 1820 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-titanium-tiny - rotate: false - xy: 749, 733 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-titanium-xlarge - rotate: false - xy: 1698, 1381 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 block-overdrive-projector-full rotate: false xy: 821, 1545 @@ -3289,21 +3093,21 @@ overdrive-projector index: -1 block-overflow-gate-full rotate: false - xy: 1580, 1061 + xy: 1243, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 1580, 1061 + xy: 1243, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pebbles-full rotate: false - xy: 1614, 1095 + xy: 1209, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3317,42 +3121,42 @@ block-phantom-factory-full index: -1 block-phase-conduit-full rotate: false - xy: 1648, 1129 + xy: 1277, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 1648, 1129 + xy: 1277, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-conveyor-full rotate: false - xy: 1682, 1163 + xy: 1243, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 1682, 1163 + xy: 1243, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-wall-full rotate: false - xy: 1716, 1197 + xy: 1209, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 1716, 1197 + xy: 1209, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3380,7 +3184,7 @@ block-phase-weaver-full index: -1 block-pine-full rotate: false - xy: 1748, 1381 + xy: 1549, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3401,21 +3205,21 @@ plastanium-compressor index: -1 block-plastanium-conveyor-full rotate: false - xy: 1614, 1061 + xy: 1277, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-plastanium-wall-full rotate: false - xy: 1648, 1095 + xy: 1243, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall rotate: false - xy: 1648, 1095 + xy: 1243, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3436,7 +3240,7 @@ plastanium-wall-large index: -1 block-plated-conduit-full rotate: false - xy: 1682, 1129 + xy: 1209, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3450,14 +3254,14 @@ block-pneumatic-drill-full index: -1 block-power-node-full rotate: false - xy: 1716, 1163 + xy: 1277, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node rotate: false - xy: 1716, 1163 + xy: 1277, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3478,35 +3282,35 @@ power-node-large index: -1 block-power-source-full rotate: false - xy: 1750, 1197 + xy: 1243, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-power-void-full rotate: false - xy: 1648, 1061 + xy: 1277, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void rotate: false - xy: 1648, 1061 + xy: 1277, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulse-conduit-full rotate: false - xy: 1682, 1095 + xy: 1243, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulverizer-full rotate: false - xy: 1716, 1129 + xy: 1277, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3527,7 +3331,7 @@ pyratite-mixer index: -1 block-repair-point-full rotate: false - xy: 1750, 1163 + xy: 1251, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3548,14 +3352,14 @@ block-ripple-full index: -1 block-rock-full rotate: false - xy: 1798, 1381 + xy: 1599, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-rocks-full rotate: false - xy: 1784, 1197 + xy: 1251, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3576,14 +3380,14 @@ rotary-pump index: -1 block-router-full rotate: false - xy: 1682, 1061 + xy: 1251, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router rotate: false - xy: 1682, 1061 + xy: 1251, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3604,14 +3408,14 @@ rtg-generator index: -1 block-salt-full rotate: false - xy: 1716, 1095 + xy: 1251, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-saltrocks-full rotate: false - xy: 1750, 1129 + xy: 1251, 297 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3625,28 +3429,28 @@ block-salvo-full index: -1 block-sand-boulder-full rotate: false - xy: 1784, 1163 + xy: 1285, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-full rotate: false - xy: 1818, 1197 + xy: 1285, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-water-full rotate: false - xy: 1716, 1061 + xy: 1285, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sandrocks-full rotate: false - xy: 1750, 1095 + xy: 1285, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3660,21 +3464,21 @@ block-scatter-full index: -1 block-scorch-full rotate: false - xy: 1784, 1129 + xy: 1285, 297 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-full rotate: false - xy: 1818, 1163 + xy: 1311, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall1 rotate: false - xy: 1818, 1163 + xy: 1311, 841 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3730,35 +3534,35 @@ separator index: -1 block-shale-boulder-full rotate: false - xy: 1750, 1061 + xy: 1311, 773 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-full rotate: false - xy: 1784, 1095 + xy: 1311, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shalerocks-full rotate: false - xy: 1818, 1129 + xy: 1311, 705 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shock-mine-full rotate: false - xy: 1852, 1163 + xy: 1311, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shrubs-full rotate: false - xy: 1886, 1197 + xy: 1311, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3779,42 +3583,42 @@ silicon-smelter index: -1 block-snow-full rotate: false - xy: 1784, 1061 + xy: 1311, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-pine-full rotate: false - xy: 1848, 1381 + xy: 1649, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snowrock-full rotate: false - xy: 1898, 1381 + xy: 1699, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snowrocks-full rotate: false - xy: 1818, 1095 + xy: 1311, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-solar-panel-full rotate: false - xy: 1852, 1129 + xy: 1311, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 1852, 1129 + xy: 1311, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3835,21 +3639,21 @@ solar-panel-large index: -1 block-sorter-full rotate: false - xy: 1886, 1163 + xy: 1311, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter rotate: false - xy: 1886, 1163 + xy: 1311, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spawn-full rotate: false - xy: 1920, 1197 + xy: 1311, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3870,21 +3674,21 @@ block-spirit-factory-full index: -1 block-spore-cluster-full rotate: false - xy: 1011, 1544 + xy: 887, 1635 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-moss-full rotate: false - xy: 1818, 1061 + xy: 1319, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-pine-full rotate: false - xy: 1948, 1381 + xy: 1749, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -3898,14 +3702,14 @@ block-spore-press-full index: -1 block-sporerocks-full rotate: false - xy: 1852, 1095 + xy: 1319, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-stone-full rotate: false - xy: 1886, 1129 + xy: 1319, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3926,14 +3730,14 @@ surge-tower index: -1 block-surge-wall-full rotate: false - xy: 1920, 1163 + xy: 1319, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 1920, 1163 + xy: 1319, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3961,14 +3765,14 @@ block-swarmer-full index: -1 block-tainted-water-full rotate: false - xy: 1954, 1197 + xy: 1319, 297 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tar-full rotate: false - xy: 1852, 1061 + xy: 1975, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3989,7 +3793,7 @@ tau-mech-pad index: -1 block-tendrils-full rotate: false - xy: 1886, 1095 + xy: 2009, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4038,14 +3842,14 @@ thorium-reactor index: -1 block-thorium-wall-full rotate: false - xy: 1920, 1129 + xy: 1725, 1155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 1920, 1129 + xy: 1725, 1155 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4087,28 +3891,28 @@ block-titan-factory-full index: -1 block-titanium-conveyor-full rotate: false - xy: 1954, 1163 + xy: 1759, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 1954, 1163 + xy: 1759, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-titanium-wall-full rotate: false - xy: 1988, 1197 + xy: 1793, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall rotate: false - xy: 1988, 1197 + xy: 1793, 1147 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4155,16 +3959,23 @@ turbine-generator orig: 64, 64 offset: 0, 0 index: -1 +block-underflow-gate-full + rotate: false + xy: 1827, 1147 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 block-unloader-full rotate: false - xy: 1886, 1061 + xy: 1861, 1139 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader rotate: false - xy: 1886, 1061 + xy: 1861, 1139 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4192,7 +4003,7 @@ block-water-extractor-full index: -1 block-water-full rotate: false - xy: 1920, 1095 + xy: 1895, 1139 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4227,56 +4038,56 @@ block-wraith-factory-full index: -1 cracks-1-0 rotate: false - xy: 1844, 993 + xy: 1390, 903 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-1 rotate: false - xy: 1878, 993 + xy: 1390, 869 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-2 rotate: false - xy: 1912, 993 + xy: 1379, 835 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-3 rotate: false - xy: 1946, 993 + xy: 1379, 801 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-4 rotate: false - xy: 1980, 993 + xy: 1379, 767 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-5 rotate: false - xy: 2014, 993 + xy: 1379, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-6 rotate: false - xy: 1301, 801 + xy: 1379, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-7 rotate: false - xy: 1335, 801 + xy: 1379, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4514,7 +4325,7 @@ cyclone index: -1 duo rotate: false - xy: 1380, 925 + xy: 1379, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4528,525 +4339,525 @@ fuse index: -1 hail rotate: false - xy: 1380, 891 + xy: 1379, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-blast-compound-large rotate: false - xy: 1219, 1257 + xy: 887, 1551 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-blast-compound-medium rotate: false - xy: 1448, 985 + xy: 1431, 1155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-blast-compound-small rotate: false - xy: 1251, 341 + xy: 259, 1379 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-blast-compound-tiny rotate: false - xy: 623, 1709 + xy: 797, 26 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-blast-compound-xlarge rotate: false - xy: 1575, 1281 + xy: 1999, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-coal-large rotate: false - xy: 1219, 1215 + xy: 607, 1375 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-coal-medium rotate: false - xy: 1448, 951 + xy: 1430, 1121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal-small rotate: false - xy: 1273, 647 + xy: 960, 966 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-coal-tiny rotate: false - xy: 649, 1399 + xy: 797, 8 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-coal-xlarge rotate: false - xy: 1625, 1281 + xy: 1849, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-copper-large rotate: false - xy: 1208, 1007 + xy: 673, 1243 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-copper-medium rotate: false - xy: 1448, 917 + xy: 1430, 1087 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper-small rotate: false - xy: 285, 1379 + xy: 1237, 1273 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-copper-tiny rotate: false - xy: 987, 776 + xy: 204, 1129 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-copper-xlarge rotate: false - xy: 1675, 1281 + xy: 1899, 1273 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-graphite-large rotate: false - xy: 1011, 1502 + xy: 945, 752 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-graphite-medium rotate: false - xy: 1482, 917 + xy: 1464, 1087 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite-small rotate: false - xy: 2007, 831 + xy: 901, 1820 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-graphite-tiny rotate: false - xy: 924, 867 + xy: 566, 929 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-graphite-xlarge rotate: false - xy: 1725, 1281 + xy: 1949, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-lead-large rotate: false - xy: 1011, 1460 + xy: 1011, 1544 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-lead-medium rotate: false - xy: 1448, 883 + xy: 1464, 1053 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead-small rotate: false - xy: 1269, 775 + xy: 1251, 271 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-lead-tiny rotate: false - xy: 924, 849 + xy: 660, 831 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-lead-xlarge rotate: false - xy: 1775, 1281 + xy: 1999, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-metaglass-large rotate: false - xy: 99, 2 + xy: 1069, 1257 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-metaglass-medium rotate: false - xy: 1403, 849 + xy: 1464, 1019 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass-small rotate: false - xy: 1295, 775 + xy: 1301, 101 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-metaglass-tiny rotate: false - xy: 1345, 1239 + xy: 749, 733 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-metaglass-xlarge rotate: false - xy: 1825, 1281 + xy: 1325, 1315 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-phase-fabric-large rotate: false - xy: 1261, 1215 + xy: 1725, 1189 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-phase-fabric-medium rotate: false - xy: 1437, 849 + xy: 1430, 951 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric-small rotate: false - xy: 1251, 315 + xy: 1335, 163 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-phase-fabric-tiny rotate: false - xy: 1345, 1221 + xy: 623, 1709 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-phase-fabric-xlarge rotate: false - xy: 1875, 1281 + xy: 1375, 1297 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-plastanium-large rotate: false - xy: 1303, 1215 + xy: 1011, 1502 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-plastanium-medium rotate: false - xy: 1437, 815 + xy: 1424, 917 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium-small rotate: false - xy: 1273, 621 + xy: 1549, 721 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-plastanium-tiny rotate: false - xy: 1516, 1001 + xy: 1425, 1329 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-plastanium-xlarge rotate: false - xy: 1925, 1281 + xy: 1325, 1265 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-pyratite-large rotate: false - xy: 1258, 1173 + xy: 1111, 1257 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-pyratite-medium rotate: false - xy: 1437, 781 + xy: 1458, 917 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite-small rotate: false - xy: 1321, 775 + xy: 285, 1379 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-pyratite-tiny rotate: false - xy: 2026, 975 + xy: 1825, 1305 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-pyratite-xlarge rotate: false - xy: 1975, 1281 + xy: 1375, 1247 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-sand-large rotate: false - xy: 1258, 1131 + xy: 1011, 1460 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-sand-medium rotate: false - xy: 1471, 781 + xy: 1424, 849 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand-small rotate: false - xy: 1303, 749 + xy: 1301, 75 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-sand-tiny rotate: false - xy: 1209, 469 + xy: 649, 1399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-sand-xlarge rotate: false - xy: 1267, 1257 + xy: 1425, 1273 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-scrap-large rotate: false - xy: 1300, 1173 + xy: 1153, 1257 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-scrap-medium rotate: false - xy: 1516, 925 + xy: 1413, 815 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap-small rotate: false - xy: 1251, 289 + xy: 1335, 137 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-scrap-tiny rotate: false - xy: 1250, 869 + xy: 987, 776 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-scrap-xlarge rotate: false - xy: 1317, 1257 + xy: 1425, 1223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-silicon-large rotate: false - xy: 1258, 1089 + xy: 1195, 1257 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-silicon-medium rotate: false - xy: 1516, 891 + xy: 1447, 815 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon-small rotate: false - xy: 1273, 595 + xy: 1549, 695 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-silicon-tiny rotate: false - xy: 1347, 783 + xy: 924, 867 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-silicon-xlarge rotate: false - xy: 1367, 1239 + xy: 1475, 1273 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-spore-pod-large rotate: false - xy: 1300, 1131 + xy: 1119, 1215 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-spore-pod-medium rotate: false - xy: 1584, 959 + xy: 1447, 781 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod-small rotate: false - xy: 1303, 723 + xy: 1549, 669 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-tiny rotate: false - xy: 1329, 757 + xy: 924, 849 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-spore-pod-xlarge rotate: false - xy: 1417, 1231 + xy: 1475, 1223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-surge-alloy-large rotate: false - xy: 1300, 1089 + xy: 1161, 1215 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-surge-alloy-medium rotate: false - xy: 1584, 925 + xy: 1447, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy-small rotate: false - xy: 1273, 569 + xy: 1549, 643 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-surge-alloy-tiny rotate: false - xy: 1251, 271 + xy: 1119, 1197 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-surge-alloy-xlarge rotate: false - xy: 1467, 1223 + xy: 1525, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-thorium-large rotate: false - xy: 1258, 1047 + xy: 99, 2 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-thorium-medium rotate: false - xy: 1584, 891 + xy: 1447, 713 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium-small rotate: false - xy: 1303, 697 + xy: 1549, 617 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-thorium-tiny rotate: false - xy: 1273, 473 + xy: 1158, 993 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -5060,35 +4871,35 @@ item-thorium-xlarge index: -1 item-titanium-large rotate: false - xy: 1300, 1047 + xy: 1203, 1215 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-titanium-medium rotate: false - xy: 1652, 959 + xy: 1447, 679 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium-small rotate: false - xy: 1273, 543 + xy: 1549, 591 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-titanium-tiny rotate: false - xy: 1299, 627 + xy: 2025, 1263 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-titanium-xlarge rotate: false - xy: 1575, 1231 + xy: 1575, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5102,140 +4913,140 @@ lancer index: -1 liquid-cryofluid-large rotate: false - xy: 1250, 1005 + xy: 1767, 1181 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-cryofluid-medium rotate: false - xy: 1652, 925 + xy: 1447, 645 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid-small rotate: false - xy: 1273, 517 + xy: 1549, 565 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-cryofluid-tiny rotate: false - xy: 222, 1129 + xy: 1387, 477 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-cryofluid-xlarge rotate: false - xy: 1775, 1231 + xy: 1675, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-oil-large rotate: false - xy: 1292, 1005 + xy: 1245, 1215 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-oil-medium rotate: false - xy: 1652, 891 + xy: 1447, 611 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil-small rotate: false - xy: 1273, 491 + xy: 1549, 539 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-oil-tiny rotate: false - xy: 584, 929 + xy: 1365, 273 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-oil-xlarge rotate: false - xy: 1825, 1231 + xy: 1675, 1231 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-slag-large rotate: false - xy: 1236, 963 + xy: 1287, 1215 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-slag-medium rotate: false - xy: 1754, 925 + xy: 1447, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag-small rotate: false - xy: 1303, 671 + xy: 1549, 513 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-slag-tiny rotate: false - xy: 678, 831 + xy: 1277, 279 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-slag-xlarge rotate: false - xy: 1875, 1231 + xy: 1725, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-water-large rotate: false - xy: 1236, 921 + xy: 1329, 1223 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-water-medium rotate: false - xy: 1754, 891 + xy: 1481, 781 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water-small rotate: false - xy: 1299, 645 + xy: 1549, 487 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-water-tiny rotate: false - xy: 767, 733 + xy: 222, 1129 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-water-xlarge rotate: false - xy: 1925, 1231 + xy: 1725, 1231 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5249,21 +5060,21 @@ mass-driver index: -1 mech-alpha-mech-full rotate: false - xy: 1975, 1231 + xy: 1775, 1273 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-dart-ship-full rotate: false - xy: 1119, 1249 + xy: 1775, 1223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-delta-mech-full rotate: false - xy: 1169, 1249 + xy: 1825, 1231 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5277,28 +5088,28 @@ mech-glaive-ship-full index: -1 mech-javelin-ship-full rotate: false - xy: 1119, 1199 + xy: 1875, 1223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mech-omega-mech-full rotate: false - xy: 1333, 1374 + xy: 1243, 70 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-tau-mech-full rotate: false - xy: 1243, 70 + xy: 1267, 1307 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 mech-trident-ship-full rotate: false - xy: 1267, 1307 + xy: 157, 25 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -5312,7 +5123,7 @@ meltdown index: -1 repair-point rotate: false - xy: 1607, 789 + xy: 1489, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -5340,7 +5151,7 @@ scatter index: -1 scorch rotate: false - xy: 1641, 789 + xy: 1387, 271 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -5354,7 +5165,7 @@ spectre index: -1 swarmer rotate: false - xy: 1177, 200 + xy: 1177, 134 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -5368,14 +5179,14 @@ unit-chaos-array-full index: -1 unit-crawler-full rotate: false - xy: 1208, 1149 + xy: 1575, 1181 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-dagger-full rotate: false - xy: 1208, 1099 + xy: 1625, 1181 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5389,217 +5200,217 @@ unit-eradicator-full index: -1 unit-eruptor-full rotate: false - xy: 1069, 1365 + xy: 1135, 1431 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-fortress-full rotate: false - xy: 1135, 1431 + xy: 1069, 1299 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-titan-full rotate: false - xy: 1069, 1299 + xy: 1135, 1365 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave rotate: false - xy: 1267, 1431 + xy: 1267, 1365 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 1414, 951 + xy: 1465, 1189 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal rotate: false - xy: 1414, 917 + xy: 1465, 1155 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper rotate: false - xy: 1482, 985 + xy: 1464, 1121 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite rotate: false - xy: 1482, 951 + xy: 1430, 1053 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead rotate: false - xy: 1414, 883 + xy: 1430, 1019 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass rotate: false - xy: 1482, 883 + xy: 1430, 985 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 1403, 815 + xy: 1464, 985 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 1403, 781 + xy: 1464, 951 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 1471, 849 + xy: 1424, 883 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand rotate: false - xy: 1471, 815 + xy: 1458, 883 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap rotate: false - xy: 1516, 959 + xy: 1458, 849 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 1550, 959 + xy: 1413, 781 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod rotate: false - xy: 1550, 925 + xy: 1413, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 1550, 891 + xy: 1413, 713 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 1618, 959 + xy: 1413, 679 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 1618, 925 + xy: 1413, 645 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid rotate: false - xy: 1618, 891 + xy: 1413, 611 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil rotate: false - xy: 1686, 959 + xy: 1413, 577 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag rotate: false - xy: 1720, 891 + xy: 1413, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water rotate: false - xy: 1788, 959 + xy: 1481, 815 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 alpha-mech rotate: false - xy: 1398, 1447 + xy: 1399, 1447 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-mech-base rotate: false - xy: 1203, 18 + xy: 1261, 20 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-mech-leg rotate: false - xy: 1253, 20 + xy: 1399, 1397 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech rotate: false - xy: 1791, 1331 + xy: 1549, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-base rotate: false - xy: 1841, 1331 + xy: 1599, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 1891, 1331 + xy: 1649, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 157, 25 + xy: 215, 25 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -5613,42 +5424,42 @@ omega-mech-armor index: -1 omega-mech-base rotate: false - xy: 215, 25 + xy: 273, 25 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 omega-mech-leg rotate: false - xy: 273, 25 + xy: 331, 25 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 979, 3 + xy: 1037, 3 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 1186, 949 + xy: 1975, 1181 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 1186, 899 + xy: 1525, 1181 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 1741, 1331 + xy: 1499, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5662,21 +5473,21 @@ glaive-ship index: -1 javelin-ship rotate: false - xy: 1625, 1231 + xy: 1575, 1231 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 1675, 1231 + xy: 1625, 1281 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 1037, 3 + xy: 1095, 3 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -5697,7 +5508,7 @@ circle index: -1 shape-3 rotate: false - xy: 1333, 1432 + xy: 1333, 1366 size: 63, 63 orig: 63, 63 offset: 0, 0 @@ -5725,70 +5536,70 @@ chaos-array-leg index: -1 crater rotate: false - xy: 1947, 797 + xy: 1499, 1197 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 crater-base rotate: false - xy: 1981, 831 + xy: 873, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 crater-leg rotate: false - xy: 1243, 775 + xy: 1499, 1171 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 crawler rotate: false - xy: 1441, 1331 + xy: 1899, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-base rotate: false - xy: 1491, 1331 + xy: 1949, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-leg rotate: false - xy: 1541, 1331 + xy: 1999, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger rotate: false - xy: 1591, 1331 + xy: 1398, 1347 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 1641, 1331 + xy: 1448, 1323 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 1691, 1331 + xy: 1267, 1257 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 draug rotate: false - xy: 1941, 1331 + xy: 1699, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5879,14 +5690,14 @@ lich index: -1 phantom rotate: false - xy: 331, 25 + xy: 815, 7 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 power-cell rotate: false - xy: 815, 7 + xy: 979, 3 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -5907,63 +5718,63 @@ revenant index: -1 spirit rotate: false - xy: 1158, 1049 + xy: 1875, 1173 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan rotate: false - xy: 1177, 134 + xy: 1177, 68 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 1177, 68 + xy: 1069, 1431 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wraith rotate: false - xy: 1208, 1049 + xy: 1675, 1181 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 artillery-equip rotate: false - xy: 1325, 1307 + xy: 1449, 1373 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 1398, 1397 + xy: 1499, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bomber-equip rotate: false - xy: 1998, 1381 + xy: 1799, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 1998, 1381 + xy: 1799, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 chain-blaster-equip rotate: false - xy: 1391, 1347 + xy: 1849, 1381 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5984,63 +5795,63 @@ eradication-equip index: -1 eruption-equip rotate: false - xy: 1375, 1289 + xy: 1799, 1323 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flakgun-equip rotate: false - xy: 1425, 1281 + xy: 1849, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 1475, 1273 + xy: 1899, 1323 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 heal-blaster-equip rotate: false - xy: 1525, 1281 + xy: 1949, 1331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lich-missiles-equip rotate: false - xy: 1725, 1231 + xy: 1625, 1231 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 reaper-gun-equip rotate: false - xy: 1169, 1199 + xy: 1925, 1223 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-missiles-equip rotate: false - xy: 1158, 1149 + xy: 1975, 1231 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 1158, 1099 + xy: 1825, 1181 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 1158, 999 + xy: 1925, 1173 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -7438,7 +7249,7 @@ alpha-bg index: -1 bar rotate: false - xy: 1545, 225 + xy: 986, 337 size: 27, 36 split: 9, 9, 9, 9 orig: 27, 36 @@ -7446,7 +7257,7 @@ bar index: -1 bar-top rotate: false - xy: 751, 578 + xy: 955, 303 size: 27, 36 split: 9, 10, 9, 10 orig: 27, 36 @@ -7461,7 +7272,7 @@ block-alloy-smelter-large index: -1 block-alloy-smelter-medium rotate: false - xy: 901, 88 + xy: 1929, 899 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -7475,7 +7286,7 @@ block-alloy-smelter-small index: -1 block-alloy-smelter-tiny rotate: false - xy: 821, 928 + xy: 2031, 923 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7496,21 +7307,21 @@ block-arc-large index: -1 block-arc-medium rotate: false - xy: 901, 54 + xy: 1963, 899 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-arc-small rotate: false - xy: 2021, 915 + xy: 80, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-arc-tiny rotate: false - xy: 1553, 103 + xy: 2031, 905 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7524,21 +7335,21 @@ block-arc-xlarge index: -1 block-armored-conveyor-large rotate: false - xy: 959, 933 + xy: 551, 474 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-armored-conveyor-medium rotate: false - xy: 901, 20 + xy: 1997, 907 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-small rotate: false - xy: 80, 2 + xy: 1015, 349 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -7559,28 +7370,28 @@ block-armored-conveyor-xlarge index: -1 block-battery-large rotate: false - xy: 1001, 933 + xy: 601, 524 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-battery-large-large rotate: false - xy: 1043, 933 + xy: 651, 574 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-battery-large-medium rotate: false - xy: 939, 552 + xy: 859, 857 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-battery-large-small rotate: false - xy: 1417, 11 + xy: 1913, 810 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -7601,21 +7412,21 @@ block-battery-large-xlarge index: -1 block-battery-medium rotate: false - xy: 939, 518 + xy: 859, 823 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-battery-small rotate: false - xy: 106, 2 + xy: 1942, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-battery-tiny rotate: false - xy: 839, 928 + xy: 131, 540 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7629,28 +7440,28 @@ block-battery-xlarge index: -1 block-blast-drill-large rotate: false - xy: 1085, 933 + xy: 351, 224 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-blast-drill-medium rotate: false - xy: 939, 484 + xy: 893, 857 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-blast-drill-small rotate: false - xy: 1576, 256 + xy: 106, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-blast-drill-tiny rotate: false - xy: 131, 540 + xy: 309, 698 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7664,28 +7475,28 @@ block-blast-drill-xlarge index: -1 block-blast-mixer-large rotate: false - xy: 1127, 933 + xy: 401, 274 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-blast-mixer-medium rotate: false - xy: 939, 450 + xy: 859, 789 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-blast-mixer-small rotate: false - xy: 1574, 230 + xy: 1913, 784 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-blast-mixer-tiny rotate: false - xy: 309, 698 + xy: 331, 598 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7699,28 +7510,28 @@ block-blast-mixer-xlarge index: -1 block-bridge-conduit-large rotate: false - xy: 1169, 933 + xy: 451, 324 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-bridge-conduit-medium rotate: false - xy: 939, 416 + xy: 927, 857 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-bridge-conduit-small rotate: false - xy: 751, 2 + xy: 1942, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-bridge-conduit-tiny rotate: false - xy: 331, 598 + xy: 955, 285 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7734,28 +7545,28 @@ block-bridge-conduit-xlarge index: -1 block-bridge-conveyor-large rotate: false - xy: 1211, 933 + xy: 501, 374 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-bridge-conveyor-medium rotate: false - xy: 939, 382 + xy: 893, 823 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-bridge-conveyor-small rotate: false - xy: 777, 2 + xy: 1968, 873 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-bridge-conveyor-tiny rotate: false - xy: 859, 697 + xy: 132, 10 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7769,28 +7580,28 @@ block-bridge-conveyor-xlarge index: -1 block-char-large rotate: false - xy: 1253, 933 + xy: 551, 432 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-char-medium rotate: false - xy: 939, 348 + xy: 859, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-char-small rotate: false - xy: 803, 2 + xy: 1913, 758 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-char-tiny rotate: false - xy: 965, 697 + xy: 1065, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7804,28 +7615,28 @@ block-char-xlarge index: -1 block-cliffs-large rotate: false - xy: 1295, 933 + xy: 693, 574 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-cliffs-medium rotate: false - xy: 939, 314 + xy: 961, 857 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cliffs-small rotate: false - xy: 829, 2 + xy: 1968, 847 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-cliffs-tiny rotate: false - xy: 957, 587 + xy: 1325, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7839,28 +7650,28 @@ block-cliffs-xlarge index: -1 block-coal-centrifuge-large rotate: false - xy: 1337, 933 + xy: 351, 182 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-coal-centrifuge-medium rotate: false - xy: 939, 280 + xy: 927, 823 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-coal-centrifuge-small rotate: false - xy: 855, 2 + xy: 1913, 732 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-coal-centrifuge-tiny rotate: false - xy: 132, 10 + xy: 1221, 448 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7874,28 +7685,28 @@ block-coal-centrifuge-xlarge index: -1 block-combustion-generator-large rotate: false - xy: 1379, 933 + xy: 735, 574 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-combustion-generator-medium rotate: false - xy: 939, 246 + xy: 893, 789 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-combustion-generator-small rotate: false - xy: 1443, 11 + xy: 1913, 706 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-combustion-generator-tiny rotate: false - xy: 881, 10 + xy: 1273, 484 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7909,28 +7720,28 @@ block-combustion-generator-xlarge index: -1 block-command-center-large rotate: false - xy: 1421, 933 + xy: 351, 140 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-command-center-medium rotate: false - xy: 939, 212 + xy: 859, 721 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-command-center-small rotate: false - xy: 1574, 204 + xy: 984, 311 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-command-center-tiny rotate: false - xy: 1491, 227 + xy: 1299, 515 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7944,28 +7755,28 @@ block-command-center-xlarge index: -1 block-conduit-large rotate: false - xy: 1463, 933 + xy: 351, 98 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-conduit-medium rotate: false - xy: 939, 178 + xy: 995, 857 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-conduit-small rotate: false - xy: 1449, 83 + xy: 1041, 349 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-conduit-tiny rotate: false - xy: 1441, 145 + xy: 309, 680 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -7979,28 +7790,28 @@ block-conduit-xlarge index: -1 block-container-large rotate: false - xy: 1505, 933 + xy: 351, 56 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-container-medium rotate: false - xy: 939, 144 + xy: 961, 823 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-container-small rotate: false - xy: 1449, 57 + xy: 729, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-container-tiny rotate: false - xy: 1605, 283 + xy: 331, 580 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8014,28 +7825,28 @@ block-container-xlarge index: -1 block-conveyor-large rotate: false - xy: 1547, 933 + xy: 351, 14 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-conveyor-medium rotate: false - xy: 939, 110 + xy: 927, 789 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-conveyor-small rotate: false - xy: 1602, 256 + xy: 755, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-conveyor-tiny rotate: false - xy: 1813, 315 + xy: 1083, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8049,35 +7860,35 @@ block-conveyor-xlarge index: -1 block-copper-wall-large rotate: false - xy: 1589, 933 + xy: 551, 390 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-copper-wall-large-large rotate: false - xy: 1631, 933 + xy: 593, 474 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-copper-wall-large-medium rotate: false - xy: 935, 76 + xy: 893, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-copper-wall-large-small rotate: false - xy: 1600, 230 + xy: 781, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-copper-wall-large-tiny rotate: false - xy: 309, 680 + xy: 1325, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8091,21 +7902,21 @@ block-copper-wall-large-xlarge index: -1 block-copper-wall-medium rotate: false - xy: 935, 42 + xy: 859, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-copper-wall-small rotate: false - xy: 1600, 204 + xy: 807, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-copper-wall-tiny rotate: false - xy: 331, 580 + xy: 1343, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8119,28 +7930,28 @@ block-copper-wall-xlarge index: -1 block-core-foundation-large rotate: false - xy: 1673, 933 + xy: 593, 432 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-core-foundation-medium rotate: false - xy: 935, 8 + xy: 995, 823 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-core-foundation-small rotate: false - xy: 1647, 419 + xy: 833, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-core-foundation-tiny rotate: false - xy: 859, 679 + xy: 1101, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8154,28 +7965,28 @@ block-core-foundation-xlarge index: -1 block-core-nucleus-large rotate: false - xy: 1715, 933 + xy: 593, 390 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-core-nucleus-medium rotate: false - xy: 957, 639 + xy: 961, 789 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-core-nucleus-small rotate: false - xy: 1647, 393 + xy: 859, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-core-nucleus-tiny rotate: false - xy: 965, 679 + xy: 1325, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8189,28 +8000,28 @@ block-core-nucleus-xlarge index: -1 block-core-shard-large rotate: false - xy: 1757, 933 + xy: 643, 524 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-core-shard-medium rotate: false - xy: 957, 605 + xy: 927, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-core-shard-small rotate: false - xy: 1673, 421 + xy: 885, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-core-shard-tiny rotate: false - xy: 1813, 297 + xy: 1343, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8224,28 +8035,28 @@ block-core-shard-xlarge index: -1 block-craters-large rotate: false - xy: 1799, 933 + xy: 635, 482 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-craters-medium rotate: false - xy: 991, 647 + xy: 893, 721 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-craters-small rotate: false - xy: 1673, 395 + xy: 911, 2 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-craters-tiny rotate: false - xy: 1831, 315 + xy: 1361, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8259,28 +8070,28 @@ block-craters-xlarge index: -1 block-crawler-factory-large rotate: false - xy: 1841, 933 + xy: 635, 440 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-crawler-factory-medium rotate: false - xy: 991, 613 + xy: 995, 789 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-crawler-factory-small rotate: false - xy: 1715, 487 + xy: 1063, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-crawler-factory-tiny rotate: false - xy: 1831, 297 + xy: 1119, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8294,28 +8105,28 @@ block-crawler-factory-xlarge index: -1 block-cryofluidmixer-large rotate: false - xy: 1883, 933 + xy: 635, 398 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-cryofluidmixer-medium rotate: false - xy: 1025, 647 + xy: 961, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cryofluidmixer-small rotate: false - xy: 1741, 489 + xy: 1089, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-cryofluidmixer-tiny rotate: false - xy: 1849, 315 + xy: 1343, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8329,28 +8140,28 @@ block-cryofluidmixer-xlarge index: -1 block-cultivator-large rotate: false - xy: 1925, 933 + xy: 685, 532 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-cultivator-medium rotate: false - xy: 1025, 613 + xy: 927, 721 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cultivator-small rotate: false - xy: 1767, 489 + xy: 1115, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-cultivator-tiny rotate: false - xy: 1849, 297 + xy: 1361, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8364,28 +8175,28 @@ block-cultivator-xlarge index: -1 block-cyclone-large rotate: false - xy: 845, 883 + xy: 727, 532 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-cyclone-medium rotate: false - xy: 1059, 647 + xy: 893, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cyclone-small rotate: false - xy: 1793, 489 + xy: 1141, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-cyclone-tiny rotate: false - xy: 1867, 315 + xy: 1379, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8399,28 +8210,28 @@ block-cyclone-xlarge index: -1 block-dagger-factory-large rotate: false - xy: 887, 883 + xy: 393, 224 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dagger-factory-medium rotate: false - xy: 1059, 613 + xy: 995, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dagger-factory-small rotate: false - xy: 1819, 489 + xy: 1167, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dagger-factory-tiny rotate: false - xy: 1867, 297 + xy: 1137, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8434,28 +8245,28 @@ block-dagger-factory-xlarge index: -1 block-dark-metal-large rotate: false - xy: 859, 841 + xy: 393, 182 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-metal-medium rotate: false - xy: 1093, 647 + xy: 961, 721 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-metal-small rotate: false - xy: 1845, 489 + xy: 1193, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-metal-tiny rotate: false - xy: 1885, 315 + xy: 1361, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8469,28 +8280,28 @@ block-dark-metal-xlarge index: -1 block-dark-panel-1-large rotate: false - xy: 859, 799 + xy: 393, 140 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-panel-1-medium rotate: false - xy: 1093, 613 + xy: 927, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-1-small rotate: false - xy: 1871, 489 + xy: 1219, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-panel-1-tiny rotate: false - xy: 1885, 297 + xy: 1379, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8504,28 +8315,28 @@ block-dark-panel-1-xlarge index: -1 block-dark-panel-2-large rotate: false - xy: 859, 757 + xy: 393, 98 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-panel-2-medium rotate: false - xy: 1127, 647 + xy: 995, 721 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-2-small rotate: false - xy: 1897, 489 + xy: 1245, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-panel-2-tiny rotate: false - xy: 1903, 315 + xy: 1397, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8539,28 +8350,28 @@ block-dark-panel-2-xlarge index: -1 block-dark-panel-3-large rotate: false - xy: 859, 715 + xy: 393, 56 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-panel-3-medium rotate: false - xy: 1127, 613 + xy: 961, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-3-small rotate: false - xy: 1923, 489 + xy: 1271, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-panel-3-tiny rotate: false - xy: 1903, 297 + xy: 1155, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8574,28 +8385,28 @@ block-dark-panel-3-xlarge index: -1 block-dark-panel-4-large rotate: false - xy: 929, 883 + xy: 393, 14 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-panel-4-medium rotate: false - xy: 1161, 647 + xy: 995, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-4-small rotate: false - xy: 1949, 489 + xy: 1297, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-panel-4-tiny rotate: false - xy: 1921, 315 + xy: 1379, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8609,28 +8420,28 @@ block-dark-panel-4-xlarge index: -1 block-dark-panel-5-large rotate: false - xy: 901, 841 + xy: 443, 274 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-panel-5-medium rotate: false - xy: 1161, 613 + xy: 1029, 857 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-5-small rotate: false - xy: 1975, 489 + xy: 1323, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-panel-5-tiny rotate: false - xy: 1921, 297 + xy: 1397, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8644,28 +8455,28 @@ block-dark-panel-5-xlarge index: -1 block-dark-panel-6-large rotate: false - xy: 901, 799 + xy: 435, 232 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dark-panel-6-medium rotate: false - xy: 1195, 647 + xy: 1029, 823 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-panel-6-small rotate: false - xy: 2001, 489 + xy: 1349, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dark-panel-6-tiny rotate: false - xy: 1939, 315 + xy: 1415, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8679,49 +8490,49 @@ block-dark-panel-6-xlarge index: -1 block-darksand-large rotate: false - xy: 901, 757 + xy: 435, 190 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-darksand-medium rotate: false - xy: 1195, 613 + xy: 1029, 789 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-small rotate: false - xy: 1715, 461 + xy: 1375, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-darksand-tainted-water-large rotate: false - xy: 901, 715 + xy: 435, 148 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-darksand-tainted-water-medium rotate: false - xy: 1229, 647 + xy: 1029, 755 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-tainted-water-small rotate: false - xy: 1741, 463 + xy: 1401, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-darksand-tainted-water-tiny rotate: false - xy: 1939, 297 + xy: 1173, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8735,35 +8546,35 @@ block-darksand-tainted-water-xlarge index: -1 block-darksand-tiny rotate: false - xy: 1957, 315 + xy: 1397, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-darksand-water-large rotate: false - xy: 971, 891 + xy: 435, 106 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-darksand-water-medium rotate: false - xy: 1229, 613 + xy: 1029, 721 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-water-small rotate: false - xy: 1767, 463 + xy: 1427, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-darksand-water-tiny rotate: false - xy: 1957, 297 + xy: 1415, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8784,28 +8595,28 @@ block-darksand-xlarge index: -1 block-dart-mech-pad-large rotate: false - xy: 1013, 891 + xy: 435, 64 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dart-mech-pad-medium rotate: false - xy: 1263, 647 + xy: 1029, 687 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dart-mech-pad-small rotate: false - xy: 1793, 463 + xy: 1453, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dart-mech-pad-tiny rotate: false - xy: 1975, 315 + xy: 1433, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8819,28 +8630,28 @@ block-dart-mech-pad-xlarge index: -1 block-deepwater-large rotate: false - xy: 1055, 891 + xy: 435, 22 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-deepwater-medium rotate: false - xy: 1263, 613 + xy: 881, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-deepwater-small rotate: false - xy: 1819, 463 + xy: 1479, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-deepwater-tiny rotate: false - xy: 1975, 297 + xy: 1191, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8854,28 +8665,28 @@ block-deepwater-xlarge index: -1 block-delta-mech-pad-large rotate: false - xy: 1097, 891 + xy: 493, 324 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-delta-mech-pad-medium rotate: false - xy: 1297, 647 + xy: 881, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-delta-mech-pad-small rotate: false - xy: 1845, 463 + xy: 1505, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-delta-mech-pad-tiny rotate: false - xy: 1993, 315 + xy: 1415, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8889,28 +8700,28 @@ block-delta-mech-pad-xlarge index: -1 block-differential-generator-large rotate: false - xy: 1139, 891 + xy: 485, 282 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-differential-generator-medium rotate: false - xy: 1297, 613 + xy: 915, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-differential-generator-small rotate: false - xy: 1871, 463 + xy: 1531, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-differential-generator-tiny rotate: false - xy: 1993, 297 + xy: 1433, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8924,28 +8735,28 @@ block-differential-generator-xlarge index: -1 block-diode-large rotate: false - xy: 1181, 891 + xy: 543, 348 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-diode-medium rotate: false - xy: 1331, 647 + xy: 881, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-diode-small rotate: false - xy: 1897, 463 + xy: 1557, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-diode-tiny rotate: false - xy: 2011, 315 + xy: 1451, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8959,28 +8770,28 @@ block-diode-xlarge index: -1 block-distributor-large rotate: false - xy: 1223, 891 + xy: 585, 348 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-distributor-medium rotate: false - xy: 1331, 613 + xy: 949, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-distributor-small rotate: false - xy: 1923, 463 + xy: 1583, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-distributor-tiny rotate: false - xy: 2011, 297 + xy: 1433, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -8994,35 +8805,35 @@ block-distributor-xlarge index: -1 block-door-large rotate: false - xy: 1265, 891 + xy: 535, 306 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-door-large-large rotate: false - xy: 1307, 891 + xy: 577, 306 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-door-large-medium rotate: false - xy: 1365, 647 + xy: 915, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-door-large-small rotate: false - xy: 1949, 463 + xy: 1609, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-door-large-tiny rotate: false - xy: 1448, 39 + xy: 1451, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9036,21 +8847,21 @@ block-door-large-xlarge index: -1 block-door-medium rotate: false - xy: 1365, 613 + xy: 983, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-door-small rotate: false - xy: 1975, 463 + xy: 1635, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-door-tiny rotate: false - xy: 1628, 263 + xy: 1469, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9064,28 +8875,28 @@ block-door-xlarge index: -1 block-draug-factory-large rotate: false - xy: 1349, 891 + xy: 527, 264 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-draug-factory-medium rotate: false - xy: 1399, 647 + xy: 949, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-draug-factory-small rotate: false - xy: 2001, 463 + xy: 1661, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-draug-factory-tiny rotate: false - xy: 1646, 263 + xy: 1451, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9099,28 +8910,28 @@ block-draug-factory-xlarge index: -1 block-dunerocks-large rotate: false - xy: 1391, 891 + xy: 569, 264 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-dunerocks-medium rotate: false - xy: 1399, 613 + xy: 915, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dunerocks-small rotate: false - xy: 1513, 221 + xy: 1687, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-dunerocks-tiny rotate: false - xy: 2027, 497 + xy: 1469, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9134,28 +8945,28 @@ block-dunerocks-xlarge index: -1 block-duo-large rotate: false - xy: 1433, 891 + xy: 485, 240 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-duo-medium rotate: false - xy: 1433, 647 + xy: 1017, 653 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-duo-small rotate: false - xy: 1579, 351 + xy: 1713, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-duo-tiny rotate: false - xy: 2027, 479 + xy: 1487, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9169,28 +8980,28 @@ block-duo-xlarge index: -1 block-force-projector-large rotate: false - xy: 1475, 891 + xy: 477, 198 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-force-projector-medium rotate: false - xy: 1433, 613 + xy: 983, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-force-projector-small rotate: false - xy: 1605, 353 + xy: 1739, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-force-projector-tiny rotate: false - xy: 2027, 461 + xy: 1469, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9204,28 +9015,28 @@ block-force-projector-xlarge index: -1 block-fortress-factory-large rotate: false - xy: 1517, 891 + xy: 477, 156 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-fortress-factory-medium rotate: false - xy: 1467, 647 + xy: 949, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-fortress-factory-small rotate: false - xy: 1605, 327 + xy: 1765, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-fortress-factory-tiny rotate: false - xy: 2027, 443 + xy: 1487, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9239,28 +9050,28 @@ block-fortress-factory-xlarge index: -1 block-fuse-large rotate: false - xy: 1559, 891 + xy: 477, 114 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-fuse-medium rotate: false - xy: 1467, 613 + xy: 1017, 619 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-fuse-small rotate: false - xy: 1605, 301 + xy: 1791, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-fuse-tiny rotate: false - xy: 1709, 289 + xy: 1505, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9274,28 +9085,28 @@ block-fuse-xlarge index: -1 block-ghoul-factory-large rotate: false - xy: 1601, 891 + xy: 477, 72 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-ghoul-factory-medium rotate: false - xy: 1501, 647 + xy: 983, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ghoul-factory-small rotate: false - xy: 1626, 230 + xy: 1817, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-ghoul-factory-tiny rotate: false - xy: 899, 2 + xy: 1487, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9309,28 +9120,28 @@ block-ghoul-factory-xlarge index: -1 block-glaive-ship-pad-large rotate: false - xy: 1643, 891 + xy: 477, 30 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-glaive-ship-pad-medium rotate: false - xy: 1501, 613 + xy: 1017, 585 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-glaive-ship-pad-small rotate: false - xy: 1626, 204 + xy: 1843, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-glaive-ship-pad-tiny rotate: false - xy: 917, 2 + xy: 1505, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9344,28 +9155,28 @@ block-glaive-ship-pad-xlarge index: -1 block-graphite-press-large rotate: false - xy: 1685, 891 + xy: 527, 222 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-graphite-press-medium rotate: false - xy: 1535, 647 + xy: 895, 551 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-graphite-press-small rotate: false - xy: 1673, 369 + xy: 1869, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-graphite-press-tiny rotate: false - xy: 2029, 315 + xy: 1523, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9379,28 +9190,28 @@ block-graphite-press-xlarge index: -1 block-grass-large rotate: false - xy: 1727, 891 + xy: 569, 222 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-grass-medium rotate: false - xy: 1535, 613 + xy: 929, 551 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-grass-small rotate: false - xy: 1681, 453 + xy: 1895, 674 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-grass-tiny rotate: false - xy: 2029, 297 + xy: 1505, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9414,28 +9225,28 @@ block-grass-xlarge index: -1 block-hail-large rotate: false - xy: 1769, 891 + xy: 519, 180 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-hail-medium rotate: false - xy: 1569, 647 + xy: 963, 551 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hail-small rotate: false - xy: 1741, 437 + xy: 1051, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-hail-tiny rotate: false - xy: 1664, 273 + xy: 1523, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9449,28 +9260,28 @@ block-hail-xlarge index: -1 block-holostone-large rotate: false - xy: 1811, 891 + xy: 519, 138 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-holostone-medium rotate: false - xy: 1569, 613 + xy: 997, 551 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-holostone-small rotate: false - xy: 1767, 437 + xy: 1051, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-holostone-tiny rotate: false - xy: 1664, 255 + xy: 1541, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9484,28 +9295,28 @@ block-holostone-xlarge index: -1 block-hotrock-large rotate: false - xy: 1853, 891 + xy: 561, 180 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-hotrock-medium rotate: false - xy: 1603, 647 + xy: 1063, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hotrock-small rotate: false - xy: 1793, 437 + xy: 1077, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-hotrock-tiny rotate: false - xy: 1683, 279 + xy: 1523, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9519,49 +9330,49 @@ block-hotrock-xlarge index: -1 block-ice-large rotate: false - xy: 1895, 891 + xy: 519, 96 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-ice-medium rotate: false - xy: 1603, 613 + xy: 1063, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-small rotate: false - xy: 1819, 437 + xy: 1051, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-ice-snow-large rotate: false - xy: 1937, 891 + xy: 561, 138 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-ice-snow-medium rotate: false - xy: 1637, 647 + xy: 1097, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-snow-small rotate: false - xy: 1845, 437 + xy: 1077, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-ice-snow-tiny rotate: false - xy: 1682, 261 + xy: 1541, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9575,7 +9386,7 @@ block-ice-snow-xlarge index: -1 block-ice-tiny rotate: false - xy: 1652, 237 + xy: 1559, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9589,28 +9400,28 @@ block-ice-xlarge index: -1 block-icerocks-large rotate: false - xy: 943, 841 + xy: 519, 54 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-icerocks-medium rotate: false - xy: 1637, 613 + xy: 1063, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icerocks-small rotate: false - xy: 1871, 437 + xy: 1103, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icerocks-tiny rotate: false - xy: 1652, 219 + xy: 1541, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9624,28 +9435,28 @@ block-icerocks-xlarge index: -1 block-ignarock-large rotate: false - xy: 943, 799 + xy: 561, 96 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-ignarock-medium rotate: false - xy: 1671, 647 + xy: 1097, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ignarock-small rotate: false - xy: 1897, 437 + xy: 1077, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-ignarock-tiny rotate: false - xy: 1670, 237 + xy: 1559, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9659,28 +9470,28 @@ block-ignarock-xlarge index: -1 block-illuminator-large rotate: false - xy: 943, 757 + xy: 561, 54 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-illuminator-medium rotate: false - xy: 1671, 613 + xy: 1131, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-illuminator-small rotate: false - xy: 1923, 437 + xy: 1103, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-illuminator-tiny rotate: false - xy: 1670, 219 + xy: 1577, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9694,28 +9505,28 @@ block-illuminator-xlarge index: -1 block-impact-reactor-large rotate: false - xy: 943, 715 + xy: 519, 12 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-impact-reactor-medium rotate: false - xy: 1705, 647 + xy: 1063, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-impact-reactor-small rotate: false - xy: 1949, 437 + xy: 1129, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-impact-reactor-tiny rotate: false - xy: 1688, 243 + xy: 1559, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9729,28 +9540,28 @@ block-impact-reactor-xlarge index: -1 block-incinerator-large rotate: false - xy: 985, 849 + xy: 561, 12 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-incinerator-medium rotate: false - xy: 1705, 613 + xy: 1097, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-incinerator-small rotate: false - xy: 1975, 437 + xy: 1103, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-incinerator-tiny rotate: false - xy: 1688, 225 + xy: 1577, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9764,28 +9575,28 @@ block-incinerator-xlarge index: -1 block-inverted-sorter-large rotate: false - xy: 985, 807 + xy: 677, 482 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-inverted-sorter-medium rotate: false - xy: 1739, 647 + xy: 1131, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-inverted-sorter-small rotate: false - xy: 2001, 437 + xy: 1129, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-inverted-sorter-tiny rotate: false - xy: 1700, 261 + xy: 1595, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9799,28 +9610,28 @@ block-inverted-sorter-xlarge index: -1 block-item-source-large rotate: false - xy: 1027, 849 + xy: 677, 440 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-item-source-medium rotate: false - xy: 1739, 613 + xy: 1165, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-item-source-small rotate: false - xy: 1413, 213 + xy: 1155, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-item-source-tiny rotate: false - xy: 1706, 243 + xy: 1577, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9834,28 +9645,28 @@ block-item-source-xlarge index: -1 block-item-void-large rotate: false - xy: 985, 765 + xy: 677, 398 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-item-void-medium rotate: false - xy: 1773, 647 + xy: 1063, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-item-void-small rotate: false - xy: 1439, 215 + xy: 1129, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-item-void-tiny rotate: false - xy: 1706, 225 + xy: 1595, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9869,28 +9680,28 @@ block-item-void-xlarge index: -1 block-javelin-ship-pad-large rotate: false - xy: 1027, 807 + xy: 719, 490 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-javelin-ship-pad-medium rotate: false - xy: 1773, 613 + xy: 1097, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-javelin-ship-pad-small rotate: false - xy: 1465, 219 + xy: 1155, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-javelin-ship-pad-tiny rotate: false - xy: 1688, 207 + xy: 1613, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9904,28 +9715,28 @@ block-javelin-ship-pad-xlarge index: -1 block-junction-large rotate: false - xy: 1069, 849 + xy: 719, 448 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-junction-medium rotate: false - xy: 1807, 647 + xy: 1131, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-junction-small rotate: false - xy: 1413, 187 + xy: 1181, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-junction-tiny rotate: false - xy: 1706, 207 + xy: 1595, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9939,28 +9750,28 @@ block-junction-xlarge index: -1 block-kiln-large rotate: false - xy: 985, 723 + xy: 719, 406 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-kiln-medium rotate: false - xy: 1807, 613 + xy: 1165, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-kiln-small rotate: false - xy: 1439, 189 + xy: 1155, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-kiln-tiny rotate: false - xy: 1547, 4 + xy: 1613, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -9974,28 +9785,28 @@ block-kiln-xlarge index: -1 block-lancer-large rotate: false - xy: 1027, 765 + xy: 635, 356 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-lancer-medium rotate: false - xy: 1841, 647 + xy: 1199, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-lancer-small rotate: false - xy: 1465, 193 + xy: 1181, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-lancer-tiny rotate: false - xy: 1565, 4 + xy: 1631, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10009,28 +9820,28 @@ block-lancer-xlarge index: -1 block-laser-drill-large rotate: false - xy: 1069, 807 + xy: 677, 356 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-laser-drill-medium rotate: false - xy: 1841, 613 + xy: 1063, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-laser-drill-small rotate: false - xy: 1441, 163 + xy: 1207, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-laser-drill-tiny rotate: false - xy: 1583, 4 + xy: 1613, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10044,35 +9855,35 @@ block-laser-drill-xlarge index: -1 block-launch-pad-large rotate: false - xy: 1111, 849 + xy: 719, 364 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-launch-pad-large-large rotate: false - xy: 1027, 723 + xy: 769, 532 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-launch-pad-large-medium rotate: false - xy: 1875, 647 + xy: 1097, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-launch-pad-large-small rotate: false - xy: 1467, 167 + xy: 1181, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-launch-pad-large-tiny rotate: false - xy: 1601, 4 + xy: 1631, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10086,21 +9897,21 @@ block-launch-pad-large-xlarge index: -1 block-launch-pad-medium rotate: false - xy: 1875, 613 + xy: 1131, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-launch-pad-small rotate: false - xy: 1491, 195 + xy: 1207, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-launch-pad-tiny rotate: false - xy: 1619, 4 + xy: 1649, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10114,28 +9925,28 @@ block-launch-pad-xlarge index: -1 block-liquid-junction-large rotate: false - xy: 1069, 765 + xy: 761, 490 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-liquid-junction-medium rotate: false - xy: 1909, 647 + xy: 1165, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-junction-small rotate: false - xy: 1517, 195 + xy: 1233, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-liquid-junction-tiny rotate: false - xy: 1637, 4 + xy: 1631, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10149,28 +9960,28 @@ block-liquid-junction-xlarge index: -1 block-liquid-router-large rotate: false - xy: 1111, 807 + xy: 761, 448 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-liquid-router-medium rotate: false - xy: 1909, 613 + xy: 1199, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-router-small rotate: false - xy: 1493, 169 + xy: 1207, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-liquid-router-tiny rotate: false - xy: 1655, 4 + xy: 1649, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10184,28 +9995,28 @@ block-liquid-router-xlarge index: -1 block-liquid-source-large rotate: false - xy: 1153, 849 + xy: 761, 406 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-liquid-source-medium rotate: false - xy: 1943, 647 + xy: 1233, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-source-small rotate: false - xy: 1519, 169 + xy: 1233, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-liquid-source-tiny rotate: false - xy: 1673, 4 + xy: 1667, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10219,28 +10030,28 @@ block-liquid-source-xlarge index: -1 block-liquid-tank-large rotate: false - xy: 1069, 723 + xy: 761, 364 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-liquid-tank-medium rotate: false - xy: 1943, 613 + xy: 1097, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-tank-small rotate: false - xy: 1543, 199 + xy: 1259, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-liquid-tank-tiny rotate: false - xy: 1787, 278 + xy: 1649, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10254,28 +10065,28 @@ block-liquid-tank-xlarge index: -1 block-liquid-void-large rotate: false - xy: 1111, 765 + xy: 811, 536 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-liquid-void-medium rotate: false - xy: 1977, 613 + xy: 1131, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-void-small rotate: false - xy: 1545, 173 + xy: 1233, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-liquid-void-tiny rotate: false - xy: 1805, 278 + xy: 1667, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10289,28 +10100,28 @@ block-liquid-void-xlarge index: -1 block-magmarock-large rotate: false - xy: 1153, 807 + xy: 853, 536 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-magmarock-medium rotate: false - xy: 2011, 613 + xy: 1165, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-magmarock-small rotate: false - xy: 1571, 178 + xy: 1259, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-magmarock-tiny rotate: false - xy: 1823, 279 + xy: 1685, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10324,28 +10135,28 @@ block-magmarock-xlarge index: -1 block-mass-driver-large rotate: false - xy: 1195, 849 + xy: 619, 306 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-mass-driver-medium rotate: false - xy: 991, 579 + xy: 1199, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mass-driver-small rotate: false - xy: 1597, 178 + xy: 1285, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-mass-driver-tiny rotate: false - xy: 1841, 279 + xy: 1667, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10359,28 +10170,28 @@ block-mass-driver-xlarge index: -1 block-mechanical-drill-large rotate: false - xy: 1111, 723 + xy: 611, 264 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-mechanical-drill-medium rotate: false - xy: 1025, 579 + xy: 1233, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mechanical-drill-small rotate: false - xy: 1623, 178 + xy: 1259, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-mechanical-drill-tiny rotate: false - xy: 1859, 279 + xy: 1685, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10394,28 +10205,28 @@ block-mechanical-drill-xlarge index: -1 block-mechanical-pump-large rotate: false - xy: 1153, 765 + xy: 611, 222 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-mechanical-pump-medium rotate: false - xy: 1059, 579 + xy: 1267, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mechanical-pump-small rotate: false - xy: 1571, 152 + xy: 1285, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-mechanical-pump-tiny rotate: false - xy: 1877, 279 + xy: 1703, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10429,28 +10240,28 @@ block-mechanical-pump-xlarge index: -1 block-meltdown-large rotate: false - xy: 1195, 807 + xy: 603, 180 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-meltdown-medium rotate: false - xy: 1093, 579 + xy: 1131, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-meltdown-small rotate: false - xy: 1597, 152 + xy: 1311, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-meltdown-tiny rotate: false - xy: 1895, 279 + xy: 1685, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10464,28 +10275,28 @@ block-meltdown-xlarge index: -1 block-melter-large rotate: false - xy: 1237, 849 + xy: 603, 138 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-melter-medium rotate: false - xy: 1127, 579 + xy: 1165, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-melter-small rotate: false - xy: 1623, 152 + xy: 1285, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-melter-tiny rotate: false - xy: 1913, 279 + xy: 1703, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10499,28 +10310,28 @@ block-melter-xlarge index: -1 block-mend-projector-large rotate: false - xy: 1153, 723 + xy: 603, 96 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-mend-projector-medium rotate: false - xy: 1161, 579 + xy: 1199, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mend-projector-small rotate: false - xy: 1545, 147 + xy: 1311, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-mend-projector-tiny rotate: false - xy: 1931, 279 + xy: 1721, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10534,28 +10345,28 @@ block-mend-projector-xlarge index: -1 block-mender-large rotate: false - xy: 1195, 765 + xy: 603, 54 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-mender-medium rotate: false - xy: 1195, 579 + xy: 1233, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mender-small rotate: false - xy: 1571, 126 + xy: 1337, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-mender-tiny rotate: false - xy: 1949, 279 + xy: 1703, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10569,28 +10380,28 @@ block-mender-xlarge index: -1 block-message-large rotate: false - xy: 1237, 807 + xy: 603, 12 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-message-medium rotate: false - xy: 1229, 579 + xy: 1267, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-message-small rotate: false - xy: 1597, 126 + xy: 1311, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-message-tiny rotate: false - xy: 1967, 279 + xy: 1721, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10604,28 +10415,28 @@ block-message-xlarge index: -1 block-metal-floor-2-large rotate: false - xy: 1279, 849 + xy: 661, 314 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-metal-floor-2-medium rotate: false - xy: 1263, 579 + xy: 1301, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-2-small rotate: false - xy: 1623, 126 + xy: 1337, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-metal-floor-2-tiny rotate: false - xy: 1985, 279 + xy: 1739, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10639,28 +10450,28 @@ block-metal-floor-2-xlarge index: -1 block-metal-floor-3-large rotate: false - xy: 1195, 723 + xy: 703, 314 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-metal-floor-3-medium rotate: false - xy: 1297, 579 + xy: 1165, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-3-small rotate: false - xy: 1467, 141 + xy: 1363, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-metal-floor-3-tiny rotate: false - xy: 2003, 279 + xy: 1721, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10674,28 +10485,28 @@ block-metal-floor-3-xlarge index: -1 block-metal-floor-5-large rotate: false - xy: 1237, 765 + xy: 745, 322 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-metal-floor-5-medium rotate: false - xy: 1331, 579 + xy: 1199, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-5-small rotate: false - xy: 1493, 143 + xy: 1337, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-metal-floor-5-tiny rotate: false - xy: 2021, 279 + xy: 1739, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10709,28 +10520,28 @@ block-metal-floor-5-xlarge index: -1 block-metal-floor-damaged-large rotate: false - xy: 1279, 807 + xy: 787, 322 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-metal-floor-damaged-medium rotate: false - xy: 1365, 579 + xy: 1233, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-damaged-small rotate: false - xy: 1519, 143 + xy: 1363, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-metal-floor-damaged-tiny rotate: false - xy: 1675, 189 + xy: 1757, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10744,28 +10555,28 @@ block-metal-floor-damaged-xlarge index: -1 block-metal-floor-large rotate: false - xy: 1321, 849 + xy: 653, 264 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-metal-floor-medium rotate: false - xy: 1399, 579 + xy: 1267, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-metal-floor-small rotate: false - xy: 1545, 121 + xy: 1389, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-metal-floor-tiny rotate: false - xy: 1675, 171 + xy: 1739, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10779,28 +10590,28 @@ block-metal-floor-xlarge index: -1 block-moss-large rotate: false - xy: 1237, 723 + xy: 653, 222 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-moss-medium rotate: false - xy: 1433, 579 + xy: 1301, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-moss-small rotate: false - xy: 1453, 115 + xy: 1363, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-moss-tiny rotate: false - xy: 1693, 189 + xy: 1757, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10814,28 +10625,28 @@ block-moss-xlarge index: -1 block-multi-press-large rotate: false - xy: 1279, 765 + xy: 645, 180 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-multi-press-medium rotate: false - xy: 1467, 579 + xy: 1335, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-multi-press-small rotate: false - xy: 1479, 115 + xy: 1389, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-multi-press-tiny rotate: false - xy: 1675, 153 + xy: 1775, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10849,28 +10660,28 @@ block-multi-press-xlarge index: -1 block-oil-extractor-large rotate: false - xy: 1321, 807 + xy: 645, 138 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-oil-extractor-medium rotate: false - xy: 1501, 579 + xy: 1199, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-oil-extractor-small rotate: false - xy: 1505, 117 + xy: 1415, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-oil-extractor-tiny rotate: false - xy: 1693, 171 + xy: 1757, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10884,28 +10695,28 @@ block-oil-extractor-xlarge index: -1 block-omega-mech-pad-large rotate: false - xy: 1363, 849 + xy: 645, 96 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-omega-mech-pad-medium rotate: false - xy: 1535, 579 + xy: 1233, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-omega-mech-pad-small rotate: false - xy: 1475, 89 + xy: 1389, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-omega-mech-pad-tiny rotate: false - xy: 1675, 135 + xy: 1775, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -10917,3334 +10728,3579 @@ block-omega-mech-pad-xlarge orig: 48, 48 offset: 0, 0 index: -1 -block-overdrive-projector-large +block-ore-coal-large rotate: false - xy: 1279, 723 + xy: 645, 54 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-overdrive-projector-medium +block-ore-coal-medium rotate: false - xy: 1569, 579 + xy: 1267, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-overdrive-projector-small +block-ore-coal-small rotate: false - xy: 1475, 63 + xy: 1415, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-overdrive-projector-tiny +block-ore-coal-tiny rotate: false - xy: 1693, 153 + xy: 1793, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-overdrive-projector-xlarge +block-ore-coal-xlarge rotate: false xy: 251, 208 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-overflow-gate-large +block-ore-copper-large rotate: false - xy: 1321, 765 + xy: 645, 12 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-overflow-gate-medium +block-ore-copper-medium rotate: false - xy: 1603, 579 + xy: 1301, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-overflow-gate-small +block-ore-copper-small rotate: false - xy: 1475, 37 + xy: 1441, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-overflow-gate-tiny +block-ore-copper-tiny rotate: false - xy: 1675, 117 + xy: 1775, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-overflow-gate-xlarge +block-ore-copper-xlarge rotate: false xy: 251, 158 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pebbles-large +block-ore-lead-large rotate: false - xy: 1363, 807 + xy: 695, 272 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pebbles-medium +block-ore-lead-medium rotate: false - xy: 1637, 579 + xy: 1335, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pebbles-small +block-ore-lead-small rotate: false - xy: 1469, 11 + xy: 1415, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pebbles-tiny +block-ore-lead-tiny rotate: false - xy: 1693, 135 + xy: 1793, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pebbles-xlarge +block-ore-lead-xlarge rotate: false xy: 251, 108 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phantom-factory-large +block-ore-scrap-large rotate: false - xy: 1405, 849 + xy: 695, 230 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phantom-factory-medium +block-ore-scrap-medium rotate: false - xy: 1671, 579 + xy: 1369, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phantom-factory-small +block-ore-scrap-small rotate: false - xy: 1495, 11 + xy: 1441, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phantom-factory-tiny +block-ore-scrap-tiny rotate: false - xy: 1693, 117 + xy: 1811, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phantom-factory-xlarge +block-ore-scrap-xlarge rotate: false xy: 251, 58 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-conduit-large +block-ore-thorium-large rotate: false - xy: 1321, 723 + xy: 745, 280 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phase-conduit-medium +block-ore-thorium-medium rotate: false - xy: 1705, 579 + xy: 1233, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-conduit-small +block-ore-thorium-small rotate: false - xy: 1571, 100 + xy: 1467, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-conduit-tiny +block-ore-thorium-tiny rotate: false - xy: 1711, 189 + xy: 1793, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-conduit-xlarge +block-ore-thorium-xlarge rotate: false xy: 151, 8 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-conveyor-large +block-ore-titanium-large rotate: false - xy: 1363, 765 + xy: 787, 280 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phase-conveyor-medium +block-ore-titanium-medium rotate: false - xy: 1739, 579 + xy: 1267, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-conveyor-small +block-ore-titanium-small rotate: false - xy: 1597, 100 + xy: 1441, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-conveyor-tiny +block-ore-titanium-tiny rotate: false - xy: 1711, 171 + xy: 1811, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-conveyor-xlarge +block-ore-titanium-xlarge rotate: false xy: 201, 8 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-wall-large +block-overdrive-projector-large rotate: false - xy: 1405, 807 + xy: 737, 238 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phase-wall-large-large +block-overdrive-projector-medium rotate: false - xy: 1447, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-phase-wall-large-medium - rotate: false - xy: 1773, 579 + xy: 1301, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-wall-large-small +block-overdrive-projector-small rotate: false - xy: 1623, 100 + xy: 1467, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-wall-large-tiny +block-overdrive-projector-tiny rotate: false - xy: 1711, 153 + xy: 1829, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-wall-large-xlarge +block-overdrive-projector-xlarge rotate: false xy: 251, 8 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-wall-medium +block-overflow-gate-large rotate: false - xy: 1807, 579 + xy: 779, 238 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-overflow-gate-medium + rotate: false + xy: 1335, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-wall-small +block-overflow-gate-small rotate: false - xy: 1501, 89 + xy: 1493, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-wall-tiny +block-overflow-gate-tiny rotate: false - xy: 1711, 135 + xy: 1811, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-wall-xlarge +block-overflow-gate-xlarge rotate: false xy: 281, 619 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-weaver-large +block-pebbles-large rotate: false - xy: 1363, 723 + xy: 803, 490 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phase-weaver-medium +block-pebbles-medium rotate: false - xy: 1841, 579 + xy: 1369, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-weaver-small +block-pebbles-small rotate: false - xy: 1501, 63 + xy: 1467, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-weaver-tiny +block-pebbles-tiny rotate: false - xy: 1711, 117 + xy: 1829, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-weaver-xlarge +block-pebbles-xlarge rotate: false xy: 281, 569 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pine-large +block-phantom-factory-large rotate: false - xy: 1405, 765 + xy: 803, 448 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pine-medium +block-phantom-factory-medium rotate: false - xy: 1875, 579 + xy: 1403, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pine-small +block-phantom-factory-small rotate: false - xy: 1501, 37 + xy: 1493, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pine-tiny +block-phantom-factory-tiny rotate: false - xy: 1823, 261 + xy: 1847, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pine-xlarge +block-phantom-factory-xlarge rotate: false xy: 301, 519 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-plastanium-compressor-large +block-phase-conduit-large rotate: false - xy: 1447, 807 + xy: 803, 406 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-plastanium-compressor-medium +block-phase-conduit-medium rotate: false - xy: 1909, 579 + xy: 1267, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-plastanium-compressor-small +block-phase-conduit-small rotate: false - xy: 1521, 11 + xy: 1519, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-plastanium-compressor-tiny +block-phase-conduit-tiny rotate: false - xy: 1841, 261 + xy: 1829, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-plastanium-compressor-xlarge +block-phase-conduit-xlarge rotate: false xy: 301, 469 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-plastanium-conveyor-large +block-phase-conveyor-large rotate: false - xy: 1489, 849 + xy: 803, 364 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-plastanium-conveyor-medium +block-phase-conveyor-medium rotate: false - xy: 1943, 579 + xy: 1301, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-plastanium-conveyor-small +block-phase-conveyor-small rotate: false - xy: 1649, 178 + xy: 1493, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-plastanium-conveyor-tiny +block-phase-conveyor-tiny rotate: false - xy: 1859, 261 + xy: 1847, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-plastanium-conveyor-xlarge +block-phase-conveyor-xlarge rotate: false xy: 301, 419 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-plastanium-wall-large +block-phase-wall-large rotate: false - xy: 1405, 723 + xy: 845, 494 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-plastanium-wall-large-large +block-phase-wall-large-large rotate: false - xy: 1447, 765 + xy: 845, 452 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-plastanium-wall-large-medium +block-phase-wall-large-medium rotate: false - xy: 1977, 579 + xy: 1335, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-plastanium-wall-large-small +block-phase-wall-large-small rotate: false - xy: 1649, 152 + xy: 1519, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-plastanium-wall-large-tiny +block-phase-wall-large-tiny rotate: false - xy: 1877, 261 + xy: 1865, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-plastanium-wall-large-xlarge +block-phase-wall-large-xlarge rotate: false xy: 301, 369 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-plastanium-wall-medium +block-phase-wall-medium rotate: false - xy: 2011, 579 + xy: 1369, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-plastanium-wall-small +block-phase-wall-small rotate: false - xy: 1649, 126 + xy: 1545, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-plastanium-wall-tiny +block-phase-wall-tiny rotate: false - xy: 1895, 261 + xy: 1847, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-plastanium-wall-xlarge +block-phase-wall-xlarge rotate: false xy: 301, 319 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-plated-conduit-large +block-phase-weaver-large rotate: false - xy: 1489, 807 + xy: 845, 410 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-plated-conduit-medium +block-phase-weaver-medium rotate: false - xy: 973, 545 + xy: 1403, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-plated-conduit-small +block-phase-weaver-small rotate: false - xy: 1649, 100 + xy: 1519, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-plated-conduit-tiny +block-phase-weaver-tiny rotate: false - xy: 1913, 261 + xy: 1865, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-plated-conduit-xlarge +block-phase-weaver-xlarge rotate: false xy: 301, 269 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pneumatic-drill-large +block-pine-large rotate: false - xy: 1531, 849 + xy: 845, 368 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pneumatic-drill-medium +block-pine-medium rotate: false - xy: 973, 511 + xy: 1437, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pneumatic-drill-small +block-pine-small rotate: false - xy: 1613, 385 + xy: 1545, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pneumatic-drill-tiny +block-pine-tiny rotate: false - xy: 1931, 261 + xy: 1883, 578 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pneumatic-drill-xlarge +block-pine-xlarge rotate: false xy: 301, 219 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-power-node-large +block-plastanium-compressor-large rotate: false - xy: 1447, 723 + xy: 829, 322 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-power-node-large-large +block-plastanium-compressor-medium rotate: false - xy: 1489, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-power-node-large-medium - rotate: false - xy: 1007, 545 + xy: 1301, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-power-node-large-small +block-plastanium-compressor-small rotate: false - xy: 1699, 427 + xy: 1571, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-power-node-large-tiny +block-plastanium-compressor-tiny rotate: false - xy: 1949, 261 + xy: 1865, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-power-node-large-xlarge +block-plastanium-compressor-xlarge rotate: false xy: 301, 169 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-power-node-medium +block-plastanium-conveyor-large rotate: false - xy: 973, 477 + xy: 829, 280 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plastanium-conveyor-medium + rotate: false + xy: 1335, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-power-node-small +block-plastanium-conveyor-small rotate: false - xy: 1699, 401 + xy: 1545, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-power-node-tiny +block-plastanium-conveyor-tiny rotate: false - xy: 1967, 261 + xy: 1883, 560 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-power-node-xlarge +block-plastanium-conveyor-xlarge rotate: false xy: 301, 119 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-power-source-large +block-plastanium-wall-large rotate: false - xy: 1531, 807 + xy: 821, 238 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-power-source-medium +block-plastanium-wall-large-large rotate: false - xy: 1007, 511 + xy: 871, 326 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plastanium-wall-large-medium + rotate: false + xy: 1369, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-power-source-small +block-plastanium-wall-large-small rotate: false - xy: 1699, 375 + xy: 1571, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-power-source-tiny +block-plastanium-wall-large-tiny rotate: false - xy: 1985, 261 + xy: 1883, 542 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-power-source-xlarge +block-plastanium-wall-large-xlarge rotate: false xy: 301, 69 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-power-void-large +block-plastanium-wall-medium rotate: false - xy: 1573, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-power-void-medium - rotate: false - xy: 1041, 545 + xy: 1403, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-power-void-small +block-plastanium-wall-small rotate: false - xy: 1725, 411 + xy: 1597, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-power-void-tiny +block-plastanium-wall-tiny rotate: false - xy: 2003, 261 + xy: 1299, 497 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-power-void-xlarge +block-plastanium-wall-xlarge rotate: false xy: 301, 19 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pulse-conduit-large +block-plated-conduit-large rotate: false - xy: 1489, 723 + xy: 871, 284 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pulse-conduit-medium +block-plated-conduit-medium rotate: false - xy: 973, 443 + xy: 1437, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pulse-conduit-small +block-plated-conduit-small rotate: false - xy: 1725, 385 + xy: 1571, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pulse-conduit-tiny +block-plated-conduit-tiny rotate: false - xy: 2021, 261 + xy: 1015, 331 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pulse-conduit-xlarge +block-plated-conduit-xlarge rotate: false xy: 795, 878 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pulverizer-large +block-pneumatic-drill-large rotate: false - xy: 1531, 765 + xy: 687, 180 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pulverizer-medium +block-pneumatic-drill-medium rotate: false - xy: 1007, 477 + xy: 1471, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pulverizer-small +block-pneumatic-drill-small rotate: false - xy: 1751, 411 + xy: 1597, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pulverizer-tiny +block-pneumatic-drill-tiny rotate: false - xy: 1683, 99 + xy: 1033, 331 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pulverizer-xlarge +block-pneumatic-drill-xlarge rotate: false xy: 309, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pyratite-mixer-large +block-power-node-large rotate: false - xy: 1573, 807 + xy: 687, 138 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pyratite-mixer-medium +block-power-node-large-large rotate: false - xy: 1041, 511 + xy: 687, 96 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-power-node-large-medium + rotate: false + xy: 1335, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pyratite-mixer-small +block-power-node-large-small rotate: false - xy: 1751, 385 + xy: 1623, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pyratite-mixer-tiny +block-power-node-large-tiny rotate: false - xy: 1683, 81 + xy: 1051, 331 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pyratite-mixer-xlarge +block-power-node-large-xlarge rotate: false xy: 309, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-repair-point-large +block-power-node-medium rotate: false - xy: 1615, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-repair-point-medium - rotate: false - xy: 1075, 545 + xy: 1369, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-repair-point-small +block-power-node-small rotate: false - xy: 1777, 411 + xy: 1597, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-repair-point-tiny +block-power-node-tiny rotate: false - xy: 1701, 99 + xy: 1010, 313 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-repair-point-xlarge +block-power-node-xlarge rotate: false xy: 359, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-revenant-factory-large +block-power-source-large rotate: false - xy: 1531, 723 + xy: 687, 54 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-revenant-factory-medium +block-power-source-medium rotate: false - xy: 973, 409 + xy: 1403, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-revenant-factory-small +block-power-source-small rotate: false - xy: 1777, 385 + xy: 1623, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-revenant-factory-tiny +block-power-source-tiny rotate: false - xy: 1683, 63 + xy: 1028, 313 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-revenant-factory-xlarge +block-power-source-xlarge rotate: false xy: 309, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ripple-large +block-power-void-large rotate: false - xy: 1573, 765 + xy: 687, 12 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ripple-medium +block-power-void-medium rotate: false - xy: 1007, 443 + xy: 1437, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ripple-small +block-power-void-small rotate: false - xy: 1803, 411 + xy: 1649, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ripple-tiny +block-power-void-tiny rotate: false - xy: 1701, 81 + xy: 1046, 313 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ripple-xlarge +block-power-void-xlarge rotate: false xy: 359, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-rock-large +block-pulse-conduit-large rotate: false - xy: 1615, 807 + xy: 737, 196 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-rock-medium +block-pulse-conduit-medium rotate: false - xy: 1041, 477 + xy: 1471, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-rock-small +block-pulse-conduit-small rotate: false - xy: 1803, 385 + xy: 1623, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-rock-tiny +block-pulse-conduit-tiny rotate: false - xy: 1683, 45 + xy: 1921, 688 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-rock-xlarge +block-pulse-conduit-xlarge rotate: false xy: 409, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-rocks-large +block-pulverizer-large rotate: false - xy: 1657, 849 + xy: 779, 196 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-rocks-medium +block-pulverizer-medium rotate: false - xy: 1075, 511 + xy: 1505, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-rocks-small +block-pulverizer-small rotate: false - xy: 1829, 411 + xy: 1649, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-rocks-tiny +block-pulverizer-tiny rotate: false - xy: 1701, 63 + xy: 1921, 670 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-rocks-xlarge +block-pulverizer-xlarge rotate: false xy: 359, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-rotary-pump-large +block-pyratite-mixer-large rotate: false - xy: 1573, 723 + xy: 821, 196 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-rotary-pump-medium +block-pyratite-mixer-medium rotate: false - xy: 1109, 545 + xy: 1369, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-rotary-pump-small +block-pyratite-mixer-small rotate: false - xy: 1829, 385 + xy: 1675, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-rotary-pump-tiny +block-pyratite-mixer-tiny rotate: false - xy: 1683, 27 + xy: 1209, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-rotary-pump-xlarge +block-pyratite-mixer-xlarge rotate: false xy: 409, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-router-large +block-repair-point-large rotate: false - xy: 1615, 765 + xy: 729, 154 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-router-medium +block-repair-point-medium rotate: false - xy: 973, 375 + xy: 1403, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-router-small +block-repair-point-small rotate: false - xy: 1855, 411 + xy: 1649, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-router-tiny +block-repair-point-tiny rotate: false - xy: 1701, 45 + xy: 1942, 829 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-router-xlarge +block-repair-point-xlarge rotate: false xy: 459, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-rtg-generator-large +block-revenant-factory-large rotate: false - xy: 1657, 807 + xy: 729, 112 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-rtg-generator-medium +block-revenant-factory-medium rotate: false - xy: 1007, 409 + xy: 1437, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-rtg-generator-small +block-revenant-factory-small rotate: false - xy: 1855, 385 + xy: 1675, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-rtg-generator-tiny +block-revenant-factory-tiny rotate: false - xy: 1701, 27 + xy: 1960, 829 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-rtg-generator-xlarge +block-revenant-factory-xlarge rotate: false xy: 409, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-salt-large +block-ripple-large rotate: false - xy: 1699, 849 + xy: 771, 154 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-salt-medium +block-ripple-medium rotate: false - xy: 1041, 443 + xy: 1471, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-salt-small +block-ripple-small rotate: false - xy: 1881, 411 + xy: 1701, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-salt-tiny +block-ripple-tiny rotate: false - xy: 1691, 9 + xy: 1978, 829 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-salt-xlarge +block-ripple-xlarge rotate: false xy: 459, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-saltrocks-large +block-rock-large rotate: false - xy: 1615, 723 + xy: 729, 70 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-saltrocks-medium +block-rock-medium rotate: false - xy: 1075, 477 + xy: 1505, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-saltrocks-small +block-rock-small rotate: false - xy: 1881, 385 + xy: 1675, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-saltrocks-tiny +block-rock-tiny rotate: false - xy: 1719, 99 + xy: 1939, 811 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-saltrocks-xlarge +block-rock-xlarge rotate: false xy: 509, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-salvo-large +block-rocks-large rotate: false - xy: 1657, 765 + xy: 771, 112 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-salvo-medium +block-rocks-medium rotate: false - xy: 1109, 511 + xy: 1539, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-salvo-small +block-rocks-small rotate: false - xy: 1907, 411 + xy: 1701, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-salvo-tiny +block-rocks-tiny rotate: false - xy: 1719, 81 + xy: 1939, 793 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-salvo-xlarge +block-rocks-xlarge rotate: false xy: 459, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-sand-boulder-large +block-rotary-pump-large rotate: false - xy: 1699, 807 + xy: 813, 154 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-sand-boulder-medium +block-rotary-pump-medium rotate: false - xy: 1143, 545 + xy: 1403, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-sand-boulder-small +block-rotary-pump-small rotate: false - xy: 1907, 385 + xy: 1727, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-sand-boulder-tiny +block-rotary-pump-tiny rotate: false - xy: 1719, 63 + xy: 1957, 811 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-sand-boulder-xlarge +block-rotary-pump-xlarge rotate: false xy: 509, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-sand-large +block-router-large rotate: false - xy: 1741, 849 + xy: 729, 28 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-sand-medium +block-router-medium rotate: false - xy: 973, 341 + xy: 1437, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-sand-small +block-router-small rotate: false - xy: 1933, 411 + xy: 1701, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-sand-tiny +block-router-tiny rotate: false - xy: 1719, 45 + xy: 1939, 775 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-sand-water-large - rotate: false - xy: 1657, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-sand-water-medium - rotate: false - xy: 1007, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-sand-water-small - rotate: false - xy: 1933, 385 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-sand-water-tiny - rotate: false - xy: 1719, 27 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-sand-water-xlarge +block-router-xlarge rotate: false xy: 559, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-sand-xlarge +block-rtg-generator-large + rotate: false + xy: 771, 70 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-rtg-generator-medium + rotate: false + xy: 1471, 768 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-rtg-generator-small + rotate: false + xy: 1727, 622 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-rtg-generator-tiny + rotate: false + xy: 1957, 793 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-rtg-generator-xlarge rotate: false xy: 509, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-sandrocks-large +block-salt-large rotate: false - xy: 1699, 765 + xy: 813, 112 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-sandrocks-medium +block-salt-medium rotate: false - xy: 1041, 409 + xy: 1505, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-sandrocks-small +block-salt-small rotate: false - xy: 1959, 411 + xy: 1753, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-sandrocks-tiny +block-salt-tiny rotate: false - xy: 1709, 9 + xy: 1975, 811 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-sandrocks-xlarge +block-salt-xlarge rotate: false xy: 559, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-scatter-large +block-saltrocks-large rotate: false - xy: 1741, 807 + xy: 771, 28 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-scatter-medium +block-saltrocks-medium rotate: false - xy: 1075, 443 + xy: 1539, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-scatter-small +block-saltrocks-small rotate: false - xy: 1959, 385 + xy: 1727, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-scatter-tiny +block-saltrocks-tiny rotate: false - xy: 1727, 9 + xy: 1939, 757 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-scatter-xlarge +block-saltrocks-xlarge rotate: false xy: 609, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-scorch-large +block-salvo-large rotate: false - xy: 1783, 849 + xy: 813, 70 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-scorch-medium +block-salvo-medium rotate: false - xy: 1109, 477 + xy: 1573, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-scorch-small +block-salvo-small rotate: false - xy: 1985, 411 + xy: 1753, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-scorch-tiny +block-salvo-tiny rotate: false - xy: 1724, 243 + xy: 1957, 775 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-scorch-xlarge +block-salvo-xlarge rotate: false xy: 559, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-scrap-wall-gigantic-large +block-sand-boulder-large rotate: false - xy: 1699, 723 + xy: 813, 28 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-scrap-wall-gigantic-medium +block-sand-boulder-medium rotate: false - xy: 1143, 511 + xy: 1437, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-scrap-wall-gigantic-small +block-sand-boulder-small rotate: false - xy: 1985, 385 + xy: 1779, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-scrap-wall-gigantic-tiny +block-sand-boulder-tiny rotate: false - xy: 1724, 225 + xy: 1975, 793 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-scrap-wall-gigantic-xlarge +block-sand-boulder-xlarge rotate: false xy: 609, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-scrap-wall-huge-large +block-sand-large rotate: false - xy: 1741, 765 + xy: 863, 238 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-scrap-wall-huge-medium +block-sand-medium rotate: false - xy: 1177, 545 + xy: 1471, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-scrap-wall-huge-small +block-sand-small rotate: false - xy: 2011, 411 + xy: 1753, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-scrap-wall-huge-tiny +block-sand-tiny rotate: false - xy: 1724, 207 + xy: 1939, 739 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-scrap-wall-huge-xlarge +block-sand-water-large + rotate: false + xy: 863, 196 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sand-water-medium + rotate: false + xy: 1505, 768 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-sand-water-small + rotate: false + xy: 1779, 622 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-sand-water-tiny + rotate: false + xy: 1957, 757 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-sand-water-xlarge rotate: false xy: 659, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-scrap-wall-large - rotate: false - xy: 1783, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scrap-wall-large-large - rotate: false - xy: 1825, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scrap-wall-large-medium - rotate: false - xy: 973, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scrap-wall-large-small - rotate: false - xy: 2011, 385 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scrap-wall-large-tiny - rotate: false - xy: 1729, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scrap-wall-large-xlarge +block-sand-xlarge rotate: false xy: 609, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-scrap-wall-medium +block-sandrocks-large rotate: false - xy: 1007, 341 + xy: 855, 154 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sandrocks-medium + rotate: false + xy: 1539, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-scrap-wall-small +block-sandrocks-small rotate: false - xy: 1725, 359 + xy: 1805, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-scrap-wall-tiny +block-sandrocks-tiny rotate: false - xy: 1729, 171 + xy: 1975, 775 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-scrap-wall-xlarge +block-sandrocks-xlarge rotate: false xy: 659, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-separator-large +block-scatter-large rotate: false - xy: 1741, 723 + xy: 855, 112 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-separator-medium +block-scatter-medium rotate: false - xy: 1041, 375 + xy: 1573, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-separator-small +block-scatter-small rotate: false - xy: 1751, 359 + xy: 1779, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-separator-tiny +block-scatter-tiny rotate: false - xy: 1729, 153 + xy: 1939, 721 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-separator-xlarge +block-scatter-xlarge rotate: false xy: 709, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-shale-boulder-large +block-scorch-large rotate: false - xy: 1783, 765 + xy: 855, 70 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-shale-boulder-medium +block-scorch-medium rotate: false - xy: 1075, 409 + xy: 1607, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-shale-boulder-small +block-scorch-small rotate: false - xy: 1777, 359 + xy: 1805, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-shale-boulder-tiny +block-scorch-tiny rotate: false - xy: 1729, 135 + xy: 1957, 739 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-shale-boulder-xlarge +block-scorch-xlarge rotate: false xy: 659, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-shale-large +block-scrap-wall-gigantic-large rotate: false - xy: 1825, 807 + xy: 855, 28 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-shale-medium +block-scrap-wall-gigantic-medium rotate: false - xy: 1109, 443 + xy: 1471, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-shale-small +block-scrap-wall-gigantic-small rotate: false - xy: 1803, 359 + xy: 1831, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-shale-tiny +block-scrap-wall-gigantic-tiny rotate: false - xy: 1729, 117 + xy: 1975, 757 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-shale-xlarge +block-scrap-wall-gigantic-xlarge rotate: false xy: 709, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-shalerocks-large +block-scrap-wall-huge-large rotate: false - xy: 1867, 849 + xy: 887, 494 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-shalerocks-medium +block-scrap-wall-huge-medium rotate: false - xy: 1143, 477 + xy: 1505, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-shalerocks-small +block-scrap-wall-huge-small rotate: false - xy: 1829, 359 + xy: 1805, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-shalerocks-tiny +block-scrap-wall-huge-tiny rotate: false - xy: 1737, 99 + xy: 1939, 703 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-shalerocks-xlarge +block-scrap-wall-huge-xlarge rotate: false xy: 709, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-shock-mine-large +block-scrap-wall-large rotate: false - xy: 1783, 723 + xy: 887, 452 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-shock-mine-medium +block-scrap-wall-large-large rotate: false - xy: 1177, 511 + xy: 887, 410 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scrap-wall-large-medium + rotate: false + xy: 1539, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-shock-mine-small +block-scrap-wall-large-small rotate: false - xy: 1855, 359 + xy: 1831, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-shock-mine-tiny +block-scrap-wall-large-tiny rotate: false - xy: 1737, 81 + xy: 1957, 721 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-shock-mine-xlarge +block-scrap-wall-large-xlarge rotate: false xy: 759, 816 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-shrubs-large +block-scrap-wall-medium rotate: false - xy: 1825, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-shrubs-medium - rotate: false - xy: 1211, 545 + xy: 1573, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-shrubs-small +block-scrap-wall-small rotate: false - xy: 1881, 359 + xy: 1857, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-shrubs-tiny +block-scrap-wall-tiny rotate: false - xy: 1737, 63 + xy: 1975, 739 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-shrubs-xlarge +block-scrap-wall-xlarge rotate: false xy: 759, 766 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-silicon-smelter-large +block-separator-large rotate: false - xy: 1867, 807 + xy: 887, 368 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-silicon-smelter-medium +block-separator-medium rotate: false - xy: 973, 273 + xy: 1607, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-silicon-smelter-small +block-separator-small rotate: false - xy: 1907, 359 + xy: 1831, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-silicon-smelter-tiny +block-separator-tiny rotate: false - xy: 1737, 45 + xy: 1939, 685 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-silicon-smelter-xlarge +block-separator-xlarge rotate: false xy: 759, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-snow-large +block-shale-boulder-large rotate: false - xy: 1909, 849 + xy: 913, 326 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-snow-medium +block-shale-boulder-medium rotate: false - xy: 1007, 307 + xy: 1641, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-snow-pine-large +block-shale-boulder-small rotate: false - xy: 1825, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-snow-pine-medium - rotate: false - xy: 1041, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-snow-pine-small - rotate: false - xy: 1933, 359 + xy: 1857, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-snow-pine-tiny +block-shale-boulder-tiny rotate: false - xy: 1737, 27 + xy: 1957, 703 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-snow-pine-xlarge +block-shale-boulder-xlarge rotate: false xy: 809, 828 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-snow-small +block-shale-large rotate: false - xy: 1959, 359 + xy: 913, 284 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-shale-medium + rotate: false + xy: 1505, 700 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-shale-small + rotate: false + xy: 1883, 648 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-snow-tiny +block-shale-tiny rotate: false - xy: 1745, 9 + xy: 1975, 721 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-snow-xlarge +block-shale-xlarge rotate: false xy: 809, 778 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-snowrock-large +block-shalerocks-large rotate: false - xy: 1867, 765 + xy: 905, 242 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-snowrock-medium +block-shalerocks-medium rotate: false - xy: 1075, 375 + xy: 1539, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-snowrock-small +block-shalerocks-small rotate: false - xy: 1985, 359 + xy: 1857, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-snowrock-tiny +block-shalerocks-tiny rotate: false - xy: 1742, 273 + xy: 1957, 685 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-snowrock-xlarge +block-shalerocks-xlarge rotate: false xy: 809, 728 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-snowrocks-large +block-shock-mine-large rotate: false - xy: 1909, 807 + xy: 905, 200 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-snowrocks-medium +block-shock-mine-medium rotate: false - xy: 1109, 409 + xy: 1573, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-snowrocks-small +block-shock-mine-small rotate: false - xy: 2011, 359 + xy: 1883, 622 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-snowrocks-tiny +block-shock-mine-tiny rotate: false - xy: 1760, 273 + xy: 1975, 703 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-snowrocks-xlarge +block-shock-mine-xlarge rotate: false xy: 809, 678 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-solar-panel-large +block-shrubs-large rotate: false - xy: 1867, 723 + xy: 897, 154 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-solar-panel-large-large +block-shrubs-medium rotate: false - xy: 1909, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-solar-panel-large-medium - rotate: false - xy: 1143, 443 + xy: 1607, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-solar-panel-large-small +block-shrubs-small rotate: false - xy: 1699, 349 + xy: 1883, 596 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-solar-panel-large-tiny +block-shrubs-tiny rotate: false - xy: 1742, 255 + xy: 1975, 685 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-solar-panel-large-xlarge +block-shrubs-xlarge rotate: false xy: 331, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-solar-panel-medium +block-silicon-smelter-large rotate: false - xy: 1177, 477 + xy: 897, 112 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-silicon-smelter-medium + rotate: false + xy: 1641, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-solar-panel-small +block-silicon-smelter-small rotate: false - xy: 1725, 333 + xy: 1065, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-solar-panel-tiny +block-silicon-smelter-tiny rotate: false - xy: 1742, 237 + xy: 1939, 667 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-solar-panel-xlarge +block-silicon-smelter-xlarge rotate: false xy: 331, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-sorter-large +block-snow-large rotate: false - xy: 1909, 723 + xy: 897, 70 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-sorter-medium +block-snow-medium rotate: false - xy: 1211, 511 + xy: 1675, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-sorter-small +block-snow-pine-large rotate: false - xy: 1751, 333 + xy: 897, 28 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-snow-pine-medium + rotate: false + xy: 1539, 700 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-snow-pine-small + rotate: false + xy: 1065, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-sorter-tiny +block-snow-pine-tiny rotate: false - xy: 1760, 255 + xy: 1957, 667 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-sorter-xlarge +block-snow-pine-xlarge rotate: false xy: 381, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spawn-large +block-snow-small rotate: false - xy: 1951, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-spawn-medium - rotate: false - xy: 1245, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-spawn-small - rotate: false - xy: 1777, 333 + xy: 1091, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spawn-tiny +block-snow-tiny rotate: false - xy: 1742, 219 + xy: 1975, 667 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spawn-xlarge +block-snow-xlarge rotate: false xy: 381, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spectre-large +block-snowrock-large rotate: false - xy: 1951, 807 + xy: 947, 242 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spectre-medium +block-snowrock-medium rotate: false - xy: 973, 239 + xy: 1573, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spectre-small +block-snowrock-small rotate: false - xy: 1803, 333 + xy: 1065, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spectre-tiny +block-snowrock-tiny rotate: false - xy: 1760, 237 + xy: 973, 285 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spectre-xlarge +block-snowrock-xlarge rotate: false xy: 431, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spirit-factory-large +block-snowrocks-large rotate: false - xy: 1951, 765 + xy: 947, 200 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spirit-factory-medium +block-snowrocks-medium rotate: false - xy: 1007, 273 + xy: 1607, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spirit-factory-small +block-snowrocks-small rotate: false - xy: 1829, 333 + xy: 1091, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spirit-factory-tiny +block-snowrocks-tiny rotate: false - xy: 1760, 219 + xy: 1247, 458 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spirit-factory-xlarge +block-snowrocks-xlarge rotate: false xy: 431, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spore-cluster-large +block-solar-panel-large rotate: false - xy: 1951, 723 + xy: 939, 158 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spore-cluster-medium +block-solar-panel-large-large rotate: false - xy: 1041, 307 + xy: 939, 116 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-solar-panel-large-medium + rotate: false + xy: 1641, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-cluster-small +block-solar-panel-large-small rotate: false - xy: 1855, 333 + xy: 1117, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-cluster-tiny +block-solar-panel-large-tiny rotate: false - xy: 1778, 260 + xy: 991, 293 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-cluster-xlarge +block-solar-panel-large-xlarge rotate: false xy: 481, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spore-moss-large +block-solar-panel-medium rotate: false - xy: 985, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-spore-moss-medium - rotate: false - xy: 1075, 341 + xy: 1675, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-moss-small +block-solar-panel-small rotate: false - xy: 1881, 333 + xy: 1065, 492 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-moss-tiny +block-solar-panel-tiny rotate: false - xy: 1796, 260 + xy: 1325, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-moss-xlarge +block-solar-panel-xlarge rotate: false xy: 481, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spore-pine-large +block-sorter-large rotate: false - xy: 1027, 681 + xy: 939, 74 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spore-pine-medium +block-sorter-medium rotate: false - xy: 1109, 375 + xy: 1709, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-pine-small +block-sorter-small rotate: false - xy: 1907, 333 + xy: 1091, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-pine-tiny +block-sorter-tiny rotate: false - xy: 1778, 242 + xy: 1343, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-pine-xlarge +block-sorter-xlarge rotate: false xy: 531, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spore-press-large +block-spawn-large rotate: false - xy: 1069, 681 + xy: 939, 32 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spore-press-medium +block-spawn-medium rotate: false - xy: 1143, 409 + xy: 1573, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-press-small +block-spawn-small rotate: false - xy: 1933, 333 + xy: 1117, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-press-tiny +block-spawn-tiny rotate: false - xy: 1778, 224 + xy: 1361, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-press-xlarge +block-spawn-xlarge rotate: false xy: 531, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-sporerocks-large +block-spectre-large rotate: false - xy: 1111, 681 + xy: 981, 158 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-sporerocks-medium +block-spectre-medium rotate: false - xy: 1177, 443 + xy: 1607, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-sporerocks-small +block-spectre-small rotate: false - xy: 1959, 333 + xy: 1143, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-sporerocks-tiny +block-spectre-tiny rotate: false - xy: 1796, 242 + xy: 1379, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-sporerocks-xlarge +block-spectre-xlarge rotate: false xy: 581, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-stone-large +block-spirit-factory-large rotate: false - xy: 1153, 681 + xy: 981, 116 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-stone-medium +block-spirit-factory-medium rotate: false - xy: 1211, 477 + xy: 1641, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-stone-small +block-spirit-factory-small rotate: false - xy: 1985, 333 + xy: 1065, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-stone-tiny +block-spirit-factory-tiny rotate: false - xy: 1796, 224 + xy: 1397, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-stone-xlarge +block-spirit-factory-xlarge rotate: false xy: 581, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-surge-tower-large +block-spore-cluster-large rotate: false - xy: 1195, 681 + xy: 981, 74 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-surge-tower-medium +block-spore-cluster-medium rotate: false - xy: 1245, 511 + xy: 1675, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-surge-tower-small +block-spore-cluster-small rotate: false - xy: 2011, 333 + xy: 1091, 492 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-surge-tower-tiny +block-spore-cluster-tiny rotate: false - xy: 1814, 243 + xy: 1415, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-surge-tower-xlarge +block-spore-cluster-xlarge rotate: false xy: 631, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-surge-wall-large +block-spore-moss-large rotate: false - xy: 1237, 681 + xy: 981, 32 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-surge-wall-large-large +block-spore-moss-medium rotate: false - xy: 1279, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-surge-wall-large-medium - rotate: false - xy: 1279, 545 + xy: 1709, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-surge-wall-large-small +block-spore-moss-small rotate: false - xy: 1527, 91 + xy: 1117, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-surge-wall-large-tiny +block-spore-moss-tiny rotate: false - xy: 1814, 225 + xy: 1433, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-surge-wall-large-xlarge +block-spore-moss-xlarge rotate: false xy: 631, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-surge-wall-medium +block-spore-pine-large rotate: false - xy: 973, 205 + xy: 821, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-spore-pine-medium + rotate: false + xy: 1743, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-surge-wall-small +block-spore-pine-small rotate: false - xy: 1527, 65 + xy: 1143, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-surge-wall-tiny +block-spore-pine-tiny rotate: false - xy: 1832, 243 + xy: 1451, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-surge-wall-xlarge +block-spore-pine-xlarge rotate: false xy: 681, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-swarmer-large +block-spore-press-large rotate: false - xy: 1321, 681 + xy: 863, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-swarmer-medium +block-spore-press-medium rotate: false - xy: 1007, 239 + xy: 1607, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-swarmer-small +block-spore-press-small rotate: false - xy: 1527, 39 + xy: 1169, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-swarmer-tiny +block-spore-press-tiny rotate: false - xy: 1832, 225 + xy: 1469, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-swarmer-xlarge +block-spore-press-xlarge rotate: false xy: 681, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tainted-water-large +block-sporerocks-large rotate: false - xy: 1363, 681 + xy: 905, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tainted-water-medium +block-sporerocks-medium rotate: false - xy: 1041, 273 + xy: 1641, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tainted-water-small +block-sporerocks-small rotate: false - xy: 1553, 74 + xy: 1065, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tainted-water-tiny +block-sporerocks-tiny rotate: false - xy: 1850, 243 + xy: 1487, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tainted-water-xlarge +block-sporerocks-xlarge rotate: false xy: 731, 666 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tar-large +block-stone-large rotate: false - xy: 1405, 681 + xy: 947, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tar-medium +block-stone-medium rotate: false - xy: 1075, 307 + xy: 1675, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tar-small +block-stone-small rotate: false - xy: 1553, 48 + xy: 1091, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tar-tiny +block-stone-tiny rotate: false - xy: 1850, 225 + xy: 1505, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tar-xlarge +block-stone-xlarge rotate: false xy: 731, 616 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tau-mech-pad-large +block-surge-tower-large rotate: false - xy: 1447, 681 + xy: 989, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tau-mech-pad-medium +block-surge-tower-medium rotate: false - xy: 1109, 341 + xy: 1709, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tau-mech-pad-small +block-surge-tower-small rotate: false - xy: 1579, 74 + xy: 1117, 492 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tau-mech-pad-tiny +block-surge-tower-tiny rotate: false - xy: 1868, 243 + xy: 1523, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tau-mech-pad-xlarge +block-surge-tower-xlarge rotate: false xy: 781, 628 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tendrils-large +block-surge-wall-large rotate: false - xy: 1489, 681 + xy: 1031, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tendrils-medium +block-surge-wall-large-large rotate: false - xy: 1143, 375 + xy: 1073, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-surge-wall-large-medium + rotate: false + xy: 1743, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tendrils-small +block-surge-wall-large-small rotate: false - xy: 1579, 48 + xy: 1143, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tendrils-tiny +block-surge-wall-large-tiny rotate: false - xy: 1868, 225 + xy: 1541, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tendrils-xlarge +block-surge-wall-large-xlarge rotate: false xy: 831, 628 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thermal-generator-large +block-surge-wall-medium rotate: false - xy: 1531, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-thermal-generator-medium - rotate: false - xy: 1177, 409 + xy: 1777, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thermal-generator-small +block-surge-wall-small rotate: false - xy: 1605, 74 + xy: 1169, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thermal-generator-tiny +block-surge-wall-tiny rotate: false - xy: 1886, 243 + xy: 1559, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thermal-generator-xlarge +block-surge-wall-xlarge rotate: false xy: 781, 578 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thermal-pump-large +block-swarmer-large rotate: false - xy: 1573, 681 + xy: 1115, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thermal-pump-medium +block-swarmer-medium rotate: false - xy: 1211, 443 + xy: 1641, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thermal-pump-small +block-swarmer-small rotate: false - xy: 1605, 48 + xy: 1195, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thermal-pump-tiny +block-swarmer-tiny rotate: false - xy: 1886, 225 + xy: 1577, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thermal-pump-xlarge +block-swarmer-xlarge rotate: false xy: 831, 578 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thorium-reactor-large +block-tainted-water-large rotate: false - xy: 1615, 681 + xy: 1157, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thorium-reactor-medium +block-tainted-water-medium rotate: false - xy: 1245, 477 + xy: 1675, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thorium-reactor-small +block-tainted-water-small rotate: false - xy: 1631, 74 + xy: 1091, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thorium-reactor-tiny +block-tainted-water-tiny rotate: false - xy: 1904, 243 + xy: 1595, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thorium-reactor-xlarge +block-tainted-water-xlarge rotate: false xy: 351, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thorium-wall-large +block-tar-large rotate: false - xy: 1657, 681 + xy: 1199, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thorium-wall-large-large +block-tar-medium rotate: false - xy: 1699, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-thorium-wall-large-medium - rotate: false - xy: 1279, 511 + xy: 1709, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thorium-wall-large-small +block-tar-small rotate: false - xy: 1631, 48 + xy: 1117, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thorium-wall-large-tiny +block-tar-tiny rotate: false - xy: 1904, 225 + xy: 1613, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thorium-wall-large-xlarge +block-tar-xlarge rotate: false xy: 351, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thorium-wall-medium +block-tau-mech-pad-large rotate: false - xy: 1313, 545 + xy: 1241, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-tau-mech-pad-medium + rotate: false + xy: 1743, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thorium-wall-small +block-tau-mech-pad-small rotate: false - xy: 1657, 74 + xy: 1143, 492 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thorium-wall-tiny +block-tau-mech-pad-tiny rotate: false - xy: 1922, 243 + xy: 1631, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thorium-wall-xlarge +block-tau-mech-pad-xlarge rotate: false xy: 401, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thruster-large +block-tendrils-large rotate: false - xy: 1741, 681 + xy: 1283, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thruster-medium +block-tendrils-medium rotate: false - xy: 973, 171 + xy: 1777, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thruster-small +block-tendrils-small rotate: false - xy: 1657, 48 + xy: 1169, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thruster-tiny +block-tendrils-tiny rotate: false - xy: 1922, 225 + xy: 1649, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thruster-xlarge +block-tendrils-xlarge rotate: false xy: 351, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titan-factory-large +block-thermal-generator-large rotate: false - xy: 1783, 681 + xy: 1325, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-titan-factory-medium +block-thermal-generator-medium rotate: false - xy: 1007, 205 + xy: 1811, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titan-factory-small +block-thermal-generator-small rotate: false - xy: 1553, 22 + xy: 1195, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titan-factory-tiny +block-thermal-generator-tiny rotate: false - xy: 1940, 243 + xy: 1667, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titan-factory-xlarge +block-thermal-generator-xlarge rotate: false xy: 401, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titanium-conveyor-large +block-thermal-pump-large rotate: false - xy: 1825, 681 + xy: 1367, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-titanium-conveyor-medium +block-thermal-pump-medium rotate: false - xy: 1041, 239 + xy: 1675, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titanium-conveyor-small +block-thermal-pump-small rotate: false - xy: 1579, 22 + xy: 1221, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titanium-conveyor-tiny +block-thermal-pump-tiny rotate: false - xy: 1940, 225 + xy: 1685, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titanium-conveyor-xlarge +block-thermal-pump-xlarge rotate: false xy: 451, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titanium-wall-large +block-thorium-reactor-large rotate: false - xy: 1867, 681 + xy: 1409, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-titanium-wall-large-large +block-thorium-reactor-medium rotate: false - xy: 1909, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-titanium-wall-large-medium - rotate: false - xy: 1075, 273 + xy: 1709, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titanium-wall-large-small +block-thorium-reactor-small rotate: false - xy: 1605, 22 + xy: 1117, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titanium-wall-large-tiny +block-thorium-reactor-tiny rotate: false - xy: 1958, 243 + xy: 1703, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titanium-wall-large-xlarge +block-thorium-reactor-xlarge rotate: false xy: 351, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titanium-wall-medium +block-thorium-wall-large rotate: false - xy: 1109, 307 + xy: 1451, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-thorium-wall-large-large + rotate: false + xy: 1493, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-thorium-wall-large-medium + rotate: false + xy: 1743, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titanium-wall-small +block-thorium-wall-large-small rotate: false - xy: 1631, 22 + xy: 1143, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titanium-wall-tiny +block-thorium-wall-large-tiny rotate: false - xy: 1958, 225 + xy: 1721, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titanium-wall-xlarge +block-thorium-wall-large-xlarge rotate: false xy: 401, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-trident-ship-pad-large +block-thorium-wall-medium rotate: false - xy: 1951, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-trident-ship-pad-medium - rotate: false - xy: 1143, 341 + xy: 1777, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-trident-ship-pad-small +block-thorium-wall-small rotate: false - xy: 1657, 22 + xy: 1169, 492 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-trident-ship-pad-tiny +block-thorium-wall-tiny rotate: false - xy: 1976, 243 + xy: 1739, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-trident-ship-pad-xlarge +block-thorium-wall-xlarge rotate: false xy: 451, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-turbine-generator-large +block-thruster-large rotate: false - xy: 1979, 899 + xy: 1535, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-turbine-generator-medium +block-thruster-medium rotate: false - xy: 1177, 375 + xy: 1811, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-turbine-generator-small +block-thruster-small rotate: false - xy: 1631, 359 + xy: 1195, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-turbine-generator-tiny +block-thruster-tiny rotate: false - xy: 1976, 225 + xy: 1757, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-turbine-generator-xlarge +block-thruster-xlarge rotate: false xy: 501, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-unloader-large +block-titan-factory-large rotate: false - xy: 1993, 857 + xy: 1577, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-unloader-medium +block-titan-factory-medium rotate: false - xy: 1211, 409 + xy: 1845, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-unloader-small +block-titan-factory-small rotate: false - xy: 1631, 333 + xy: 1221, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-unloader-tiny +block-titan-factory-tiny rotate: false - xy: 1994, 243 + xy: 1775, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-unloader-xlarge +block-titan-factory-xlarge rotate: false xy: 351, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-vault-large +block-titanium-conveyor-large rotate: false - xy: 1993, 815 + xy: 1619, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-vault-medium +block-titanium-conveyor-medium rotate: false - xy: 1245, 443 + xy: 1709, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-vault-small +block-titanium-conveyor-small rotate: false - xy: 1631, 307 + xy: 1247, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-vault-tiny +block-titanium-conveyor-tiny rotate: false - xy: 1994, 225 + xy: 1793, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-vault-xlarge +block-titanium-conveyor-xlarge rotate: false xy: 401, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-water-extractor-large +block-titanium-wall-large rotate: false - xy: 1993, 773 + xy: 1661, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-water-extractor-medium +block-titanium-wall-large-large rotate: false - xy: 1279, 477 + xy: 1703, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-titanium-wall-large-medium + rotate: false + xy: 1743, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-water-extractor-small +block-titanium-wall-large-small rotate: false - xy: 1657, 343 + xy: 1143, 440 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-water-extractor-tiny +block-titanium-wall-large-tiny rotate: false - xy: 2012, 243 + xy: 1811, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-water-extractor-xlarge +block-titanium-wall-large-xlarge rotate: false xy: 451, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-water-large +block-titanium-wall-medium rotate: false - xy: 1993, 731 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-water-medium - rotate: false - xy: 1313, 511 + xy: 1777, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-water-small +block-titanium-wall-small rotate: false - xy: 1657, 317 + xy: 1169, 466 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-water-tiny +block-titanium-wall-tiny rotate: false - xy: 2012, 225 + xy: 1829, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-water-xlarge +block-titanium-wall-xlarge rotate: false xy: 501, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-wave-large +block-trident-ship-pad-large rotate: false - xy: 1993, 689 + xy: 1745, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-wave-medium +block-trident-ship-pad-medium rotate: false - xy: 1347, 545 + xy: 1811, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-wave-small +block-trident-ship-pad-small rotate: false - xy: 1683, 323 + xy: 1195, 492 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-wave-tiny +block-trident-ship-pad-tiny rotate: false - xy: 2030, 243 + xy: 1847, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-wave-xlarge +block-trident-ship-pad-xlarge rotate: false xy: 551, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-white-tree-dead-large +block-turbine-generator-large rotate: false - xy: 1993, 647 + xy: 1787, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-white-tree-dead-medium +block-turbine-generator-medium rotate: false - xy: 973, 137 + xy: 1845, 836 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-white-tree-dead-small +block-turbine-generator-small rotate: false - xy: 1657, 291 + xy: 1221, 518 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-white-tree-dead-tiny +block-turbine-generator-tiny rotate: false - xy: 2030, 225 + xy: 1865, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-white-tree-dead-xlarge +block-turbine-generator-xlarge rotate: false xy: 351, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-white-tree-large +block-underflow-gate-large rotate: false - xy: 881, 673 + xy: 1829, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-white-tree-medium +block-underflow-gate-medium rotate: false - xy: 1007, 171 + xy: 1879, 870 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-white-tree-small +block-underflow-gate-small rotate: false - xy: 1683, 297 + xy: 1247, 544 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-white-tree-tiny +block-underflow-gate-tiny rotate: false - xy: 1747, 201 + xy: 1883, 524 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-white-tree-xlarge +block-underflow-gate-xlarge rotate: false xy: 401, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-wraith-factory-large +block-unloader-large rotate: false - xy: 923, 673 + xy: 1871, 933 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-wraith-factory-medium +block-unloader-medium rotate: false - xy: 1041, 205 + xy: 1743, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-wraith-factory-small +block-unloader-small rotate: false - xy: 1631, 281 + xy: 1273, 570 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-wraith-factory-tiny +block-unloader-tiny rotate: false - xy: 1747, 183 + xy: 1317, 506 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-wraith-factory-xlarge +block-unloader-xlarge rotate: false xy: 451, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +block-vault-large + rotate: false + xy: 1913, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-vault-medium + rotate: false + xy: 1777, 734 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-vault-small + rotate: false + xy: 1169, 440 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-vault-tiny + rotate: false + xy: 1335, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-vault-xlarge + rotate: false + xy: 501, 466 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-water-extractor-large + rotate: false + xy: 1955, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-water-extractor-medium + rotate: false + xy: 1811, 768 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-water-extractor-small + rotate: false + xy: 1195, 466 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-water-extractor-tiny + rotate: false + xy: 1353, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-water-extractor-xlarge + rotate: false + xy: 551, 516 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-water-large + rotate: false + xy: 845, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-water-medium + rotate: false + xy: 1845, 802 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-water-small + rotate: false + xy: 1221, 492 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-water-tiny + rotate: false + xy: 1371, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-water-xlarge + rotate: false + xy: 601, 566 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-wave-large + rotate: false + xy: 887, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-wave-medium + rotate: false + xy: 1879, 836 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-wave-small + rotate: false + xy: 1247, 518 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-wave-tiny + rotate: false + xy: 1389, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-wave-xlarge + rotate: false + xy: 351, 266 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-white-tree-dead-large + rotate: false + xy: 929, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-white-tree-dead-medium + rotate: false + xy: 1777, 700 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-white-tree-dead-small + rotate: false + xy: 1273, 544 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-white-tree-dead-tiny + rotate: false + xy: 1407, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-white-tree-dead-xlarge + rotate: false + xy: 401, 316 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-white-tree-large + rotate: false + xy: 971, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-white-tree-medium + rotate: false + xy: 1811, 734 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-white-tree-small + rotate: false + xy: 1299, 570 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-white-tree-tiny + rotate: false + xy: 1425, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-white-tree-xlarge + rotate: false + xy: 451, 366 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-wraith-factory-large + rotate: false + xy: 1013, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-wraith-factory-medium + rotate: false + xy: 1845, 768 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-wraith-factory-small + rotate: false + xy: 1195, 440 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-wraith-factory-tiny + rotate: false + xy: 1443, 506 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-wraith-factory-xlarge + rotate: false + xy: 501, 416 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 button rotate: false - xy: 901, 325 + xy: 1625, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14252,7 +14308,7 @@ button index: -1 button-disabled rotate: false - xy: 1967, 946 + xy: 477, 1 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14260,7 +14316,7 @@ button-disabled index: -1 button-down rotate: false - xy: 881, 644 + xy: 1055, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14268,7 +14324,7 @@ button-down index: -1 button-edge-1 rotate: false - xy: 881, 615 + xy: 1093, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14276,7 +14332,7 @@ button-edge-1 index: -1 button-edge-2 rotate: false - xy: 919, 644 + xy: 1131, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14284,7 +14340,7 @@ button-edge-2 index: -1 button-edge-3 rotate: false - xy: 881, 586 + xy: 1169, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14292,7 +14348,7 @@ button-edge-3 index: -1 button-edge-4 rotate: false - xy: 919, 615 + xy: 1207, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14300,7 +14356,7 @@ button-edge-4 index: -1 button-edge-over-4 rotate: false - xy: 919, 586 + xy: 1245, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14308,7 +14364,7 @@ button-edge-over-4 index: -1 button-over rotate: false - xy: 821, 946 + xy: 1283, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14316,7 +14372,7 @@ button-over index: -1 button-red rotate: false - xy: 901, 557 + xy: 1321, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14324,7 +14380,7 @@ button-red index: -1 button-right rotate: false - xy: 901, 470 + xy: 1435, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14332,7 +14388,7 @@ button-right index: -1 button-right-down rotate: false - xy: 901, 528 + xy: 1359, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14340,7 +14396,7 @@ button-right-down index: -1 button-right-over rotate: false - xy: 901, 499 + xy: 1397, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14348,7 +14404,7 @@ button-right-over index: -1 button-select rotate: false - xy: 1709, 307 + xy: 1221, 466 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -14356,7 +14412,7 @@ button-select index: -1 button-square rotate: false - xy: 901, 383 + xy: 1549, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14364,7 +14420,7 @@ button-square index: -1 button-square-down rotate: false - xy: 901, 441 + xy: 1473, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14372,7 +14428,7 @@ button-square-down index: -1 button-square-over rotate: false - xy: 901, 412 + xy: 1511, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14380,7 +14436,7 @@ button-square-over index: -1 button-trans rotate: false - xy: 901, 354 + xy: 1587, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14388,42 +14444,42 @@ button-trans index: -1 check-disabled rotate: false - xy: 1075, 239 + xy: 1879, 802 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-off rotate: false - xy: 1109, 273 + xy: 1811, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 1143, 307 + xy: 1845, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-disabled rotate: false - xy: 1177, 341 + xy: 1879, 768 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 1211, 375 + xy: 1845, 700 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 1245, 409 + xy: 1879, 734 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -14437,7 +14493,7 @@ clear index: -1 cursor rotate: false - xy: 1682, 255 + xy: 986, 375 size: 4, 4 orig: 4, 4 offset: 0, 0 @@ -14451,3204 +14507,12 @@ discord-banner index: -1 flat-down-base rotate: false - xy: 901, 296 + xy: 1663, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 offset: 0, 0 index: -1 -icon-about - rotate: false - xy: 501, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-about-small - rotate: false - xy: 1279, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-about-smaller - rotate: false - xy: 1449, 309 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-about-tiny - rotate: false - xy: 1747, 165 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-add - rotate: false - xy: 551, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-add-small - rotate: false - xy: 1313, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-add-smaller - rotate: false - xy: 1483, 343 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-add-tiny - rotate: false - xy: 1747, 147 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-admin - rotate: false - xy: 601, 566 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-admin-badge - rotate: false - xy: 351, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-admin-badge-small - rotate: false - xy: 1347, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-admin-badge-smaller - rotate: false - xy: 1517, 377 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-admin-badge-tiny - rotate: false - xy: 1747, 129 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-admin-small - rotate: false - xy: 1381, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-admin-smaller - rotate: false - xy: 1551, 411 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-admin-tiny - rotate: false - xy: 1765, 201 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-arrow - rotate: false - xy: 401, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-arrow-16 - rotate: false - xy: 401, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-arrow-16-small - rotate: false - xy: 1007, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-arrow-small - rotate: false - xy: 1007, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-arrow-16-smaller - rotate: false - xy: 1585, 445 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-smaller - rotate: false - xy: 1585, 445 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-16-tiny - rotate: false - xy: 1765, 183 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-arrow-tiny - rotate: false - xy: 1765, 183 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-arrow-down - rotate: false - xy: 451, 366 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-arrow-down-small - rotate: false - xy: 1041, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-arrow-down-smaller - rotate: false - xy: 1619, 479 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-down-tiny - rotate: false - xy: 1765, 165 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-arrow-left - rotate: false - xy: 501, 416 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-arrow-left-small - rotate: false - xy: 1075, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-arrow-left-smaller - rotate: false - xy: 1653, 513 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-left-tiny - rotate: false - xy: 1765, 147 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-arrow-right - rotate: false - xy: 551, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-arrow-right-small - rotate: false - xy: 1109, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-arrow-right-smaller - rotate: false - xy: 1687, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-right-tiny - rotate: false - xy: 1765, 129 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-arrow-up - rotate: false - xy: 601, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-arrow-up-small - rotate: false - xy: 1143, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-arrow-up-smaller - rotate: false - xy: 1313, 139 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-arrow-up-tiny - rotate: false - xy: 1783, 206 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-back - rotate: false - xy: 651, 566 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-back-small - rotate: false - xy: 1177, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-back-smaller - rotate: false - xy: 1347, 173 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-back-tiny - rotate: false - xy: 1783, 188 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-ban - rotate: false - xy: 351, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-ban-small - rotate: false - xy: 1211, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-ban-smaller - rotate: false - xy: 1381, 207 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-ban-tiny - rotate: false - xy: 1783, 170 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-break - rotate: false - xy: 401, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-break-small - rotate: false - xy: 1245, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-break-smaller - rotate: false - xy: 1415, 241 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-break-tiny - rotate: false - xy: 1783, 152 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-cancel - rotate: false - xy: 451, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-cancel-small - rotate: false - xy: 1279, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-cancel-smaller - rotate: false - xy: 1449, 277 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-cancel-tiny - rotate: false - xy: 1783, 134 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-quit-tiny - rotate: false - xy: 1783, 134 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-changelog - rotate: false - xy: 501, 366 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-changelog-small - rotate: false - xy: 1313, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-changelog-smaller - rotate: false - xy: 1719, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-changelog-tiny - rotate: false - xy: 1801, 206 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-chat - rotate: false - xy: 551, 416 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-chat-small - rotate: false - xy: 1347, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-chat-smaller - rotate: false - xy: 1751, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-chat-tiny - rotate: false - xy: 1801, 188 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-check - rotate: false - xy: 601, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-check-small - rotate: false - xy: 1381, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-check-smaller - rotate: false - xy: 1783, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-check-tiny - rotate: false - xy: 1801, 170 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-command-attack - rotate: false - xy: 651, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-command-attack-small - rotate: false - xy: 1415, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-command-attack-smaller - rotate: false - xy: 1815, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-command-attack-tiny - rotate: false - xy: 1801, 152 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-command-patrol - rotate: false - xy: 701, 566 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-command-patrol-small - rotate: false - xy: 1041, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-command-patrol-smaller - rotate: false - xy: 1847, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-command-patrol-tiny - rotate: false - xy: 1801, 134 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-command-rally - rotate: false - xy: 351, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-command-rally-small - rotate: false - xy: 1075, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-command-rally-smaller - rotate: false - xy: 1879, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-command-rally-tiny - rotate: false - xy: 1819, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-command-retreat - rotate: false - xy: 401, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-command-retreat-small - rotate: false - xy: 1109, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-command-retreat-smaller - rotate: false - xy: 1911, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-command-retreat-tiny - rotate: false - xy: 1819, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-copy - rotate: false - xy: 451, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-copy-small - rotate: false - xy: 1143, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-copy-smaller - rotate: false - xy: 1943, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-copy-tiny - rotate: false - xy: 1837, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-crafting - rotate: false - xy: 501, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-crafting-small - rotate: false - xy: 1177, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-crafting-smaller - rotate: false - xy: 1975, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-crafting-tiny - rotate: false - xy: 1819, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-cursor - rotate: false - xy: 551, 366 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-cursor-small - rotate: false - xy: 1211, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-cursor-smaller - rotate: false - xy: 2007, 547 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-cursor-tiny - rotate: false - xy: 1837, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-database - rotate: false - xy: 601, 416 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-database-small - rotate: false - xy: 1245, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-database-smaller - rotate: false - xy: 973, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-database-tiny - rotate: false - xy: 1855, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-defense - rotate: false - xy: 651, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-defense-small - rotate: false - xy: 1279, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-defense-smaller - rotate: false - xy: 1005, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-defense-tiny - rotate: false - xy: 1819, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-dev-builds - rotate: false - xy: 701, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-dev-builds-small - rotate: false - xy: 1313, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-dev-builds-smaller - rotate: false - xy: 1037, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-dev-builds-tiny - rotate: false - xy: 1837, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-diagonal - rotate: false - xy: 351, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-diagonal-small - rotate: false - xy: 1347, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-diagonal-smaller - rotate: false - xy: 1069, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-diagonal-tiny - rotate: false - xy: 1855, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-discord - rotate: false - xy: 401, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-discord-small - rotate: false - xy: 1381, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-discord-smaller - rotate: false - xy: 1101, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-discord-tiny - rotate: false - xy: 1873, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-distribution - rotate: false - xy: 451, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-distribution-small - rotate: false - xy: 1415, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-distribution-smaller - rotate: false - xy: 1133, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-distribution-tiny - rotate: false - xy: 1819, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-donate - rotate: false - xy: 501, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-donate-small - rotate: false - xy: 1449, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-donate-smaller - rotate: false - xy: 1165, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-donate-tiny - rotate: false - xy: 1837, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-dots - rotate: false - xy: 551, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-dots-small - rotate: false - xy: 1075, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-dots-smaller - rotate: false - xy: 1197, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-dots-tiny - rotate: false - xy: 1855, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-editor - rotate: false - xy: 601, 366 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-editor-small - rotate: false - xy: 1109, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-editor-smaller - rotate: false - xy: 1229, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-editor-tiny - rotate: false - xy: 1873, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-effect - rotate: false - xy: 651, 416 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-effect-small - rotate: false - xy: 1143, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-effect-smaller - rotate: false - xy: 1261, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-effect-tiny - rotate: false - xy: 1891, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-elevation - rotate: false - xy: 701, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-elevation-small - rotate: false - xy: 1177, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-elevation-smaller - rotate: false - xy: 969, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-elevation-tiny - rotate: false - xy: 1837, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-eraser - rotate: false - xy: 351, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-eraser-small - rotate: false - xy: 1211, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-eraser-smaller - rotate: false - xy: 969, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-eraser-tiny - rotate: false - xy: 1855, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-exit - rotate: false - xy: 401, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-exit-small - rotate: false - xy: 1245, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-exit-smaller - rotate: false - xy: 1001, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-exit-tiny - rotate: false - xy: 1873, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-f-droid - rotate: false - xy: 451, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-f-droid-small - rotate: false - xy: 1279, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-f-droid-smaller - rotate: false - xy: 969, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-f-droid-tiny - rotate: false - xy: 1891, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-fdroid - rotate: false - xy: 501, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-fdroid-small - rotate: false - xy: 1313, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-fdroid-smaller - rotate: false - xy: 1001, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-fdroid-tiny - rotate: false - xy: 1909, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-feathub - rotate: false - xy: 551, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-feathub-small - rotate: false - xy: 1347, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-feathub-smaller - rotate: false - xy: 1033, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-feathub-tiny - rotate: false - xy: 1855, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-file - rotate: false - xy: 601, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-file-image - rotate: false - xy: 651, 366 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-file-image-small - rotate: false - xy: 1381, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-file-image-smaller - rotate: false - xy: 1001, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-file-image-tiny - rotate: false - xy: 1873, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-file-small - rotate: false - xy: 1415, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-file-smaller - rotate: false - xy: 1033, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-file-text - rotate: false - xy: 701, 416 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-file-text-small - rotate: false - xy: 1449, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-file-text-smaller - rotate: false - xy: 1065, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-file-text-tiny - rotate: false - xy: 1891, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-file-tiny - rotate: false - xy: 1909, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-fill - rotate: false - xy: 401, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-fill-small - rotate: false - xy: 1483, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-fill-smaller - rotate: false - xy: 1033, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-fill-tiny - rotate: false - xy: 1927, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-flip - rotate: false - xy: 451, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-flip-small - rotate: false - xy: 1109, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-flip-smaller - rotate: false - xy: 1065, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-flip-tiny - rotate: false - xy: 1873, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-floppy - rotate: false - xy: 501, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-floppy-16 - rotate: false - xy: 551, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-floppy-16-small - rotate: false - xy: 1143, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-floppy-16-smaller - rotate: false - xy: 1097, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-floppy-16-tiny - rotate: false - xy: 1891, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-floppy-small - rotate: false - xy: 1177, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-floppy-smaller - rotate: false - xy: 1065, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-floppy-tiny - rotate: false - xy: 1909, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-folder - rotate: false - xy: 601, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-folder-parent - rotate: false - xy: 651, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-folder-parent-small - rotate: false - xy: 1211, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-folder-parent-smaller - rotate: false - xy: 1097, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-folder-parent-tiny - rotate: false - xy: 1927, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-folder-small - rotate: false - xy: 1245, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-folder-smaller - rotate: false - xy: 1129, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-folder-tiny - rotate: false - xy: 1945, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-github - rotate: false - xy: 701, 366 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-github-small - rotate: false - xy: 1279, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-github-smaller - rotate: false - xy: 1097, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-github-tiny - rotate: false - xy: 1891, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-google-play - rotate: false - xy: 451, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-google-play-small - rotate: false - xy: 1313, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-google-play-smaller - rotate: false - xy: 1129, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-google-play-tiny - rotate: false - xy: 1909, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-grid - rotate: false - xy: 501, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-grid-small - rotate: false - xy: 1347, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-grid-smaller - rotate: false - xy: 1161, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-grid-tiny - rotate: false - xy: 1927, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-home - rotate: false - xy: 551, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-home-small - rotate: false - xy: 1381, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-home-smaller - rotate: false - xy: 1129, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-home-tiny - rotate: false - xy: 1945, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-host - rotate: false - xy: 601, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-host-small - rotate: false - xy: 1415, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-host-smaller - rotate: false - xy: 1161, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-host-tiny - rotate: false - xy: 1963, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-info - rotate: false - xy: 651, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-info-small - rotate: false - xy: 1449, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-info-smaller - rotate: false - xy: 1193, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-info-tiny - rotate: false - xy: 1909, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-itch.io - rotate: false - xy: 701, 316 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-itch.io-small - rotate: false - xy: 1483, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-itch.io-smaller - rotate: false - xy: 1161, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-itch.io-tiny - rotate: false - xy: 1927, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-item - rotate: false - xy: 501, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-item-small - rotate: false - xy: 1517, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-item-smaller - rotate: false - xy: 1193, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-item-tiny - rotate: false - xy: 1945, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-line - rotate: false - xy: 551, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-line-small - rotate: false - xy: 1143, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-line-smaller - rotate: false - xy: 1225, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-line-tiny - rotate: false - xy: 1963, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-link - rotate: false - xy: 601, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-link-small - rotate: false - xy: 1177, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-link-smaller - rotate: false - xy: 1193, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-link-tiny - rotate: false - xy: 1981, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-liquid - rotate: false - xy: 651, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-liquid-consume - rotate: false - xy: 701, 266 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-liquid-consume-small - rotate: false - xy: 1211, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-liquid-consume-smaller - rotate: false - xy: 1225, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-liquid-consume-tiny - rotate: false - xy: 1927, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-liquid-small - rotate: false - xy: 1245, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-liquid-smaller - rotate: false - xy: 1257, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-liquid-tiny - rotate: false - xy: 1945, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-load - rotate: false - xy: 551, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-load-image - rotate: false - xy: 601, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-load-image-small - rotate: false - xy: 1279, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-load-image-smaller - rotate: false - xy: 1225, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-load-image-tiny - rotate: false - xy: 1963, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-load-map - rotate: false - xy: 651, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-load-map-small - rotate: false - xy: 1313, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-load-map-smaller - rotate: false - xy: 1257, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-load-map-tiny - rotate: false - xy: 1981, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-load-small - rotate: false - xy: 1347, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-load-smaller - rotate: false - xy: 1257, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-load-tiny - rotate: false - xy: 1999, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-loading - rotate: false - xy: 701, 216 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-loading-small - rotate: false - xy: 1381, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-loading-smaller - rotate: false - xy: 1293, 105 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-loading-tiny - rotate: false - xy: 1945, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-locked - rotate: false - xy: 601, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-locked-small - rotate: false - xy: 1415, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-locked-smaller - rotate: false - xy: 1289, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-locked-tiny - rotate: false - xy: 1963, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-map - rotate: false - xy: 651, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-map-small - rotate: false - xy: 1449, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-map-smaller - rotate: false - xy: 1289, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-map-tiny - rotate: false - xy: 1981, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-menu - rotate: false - xy: 701, 166 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-menu-large - rotate: false - xy: 651, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-menu-large-small - rotate: false - xy: 1483, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-menu-large-smaller - rotate: false - xy: 1289, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-menu-large-tiny - rotate: false - xy: 1999, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-menu-small - rotate: false - xy: 1517, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-menu-smaller - rotate: false - xy: 1325, 107 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-menu-tiny - rotate: false - xy: 2017, 207 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-missing - rotate: false - xy: 701, 116 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-missing-small - rotate: false - xy: 1551, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-missing-smaller - rotate: false - xy: 1345, 139 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-missing-tiny - rotate: false - xy: 1963, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-mode-attack - rotate: false - xy: 701, 66 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-mode-attack-small - rotate: false - xy: 1177, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-mode-attack-smaller - rotate: false - xy: 1357, 107 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-mode-attack-tiny - rotate: false - xy: 1981, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-mode-pvp - rotate: false - xy: 351, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-mode-pvp-small - rotate: false - xy: 1211, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-mode-pvp-smaller - rotate: false - xy: 1449, 245 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-mode-pvp-tiny - rotate: false - xy: 1999, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-mode-survival - rotate: false - xy: 401, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-mode-survival-small - rotate: false - xy: 1245, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-mode-survival-smaller - rotate: false - xy: 1321, 73 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-mode-survival-tiny - rotate: false - xy: 2017, 189 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-none - rotate: false - xy: 451, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-none-small - rotate: false - xy: 1279, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-none-smaller - rotate: false - xy: 1321, 41 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-none-tiny - rotate: false - xy: 1981, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-paste - rotate: false - xy: 501, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-paste-small - rotate: false - xy: 1313, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-paste-smaller - rotate: false - xy: 1321, 9 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-paste-tiny - rotate: false - xy: 1999, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-pause - rotate: false - xy: 551, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-pause-small - rotate: false - xy: 1347, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-pause-smaller - rotate: false - xy: 1353, 75 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-pause-tiny - rotate: false - xy: 2017, 171 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-pencil - rotate: false - xy: 601, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-pencil-small - rotate: false - xy: 1381, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-pencil-smaller - rotate: false - xy: 1353, 43 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-pencil-tiny - rotate: false - xy: 1999, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-pick - rotate: false - xy: 651, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-pick-small - rotate: false - xy: 1415, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-pick-smaller - rotate: false - xy: 1353, 11 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-pick-tiny - rotate: false - xy: 2017, 153 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-play - rotate: false - xy: 701, 16 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-play-2 - rotate: false - xy: 751, 528 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-play-2-small - rotate: false - xy: 1449, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-play-2-smaller - rotate: false - xy: 1385, 75 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-play-2-tiny - rotate: false - xy: 2017, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-play-tiny - rotate: false - xy: 2017, 135 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-play-custom - rotate: false - xy: 751, 478 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-play-custom-small - rotate: false - xy: 1483, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-play-custom-smaller - rotate: false - xy: 1385, 43 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-play-custom-tiny - rotate: false - xy: 1755, 111 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-play-small - rotate: false - xy: 1517, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-play-smaller - rotate: false - xy: 1385, 11 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-players - rotate: false - xy: 801, 528 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-players-small - rotate: false - xy: 1551, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-players-smaller - rotate: false - xy: 1481, 309 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-players-tiny - rotate: false - xy: 1755, 93 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-power - rotate: false - xy: 751, 428 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-power-small - rotate: false - xy: 1585, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-power-smaller - rotate: false - xy: 1481, 277 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-power-tiny - rotate: false - xy: 1755, 75 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-production - rotate: false - xy: 801, 478 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-production-small - rotate: false - xy: 1211, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-production-smaller - rotate: false - xy: 1481, 245 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-production-tiny - rotate: false - xy: 1755, 57 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-quit - rotate: false - xy: 751, 378 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-quit-small - rotate: false - xy: 1245, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-quit-smaller - rotate: false - xy: 1515, 343 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-reddit - rotate: false - xy: 801, 428 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-reddit-small - rotate: false - xy: 1279, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-reddit-smaller - rotate: false - xy: 1513, 311 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-reddit-tiny - rotate: false - xy: 1755, 39 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-redo - rotate: false - xy: 751, 328 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-redo-small - rotate: false - xy: 1313, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-redo-smaller - rotate: false - xy: 1513, 279 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-redo-tiny - rotate: false - xy: 1773, 111 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-refresh - rotate: false - xy: 801, 378 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-refresh-small - rotate: false - xy: 1347, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-refresh-smaller - rotate: false - xy: 1513, 247 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-refresh-tiny - rotate: false - xy: 1773, 93 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-rename - rotate: false - xy: 751, 278 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-rename-small - rotate: false - xy: 1381, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rename-smaller - rotate: false - xy: 1549, 377 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rename-tiny - rotate: false - xy: 1773, 75 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-resize - rotate: false - xy: 801, 328 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-resize-small - rotate: false - xy: 1415, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-resize-smaller - rotate: false - xy: 1547, 345 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-resize-tiny - rotate: false - xy: 1773, 57 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-rotate - rotate: false - xy: 751, 228 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-rotate-arrow - rotate: false - xy: 801, 278 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-rotate-arrow-small - rotate: false - xy: 1449, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-arrow-smaller - rotate: false - xy: 1583, 411 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rotate-arrow-tiny - rotate: false - xy: 1773, 39 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-rotate-left - rotate: false - xy: 751, 178 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-rotate-left-small - rotate: false - xy: 1483, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-left-smaller - rotate: false - xy: 1581, 379 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rotate-left-tiny - rotate: false - xy: 1791, 116 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-rotate-right - rotate: false - xy: 801, 228 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-rotate-right-small - rotate: false - xy: 1517, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-right-smaller - rotate: false - xy: 1617, 445 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rotate-right-tiny - rotate: false - xy: 1791, 98 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-rotate-small - rotate: false - xy: 1551, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-rotate-smaller - rotate: false - xy: 1615, 413 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-rotate-tiny - rotate: false - xy: 1791, 80 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-save - rotate: false - xy: 751, 128 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-save-image - rotate: false - xy: 801, 178 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-save-image-small - rotate: false - xy: 1585, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-save-image-smaller - rotate: false - xy: 1651, 479 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-save-image-tiny - rotate: false - xy: 1791, 62 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-save-map - rotate: false - xy: 751, 78 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-save-map-small - rotate: false - xy: 1619, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-save-map-smaller - rotate: false - xy: 1649, 447 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-save-map-tiny - rotate: false - xy: 1791, 44 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-save-small - rotate: false - xy: 1245, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-save-smaller - rotate: false - xy: 1685, 513 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-save-tiny - rotate: false - xy: 1809, 116 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-settings - rotate: false - xy: 801, 128 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-settings-small - rotate: false - xy: 1279, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-settings-smaller - rotate: false - xy: 1683, 481 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-settings-tiny - rotate: false - xy: 1809, 98 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-spray - rotate: false - xy: 751, 28 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-spray-small - rotate: false - xy: 1313, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-spray-smaller - rotate: false - xy: 1717, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-spray-tiny - rotate: false - xy: 1809, 80 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-terrain - rotate: false - xy: 801, 78 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-terrain-small - rotate: false - xy: 1347, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-terrain-smaller - rotate: false - xy: 1749, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-terrain-tiny - rotate: false - xy: 1809, 62 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-tools - rotate: false - xy: 801, 28 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-tools-small - rotate: false - xy: 1381, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-tools-smaller - rotate: false - xy: 1781, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-tools-tiny - rotate: false - xy: 1809, 44 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-trash - rotate: false - xy: 851, 528 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-trash-16 - rotate: false - xy: 851, 478 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-trash-16-small - rotate: false - xy: 1415, 307 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-trash-16-smaller - rotate: false - xy: 1813, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-trash-16-tiny - rotate: false - xy: 1827, 117 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-trash-small - rotate: false - xy: 1449, 341 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-trash-smaller - rotate: false - xy: 1845, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-trash-tiny - rotate: false - xy: 1827, 99 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-tree - rotate: false - xy: 851, 428 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-tree-small - rotate: false - xy: 1483, 375 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-tree-smaller - rotate: false - xy: 1877, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-tree-tiny - rotate: false - xy: 1845, 117 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-trello - rotate: false - xy: 851, 378 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-trello-small - rotate: false - xy: 1517, 409 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-trello-smaller - rotate: false - xy: 1909, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-trello-tiny - rotate: false - xy: 1827, 81 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-turret - rotate: false - xy: 851, 328 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-turret-small - rotate: false - xy: 1551, 443 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-turret-smaller - rotate: false - xy: 1941, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-turret-tiny - rotate: false - xy: 1845, 99 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-tutorial - rotate: false - xy: 851, 278 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-tutorial-small - rotate: false - xy: 1585, 477 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-tutorial-smaller - rotate: false - xy: 1973, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-tutorial-tiny - rotate: false - xy: 1863, 117 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-undo - rotate: false - xy: 851, 228 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-undo-small - rotate: false - xy: 1619, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-undo-smaller - rotate: false - xy: 2005, 515 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-undo-tiny - rotate: false - xy: 1827, 63 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-units - rotate: false - xy: 851, 178 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-units-small - rotate: false - xy: 1653, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-units-smaller - rotate: false - xy: 1379, 173 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-units-tiny - rotate: false - xy: 1845, 81 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-unlocks - rotate: false - xy: 851, 128 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-unlocks-small - rotate: false - xy: 1279, 137 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-unlocks-smaller - rotate: false - xy: 1377, 141 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-unlocks-tiny - rotate: false - xy: 1863, 99 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-upgrade - rotate: false - xy: 851, 78 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-upgrade-small - rotate: false - xy: 1313, 171 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-upgrade-smaller - rotate: false - xy: 1389, 109 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-upgrade-tiny - rotate: false - xy: 1881, 117 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-wiki - rotate: false - xy: 851, 28 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-wiki-small - rotate: false - xy: 1347, 205 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-wiki-smaller - rotate: false - xy: 1409, 141 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-wiki-tiny - rotate: false - xy: 1827, 45 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-workshop - rotate: false - xy: 859, 925 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-workshop-small - rotate: false - xy: 1381, 239 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-workshop-smaller - rotate: false - xy: 1421, 109 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-workshop-tiny - rotate: false - xy: 1845, 63 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -icon-zoom - rotate: false - xy: 909, 925 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -icon-zoom-small - rotate: false - xy: 1415, 273 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -icon-zoom-smaller - rotate: false - xy: 1417, 77 - size: 30, 30 - orig: 30, 30 - offset: 0, 0 - index: -1 -icon-zoom-tiny - rotate: false - xy: 1863, 81 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 info-banner rotate: false xy: 259, 869 @@ -17658,12 +14522,152 @@ info-banner index: -1 inventory rotate: false - xy: 1735, 291 + xy: 1247, 476 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 offset: 0, 0 index: -1 +item-blast-compound-icon + rotate: false + xy: 1879, 700 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-coal-icon + rotate: false + xy: 1031, 551 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-copper-icon + rotate: false + xy: 929, 517 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-graphite-icon + rotate: false + xy: 929, 483 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-lead-icon + rotate: false + xy: 963, 517 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-metaglass-icon + rotate: false + xy: 929, 449 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-phase-fabric-icon + rotate: false + xy: 997, 517 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-plastanium-icon + rotate: false + xy: 963, 483 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-pyratite-icon + rotate: false + xy: 929, 415 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-sand-icon + rotate: false + xy: 1031, 517 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-scrap-icon + rotate: false + xy: 997, 483 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-silicon-icon + rotate: false + xy: 963, 449 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-spore-pod-icon + rotate: false + xy: 929, 381 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-surge-alloy-icon + rotate: false + xy: 1031, 483 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-thorium-icon + rotate: false + xy: 997, 449 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-titanium-icon + rotate: false + xy: 963, 415 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-cryofluid-icon + rotate: false + xy: 1031, 449 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-oil-icon + rotate: false + xy: 997, 415 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-slag-icon + rotate: false + xy: 963, 381 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-water-icon + rotate: false + xy: 1031, 415 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 logo rotate: false xy: 1, 916 @@ -17680,7 +14684,7 @@ nomap index: -1 pane rotate: false - xy: 901, 238 + xy: 1739, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -17688,7 +14692,7 @@ pane index: -1 pane-2 rotate: false - xy: 901, 267 + xy: 1701, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -17696,7 +14700,7 @@ pane-2 index: -1 scroll rotate: false - xy: 1787, 296 + xy: 1299, 533 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -17719,14 +14723,14 @@ scroll-knob-horizontal-black index: -1 scroll-knob-vertical-black rotate: false - xy: 1761, 291 + xy: 1273, 502 size: 24, 40 orig: 24, 40 offset: 0, 0 index: -1 scroll-knob-vertical-thin rotate: false - xy: 2035, 183 + xy: 1901, 554 size: 12, 40 orig: 12, 40 offset: 0, 0 @@ -17740,28 +14744,28 @@ selection index: -1 slider rotate: false - xy: 1657, 281 + xy: 259, 659 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 1417, 37 + xy: 997, 375 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 1545, 303 + xy: 1028, 375 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 1545, 263 + xy: 955, 341 size: 29, 38 orig: 29, 38 offset: 0, 0 @@ -17775,7 +14779,7 @@ slider-vertical index: -1 underline rotate: false - xy: 901, 122 + xy: 1891, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -17783,7 +14787,7 @@ underline index: -1 underline-2 rotate: false - xy: 901, 209 + xy: 1777, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -17791,7 +14795,7 @@ underline-2 index: -1 underline-disabled rotate: false - xy: 901, 180 + xy: 1815, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -17799,7 +14803,7 @@ underline-disabled index: -1 underline-red rotate: false - xy: 901, 151 + xy: 1853, 904 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -17807,14 +14811,14 @@ underline-red index: -1 whiteui rotate: false - xy: 1778, 219 + xy: 821, 928 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window-empty rotate: false - xy: 1576, 282 + xy: 1913, 836 size: 27, 61 split: 4, 4, 2, 2 orig: 27, 61 @@ -19904,13 +16908,20 @@ turbine-generator-icon-editor orig: 64, 64 offset: 0, 0 index: -1 -unloader-icon-editor +underflow-gate-icon-editor rotate: false xy: 717, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +unloader-icon-editor + rotate: false + xy: 989, 793 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 vault-icon-editor rotate: false xy: 457, 179 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 695ba5e23d..78d68136a7 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/assets/sprites/sprites3.png b/core/assets/sprites/sprites3.png index bc10bf1827..79023cda01 100644 Binary files a/core/assets/sprites/sprites3.png and b/core/assets/sprites/sprites3.png differ diff --git a/core/assets/sprites/sprites5.png b/core/assets/sprites/sprites5.png index 27da29592d..5e6f1bcf24 100644 Binary files a/core/assets/sprites/sprites5.png and b/core/assets/sprites/sprites5.png differ diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index bc9e2f0663..d1819b3a8f 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -11,13 +11,14 @@ import arc.scene.ui.layout.*; import arc.util.*; import arc.util.async.*; import mindustry.core.*; -import mindustry.ctype.Content; +import mindustry.ctype.*; import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.maps.*; import mindustry.mod.*; import mindustry.net.Net; +import mindustry.ui.*; import static arc.Core.*; import static mindustry.Vars.*; @@ -33,6 +34,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform @Override public void setup(){ Vars.loadLogger(); + Vars.loadFileLogger(); Vars.platform = this; beginTime = Time.millis(); @@ -54,14 +56,15 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform Vars.net = new Net(platform.getNet()); mods = new Mods(); - UI.loadSystemCursors(); + Fonts.loadSystemCursors(); assets.load(new Vars()); - UI.loadDefaultFont(); + Fonts.loadDefaultFont(); assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> { atlas = (TextureAtlas)t; + Fonts.mergeFontAtlas(atlas); }; assets.loadRun("maps", Map.class, () -> maps.loadPreviews()); diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 80e6241e09..ab88d572bf 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -1,13 +1,14 @@ package mindustry; -import arc.*; import arc.Application.*; +import arc.*; import arc.assets.*; -import arc.struct.*; import arc.files.*; import arc.graphics.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; +import arc.util.Log.*; import arc.util.io.*; import mindustry.ai.*; import mindustry.core.*; @@ -21,21 +22,21 @@ import mindustry.gen.*; import mindustry.input.*; import mindustry.maps.*; import mindustry.mod.*; -import mindustry.net.*; import mindustry.net.Net; +import mindustry.net.*; import mindustry.world.blocks.defense.ForceProjector.*; +import java.io.*; import java.nio.charset.*; import java.util.*; import static arc.Core.settings; -@SuppressWarnings("unchecked") public class Vars implements Loadable{ /** Whether to load locales.*/ public static boolean loadLocales = true; /** Whether the logger is loaded. */ - public static boolean loadedLogger = false; + public static boolean loadedLogger = false, loadedFileLogger = false; /** Maximum schematic size.*/ public static final int maxSchematicSize = 32; /** All schematic base64 starts with this string.*/ @@ -58,7 +59,7 @@ public class Vars implements Loadable{ public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers.json"; /** URL to the JSON file containing all the BE servers. Only queried in BE. */ public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json"; - /** URL the links to the wiki's modding guide.*/ + /** URL of the github issue report template.*/ public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?template=bug_report.md"; /** list of built-in servers.*/ public static final Array defaultServers = Array.with(); @@ -86,7 +87,7 @@ public class Vars implements Loadable{ public static final Color[] playerColors = { Color.valueOf("82759a"), Color.valueOf("c0c1c5"), - Color.valueOf("fff0e7"), + Color.valueOf("ffffff"), Color.valueOf("7d2953"), Color.valueOf("ff074e"), Color.valueOf("ff072a"), @@ -282,9 +283,10 @@ public class Vars implements Loadable{ String[] stags = {"&lc&fb[D]", "&lg&fb[I]", "&ly&fb[W]", "&lr&fb[E]", ""}; Array logBuffer = new Array<>(); - Log.setLogger((level, text, args) -> { - String result = Log.format(text, args); - System.out.println(Log.format(stags[level.ordinal()] + "&fr " + text, args)); + Log.setLogger((level, text) -> { + String result = text; + String rawText = Log.format(stags[level.ordinal()] + "&fr " + text); + System.out.println(rawText); result = tags[level.ordinal()] + " " + result; @@ -300,6 +302,28 @@ public class Vars implements Loadable{ loadedLogger = true; } + public static void loadFileLogger(){ + if(loadedFileLogger) return; + + Core.settings.setAppName(appName); + + Writer writer = settings.getDataDirectory().child("last_log.txt").writer(false); + LogHandler log = Log.getLogger(); + Log.setLogger(((level, text) -> { + log.log(level, text); + + try{ + writer.write("[" + Character.toUpperCase(level.name().charAt(0)) +"] " + Log.removeCodes(text) + "\n"); + writer.flush(); + }catch(IOException e){ + e.printStackTrace(); + //ignore it + } + })); + + loadedFileLogger = true; + } + public static void loadSettings(){ Core.settings.setAppName(appName); diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index 7a100b7778..ff17679630 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -207,6 +207,7 @@ public class BlockIndexer{ public TileEntity findTile(Team team, float x, float y, float range, Boolf pred, boolean usePriority){ TileEntity closest = null; float dst = 0; + float range2 = range*range; for(int rx = Math.max((int)((x - range) / tilesize / quadrantSize), 0); rx <= (int)((x + range) / tilesize / quadrantSize) && rx < quadWidth(); rx++){ for(int ry = Math.max((int)((y - range) / tilesize / quadrantSize), 0); ry <= (int)((y + range) / tilesize / quadrantSize) && ry < quadHeight(); ry++){ @@ -224,8 +225,12 @@ public class BlockIndexer{ TileEntity e = other.entity; - float ndst = Mathf.dst(x, y, e.x, e.y); - if(ndst < range && (closest == null || ndst < dst || (usePriority && closest.block.priority.ordinal() <= e.block.priority.ordinal()))){ + float ndst = Mathf.dst2(x, y, e.x, e.y); + if(ndst < range2 && (closest == null || + //this one is closer, and it is at least of equal priority + (ndst < dst && (!usePriority || closest.block.priority.ordinal() <= e.block.priority.ordinal())) || + //priority is used, and new block has higher priority regardless of range + (usePriority && closest.block.priority.ordinal() < e.block.priority.ordinal()))){ dst = ndst; closest = e; } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 8eee695f87..7f08f765a0 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -57,7 +57,7 @@ public class Blocks implements ContentList{ scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet //transport - conveyor, titaniumConveyor, plastaniumConveyor, armoredConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, invertedSorter, router, overflowGate, massDriver, + conveyor, titaniumConveyor, plastaniumConveyor, armoredConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, invertedSorter, router, overflowGate, underflowGate, massDriver, //liquids mechanicalPump, rotaryPump, thermalPump, conduit, pulseConduit, platedConduit, liquidRouter, liquidTank, liquidJunction, bridgeConduit, phaseConduit, @@ -398,12 +398,37 @@ public class Blocks implements ContentList{ //endregion //region ore - oreCopper = new OreBlock(Items.copper); - oreLead = new OreBlock(Items.lead); + oreCopper = new OreBlock(Items.copper){{ + oreDefault = true; + oreThreshold = 0.81f; + oreScale = 23.47619f; + }}; + + oreLead = new OreBlock(Items.lead){{ + oreDefault = true; + oreThreshold = 0.828f; + oreScale = 23.952381f; + }}; + oreScrap = new OreBlock(Items.scrap); - oreCoal = new OreBlock(Items.coal); - oreTitanium = new OreBlock(Items.titanium); - oreThorium = new OreBlock(Items.thorium); + + oreCoal = new OreBlock(Items.coal){{ + oreDefault = true; + oreThreshold = 0.846f; + oreScale = 24.428572f; + }}; + + oreTitanium = new OreBlock(Items.titanium){{ + oreDefault = true; + oreThreshold = 0.864f; + oreScale = 24.904762f; + }}; + + oreThorium = new OreBlock(Items.thorium){{ + oreDefault = true; + oreThreshold = 0.882f; + oreScale = 25.380953f; + }}; //endregion //region crafting @@ -624,10 +649,6 @@ public class Blocks implements ContentList{ ); hasPower = true; craftTime = 35f; - spinnerLength = 1.5f; - spinnerRadius = 3.5f; - spinnerThickness = 1.5f; - spinnerSpeed = 3f; size = 2; consumes.power(1f); @@ -883,12 +904,14 @@ public class Blocks implements ContentList{ requirements(Category.distribution, ItemStack.with(Items.copper, 1), true); health = 45; speed = 0.03f; + displayedSpeed = 4.2f; }}; titaniumConveyor = new ItemConveyor("titanium-conveyor"){{ requirements(Category.distribution, ItemStack.with(Items.copper, 1, Items.lead, 1, Items.titanium, 1)); health = 65; speed = 0.08f; + displayedSpeed = 10f; }}; plastaniumConveyor = new CraterConveyor("plastanium-conveyor"){{ @@ -902,6 +925,7 @@ public class Blocks implements ContentList{ requirements(Category.distribution, ItemStack.with(Items.plastanium, 1, Items.thorium, 1, Items.metaglass, 1)); health = 180; speed = 0.08f; + displayedSpeed = 10f; }}; junction = new Junction("junction"){{ @@ -953,6 +977,12 @@ public class Blocks implements ContentList{ buildCostMultiplier = 3f; }}; + underflowGate = new OverflowGate("underflow-gate"){{ + requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 4)); + buildCostMultiplier = 3f; + invert = true; + }}; + massDriver = new MassDriver("mass-driver"){{ requirements(Category.distribution, ItemStack.with(Items.titanium, 125, Items.silicon, 75, Items.lead, 125, Items.thorium, 50)); size = 3; diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 77554bc626..e09bce3695 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -22,7 +22,6 @@ public class TechTree implements ContentList{ node(conveyor, () -> { node(junction, () -> { - node(itemBridge); node(router, () -> { node(launchPad, () -> { node(launchPadLarge, () -> { @@ -34,7 +33,9 @@ public class TechTree implements ContentList{ node(sorter, () -> { node(invertedSorter); node(message); - node(overflowGate); + node(overflowGate, () -> { + node(underflowGate); + }); }); node(container, () -> { node(unloader); @@ -43,223 +44,260 @@ public class TechTree implements ContentList{ }); }); - node(titaniumConveyor, () -> { - node(phaseConveyor, () -> { - node(massDriver, () -> { + node(itemBridge, () -> { + node(titaniumConveyor, () -> { + node(phaseConveyor, () -> { + node(massDriver, () -> { + + }); + }); + + node(plastaniumConveyor, () -> { }); - }); - node(plastaniumConveyor, () -> { - - }); - - node(armoredConveyor, () -> { + node(armoredConveyor, () -> { + }); }); }); }); }); - }); - node(duo, () -> { - node(scatter, () -> { - node(hail, () -> { + node(duo, () -> { + node(scatter, () -> { + node(hail, () -> { - node(salvo, () -> { - node(swarmer, () -> { - node(cyclone, () -> { - node(spectre, () -> { + node(salvo, () -> { + node(swarmer, () -> { + node(cyclone, () -> { + node(spectre, () -> { + + }); + }); + }); + + node(ripple, () -> { + node(fuse, () -> { + + }); + }); + }); + }); + }); + + node(scorch, () -> { + node(arc, () -> { + node(wave, () -> { + + }); + + node(lancer, () -> { + node(meltdown, () -> { + + }); + + node(shockMine, () -> { + + }); + }); + }); + }); + + + node(copperWall, () -> { + node(copperWallLarge, () -> { + node(titaniumWall, () -> { + node(titaniumWallLarge); + + node(door, () -> { + node(doorLarge); + }); + node(plastaniumWall, () -> { + node(plastaniumWallLarge, () -> { + + }); + }); + node(thoriumWall, () -> { + node(thoriumWallLarge); + node(surgeWall, () -> { + node(surgeWallLarge); + node(phaseWall, () -> { + node(phaseWallLarge); + }); + }); + }); + }); + }); + }); + }); + + node(mechanicalDrill, () -> { + node(graphitePress, () -> { + node(pneumaticDrill, () -> { + node(cultivator, () -> { + + }); + + node(laserDrill, () -> { + node(blastDrill, () -> { + + }); + + node(waterExtractor, () -> { + node(oilExtractor, () -> { + + }); + }); + }); + }); + + node(pyratiteMixer, () -> { + node(blastMixer, () -> { + + }); + }); + + node(siliconSmelter, () -> { + + node(sporePress, () -> { + node(coalCentrifuge, () -> { + + }); + node(multiPress, () -> { + + }); + + node(plastaniumCompressor, () -> { + node(phaseWeaver, () -> { }); }); }); - node(ripple, () -> { - node(fuse, () -> { + node(kiln, () -> { + node(incinerator, () -> { + node(melter, () -> { + node(surgeSmelter, () -> { - }); - }); - }); - }); - }); + }); - node(scorch, () -> { - node(arc, () -> { - node(wave, () -> { + node(separator, () -> { + node(pulverizer, () -> { - }); + }); + }); - node(lancer, () -> { - node(meltdown, () -> { - - }); - - node(shockMine, () -> { - - }); - }); - }); - }); - - - node(copperWall, () -> { - node(copperWallLarge); - node(titaniumWall, () -> { - node(door, () -> { - node(doorLarge); - }); - node(plastaniumWall, () -> { - node(plastaniumWallLarge, () -> { - - }); - }); - node(titaniumWallLarge); - node(thoriumWall, () -> { - node(thoriumWallLarge); - node(surgeWall, () -> { - node(surgeWallLarge); - node(phaseWall, () -> { - node(phaseWallLarge); - }); - }); - }); - }); - }); - }); - - node(mechanicalDrill, () -> { - node(graphitePress, () -> { - node(pneumaticDrill, () -> { - node(cultivator, () -> { - - }); - - node(laserDrill, () -> { - node(blastDrill, () -> { - - }); - - node(waterExtractor, () -> { - node(oilExtractor, () -> { - - }); - }); - }); - }); - - node(pyratiteMixer, () -> { - node(blastMixer, () -> { - - }); - }); - - node(siliconSmelter, () -> { - - node(sporePress, () -> { - node(coalCentrifuge, () -> { - - }); - node(multiPress, () -> { - - }); - - node(plastaniumCompressor, () -> { - node(phaseWeaver, () -> { - - }); - }); - }); - - node(kiln, () -> { - node(incinerator, () -> { - node(melter, () -> { - node(surgeSmelter, () -> { + node(cryofluidMixer, () -> { + }); }); + }); + }); + }); + }); - node(separator, () -> { - node(pulverizer, () -> { + + node(mechanicalPump, () -> { + node(conduit, () -> { + node(liquidJunction, () -> { + node(liquidRouter, () -> { + node(liquidTank); + + node(bridgeConduit); + + node(pulseConduit, () -> { + node(phaseConduit, () -> { + + }); + + node(platedConduit, () -> { }); }); - node(cryofluidMixer, () -> { - - }); - }); - }); - }); - }); - }); - - - node(mechanicalPump, () -> { - node(conduit, () -> { - node(liquidJunction, () -> { - node(liquidRouter, () -> { - node(liquidTank); - - node(pulseConduit, () -> { - node(phaseConduit, () -> { - - }); - - node(platedConduit, () -> { - - }); - }); - - node(rotaryPump, () -> { - node(thermalPump, () -> { - - }); - }); - }); - node(bridgeConduit); - }); - }); - }); - - node(combustionGenerator, () -> { - node(powerNode, () -> { - node(powerNodeLarge, () -> { - node(diode, () -> { - node(surgeTower, () -> { - - }); - }); - }); - - node(battery, () -> { - node(batteryLarge, () -> { - - }); - }); - - node(mender, () -> { - node(mendProjector, () -> { - node(forceProjector, () -> { - node(overdriveProjector, () -> { - - }); - }); - - node(repairPoint, () -> { - - }); - }); - }); - - node(turbineGenerator, () -> { - node(thermalGenerator, () -> { - node(differentialGenerator, () -> { - node(thoriumReactor, () -> { - node(impactReactor, () -> { + node(rotaryPump, () -> { + node(thermalPump, () -> { }); + }); + }); + }); + }); + }); - node(rtgGenerator, () -> { + node(combustionGenerator, () -> { + node(powerNode, () -> { + node(powerNodeLarge, () -> { + node(diode, () -> { + node(surgeTower, () -> { + + }); + }); + }); + + node(battery, () -> { + node(batteryLarge, () -> { + + }); + }); + + node(mender, () -> { + node(mendProjector, () -> { + node(forceProjector, () -> { + node(overdriveProjector, () -> { + + }); + }); + + node(repairPoint, () -> { + + }); + }); + }); + + node(turbineGenerator, () -> { + node(thermalGenerator, () -> { + node(differentialGenerator, () -> { + node(thoriumReactor, () -> { + node(impactReactor, () -> { + + }); + + node(rtgGenerator, () -> { + + }); + }); + }); + }); + }); + + node(solarPanel, () -> { + node(largeSolarPanel, () -> { + + }); + }); + }); + + node(draugFactory, () -> { + node(spiritFactory, () -> { + node(phantomFactory); + }); + + node(daggerFactory, () -> { + node(commandCenter, () -> { + }); + node(crawlerFactory, () -> { + node(titanFactory, () -> { + node(fortressFactory, () -> { + + }); + }); + }); + + node(wraithFactory, () -> { + node(ghoulFactory, () -> { + node(revenantFactory, () -> { }); }); @@ -267,58 +305,27 @@ public class TechTree implements ContentList{ }); }); - node(solarPanel, () -> { - node(largeSolarPanel, () -> { - - }); - }); - }); - - node(draugFactory, () -> { - node(spiritFactory, () -> { - node(phantomFactory); - }); - - node(daggerFactory, () -> { - node(commandCenter, () -> {}); - node(crawlerFactory, () -> { - node(titanFactory, () -> { - node(fortressFactory, () -> { + node(dartPad, () -> { + node(deltaPad, () -> { + node(javelinPad, () -> { + node(tridentPad, () -> { + node(glaivePad); }); }); - }); - node(wraithFactory, () -> { - node(ghoulFactory, () -> { - node(revenantFactory, () -> { + node(tauPad, () -> { + node(omegaPad, () -> { }); }); }); }); }); - - node(dartPad, () -> { - node(deltaPad, () -> { - - node(javelinPad, () -> { - node(tridentPad, () -> { - node(glaivePad); - }); - }); - - node(tauPad, () -> { - node(omegaPad, () -> { - - }); - }); - }); - }); }); }); }); - } + }; private static TechNode node(Block block, Runnable children){ ItemStack[] requirements = new ItemStack[block.requirements.length]; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 1c5202ab46..975cd87232 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1,10 +1,8 @@ package mindustry.content; import arc.struct.*; -import mindustry.ctype.ContentList; +import mindustry.ctype.*; import mindustry.entities.bullet.*; -import mindustry.entities.type.*; -import mindustry.entities.type.Bullet; import mindustry.entities.type.base.*; import mindustry.gen.*; import mindustry.type.*; @@ -103,23 +101,14 @@ public class UnitTypes implements ContentList{ reload = 12f; ejectEffect = Fx.none; shootSound = Sounds.explosion; - bullet = new BombBulletType(2f, 3f, "clear"){ - { - hitEffect = Fx.pulverize; - lifetime = 30f; - speed = 1.1f; - splashDamageRadius = 55f; - splashDamage = 30f; - } - - @Override - public void init(Bullet b){ - if(b.getOwner() instanceof Unit){ - ((Unit)b.getOwner()).kill(); - } - b.time(b.lifetime()); - } - }; + bullet = new BombBulletType(2f, 3f, "clear"){{ + hitEffect = Fx.pulverize; + lifetime = 2f; + speed = 1.1f; + splashDamageRadius = 55f; + splashDamage = 30f; + killShooter = true; + }}; }}; }}; diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 2bd4bdb3eb..9508ad94e3 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -133,9 +133,9 @@ public class NetClient implements ApplicationListener{ } //called on all clients - @Remote(called = Loc.server, targets = Loc.server, variants = Variant.both) + @Remote(targets = Loc.server, variants = Variant.both) public static void sendMessage(String message, String sender, Player playersender){ - if(Vars.ui != null && !(playersender != null && net.server() && sender.startsWith("[#" + player.getTeam().color.toString() + "]"))){ + if(Vars.ui != null){ Vars.ui.chatfrag.addMessage(message, sender); } @@ -171,6 +171,11 @@ public class NetClient implements ApplicationListener{ return; } + //special case; graphical server needs to see its message + if(!headless && player == Vars.player){ + Vars.ui.chatfrag.addMessage(message, colorizeName(player.id, player.name)); + } + //server console logging Log.info("&y{0}: &lb{1}", player.name, message); @@ -261,6 +266,11 @@ public class NetClient implements ApplicationListener{ ui.showText("", message); } + @Remote(variants = Variant.both) + public static void onInfoToast(String message, float duration){ + ui.showInfoToast(message, duration); + } + @Remote(variants = Variant.both) public static void onSetRules(Rules rules){ state.rules = rules; @@ -272,7 +282,6 @@ public class NetClient implements ApplicationListener{ netClient.removed.clear(); logic.reset(); - ui.chatfrag.clearMessages(); net.setClientLoaded(false); ui.loadfrag.show("$connecting.data"); @@ -513,7 +522,7 @@ public class NetClient implements ApplicationListener{ return Core.settings.getString("usid-" + ip, null); }else{ byte[] bytes = new byte[8]; - new RandomXS128().nextBytes(bytes); + new Rand().nextBytes(bytes); String result = new String(Base64Coder.encode(bytes)); Core.settings.put("usid-" + ip, result); Core.settings.save(); diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 9fead5492b..b66c5c3cf3 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -230,7 +230,18 @@ public class NetServer implements ApplicationListener{ net.handleServer(InvokePacket.class, (con, packet) -> { if(con.player == null) return; - RemoteReadServer.readPacket(packet.writeBuffer, packet.type, con.player); + try{ + RemoteReadServer.readPacket(packet.writeBuffer, packet.type, con.player); + }catch(ValidateException e){ + Log.debug("Validation failed for '{0}': {1}", e.player, e.getMessage()); + }catch(RuntimeException e){ + if(e.getCause() instanceof ValidateException){ + ValidateException v = (ValidateException)e.getCause(); + Log.debug("Validation failed for '{0}': {1}", v.player, v.getMessage()); + }else{ + throw e; + } + } }); registerCommands(); @@ -253,7 +264,7 @@ public class NetServer implements ApplicationListener{ page --; - if(page > pages || page < 0){ + if(page >= pages || page < 0){ player.sendMessage("[scarlet]'page' must be a number between[orange] 1[] and[orange] " + pages + "[scarlet]."); return; } @@ -273,7 +284,11 @@ public class NetServer implements ApplicationListener{ }); //duration of a a kick in seconds - int kickDuration = 15 * 60; + int kickDuration = 20 * 60; + //voting round duration in seconds + float voteDuration = 0.5f * 60; + //cooldown between votes + int voteCooldown = 60 * 2; class VoteSession{ Player target; @@ -291,7 +306,7 @@ public class NetServer implements ApplicationListener{ map[0] = null; task.cancel(); } - }, 60 * 1); + }, voteDuration); } void vote(Player player, int d){ @@ -315,9 +330,7 @@ public class NetServer implements ApplicationListener{ } } - //cooldown between votes - int voteTime = 60 * 3; - Timekeeper vtime = new Timekeeper(voteTime); + Timekeeper vtime = new Timekeeper(voteCooldown); //current kick sessions VoteSession[] currentlyKicking = {null}; @@ -364,7 +377,7 @@ public class NetServer implements ApplicationListener{ player.sendMessage("[scarlet]Only players on your team can be kicked."); }else{ if(!vtime.get()){ - player.sendMessage("[scarlet]You must wait " + voteTime/60 + " minutes between votekicks."); + player.sendMessage("[scarlet]You must wait " + voteCooldown/60 + " minutes between votekicks."); return; } @@ -504,6 +517,7 @@ public class NetServer implements ApplicationListener{ player.isShooting = shooting; player.isBuilding = building; player.buildQueue().clear(); + for(BuildRequest req : requests){ if(req == null) continue; Tile tile = world.tile(req.x, req.y); @@ -513,10 +527,23 @@ public class NetServer implements ApplicationListener{ continue; }else if(!req.breaking && tile.block() == req.block && (!req.block.rotate || tile.rotation() == req.rotation)){ continue; + }else if(connection.rejectedRequests.contains(r -> r.breaking == req.breaking && r.x == req.x && r.y == req.y)){ //check if request was recently rejected, and skip it if so + continue; + }else if(!netServer.admins.allowAction(player, req.breaking ? ActionType.breakBlock : ActionType.placeBlock, tile, action -> { //make sure request is allowed by the server + action.block = req.block; + action.rotation = req.rotation; + action.config = req.config; + })){ + //force the player to remove this request if that's not the case + Call.removeQueueBlock(player.con, req.x, req.y, req.breaking); + connection.rejectedRequests.add(req); + continue; } player.buildQueue().addLast(req); } + connection.rejectedRequests.clear(); + vector.set(x - player.getInterpolator().target.x, y - player.getInterpolator().target.y); vector.limit(maxMove); diff --git a/core/src/mindustry/core/Platform.java b/core/src/mindustry/core/Platform.java index ebad75b9e7..fda4ea4564 100644 --- a/core/src/mindustry/core/Platform.java +++ b/core/src/mindustry/core/Platform.java @@ -90,7 +90,7 @@ public interface Platform{ String uuid = Core.settings.getString("uuid", ""); if(uuid.isEmpty()){ byte[] result = new byte[8]; - new RandomXS128().nextBytes(result); + new Rand().nextBytes(result); uuid = new String(Base64Coder.encode(result)); Core.settings.put("uuid", uuid); Core.settings.save(); diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index f1b578cc9c..70606c55d5 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -2,29 +2,22 @@ package mindustry.core; import arc.*; import arc.Graphics.*; -import arc.Graphics.Cursor.*; import arc.Input.*; import arc.assets.*; -import arc.assets.loaders.*; -import arc.assets.loaders.resolvers.*; -import arc.struct.*; -import arc.files.*; -import arc.freetype.*; -import arc.freetype.FreeTypeFontGenerator.*; -import arc.freetype.FreetypeFontLoader.*; import arc.func.*; import arc.graphics.*; -import arc.graphics.Texture.*; import arc.graphics.g2d.*; import arc.input.*; import arc.math.*; import arc.scene.*; import arc.scene.actions.*; import arc.scene.event.*; +import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.TextField.*; import arc.scene.ui.Tooltip.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.core.GameState.*; import mindustry.editor.*; @@ -39,6 +32,8 @@ import static arc.scene.actions.Actions.*; import static mindustry.Vars.*; public class UI implements ApplicationListener, Loadable{ + public static PixmapPacker packer; + public MenuFragment menufrag; public HudFragment hudfrag; public ChatFragment chatfrag; @@ -77,7 +72,7 @@ public class UI implements ApplicationListener, Loadable{ public Cursor drillCursor, unloadCursor; public UI(){ - setupFonts(); + Fonts.loadFonts(); } @Override @@ -99,6 +94,7 @@ public class UI implements ApplicationListener, Loadable{ Icon.load(); Styles.load(); Tex.loadStyles(); + Fonts.loadContentIcons(); Dialog.setShowAction(() -> sequence(alpha(0f), fadeIn(0.1f))); Dialog.setHideAction(() -> sequence(fadeOut(0.1f))); @@ -116,7 +112,9 @@ public class UI implements ApplicationListener, Loadable{ Colors.put("unlaunched", Color.valueOf("8982ed")); Colors.put("highlight", Pal.accent.cpy().lerp(Color.white, 0.3f)); Colors.put("stat", Pal.stat); - loadExtraCursors(); + + drillCursor = Core.graphics.newCursor("drill"); + unloadCursor = Core.graphics.newCursor("unload"); } @Override @@ -124,64 +122,6 @@ public class UI implements ApplicationListener, Loadable{ return Array.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", BitmapFont.class), new AssetDescriptor<>("default", BitmapFont.class), new AssetDescriptor<>("chat", BitmapFont.class)); } - /** Called from a static context to make the cursor appear immediately upon startup.*/ - public static void loadSystemCursors(){ - SystemCursor.arrow.set(Core.graphics.newCursor("cursor")); - SystemCursor.hand.set(Core.graphics.newCursor("hand")); - SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam")); - - Core.graphics.restoreCursor(); - } - - /** Called from a static context for use in the loading screen.*/ - public static void loadDefaultFont(){ - FileHandleResolver resolver = new InternalFileHandleResolver(); - Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); - Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver){ - @Override - public BitmapFont loadSync(AssetManager manager, String fileName, Fi file, FreeTypeFontLoaderParameter parameter){ - if(fileName.equals("outline")){ - parameter.fontParameters.borderWidth = Scl.scl(2f); - parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth; - } - parameter.fontParameters.magFilter = TextureFilter.Linear; - parameter.fontParameters.minFilter = TextureFilter.Linear; - parameter.fontParameters.size = fontParameter().size; - return super.loadSync(manager, fileName, file, parameter); - } - }); - - FreeTypeFontParameter param = new FreeTypeFontParameter(){{ - borderColor = Color.darkGray; - incremental = true; - }}; - - Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/font.ttf", param)).loaded = t -> Fonts.outline = (BitmapFont)t; - } - - void loadExtraCursors(){ - drillCursor = Core.graphics.newCursor("drill"); - unloadCursor = Core.graphics.newCursor("unload"); - } - - public void setupFonts(){ - String fontName = "fonts/font.ttf"; - - FreeTypeFontParameter param = fontParameter(); - - Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.def = (BitmapFont)f; - Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.chat = (BitmapFont)f; - } - - static FreeTypeFontParameter fontParameter(){ - return new FreeTypeFontParameter(){{ - size = (int)(Scl.scl(18f)); - shadowColor = Color.darkGray; - shadowOffsetY = 2; - incremental = true; - }}; - } - @Override public void update(){ if(disableUI || Core.scene == null) return; @@ -271,7 +211,17 @@ public class UI implements ApplicationListener, Loadable{ @Override public void dispose(){ - //generator.dispose(); + if(packer != null){ + packer.dispose(); + packer = null; + } + } + + public TextureRegionDrawable getIcon(String name){ + if(Icon.icons.containsKey(name)){ + return Icon.icons.get(name); + } + return Core.atlas.getDrawable("error"); } public void loadAnd(Runnable call){ @@ -339,6 +289,19 @@ public class UI implements ApplicationListener, Loadable{ Core.scene.add(table); } + public void showInfoToast(String info, float duration){ + Table table = new Table(); + table.setFillParent(true); + table.update(() -> { + if(state.is(State.menu)){ + table.remove(); + } + }); + table.actions(Actions.delay(duration * 0.9f), Actions.fadeOut(duration * 0.1f, Interpolation.fade), Actions.remove()); + table.top().table(Styles.black3, t -> t.margin(4).add(info).style(Styles.outlineLabel)).padTop(10); + Core.scene.add(table); + } + public void showInfo(String info){ new Dialog(""){{ getCell(cont).growX(); diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index af194377bf..5261560399 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -1,6 +1,7 @@ package mindustry.ctype; import arc.*; +import arc.util.ArcAnnotate.*; import mindustry.annotations.Annotations.*; import arc.graphics.g2d.*; import arc.scene.ui.layout.*; @@ -13,7 +14,7 @@ public abstract class UnlockableContent extends MappableContent{ /** Localized, formal name. Never null. Set to block name if not found in bundle. */ public String localizedName; /** Localized description. May be null. */ - public String description; + public @Nullable String description; /** Icons by Cicon ID.*/ protected TextureRegion[] cicons = new TextureRegion[mindustry.ui.Cicon.all.length]; @@ -24,6 +25,10 @@ public abstract class UnlockableContent extends MappableContent{ this.description = Core.bundle.getOrNull(getContentType() + "." + this.name + ".description"); } + public String displayDescription(){ + return minfo.mod == null ? description : description + "\n" + Core.bundle.format("mod.display", minfo.mod.meta.displayName()); + } + /** Generate any special icons for this content. Called asynchronously.*/ @CallSuper public void createIcons(MultiPacker packer){ diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index b9a28501b9..577157ff19 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -66,30 +66,30 @@ public class MapEditorDialog extends Dialog implements Disposable{ menu.cont.table(t -> { t.defaults().size(swidth, 60f).padBottom(5).padRight(5).padLeft(5); - t.addImageTextButton("$editor.savemap", Icon.floppy16Small, this::save); + t.addImageTextButton("$editor.savemap", Icon.save, this::save); - t.addImageTextButton("$editor.mapinfo", Icon.pencilSmall, () -> { + t.addImageTextButton("$editor.mapinfo", Icon.pencil, () -> { infoDialog.show(); menu.hide(); }); t.row(); - t.addImageTextButton("$editor.generate", Icon.editorSmall, () -> { + t.addImageTextButton("$editor.generate", Icon.terrain, () -> { generateDialog.show(generateDialog::applyToEditor); menu.hide(); }); - t.addImageTextButton("$editor.resize", Icon.resizeSmall, () -> { + t.addImageTextButton("$editor.resize", Icon.resize, () -> { resizeDialog.show(); menu.hide(); }); t.row(); - t.addImageTextButton("$editor.import", Icon.loadMapSmall, () -> + t.addImageTextButton("$editor.import", Icon.download, () -> createDialog("$editor.import", - "$editor.importmap", "$editor.importmap.description", Icon.loadMap, (Runnable)loadDialog::show, + "$editor.importmap", "$editor.importmap.description", Icon.download, (Runnable)loadDialog::show, "$editor.importfile", "$editor.importfile.description", Icon.file, (Runnable)() -> platform.showFileChooser(true, mapExtension, file -> ui.loadAnd(() -> { maps.tryCatchMapError(() -> { @@ -115,7 +115,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ }))) ); - t.addImageTextButton("$editor.export", Icon.saveMapSmall, () -> { + t.addImageTextButton("$editor.export", Icon.upload, () -> { if(!ios){ platform.showFileChooser(false, mapExtension, file -> { ui.loadAnd(() -> { @@ -148,7 +148,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ menu.cont.row(); if(steam){ - menu.cont.addImageTextButton("$editor.publish.workshop", Icon.linkSmall, () -> { + menu.cont.addImageTextButton("$editor.publish.workshop", Icon.link, () -> { Map builtin = maps.all().find(m -> m.name().equals(editor.getTags().get("name", "").trim())); if(editor.getTags().containsKey("steamid") && builtin != null && !builtin.custom){ @@ -181,11 +181,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ menu.cont.row(); } - menu.cont.addImageTextButton("$editor.ingame", Icon.arrowSmall, this::playtest).padTop(!steam ? -3 : 1).size(swidth * 2f + 10, 60f); + menu.cont.addImageTextButton("$editor.ingame", Icon.right, this::playtest).padTop(!steam ? -3 : 1).size(swidth * 2f + 10, 60f); menu.cont.row(); - menu.cont.addImageTextButton("$quit", Icon.backSmall, () -> { + menu.cont.addImageTextButton("$quit", Icon.exit, () -> { tryExit(); menu.hide(); }).size(swidth * 2f + 10, 60f); @@ -427,7 +427,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ Cons addTool = tool -> { - ImageButton button = new ImageButton(Core.atlas.drawable("icon-" + tool.name() + "-small"), Styles.clearTogglei); + ImageButton button = new ImageButton(ui.getIcon(tool.name()), Styles.clearTogglei); button.clicked(() -> { view.setTool(tool); if(lastTable[0] != null){ @@ -503,16 +503,16 @@ public class MapEditorDialog extends Dialog implements Disposable{ tools.defaults().size(size, size); - tools.addImageButton(Icon.menuLargeSmall, Styles.cleari, menu::show); + tools.addImageButton(Icon.menu, Styles.cleari, menu::show); - ImageButton grid = tools.addImageButton(Icon.gridSmall, Styles.clearTogglei, () -> view.setGrid(!view.isGrid())).get(); + ImageButton grid = tools.addImageButton(Icon.grid, Styles.clearTogglei, () -> view.setGrid(!view.isGrid())).get(); addTool.get(EditorTool.zoom); tools.row(); - ImageButton undo = tools.addImageButton(Icon.undoSmall, Styles.cleari, editor::undo).get(); - ImageButton redo = tools.addImageButton(Icon.redoSmall, Styles.cleari, editor::redo).get(); + ImageButton undo = tools.addImageButton(Icon.undo, Styles.cleari, editor::undo).get(); + ImageButton redo = tools.addImageButton(Icon.redo, Styles.cleari, editor::redo).get(); addTool.get(EditorTool.pick); @@ -534,7 +534,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ addTool.get(EditorTool.fill); addTool.get(EditorTool.spray); - ImageButton rotate = tools.addImageButton(Icon.arrow16Small, Styles.cleari, () -> editor.rotation = (editor.rotation + 1) % 4).get(); + ImageButton rotate = tools.addImageButton(Icon.right, Styles.cleari, () -> editor.rotation = (editor.rotation + 1) % 4).get(); rotate.getImage().update(() -> { rotate.getImage().setRotation(editor.rotation * 90); rotate.getImage().setOrigin(Align.center); diff --git a/core/src/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java index 12f989c272..7d6791f846 100644 --- a/core/src/mindustry/editor/MapGenerateDialog.java +++ b/core/src/mindustry/editor/MapGenerateDialog.java @@ -235,24 +235,24 @@ public class MapGenerateDialog extends FloatingDialog{ t.table(b -> { ImageButtonStyle style = Styles.cleari; b.defaults().size(50f); - b.addImageButton(Icon.refreshSmall, style, () -> { + b.addImageButton(Icon.refresh, style, () -> { filter.randomize(); update(); }); - b.addImageButton(Icon.arrowUpSmall, style, () -> { + b.addImageButton(Icon.upOpen, style, () -> { int idx = filters.indexOf(filter); filters.swap(idx, Math.max(0, idx - 1)); rebuildFilters(); update(); }); - b.addImageButton(Icon.arrowDownSmall, style, () -> { + b.addImageButton(Icon.downOpen, style, () -> { int idx = filters.indexOf(filter); filters.swap(idx, Math.min(filters.size - 1, idx + 1)); rebuildFilters(); update(); }); - b.addImageButton(Icon.trashSmall, style, () -> { + b.addImageButton(Icon.trash, style, () -> { filters.remove(filter); rebuildFilters(); update(); diff --git a/core/src/mindustry/editor/MapView.java b/core/src/mindustry/editor/MapView.java index 6787f418ab..f2d5b45dbd 100644 --- a/core/src/mindustry/editor/MapView.java +++ b/core/src/mindustry/editor/MapView.java @@ -189,7 +189,7 @@ public class MapView extends Element implements GestureListener{ lastTool = null; } - if(ui.editor.hasPane()) return; + if(Core.scene.getScrollFocus() != this) return; zoom += Core.input.axis(KeyCode.SCROLL) / 10f * zoom; clampZoom(); diff --git a/core/src/mindustry/entities/TargetPriority.java b/core/src/mindustry/entities/TargetPriority.java index ec36b03925..583710ca2c 100644 --- a/core/src/mindustry/entities/TargetPriority.java +++ b/core/src/mindustry/entities/TargetPriority.java @@ -1,5 +1,6 @@ package mindustry.entities; +/** A higher ordinal means a higher priority. Higher priority blocks will always get targeted over those of lower priority, regardless of distance. */ public enum TargetPriority{ base, turret diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 6c5417d0ca..51e74cf383 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -39,6 +39,8 @@ public abstract class BulletType extends Content{ public float reloadMultiplier = 1f; /** Recoil from shooter entities. */ public float recoil; + /** Whether to kill the shooter when this is shot. For suicide bombers. */ + public boolean killShooter; public float splashDamage = 0f; /** Knockback in velocity. */ @@ -146,6 +148,9 @@ public abstract class BulletType extends Content{ } public void init(Bullet b){ + if(killShooter && b.getOwner() instanceof HealthTrait){ + ((HealthTrait)b.getOwner()).kill(); + } } public void update(Bullet b){ diff --git a/core/src/mindustry/entities/effect/Lightning.java b/core/src/mindustry/entities/effect/Lightning.java index 59b7f833fa..e4658cd1ff 100644 --- a/core/src/mindustry/entities/effect/Lightning.java +++ b/core/src/mindustry/entities/effect/Lightning.java @@ -27,7 +27,7 @@ import static mindustry.Vars.*; public class Lightning extends TimedEntity implements DrawTrait, TimeTrait{ public static final float lifetime = 10f; - private static final RandomXS128 random = new RandomXS128(); + private static final Rand random = new Rand(); private static final Rect rect = new Rect(); private static final Array entities = new Array<>(); private static final IntSet hit = new IntSet(); diff --git a/core/src/mindustry/entities/effect/RubbleDecal.java b/core/src/mindustry/entities/effect/RubbleDecal.java index 1d26980dc0..a7f7d2a323 100644 --- a/core/src/mindustry/entities/effect/RubbleDecal.java +++ b/core/src/mindustry/entities/effect/RubbleDecal.java @@ -38,4 +38,9 @@ public class RubbleDecal extends Decal{ } Draw.rect(region, x, y, Mathf.randomSeed(id, 0, 4) * 90); } + + @Override + public float drawSize(){ + return region.getWidth() * 3f; + } } diff --git a/core/src/mindustry/entities/traits/BuilderTrait.java b/core/src/mindustry/entities/traits/BuilderTrait.java index 02ae0bca5b..a05fc685ec 100644 --- a/core/src/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/mindustry/entities/traits/BuilderTrait.java @@ -118,6 +118,14 @@ public interface BuilderTrait extends Entity, TeamTrait{ return request.stuck && !core.items.has(request.block.requirements); } + default void removeRequest(int x, int y, boolean breaking){ + //remove matching request + int idx = player.buildQueue().indexOf(req -> req.breaking == breaking && req.x == x && req.y == y); + if(idx != -1){ + player.buildQueue().removeIndex(idx); + } + } + /** Returns the queue for storing build requests. */ Queue buildQueue(); diff --git a/core/src/mindustry/entities/traits/HealthTrait.java b/core/src/mindustry/entities/traits/HealthTrait.java index fb241e0d1b..8eb4cff2bd 100644 --- a/core/src/mindustry/entities/traits/HealthTrait.java +++ b/core/src/mindustry/entities/traits/HealthTrait.java @@ -14,6 +14,11 @@ public interface HealthTrait{ void setDead(boolean dead); + default void kill(){ + health(-1); + damage(1); + } + default void onHit(SolidTrait entity){ } diff --git a/core/src/mindustry/entities/type/Player.java b/core/src/mindustry/entities/type/Player.java index 79bb9a0bbd..f9ccb7dfd3 100644 --- a/core/src/mindustry/entities/type/Player.java +++ b/core/src/mindustry/entities/type/Player.java @@ -407,9 +407,9 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ if(isAdmin){ float s = 3f; Draw.color(color.r * 0.5f, color.g * 0.5f, color.b * 0.5f, 1f); - Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1.5f, s, s); + Draw.rect(Icon.adminSmall.getRegion(), x + layout.width / 2f + 2 + 1, y + nameHeight - 1.5f, s, s); Draw.color(color); - Draw.rect(Core.atlas.find("icon-admin-badge"), x + layout.width / 2f + 2 + 1, y + nameHeight - 1f, s, s); + Draw.rect(Icon.adminSmall.getRegion(), x + layout.width / 2f + 2 + 1, y + nameHeight - 1f, s, s); } } @@ -762,7 +762,6 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public void sendMessage(String text){ if(isLocal){ if(Vars.ui != null){ - Log.info("add " + text); Vars.ui.chatfrag.addMessage(text, null); } }else{ diff --git a/core/src/mindustry/entities/type/Unit.java b/core/src/mindustry/entities/type/Unit.java index 42463dc508..8b8a5c3ac8 100644 --- a/core/src/mindustry/entities/type/Unit.java +++ b/core/src/mindustry/entities/type/Unit.java @@ -185,11 +185,6 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ y = Mathf.clamp(y, 0, world.height() * tilesize - tilesize); } - public void kill(){ - health = -1; - damage(1); - } - public boolean isImmune(StatusEffect effect){ return false; } @@ -242,6 +237,10 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ return tile == null ? (Floor)Blocks.air : tile.floor(); } + public @Nullable Tile tileOn(){ + return world.tileWorld(x, y); + } + public void onRespawn(Tile tile){ } diff --git a/core/src/mindustry/game/GlobalData.java b/core/src/mindustry/game/GlobalData.java index 3dbf592a71..0e72ef7245 100644 --- a/core/src/mindustry/game/GlobalData.java +++ b/core/src/mindustry/game/GlobalData.java @@ -85,9 +85,15 @@ public class GlobalData{ if(amount > 0){ unlockContent(item); } + amount = Math.max(amount, 0); + modified = true; items.getAndIncrement(item, 0, amount); state.stats.itemsDelivered.getAndIncrement(item, 0, amount); + + //clamp overflow + if(items.get(item, 0) < 0) items.put(item, Integer.MAX_VALUE); + if(state.stats.itemsDelivered.get(item, 0) < 0) state.stats.itemsDelivered.put(item, Integer.MAX_VALUE); } public boolean hasItems(Array stacks){ diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index e6c05eb6e0..0e5d60fadc 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -35,7 +35,7 @@ public class Team implements Comparable{ for(int i = 6; i < all.length; i++){ new Team(i, "team#" + i, Color.HSVtoRGB(360f * Mathf.random(), 100f * Mathf.random(0.6f, 1f), 100f * Mathf.random(0.8f, 1f), 1f)); } - Mathf.random.setSeed(new RandomXS128().nextLong()); + Mathf.random.setSeed(new Rand().nextLong()); } public static Team get(int id){ diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index 2fd9b48087..f3a31369da 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -43,6 +43,10 @@ public class Drawf{ } public static void arrow(float x, float y, float x2, float y2, float length, float radius){ + arrow(x, y, x2, y2, length, radius, Pal.accent); + } + + public static void arrow(float x, float y, float x2, float y2, float length, float radius, Color color){ float angle = Angles.angle(x, y, x2, y2); float space = 2f; Tmp.v1.set(x2, y2).sub(x, y).limit(length); @@ -50,7 +54,7 @@ public class Drawf{ Draw.color(Pal.gray); Fill.poly(vx, vy, 3, radius + space, angle); - Draw.color(Pal.accent); + Draw.color(color); Fill.poly(vx, vy, 3, radius, angle); Draw.color(); } diff --git a/core/src/mindustry/graphics/FloorRenderer.java b/core/src/mindustry/graphics/FloorRenderer.java index 6033b4ff03..fa1327e3a6 100644 --- a/core/src/mindustry/graphics/FloorRenderer.java +++ b/core/src/mindustry/graphics/FloorRenderer.java @@ -201,7 +201,7 @@ public class FloorRenderer implements Disposable{ int chunksx = Mathf.ceil((float)(world.width()) / chunksize), chunksy = Mathf.ceil((float)(world.height()) / chunksize); cache = new Chunk[chunksx][chunksy]; - cbatch = new MultiCacheBatch(chunksize * chunksize * 4); + cbatch = new MultiCacheBatch(chunksize * chunksize * 5); Time.mark(); diff --git a/core/src/mindustry/graphics/IndexedRenderer.java b/core/src/mindustry/graphics/IndexedRenderer.java index 4e9ff4d45a..cb42b6fe0b 100644 --- a/core/src/mindustry/graphics/IndexedRenderer.java +++ b/core/src/mindustry/graphics/IndexedRenderer.java @@ -46,9 +46,9 @@ public class IndexedRenderer implements Disposable{ private float[] tmpVerts = new float[vsize * 6]; private float[] vertices; - private Matrix3 projMatrix = new Matrix3(); - private Matrix3 transMatrix = new Matrix3(); - private Matrix3 combined = new Matrix3(); + private Mat projMatrix = new Mat(); + private Mat transMatrix = new Mat(); + private Mat combined = new Mat(); private float color = Color.white.toFloatBits(); public IndexedRenderer(int sprites){ @@ -210,11 +210,11 @@ public class IndexedRenderer implements Disposable{ mesh.updateVertices(index * vsize * 6, vertices); } - public Matrix3 getTransformMatrix(){ + public Mat getTransformMatrix(){ return transMatrix; } - public void setProjectionMatrix(Matrix3 matrix){ + public void setProjectionMatrix(Mat matrix){ projMatrix = matrix; } diff --git a/core/src/mindustry/graphics/MenuRenderer.java b/core/src/mindustry/graphics/MenuRenderer.java index 0e68f08307..099604bd6b 100644 --- a/core/src/mindustry/graphics/MenuRenderer.java +++ b/core/src/mindustry/graphics/MenuRenderer.java @@ -28,7 +28,7 @@ public class MenuRenderer implements Disposable{ private int cacheFloor, cacheWall; private Camera camera = new Camera(); - private Matrix3 mat = new Matrix3(); + private Mat mat = new Mat(); private FrameBuffer shadows; private CacheBatch batch; private float time = 0f; diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index da8a808962..6cb4348c23 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -64,7 +64,7 @@ public class OverlayRenderer{ for(Tile mechpad : indexer.getAllied(player.getTeam(), BlockFlag.mechPad)){ if(!(mechpad.block() instanceof MechPad)) continue; if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f) - .setCenter(Core.camera.position.x, Core.camera.position.y).contains(mechpad.x, mechpad.y)){ + .setCenter(Core.camera.position.x, Core.camera.position.y).contains(mechpad.drawx(), mechpad.drawy())){ Tmp.v1.set(mechpad.drawx(), mechpad.drawy()).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength); diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 8838dee9c9..0776d9e33e 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -67,7 +67,7 @@ public class DesktopInput extends InputHandler{ Core.keybinds.get(Binding.schematic_flip_y).key.toString())).style(Styles.outlineLabel); b.row(); b.table(a -> { - a.addImageTextButton("$schematic.add", Icon.saveSmall, this::showSchematicSave).colspan(2).size(250f, 50f).disabled(f -> lastSchematic == null || lastSchematic.file != null); + a.addImageTextButton("$schematic.add", Icon.save, this::showSchematicSave).colspan(2).size(250f, 50f).disabled(f -> lastSchematic == null || lastSchematic.file != null); }); }).margin(6f); }); @@ -256,7 +256,7 @@ public class DesktopInput extends InputHandler{ table.row(); table.left().margin(0f).defaults().size(48f).left(); - table.addImageButton(Icon.pasteSmall, Styles.clearPartiali, () -> { + table.addImageButton(Icon.paste, Styles.clearPartiali, () -> { ui.schematics.show(); }); } diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index e56244928e..cd2f3d6d6b 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -1,8 +1,6 @@ package mindustry.input; import arc.*; -import mindustry.annotations.Annotations.*; -import arc.struct.*; import arc.func.*; import arc.graphics.*; import arc.graphics.g2d.*; @@ -13,8 +11,10 @@ import arc.math.geom.*; import arc.scene.*; import arc.scene.event.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.ArcAnnotate.*; import arc.util.*; +import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.entities.*; import mindustry.entities.effect.*; @@ -27,12 +27,13 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.input.Placement.*; import mindustry.net.*; +import mindustry.net.Administration.*; import mindustry.type.*; import mindustry.ui.fragments.*; import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.blocks.BuildBlock.*; -import mindustry.world.blocks.power.PowerNode; +import mindustry.world.blocks.power.*; import java.util.*; @@ -66,6 +67,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //methods to override + @Remote(variants = Variant.one) + public static void removeQueueBlock(int x, int y, boolean breaking){ + player.removeRequest(x, y, breaking); + } + @Remote(targets = Loc.client, called = Loc.server) public static void dropItem(Player player, float angle){ if(net.server() && player.item().amount <= 0){ @@ -78,8 +84,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true) public static void rotateBlock(Player player, Tile tile, boolean direction){ - if(net.server() && !Units.canInteract(player, tile)){ - throw new ValidateException(player, "Player cannot drop an item."); + if(net.server() && (!Units.canInteract(player, tile) || + !netServer.admins.allowAction(player, ActionType.rotate, tile, action -> action.rotation = Mathf.mod(tile.rotation() + Mathf.sign(direction), 4)))){ + throw new ValidateException(player, "Player cannot rotate a block."); } tile.rotation(Mathf.mod(tile.rotation() + Mathf.sign(direction), 4)); @@ -93,7 +100,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(targets = Loc.both, forward = true, called = Loc.server) public static void transferInventory(Player player, Tile tile){ if(player == null || player.timer == null) return; - if(net.server() && (player.item().amount <= 0 || player.isTransferring|| !Units.canInteract(player, tile))){ + if(net.server() && (player.item().amount <= 0 || player.isTransferring|| !Units.canInteract(player, tile) || + !netServer.admins.allowAction(player, ActionType.depositItem, tile, action -> { + action.itemAmount = player.item().amount; + action.item = player.item().item; + }))){ throw new ValidateException(player, "Player cannot transfer an item."); } @@ -143,14 +154,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void onTileTapped(Player player, Tile tile){ if(tile == null || player == null) return; - if(!Units.canInteract(player, tile)) return; + if(net.server() && (!Units.canInteract(player, tile) || + !netServer.admins.allowAction(player, ActionType.tapTile, tile, action -> {}))) throw new ValidateException(player, "Player cannot tap a tile."); tile.block().tapped(tile, player); Core.app.post(() -> Events.fire(new TapEvent(tile, player))); } @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void onTileConfig(Player player, Tile tile, int value){ - if(tile == null || !Units.canInteract(player, tile)) return; + if(tile == null) return; + + if(net.server() && (!Units.canInteract(player, tile) || + !netServer.admins.allowAction(player, ActionType.configure, tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile."); tile.block().configured(tile, player, value); Core.app.post(() -> Events.fire(new TapConfigEvent(tile, player, value))); } @@ -689,7 +704,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } public void add(){ - Core.input.addProcessor(detector = new GestureDetector(20, 0.5f, 0.4f, 0.15f, this)); + Core.input.getInputProcessors().remove(i -> i instanceof InputHandler || (i instanceof GestureDetector && ((GestureDetector)i).getListener() instanceof InputHandler)); + Core.input.addProcessor(detector = new GestureDetector(20, 0.5f, 0.3f, 0.15f, this)); Core.input.addProcessor(this); if(Core.scene != null){ Table table = (Table)Core.scene.find("inputTable"); diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 3b8e881085..177ecd78b2 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -179,19 +179,19 @@ public class MobileInput extends InputHandler implements GestureListener{ table.row(); table.left().margin(0f).defaults().size(48f); - table.addImageButton(Icon.breakSmall, Styles.clearTogglePartiali, () -> { + table.addImageButton(Icon.hammer, Styles.clearTogglePartiali, () -> { mode = mode == breaking ? block == null ? none : placing : breaking; lastBlock = block; }).update(l -> l.setChecked(mode == breaking)).name("breakmode"); //diagonal swap button - table.addImageButton(Icon.diagonalSmall, Styles.clearTogglePartiali, () -> { + table.addImageButton(Icon.diagonal, Styles.clearTogglePartiali, () -> { Core.settings.put("swapdiagonal", !Core.settings.getBool("swapdiagonal")); Core.settings.save(); }).update(l -> l.setChecked(Core.settings.getBool("swapdiagonal"))); //rotate button - table.addImageButton(Icon.arrowSmall, Styles.clearTogglePartiali, () -> { + table.addImageButton(Icon.right, Styles.clearTogglePartiali, () -> { if(block != null && block.rotate){ rotation = Mathf.mod(rotation + 1, 4); }else{ @@ -205,12 +205,12 @@ public class MobileInput extends InputHandler implements GestureListener{ boolean arrow = block != null && block.rotate; i.getImage().setRotationOrigin(!arrow ? 0 : rotation * 90, Align.center); - i.getStyle().imageUp = arrow ? Icon.arrowSmall : Icon.pasteSmall; + i.getStyle().imageUp = arrow ? Icon.right : Icon.paste; i.setChecked(!arrow && schematicMode); }); //confirm button - table.addImageButton(Icon.checkSmall, Styles.clearPartiali, () -> { + table.addImageButton(Icon.ok, Styles.clearPartiali, () -> { for(BuildRequest request : selectRequests){ Tile tile = request.tile(); @@ -253,12 +253,12 @@ public class MobileInput extends InputHandler implements GestureListener{ group.fill(t -> { t.bottom().left().visible(() -> (player.isBuilding() || block != null || mode == breaking || !selectRequests.isEmpty()) && !schem.get()); - t.addImageTextButton("$cancel", Icon.cancelSmall, () -> { + t.addImageTextButton("$cancel", Icon.cancel, () -> { player.clearBuilding(); selectRequests.clear(); mode = none; block = null; - }).width(155f); + }).width(155f).margin(12f); }); group.fill(t -> { @@ -269,15 +269,15 @@ public class MobileInput extends InputHandler implements GestureListener{ ImageButtonStyle style = Styles.clearPartiali; - b.addImageButton(Icon.floppySmall, style, this::showSchematicSave).disabled(f -> lastSchematic == null || lastSchematic.file != null); - b.addImageButton(Icon.cancelSmall, style, () -> { + b.addImageButton(Icon.save, style, this::showSchematicSave).disabled(f -> lastSchematic == null || lastSchematic.file != null); + b.addImageButton(Icon.cancel, style, () -> { selectRequests.clear(); }); b.row(); - b.addImageButton(Icon.flipSmall, style, () -> flipRequests(selectRequests, true)); - b.addImageButton(Icon.flipSmall, style, () -> flipRequests(selectRequests, false)).update(i -> i.getImage().setRotationOrigin(90f, Align.center)); + b.addImageButton(Icon.flipX, style, () -> flipRequests(selectRequests, true)); + b.addImageButton(Icon.flipY, style, () -> flipRequests(selectRequests, false)); b.row(); - b.addImageButton(Icon.rotateSmall, style, () -> rotateRequests(selectRequests, 1)); + b.addImageButton(Icon.rotate, style, () -> rotateRequests(selectRequests, 1)); }).margin(4f); }); diff --git a/core/src/mindustry/maps/Maps.java b/core/src/mindustry/maps/Maps.java index 2f4cbc3214..d94852cf0d 100644 --- a/core/src/mindustry/maps/Maps.java +++ b/core/src/mindustry/maps/Maps.java @@ -338,11 +338,11 @@ public class Maps{ } public void addDefaultOres(Array filters){ - int index = 0; - for(Block block : new Block[]{Blocks.oreCopper, Blocks.oreLead, Blocks.oreCoal, Blocks.oreTitanium, Blocks.oreThorium}){ + Array ores = content.blocks().select(b -> b.isOverlay() && b.asFloor().oreDefault); + for(Block block : ores){ OreFilter filter = new OreFilter(); - filter.threshold += index ++ * 0.018f; - filter.scl += index/2.1f; + filter.threshold = block.asFloor().oreThreshold; + filter.scl = block.asFloor().oreScale; filter.ore = block; filters.add(filter); } diff --git a/core/src/mindustry/maps/filters/FilterOption.java b/core/src/mindustry/maps/filters/FilterOption.java index 596c5d0b2d..93ba8af56f 100644 --- a/core/src/mindustry/maps/filters/FilterOption.java +++ b/core/src/mindustry/maps/filters/FilterOption.java @@ -8,7 +8,8 @@ import arc.scene.ui.*; import arc.scene.ui.layout.*; import mindustry.*; import mindustry.content.*; -import mindustry.ui.Cicon; +import mindustry.gen.*; +import mindustry.ui.*; import mindustry.ui.dialogs.*; import mindustry.world.*; import mindustry.world.blocks.*; @@ -76,15 +77,15 @@ public abstract class FilterOption{ @Override public void build(Table table){ - table.addButton(b -> b.addImage(supplier.get().icon(mindustry.ui.Cicon.small)).update(i -> ((TextureRegionDrawable)i.getDrawable()) - .setRegion(supplier.get() == Blocks.air ? Core.atlas.find("icon-none") : supplier.get().icon(mindustry.ui.Cicon.small))).size(8 * 3), () -> { + table.addButton(b -> b.addImage(supplier.get().icon(Cicon.small)).update(i -> ((TextureRegionDrawable)i.getDrawable()) + .setRegion(supplier.get() == Blocks.air ? Icon.block.getRegion() : supplier.get().icon(Cicon.small))).size(8 * 3), () -> { FloatingDialog dialog = new FloatingDialog(""); dialog.setFillParent(false); int i = 0; for(Block block : Vars.content.blocks()){ if(!filter.get(block)) continue; - dialog.cont.addImage(block == Blocks.air ? Core.atlas.find("icon-none-small") : block.icon(Cicon.medium)).size(8 * 4).pad(3).get().clicked(() -> { + dialog.cont.addImage(block == Blocks.air ? Icon.block.getRegion() : block.icon(Cicon.medium)).size(8 * 4).pad(3).get().clicked(() -> { consumer.get(block); dialog.hide(); changed.run(); diff --git a/core/src/mindustry/mod/ClassAccess.java b/core/src/mindustry/mod/ClassAccess.java deleted file mode 100644 index 7046227686..0000000000 --- a/core/src/mindustry/mod/ClassAccess.java +++ /dev/null @@ -1,7 +0,0 @@ -package mindustry.mod; - -import arc.struct.*; -//obviously autogenerated, do not touch -public class ClassAccess{ - public static final ObjectSet allowedClassNames = ObjectSet.with("arc.Core", "arc.func.Boolc", "arc.func.Boolf", "arc.func.Boolf2", "arc.func.Boolp", "arc.func.Cons", "arc.func.Cons2", "arc.func.Floatc", "arc.func.Floatc2", "arc.func.Floatc4", "arc.func.Floatf", "arc.func.Floatp", "arc.func.Func", "arc.func.Func2", "arc.func.Func3", "arc.func.Intc", "arc.func.Intc2", "arc.func.Intc4", "arc.func.Intf", "arc.func.Intp", "arc.func.Prov", "arc.graphics.Color", "arc.graphics.Pixmap", "arc.graphics.Texture", "arc.graphics.TextureData", "arc.graphics.g2d.Draw", "arc.graphics.g2d.Fill", "arc.graphics.g2d.Lines", "arc.graphics.g2d.TextureAtlas", "arc.graphics.g2d.TextureAtlas$AtlasRegion", "arc.graphics.g2d.TextureRegion", "arc.math.Affine2", "arc.math.Angles", "arc.math.Angles", "arc.math.Angles$ParticleConsumer", "arc.math.CumulativeDistribution", "arc.math.CumulativeDistribution$CumulativeValue", "arc.math.DelaunayTriangulator", "arc.math.EarClippingTriangulator", "arc.math.Extrapolator", "arc.math.FloatCounter", "arc.math.Interpolation", "arc.math.Interpolation$Bounce", "arc.math.Interpolation$BounceIn", "arc.math.Interpolation$BounceOut", "arc.math.Interpolation$Elastic", "arc.math.Interpolation$ElasticIn", "arc.math.Interpolation$ElasticOut", "arc.math.Interpolation$Exp", "arc.math.Interpolation$ExpIn", "arc.math.Interpolation$ExpOut", "arc.math.Interpolation$Pow", "arc.math.Interpolation$PowIn", "arc.math.Interpolation$PowOut", "arc.math.Interpolation$Swing", "arc.math.Interpolation$SwingIn", "arc.math.Interpolation$SwingOut", "arc.math.Mathf", "arc.math.Mathf", "arc.math.Matrix3", "arc.math.WindowedMean", "arc.math.geom.BSpline", "arc.math.geom.Bezier", "arc.math.geom.Bresenham2", "arc.math.geom.CatmullRomSpline", "arc.math.geom.Circle", "arc.math.geom.ConvexHull", "arc.math.geom.Ellipse", "arc.math.geom.FixedPosition", "arc.math.geom.Geometry", "arc.math.geom.Geometry$Raycaster", "arc.math.geom.Geometry$SolidChecker", "arc.math.geom.Intersector", "arc.math.geom.Intersector$MinimumTranslationVector", "arc.math.geom.Path", "arc.math.geom.Point2", "arc.math.geom.Point3", "arc.math.geom.Polygon", "arc.math.geom.Polyline", "arc.math.geom.Position", "arc.math.geom.QuadTree", "arc.math.geom.QuadTree$QuadTreeObject", "arc.math.geom.Rect", "arc.math.geom.Shape2D", "arc.math.geom.Spring1D", "arc.math.geom.Spring2D", "arc.math.geom.Vec2", "arc.math.geom.Vec3", "arc.math.geom.Vector", "arc.scene.Action", "arc.scene.Element", "arc.scene.Group", "arc.scene.Scene", "arc.scene.actions.Actions", "arc.scene.actions.AddAction", "arc.scene.actions.AddListenerAction", "arc.scene.actions.AfterAction", "arc.scene.actions.AlphaAction", "arc.scene.actions.ColorAction", "arc.scene.actions.DelayAction", "arc.scene.actions.DelegateAction", "arc.scene.actions.FloatAction", "arc.scene.actions.IntAction", "arc.scene.actions.LayoutAction", "arc.scene.actions.MoveByAction", "arc.scene.actions.MoveToAction", "arc.scene.actions.OriginAction", "arc.scene.actions.ParallelAction", "arc.scene.actions.RelativeTemporalAction", "arc.scene.actions.RemoveAction", "arc.scene.actions.RemoveActorAction", "arc.scene.actions.RemoveListenerAction", "arc.scene.actions.RepeatAction", "arc.scene.actions.RotateByAction", "arc.scene.actions.RotateToAction", "arc.scene.actions.RunnableAction", "arc.scene.actions.ScaleByAction", "arc.scene.actions.ScaleToAction", "arc.scene.actions.SequenceAction", "arc.scene.actions.SizeByAction", "arc.scene.actions.SizeToAction", "arc.scene.actions.TemporalAction", "arc.scene.actions.TimeScaleAction", "arc.scene.actions.TouchableAction", "arc.scene.actions.TranslateByAction", "arc.scene.actions.VisibleAction", "arc.scene.event.ChangeListener", "arc.scene.event.ChangeListener$ChangeEvent", "arc.scene.event.ClickListener", "arc.scene.event.DragListener", "arc.scene.event.DragScrollListener", "arc.scene.event.ElementGestureListener", "arc.scene.event.EventListener", "arc.scene.event.FocusListener", "arc.scene.event.FocusListener$FocusEvent", "arc.scene.event.FocusListener$FocusEvent$Type", "arc.scene.event.HandCursorListener", "arc.scene.event.IbeamCursorListener", "arc.scene.event.InputEvent", "arc.scene.event.InputEvent$Type", "arc.scene.event.InputListener", "arc.scene.event.SceneEvent", "arc.scene.event.Touchable", "arc.scene.event.VisibilityEvent", "arc.scene.event.VisibilityListener", "arc.scene.style.BaseDrawable", "arc.scene.style.Drawable", "arc.scene.style.NinePatchDrawable", "arc.scene.style.ScaledNinePatchDrawable", "arc.scene.style.Style", "arc.scene.style.TextureRegionDrawable", "arc.scene.style.TiledDrawable", "arc.scene.style.TransformDrawable", "arc.scene.ui.Button", "arc.scene.ui.Button$ButtonStyle", "arc.scene.ui.ButtonGroup", "arc.scene.ui.CheckBox", "arc.scene.ui.CheckBox$CheckBoxStyle", "arc.scene.ui.ColorImage", "arc.scene.ui.Dialog", "arc.scene.ui.Dialog$DialogStyle", "arc.scene.ui.Image", "arc.scene.ui.ImageButton", "arc.scene.ui.ImageButton$ImageButtonStyle", "arc.scene.ui.KeybindDialog", "arc.scene.ui.KeybindDialog$KeybindDialogStyle", "arc.scene.ui.Label", "arc.scene.ui.Label$LabelStyle", "arc.scene.ui.ProgressBar", "arc.scene.ui.ProgressBar$ProgressBarStyle", "arc.scene.ui.ScrollPane", "arc.scene.ui.ScrollPane$ScrollPaneStyle", "arc.scene.ui.SettingsDialog", "arc.scene.ui.SettingsDialog$SettingsTable", "arc.scene.ui.SettingsDialog$SettingsTable$CheckSetting", "arc.scene.ui.SettingsDialog$SettingsTable$Setting", "arc.scene.ui.SettingsDialog$SettingsTable$SliderSetting", "arc.scene.ui.SettingsDialog$StringProcessor", "arc.scene.ui.Slider", "arc.scene.ui.Slider$SliderStyle", "arc.scene.ui.TextArea", "arc.scene.ui.TextArea$TextAreaListener", "arc.scene.ui.TextButton", "arc.scene.ui.TextButton$TextButtonStyle", "arc.scene.ui.TextField", "arc.scene.ui.TextField$DefaultOnscreenKeyboard", "arc.scene.ui.TextField$OnscreenKeyboard", "arc.scene.ui.TextField$TextFieldClickListener", "arc.scene.ui.TextField$TextFieldFilter", "arc.scene.ui.TextField$TextFieldListener", "arc.scene.ui.TextField$TextFieldStyle", "arc.scene.ui.TextField$TextFieldValidator", "arc.scene.ui.Tooltip", "arc.scene.ui.Tooltip$Tooltips", "arc.scene.ui.Touchpad", "arc.scene.ui.Touchpad$TouchpadStyle", "arc.scene.ui.TreeElement", "arc.scene.ui.TreeElement$Node", "arc.scene.ui.TreeElement$TreeStyle", "arc.scene.ui.layout.Cell", "arc.scene.ui.layout.Collapser", "arc.scene.ui.layout.HorizontalGroup", "arc.scene.ui.layout.Scl", "arc.scene.ui.layout.Stack", "arc.scene.ui.layout.Table", "arc.scene.ui.layout.Table$DrawRect", "arc.scene.ui.layout.VerticalGroup", "arc.scene.ui.layout.WidgetGroup", "arc.scene.utils.ArraySelection", "arc.scene.utils.Cullable", "arc.scene.utils.Disableable", "arc.scene.utils.DragAndDrop", "arc.scene.utils.DragAndDrop$Payload", "arc.scene.utils.DragAndDrop$Source", "arc.scene.utils.DragAndDrop$Target", "arc.scene.utils.Elements", "arc.scene.utils.Layout", "arc.scene.utils.Selection", "arc.struct.Array", "arc.struct.Array$ArrayIterable", "arc.struct.ArrayMap", "arc.struct.ArrayMap$Entries", "arc.struct.ArrayMap$Keys", "arc.struct.ArrayMap$Values", "arc.struct.AtomicQueue", "arc.struct.BinaryHeap", "arc.struct.BinaryHeap$Node", "arc.struct.Bits", "arc.struct.BooleanArray", "arc.struct.ByteArray", "arc.struct.CharArray", "arc.struct.ComparableTimSort", "arc.struct.DelayedRemovalArray", "arc.struct.EnumSet", "arc.struct.EnumSet$EnumSetIterator", "arc.struct.FloatArray", "arc.struct.GridBits", "arc.struct.GridMap", "arc.struct.IdentityMap", "arc.struct.IdentityMap$Entries", "arc.struct.IdentityMap$Entry", "arc.struct.IdentityMap$Keys", "arc.struct.IdentityMap$Values", "arc.struct.IntArray", "arc.struct.IntFloatMap", "arc.struct.IntFloatMap$Entries", "arc.struct.IntFloatMap$Entry", "arc.struct.IntFloatMap$Keys", "arc.struct.IntFloatMap$Values", "arc.struct.IntIntMap", "arc.struct.IntIntMap$Entries", "arc.struct.IntIntMap$Entry", "arc.struct.IntIntMap$Keys", "arc.struct.IntIntMap$Values", "arc.struct.IntMap", "arc.struct.IntMap$Entries", "arc.struct.IntMap$Entry", "arc.struct.IntMap$Keys", "arc.struct.IntMap$Values", "arc.struct.IntQueue", "arc.struct.IntSet", "arc.struct.IntSet$IntSetIterator", "arc.struct.LongArray", "arc.struct.LongMap", "arc.struct.LongMap$Entries", "arc.struct.LongMap$Entry", "arc.struct.LongMap$Keys", "arc.struct.LongMap$Values", "arc.struct.LongQueue", "arc.struct.ObjectFloatMap", "arc.struct.ObjectFloatMap$Entries", "arc.struct.ObjectFloatMap$Entry", "arc.struct.ObjectFloatMap$Keys", "arc.struct.ObjectFloatMap$Values", "arc.struct.ObjectIntMap", "arc.struct.ObjectIntMap$Entries", "arc.struct.ObjectIntMap$Entry", "arc.struct.ObjectIntMap$Keys", "arc.struct.ObjectIntMap$Values", "arc.struct.ObjectMap", "arc.struct.ObjectMap$Entries", "arc.struct.ObjectMap$Entry", "arc.struct.ObjectMap$Keys", "arc.struct.ObjectMap$Values", "arc.struct.ObjectSet", "arc.struct.ObjectSet$ObjectSetIterator", "arc.struct.OrderedMap", "arc.struct.OrderedMap$OrderedMapEntries", "arc.struct.OrderedMap$OrderedMapKeys", "arc.struct.OrderedMap$OrderedMapValues", "arc.struct.OrderedSet", "arc.struct.OrderedSet$OrderedSetIterator", "arc.struct.PooledLinkedList", "arc.struct.PooledLinkedList$Item", "arc.struct.Queue", "arc.struct.Queue$QueueIterable", "arc.struct.ShortArray", "arc.struct.SnapshotArray", "arc.struct.Sort", "arc.struct.SortedIntList", "arc.struct.SortedIntList$Iterator", "arc.struct.SortedIntList$Node", "arc.struct.StringMap", "arc.struct.TimSort", "arc.util.I18NBundle", "arc.util.Interval", "arc.util.Time", "java.io.DataInput", "java.io.DataInputStream", "java.io.DataOutput", "java.io.DataOutputStream", "java.io.PrintStream", "java.lang.Boolean", "java.lang.Byte", "java.lang.Character", "java.lang.Double", "java.lang.Float", "java.lang.Integer", "java.lang.Long", "java.lang.Object", "java.lang.Runnable", "java.lang.Short", "java.lang.String", "java.lang.System", "mindustry.Vars", "mindustry.ai.BlockIndexer", "mindustry.ai.Pathfinder", "mindustry.ai.Pathfinder$PathData", "mindustry.ai.Pathfinder$PathTarget", "mindustry.ai.Pathfinder$PathTileStruct", "mindustry.ai.WaveSpawner", "mindustry.content.Blocks", "mindustry.content.Bullets", "mindustry.content.Fx", "mindustry.content.Items", "mindustry.content.Liquids", "mindustry.content.Loadouts", "mindustry.content.Mechs", "mindustry.content.StatusEffects", "mindustry.content.TechTree", "mindustry.content.TechTree$TechNode", "mindustry.content.TypeIDs", "mindustry.content.UnitTypes", "mindustry.content.Zones", "mindustry.core.ContentLoader", "mindustry.core.Control", "mindustry.core.FileTree", "mindustry.core.GameState", "mindustry.core.GameState$State", "mindustry.core.Logic", "mindustry.core.NetServer$TeamAssigner", "mindustry.core.Platform", "mindustry.core.Renderer", "mindustry.core.UI", "mindustry.core.Version", "mindustry.core.World", "mindustry.core.World$Raycaster", "mindustry.ctype.Content", "mindustry.ctype.Content$ModContentInfo", "mindustry.ctype.ContentList", "mindustry.ctype.ContentType", "mindustry.ctype.MappableContent", "mindustry.ctype.UnlockableContent", "mindustry.editor.DrawOperation", "mindustry.editor.DrawOperation$OpType", "mindustry.editor.DrawOperation$TileOpStruct", "mindustry.editor.EditorTile", "mindustry.editor.EditorTool", "mindustry.editor.MapEditor", "mindustry.editor.MapEditor$Context", "mindustry.editor.MapEditorDialog", "mindustry.editor.MapGenerateDialog", "mindustry.editor.MapInfoDialog", "mindustry.editor.MapLoadDialog", "mindustry.editor.MapRenderer", "mindustry.editor.MapResizeDialog", "mindustry.editor.MapSaveDialog", "mindustry.editor.MapView", "mindustry.editor.OperationStack", "mindustry.editor.WaveInfoDialog", "mindustry.entities.Damage", "mindustry.entities.Damage$PropCellStruct", "mindustry.entities.Effects", "mindustry.entities.Effects$Effect", "mindustry.entities.Effects$EffectContainer", "mindustry.entities.Effects$EffectProvider", "mindustry.entities.Effects$EffectRenderer", "mindustry.entities.Effects$ScreenshakeProvider", "mindustry.entities.Entities", "mindustry.entities.EntityCollisions", "mindustry.entities.EntityGroup", "mindustry.entities.Predict", "mindustry.entities.TargetPriority", "mindustry.entities.Units", "mindustry.entities.bullet.ArtilleryBulletType", "mindustry.entities.bullet.BasicBulletType", "mindustry.entities.bullet.BombBulletType", "mindustry.entities.bullet.BulletType", "mindustry.entities.bullet.FlakBulletType", "mindustry.entities.bullet.HealBulletType", "mindustry.entities.bullet.LiquidBulletType", "mindustry.entities.bullet.MassDriverBolt", "mindustry.entities.bullet.MissileBulletType", "mindustry.entities.effect.Decal", "mindustry.entities.effect.Fire", "mindustry.entities.effect.GroundEffectEntity", "mindustry.entities.effect.GroundEffectEntity$GroundEffect", "mindustry.entities.effect.ItemTransfer", "mindustry.entities.effect.Lightning", "mindustry.entities.effect.Puddle", "mindustry.entities.effect.RubbleDecal", "mindustry.entities.effect.ScorchDecal", "mindustry.entities.traits.AbsorbTrait", "mindustry.entities.traits.BelowLiquidTrait", "mindustry.entities.traits.BuilderMinerTrait", "mindustry.entities.traits.BuilderTrait", "mindustry.entities.traits.BuilderTrait$BuildDataStatic", "mindustry.entities.traits.BuilderTrait$BuildRequest", "mindustry.entities.traits.DamageTrait", "mindustry.entities.traits.DrawTrait", "mindustry.entities.traits.Entity", "mindustry.entities.traits.HealthTrait", "mindustry.entities.traits.KillerTrait", "mindustry.entities.traits.MinerTrait", "mindustry.entities.traits.MoveTrait", "mindustry.entities.traits.SaveTrait", "mindustry.entities.traits.Saveable", "mindustry.entities.traits.ScaleTrait", "mindustry.entities.traits.ShooterTrait", "mindustry.entities.traits.SolidTrait", "mindustry.entities.traits.SpawnerTrait", "mindustry.entities.traits.SyncTrait", "mindustry.entities.traits.TargetTrait", "mindustry.entities.traits.TeamTrait", "mindustry.entities.traits.TimeTrait", "mindustry.entities.traits.TypeTrait", "mindustry.entities.traits.VelocityTrait", "mindustry.entities.type.BaseEntity", "mindustry.entities.type.BaseUnit", "mindustry.entities.type.Bullet", "mindustry.entities.type.DestructibleEntity", "mindustry.entities.type.EffectEntity", "mindustry.entities.type.Player", "mindustry.entities.type.SolidEntity", "mindustry.entities.type.TileEntity", "mindustry.entities.type.TimedEntity", "mindustry.entities.type.Unit", "mindustry.entities.type.base.BaseDrone", "mindustry.entities.type.base.BuilderDrone", "mindustry.entities.type.base.FlyingUnit", "mindustry.entities.type.base.GroundUnit", "mindustry.entities.type.base.HoverUnit", "mindustry.entities.type.base.MinerDrone", "mindustry.entities.type.base.RepairDrone", "mindustry.entities.units.StateMachine", "mindustry.entities.units.Statuses", "mindustry.entities.units.Statuses$StatusEntry", "mindustry.entities.units.UnitCommand", "mindustry.entities.units.UnitDrops", "mindustry.entities.units.UnitState", "mindustry.game.DefaultWaves", "mindustry.game.Difficulty", "mindustry.game.EventType", "mindustry.game.EventType$BlockBuildBeginEvent", "mindustry.game.EventType$BlockBuildEndEvent", "mindustry.game.EventType$BlockDestroyEvent", "mindustry.game.EventType$BlockInfoEvent", "mindustry.game.EventType$BuildSelectEvent", "mindustry.game.EventType$ClientLoadEvent", "mindustry.game.EventType$CommandIssueEvent", "mindustry.game.EventType$ContentReloadEvent", "mindustry.game.EventType$CoreItemDeliverEvent", "mindustry.game.EventType$DepositEvent", "mindustry.game.EventType$DisposeEvent", "mindustry.game.EventType$GameOverEvent", "mindustry.game.EventType$LaunchEvent", "mindustry.game.EventType$LaunchItemEvent", "mindustry.game.EventType$LineConfirmEvent", "mindustry.game.EventType$LoseEvent", "mindustry.game.EventType$MapMakeEvent", "mindustry.game.EventType$MapPublishEvent", "mindustry.game.EventType$MechChangeEvent", "mindustry.game.EventType$PlayEvent", "mindustry.game.EventType$PlayerBanEvent", "mindustry.game.EventType$PlayerChatEvent", "mindustry.game.EventType$PlayerConnect", "mindustry.game.EventType$PlayerIpBanEvent", "mindustry.game.EventType$PlayerIpUnbanEvent", "mindustry.game.EventType$PlayerJoin", "mindustry.game.EventType$PlayerLeave", "mindustry.game.EventType$PlayerUnbanEvent", "mindustry.game.EventType$ResearchEvent", "mindustry.game.EventType$ResetEvent", "mindustry.game.EventType$ResizeEvent", "mindustry.game.EventType$ServerLoadEvent", "mindustry.game.EventType$StateChangeEvent", "mindustry.game.EventType$TapConfigEvent", "mindustry.game.EventType$TapEvent", "mindustry.game.EventType$TileChangeEvent", "mindustry.game.EventType$Trigger", "mindustry.game.EventType$TurretAmmoDeliverEvent", "mindustry.game.EventType$UnitCreateEvent", "mindustry.game.EventType$UnitDestroyEvent", "mindustry.game.EventType$UnlockEvent", "mindustry.game.EventType$WaveEvent", "mindustry.game.EventType$WinEvent", "mindustry.game.EventType$WithdrawEvent", "mindustry.game.EventType$WorldLoadEvent", "mindustry.game.EventType$ZoneConfigureCompleteEvent", "mindustry.game.EventType$ZoneRequireCompleteEvent", "mindustry.game.Gamemode", "mindustry.game.GlobalData", "mindustry.game.LoopControl", "mindustry.game.MusicControl", "mindustry.game.Objective", "mindustry.game.Objectives", "mindustry.game.Objectives$Launched", "mindustry.game.Objectives$Unlock", "mindustry.game.Objectives$Wave", "mindustry.game.Objectives$ZoneObjective", "mindustry.game.Objectives$ZoneWave", "mindustry.game.Rules", "mindustry.game.Saves", "mindustry.game.Saves$SaveSlot", "mindustry.game.Schematic", "mindustry.game.Schematic$Stile", "mindustry.game.Schematics", "mindustry.game.SoundLoop", "mindustry.game.SpawnGroup", "mindustry.game.Stats", "mindustry.game.Stats$Rank", "mindustry.game.Stats$RankResult", "mindustry.game.Team", "mindustry.game.Teams", "mindustry.game.Teams$BrokenBlock", "mindustry.game.Teams$TeamData", "mindustry.game.Tutorial", "mindustry.game.Tutorial$TutorialStage", "mindustry.gen.BufferItem", "mindustry.gen.Call", "mindustry.gen.Call", "mindustry.gen.Icon", "mindustry.gen.Icon", "mindustry.gen.MethodHash", "mindustry.gen.Musics", "mindustry.gen.Musics", "mindustry.gen.PathTile", "mindustry.gen.PropCell", "mindustry.gen.RemoteReadClient", "mindustry.gen.RemoteReadServer", "mindustry.gen.Serialization", "mindustry.gen.Sounds", "mindustry.gen.Sounds", "mindustry.gen.Tex", "mindustry.gen.Tex", "mindustry.gen.TileOp", "mindustry.graphics.BlockRenderer", "mindustry.graphics.Bloom", "mindustry.graphics.CacheLayer", "mindustry.graphics.Drawf", "mindustry.graphics.FloorRenderer", "mindustry.graphics.IndexedRenderer", "mindustry.graphics.Layer", "mindustry.graphics.LightRenderer", "mindustry.graphics.MenuRenderer", "mindustry.graphics.MinimapRenderer", "mindustry.graphics.MultiPacker", "mindustry.graphics.MultiPacker$PageType", "mindustry.graphics.OverlayRenderer", "mindustry.graphics.Pal", "mindustry.graphics.Pixelator", "mindustry.graphics.Shaders", "mindustry.input.Binding", "mindustry.input.DesktopInput", "mindustry.input.InputHandler", "mindustry.input.InputHandler$PlaceLine", "mindustry.input.MobileInput", "mindustry.input.PlaceMode", "mindustry.input.Placement", "mindustry.input.Placement$DistanceHeuristic", "mindustry.input.Placement$NormalizeDrawResult", "mindustry.input.Placement$NormalizeResult", "mindustry.input.Placement$TileHueristic", "mindustry.maps.Map", "mindustry.maps.Maps", "mindustry.maps.Maps$MapProvider", "mindustry.maps.Maps$ShuffleMode", "mindustry.maps.Maps$ShuffleMode", "mindustry.maps.filters.BlendFilter", "mindustry.maps.filters.ClearFilter", "mindustry.maps.filters.DistortFilter", "mindustry.maps.filters.FilterOption", "mindustry.maps.filters.FilterOption$BlockOption", "mindustry.maps.filters.FilterOption$SliderOption", "mindustry.maps.filters.GenerateFilter", "mindustry.maps.filters.GenerateFilter$GenerateInput", "mindustry.maps.filters.GenerateFilter$GenerateInput$TileProvider", "mindustry.maps.filters.MedianFilter", "mindustry.maps.filters.MirrorFilter", "mindustry.maps.filters.NoiseFilter", "mindustry.maps.filters.OreFilter", "mindustry.maps.filters.OreMedianFilter", "mindustry.maps.filters.RiverNoiseFilter", "mindustry.maps.filters.ScatterFilter", "mindustry.maps.filters.TerrainFilter", "mindustry.maps.generators.BasicGenerator", "mindustry.maps.generators.BasicGenerator$DistanceHeuristic", "mindustry.maps.generators.BasicGenerator$TileHueristic", "mindustry.maps.generators.Generator", "mindustry.maps.generators.MapGenerator", "mindustry.maps.generators.MapGenerator$Decoration", "mindustry.maps.generators.RandomGenerator", "mindustry.maps.zonegen.DesertWastesGenerator", "mindustry.maps.zonegen.OvergrowthGenerator", "mindustry.type.Category", "mindustry.type.ErrorContent", "mindustry.type.Item", "mindustry.type.ItemStack", "mindustry.type.ItemType", "mindustry.type.Liquid", "mindustry.type.LiquidStack", "mindustry.type.Mech", "mindustry.type.Publishable", "mindustry.type.StatusEffect", "mindustry.type.StatusEffect$TransitionHandler", "mindustry.type.TypeID", "mindustry.type.UnitType", "mindustry.type.Weapon", "mindustry.type.WeatherEvent", "mindustry.type.Zone", "mindustry.ui.Bar", "mindustry.ui.BorderImage", "mindustry.ui.Cicon", "mindustry.ui.ContentDisplay", "mindustry.ui.Fonts", "mindustry.ui.GridImage", "mindustry.ui.IconSize", "mindustry.ui.IntFormat", "mindustry.ui.ItemDisplay", "mindustry.ui.ItemImage", "mindustry.ui.ItemsDisplay", "mindustry.ui.Links", "mindustry.ui.Links$LinkEntry", "mindustry.ui.LiquidDisplay", "mindustry.ui.Minimap", "mindustry.ui.MobileButton", "mindustry.ui.MultiReqImage", "mindustry.ui.ReqImage", "mindustry.ui.Styles", "mindustry.ui.dialogs.AboutDialog", "mindustry.ui.dialogs.AdminsDialog", "mindustry.ui.dialogs.BansDialog", "mindustry.ui.dialogs.ColorPicker", "mindustry.ui.dialogs.ContentInfoDialog", "mindustry.ui.dialogs.ControlsDialog", "mindustry.ui.dialogs.CustomGameDialog", "mindustry.ui.dialogs.CustomRulesDialog", "mindustry.ui.dialogs.DatabaseDialog", "mindustry.ui.dialogs.DeployDialog", "mindustry.ui.dialogs.DeployDialog$View", "mindustry.ui.dialogs.DeployDialog$ZoneNode", "mindustry.ui.dialogs.DiscordDialog", "mindustry.ui.dialogs.FileChooser", "mindustry.ui.dialogs.FileChooser$FileHistory", "mindustry.ui.dialogs.FloatingDialog", "mindustry.ui.dialogs.GameOverDialog", "mindustry.ui.dialogs.HostDialog", "mindustry.ui.dialogs.JoinDialog", "mindustry.ui.dialogs.JoinDialog$Server", "mindustry.ui.dialogs.LanguageDialog", "mindustry.ui.dialogs.LoadDialog", "mindustry.ui.dialogs.LoadoutDialog", "mindustry.ui.dialogs.MapPlayDialog", "mindustry.ui.dialogs.MapsDialog", "mindustry.ui.dialogs.MinimapDialog", "mindustry.ui.dialogs.ModsDialog", "mindustry.ui.dialogs.PaletteDialog", "mindustry.ui.dialogs.PausedDialog", "mindustry.ui.dialogs.SaveDialog", "mindustry.ui.dialogs.SchematicsDialog", "mindustry.ui.dialogs.SchematicsDialog$SchematicImage", "mindustry.ui.dialogs.SchematicsDialog$SchematicInfoDialog", "mindustry.ui.dialogs.SettingsMenuDialog", "mindustry.ui.dialogs.TechTreeDialog", "mindustry.ui.dialogs.TechTreeDialog$LayoutNode", "mindustry.ui.dialogs.TechTreeDialog$TechTreeNode", "mindustry.ui.dialogs.TechTreeDialog$View", "mindustry.ui.dialogs.TraceDialog", "mindustry.ui.dialogs.ZoneInfoDialog", "mindustry.ui.fragments.BlockConfigFragment", "mindustry.ui.fragments.BlockInventoryFragment", "mindustry.ui.fragments.ChatFragment", "mindustry.ui.fragments.FadeInFragment", "mindustry.ui.fragments.Fragment", "mindustry.ui.fragments.HudFragment", "mindustry.ui.fragments.LoadingFragment", "mindustry.ui.fragments.MenuFragment", "mindustry.ui.fragments.MinimapFragment", "mindustry.ui.fragments.OverlayFragment", "mindustry.ui.fragments.PlacementFragment", "mindustry.ui.fragments.PlayerListFragment", "mindustry.ui.fragments.ScriptConsoleFragment", "mindustry.ui.layout.BranchTreeLayout", "mindustry.ui.layout.BranchTreeLayout$TreeAlignment", "mindustry.ui.layout.BranchTreeLayout$TreeLocation", "mindustry.ui.layout.RadialTreeLayout", "mindustry.ui.layout.TreeLayout", "mindustry.ui.layout.TreeLayout$TreeNode", "mindustry.world.Block", "mindustry.world.BlockStorage", "mindustry.world.Build", "mindustry.world.CachedTile", "mindustry.world.DirectionalItemBuffer", "mindustry.world.DirectionalItemBuffer$BufferItemStruct", "mindustry.world.Edges", "mindustry.world.ItemBuffer", "mindustry.world.LegacyColorMapper", "mindustry.world.LegacyColorMapper$LegacyBlock", "mindustry.world.Pos", "mindustry.world.StaticTree", "mindustry.world.Tile", "mindustry.world.WorldContext", "mindustry.world.blocks.Attributes", "mindustry.world.blocks.Autotiler", "mindustry.world.blocks.Autotiler$AutotilerHolder", "mindustry.world.blocks.BlockPart", "mindustry.world.blocks.BuildBlock", "mindustry.world.blocks.BuildBlock$BuildEntity", "mindustry.world.blocks.DoubleOverlayFloor", "mindustry.world.blocks.Floor", "mindustry.world.blocks.ItemSelection", "mindustry.world.blocks.LiquidBlock", "mindustry.world.blocks.OreBlock", "mindustry.world.blocks.OverlayFloor", "mindustry.world.blocks.PowerBlock", "mindustry.world.blocks.RespawnBlock", "mindustry.world.blocks.Rock", "mindustry.world.blocks.StaticWall", "mindustry.world.blocks.TreeBlock", "mindustry.world.blocks.defense.DeflectorWall", "mindustry.world.blocks.defense.DeflectorWall$DeflectorEntity", "mindustry.world.blocks.defense.Door", "mindustry.world.blocks.defense.Door$DoorEntity", "mindustry.world.blocks.defense.ForceProjector", "mindustry.world.blocks.defense.ForceProjector$ForceEntity", "mindustry.world.blocks.defense.ForceProjector$ShieldEntity", "mindustry.world.blocks.defense.MendProjector", "mindustry.world.blocks.defense.MendProjector$MendEntity", "mindustry.world.blocks.defense.OverdriveProjector", "mindustry.world.blocks.defense.OverdriveProjector$OverdriveEntity", "mindustry.world.blocks.defense.ShockMine", "mindustry.world.blocks.defense.SurgeWall", "mindustry.world.blocks.defense.Wall", "mindustry.world.blocks.defense.turrets.ArtilleryTurret", "mindustry.world.blocks.defense.turrets.BurstTurret", "mindustry.world.blocks.defense.turrets.ChargeTurret", "mindustry.world.blocks.defense.turrets.ChargeTurret$LaserTurretEntity", "mindustry.world.blocks.defense.turrets.CooledTurret", "mindustry.world.blocks.defense.turrets.DoubleTurret", "mindustry.world.blocks.defense.turrets.ItemTurret", "mindustry.world.blocks.defense.turrets.ItemTurret$ItemEntry", "mindustry.world.blocks.defense.turrets.ItemTurret$ItemTurretEntity", "mindustry.world.blocks.defense.turrets.LaserTurret", "mindustry.world.blocks.defense.turrets.LaserTurret$LaserTurretEntity", "mindustry.world.blocks.defense.turrets.LiquidTurret", "mindustry.world.blocks.defense.turrets.PowerTurret", "mindustry.world.blocks.defense.turrets.Turret", "mindustry.world.blocks.defense.turrets.Turret$AmmoEntry", "mindustry.world.blocks.defense.turrets.Turret$TurretEntity", "mindustry.world.blocks.distribution.ArmoredConveyor", "mindustry.world.blocks.distribution.BufferedItemBridge", "mindustry.world.blocks.distribution.BufferedItemBridge$BufferedItemBridgeEntity", "mindustry.world.blocks.distribution.Conveyor", "mindustry.world.blocks.distribution.Conveyor$ConveyorEntity", "mindustry.world.blocks.distribution.Conveyor$ItemPos", "mindustry.world.blocks.distribution.ExtendingItemBridge", "mindustry.world.blocks.distribution.ItemBridge", "mindustry.world.blocks.distribution.ItemBridge$ItemBridgeEntity", "mindustry.world.blocks.distribution.Junction", "mindustry.world.blocks.distribution.Junction$JunctionEntity", "mindustry.world.blocks.distribution.MassDriver", "mindustry.world.blocks.distribution.MassDriver$DriverBulletData", "mindustry.world.blocks.distribution.MassDriver$DriverState", "mindustry.world.blocks.distribution.MassDriver$MassDriverEntity", "mindustry.world.blocks.distribution.OverflowGate", "mindustry.world.blocks.distribution.OverflowGate$OverflowGateEntity", "mindustry.world.blocks.distribution.Router", "mindustry.world.blocks.distribution.Router$RouterEntity", "mindustry.world.blocks.distribution.Sorter", "mindustry.world.blocks.distribution.Sorter$SorterEntity", "mindustry.world.blocks.liquid.ArmoredConduit", "mindustry.world.blocks.liquid.Conduit", "mindustry.world.blocks.liquid.Conduit$ConduitEntity", "mindustry.world.blocks.liquid.LiquidBridge", "mindustry.world.blocks.liquid.LiquidExtendingBridge", "mindustry.world.blocks.liquid.LiquidJunction", "mindustry.world.blocks.liquid.LiquidOverflowGate", "mindustry.world.blocks.liquid.LiquidRouter", "mindustry.world.blocks.liquid.LiquidTank", "mindustry.world.blocks.logic.LogicBlock", "mindustry.world.blocks.logic.MessageBlock", "mindustry.world.blocks.logic.MessageBlock$MessageBlockEntity", "mindustry.world.blocks.power.Battery", "mindustry.world.blocks.power.BurnerGenerator", "mindustry.world.blocks.power.ConditionalConsumePower", "mindustry.world.blocks.power.DecayGenerator", "mindustry.world.blocks.power.ImpactReactor", "mindustry.world.blocks.power.ImpactReactor$FusionReactorEntity", "mindustry.world.blocks.power.ItemLiquidGenerator", "mindustry.world.blocks.power.ItemLiquidGenerator$ItemLiquidGeneratorEntity", "mindustry.world.blocks.power.LightBlock", "mindustry.world.blocks.power.LightBlock$LightEntity", "mindustry.world.blocks.power.NuclearReactor", "mindustry.world.blocks.power.NuclearReactor$NuclearReactorEntity", "mindustry.world.blocks.power.PowerDiode", "mindustry.world.blocks.power.PowerDistributor", "mindustry.world.blocks.power.PowerGenerator", "mindustry.world.blocks.power.PowerGenerator$GeneratorEntity", "mindustry.world.blocks.power.PowerGraph", "mindustry.world.blocks.power.PowerNode", "mindustry.world.blocks.power.SingleTypeGenerator", "mindustry.world.blocks.power.SolarGenerator", "mindustry.world.blocks.power.ThermalGenerator", "mindustry.world.blocks.production.Cultivator", "mindustry.world.blocks.production.Cultivator$CultivatorEntity", "mindustry.world.blocks.production.Drill", "mindustry.world.blocks.production.Drill$DrillEntity", "mindustry.world.blocks.production.Fracker", "mindustry.world.blocks.production.Fracker$FrackerEntity", "mindustry.world.blocks.production.GenericCrafter", "mindustry.world.blocks.production.GenericCrafter$GenericCrafterEntity", "mindustry.world.blocks.production.GenericSmelter", "mindustry.world.blocks.production.Incinerator", "mindustry.world.blocks.production.Incinerator$IncineratorEntity", "mindustry.world.blocks.production.LiquidConverter", "mindustry.world.blocks.production.Pump", "mindustry.world.blocks.production.Separator", "mindustry.world.blocks.production.SolidPump", "mindustry.world.blocks.production.SolidPump$SolidPumpEntity", "mindustry.world.blocks.sandbox.ItemSource", "mindustry.world.blocks.sandbox.ItemSource$ItemSourceEntity", "mindustry.world.blocks.sandbox.ItemVoid", "mindustry.world.blocks.sandbox.LiquidSource", "mindustry.world.blocks.sandbox.LiquidSource$LiquidSourceEntity", "mindustry.world.blocks.sandbox.PowerSource", "mindustry.world.blocks.sandbox.PowerVoid", "mindustry.world.blocks.storage.CoreBlock", "mindustry.world.blocks.storage.CoreBlock$CoreEntity", "mindustry.world.blocks.storage.LaunchPad", "mindustry.world.blocks.storage.StorageBlock", "mindustry.world.blocks.storage.StorageBlock$StorageBlockEntity", "mindustry.world.blocks.storage.Unloader", "mindustry.world.blocks.storage.Unloader$UnloaderEntity", "mindustry.world.blocks.storage.Vault", "mindustry.world.blocks.units.CommandCenter", "mindustry.world.blocks.units.CommandCenter$CommandCenterEntity", "mindustry.world.blocks.units.MechPad", "mindustry.world.blocks.units.MechPad$MechFactoryEntity", "mindustry.world.blocks.units.RallyPoint", "mindustry.world.blocks.units.RepairPoint", "mindustry.world.blocks.units.RepairPoint$RepairPointEntity", "mindustry.world.blocks.units.UnitFactory", "mindustry.world.blocks.units.UnitFactory$UnitFactoryEntity", "mindustry.world.consumers.Consume", "mindustry.world.consumers.ConsumeItemFilter", "mindustry.world.consumers.ConsumeItems", "mindustry.world.consumers.ConsumeLiquid", "mindustry.world.consumers.ConsumeLiquidBase", "mindustry.world.consumers.ConsumeLiquidFilter", "mindustry.world.consumers.ConsumePower", "mindustry.world.consumers.ConsumeType", "mindustry.world.consumers.Consumers", "mindustry.world.meta.Attribute", "mindustry.world.meta.BlockBars", "mindustry.world.meta.BlockFlag", "mindustry.world.meta.BlockGroup", "mindustry.world.meta.BlockStat", "mindustry.world.meta.BlockStats", "mindustry.world.meta.BuildVisibility", "mindustry.world.meta.PowerType", "mindustry.world.meta.Producers", "mindustry.world.meta.StatCategory", "mindustry.world.meta.StatUnit", "mindustry.world.meta.StatValue", "mindustry.world.meta.values.AmmoListValue", "mindustry.world.meta.values.BooleanValue", "mindustry.world.meta.values.BoosterListValue", "mindustry.world.meta.values.ItemFilterValue", "mindustry.world.meta.values.ItemListValue", "mindustry.world.meta.values.LiquidFilterValue", "mindustry.world.meta.values.LiquidValue", "mindustry.world.meta.values.NumberValue", "mindustry.world.meta.values.StringValue", "mindustry.world.modules.BlockModule", "mindustry.world.modules.ConsumeModule", "mindustry.world.modules.ItemModule", "mindustry.world.modules.ItemModule$ItemCalculator", "mindustry.world.modules.ItemModule$ItemConsumer", "mindustry.world.modules.LiquidModule", "mindustry.world.modules.LiquidModule$LiquidCalculator", "mindustry.world.modules.LiquidModule$LiquidConsumer", "mindustry.world.modules.PowerModule", "mindustry.world.producers.Produce", "mindustry.world.producers.ProduceItem"); -} \ No newline at end of file diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index ef4af6a8ec..8ddd3c3300 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -42,7 +42,7 @@ public class Mods implements Loadable{ private Array mods = new Array<>(); private ObjectMap, ModMeta> metas = new ObjectMap<>(); - private boolean requiresReload; + private boolean requiresReload, createdAtlas; public Mods(){ Events.on(ClientLoadEvent.class, e -> Core.app.post(this::checkWarnings)); @@ -112,13 +112,6 @@ public class Mods implements Loadable{ totalSprites += sprites.size + overrides.size; }); - for(AtlasRegion region : Core.atlas.getRegions()){ - PageType type = getPage(region); - if(!packer.has(type, region.name)){ - packer.add(type, region.name, Core.atlas.getPixmap(region)); - } - } - Log.debug("Time to pack textures: {0}", Time.elapsed()); } @@ -159,6 +152,16 @@ public class Mods implements Loadable{ //get textures packed if(totalSprites > 0){ + if(!createdAtlas) Core.atlas = new TextureAtlas(Core.files.internal("sprites/sprites.atlas")); + createdAtlas = true; + + for(AtlasRegion region : Core.atlas.getRegions()){ + PageType type = getPage(region); + if(!packer.has(type, region.name)){ + packer.add(type, region.name, Core.atlas.getPixmap(region)); + } + } + TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.Linear : TextureFilter.Nearest; //flush so generators can use these sprites @@ -243,7 +246,7 @@ public class Mods implements Loadable{ try{ LoadedMod mod = loadMod(file); mods.add(mod); - }catch(Exception e){ + }catch(Throwable e){ Log.err("Failed to load mod file {0}. Skipping.", file); Log.err(e); } @@ -255,7 +258,7 @@ public class Mods implements Loadable{ LoadedMod mod = loadMod(file); mods.add(mod); mod.addSteamID(file.name()); - }catch(Exception e){ + }catch(Throwable e){ Log.err("Failed to load mod workshop file {0}. Skipping.", file); Log.err(e); } @@ -351,7 +354,7 @@ public class Mods implements Loadable{ for(Fi file : bundles.getOr(locale, Array::new)){ try{ PropertiesUtils.load(bundle.getProperties(), file.reader()); - }catch(Exception e){ + }catch(Throwable e){ Log.err("Error loading bundle: " + file + "/" + locale, e); } } @@ -389,12 +392,12 @@ public class Mods implements Loadable{ d.left().marginLeft(15f); for(Content c : m.erroredContent){ d.add(c.minfo.sourceFile.nameWithoutExtension()).left().padRight(10); - d.addImageTextButton("$details", Icon.arrowDownSmall, Styles.transt, () -> { + d.addImageTextButton("$details", Icon.downOpen, Styles.transt, () -> { new Dialog(""){{ setFillParent(true); cont.pane(e -> e.add(c.minfo.error)).grow(); cont.row(); - cont.addImageTextButton("$ok", Icon.backSmall, this::hide).size(240f, 60f); + cont.addImageTextButton("$ok", Icon.left, this::hide).size(240f, 60f); }}.show(); }).size(190f, 50f).left().marginLeft(6); d.row(); @@ -419,6 +422,7 @@ public class Mods implements Loadable{ //epic memory leak //TODO make it less epic Core.atlas = new TextureAtlas(Core.files.internal("sprites/sprites.atlas")); + createdAtlas = true; mods.each(LoadedMod::dispose); mods.clear(); diff --git a/core/src/mindustry/mod/Scripts.java b/core/src/mindustry/mod/Scripts.java index 5ac96fbb0a..6d70437dbb 100644 --- a/core/src/mindustry/mod/Scripts.java +++ b/core/src/mindustry/mod/Scripts.java @@ -2,6 +2,7 @@ package mindustry.mod; import arc.*; import arc.files.*; +import arc.struct.*; import arc.util.*; import arc.util.Log.*; import mindustry.*; @@ -9,6 +10,10 @@ import mindustry.mod.Mods.*; import org.mozilla.javascript.*; public class Scripts implements Disposable{ + private final Array blacklist = Array.with("net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk", + "runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system", + ".awt", "socket", "classloader", "oracle"); + private final Array whitelist = Array.with("mindustry.net"); private final Context context; private final String wrapper; private Scriptable scope; @@ -18,9 +23,7 @@ public class Scripts implements Disposable{ Time.mark(); context = Vars.platform.getScriptContext(); - context.setClassShutter(type -> (ClassAccess.allowedClassNames.contains(type) || type.startsWith("$Proxy") || - type.startsWith("adapter") || type.contains("PrintStream") || - type.startsWith("mindustry")) && !type.equals("mindustry.mod.ClassAccess")); + context.setClassShutter(type -> !blacklist.contains(type.toLowerCase()::contains) || whitelist.contains(type.toLowerCase()::contains)); context.getWrapFactory().setJavaPrimitiveWrap(false); scope = new ImporterTopLevel(context); diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index aa36705c39..ca5a30f5c4 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -325,7 +325,8 @@ public class Administration{ ObjectSet result = new ObjectSet<>(); for(PlayerInfo info : playerInfo.values()){ - if(info.lastName.toLowerCase().equals(name.toLowerCase()) || (info.names.contains(name, false)) + if(info.lastName.equalsIgnoreCase(name) || (info.names.contains(name, false)) + || Strings.stripColors(Strings.stripColors(info.lastName)).equals(name) || info.ips.contains(name, false) || info.id.equals(name)){ result.add(info); } @@ -334,6 +335,19 @@ public class Administration{ return result; } + /** Finds by name, using contains(). */ + public ObjectSet searchNames(String name){ + ObjectSet result = new ObjectSet<>(); + + for(PlayerInfo info : playerInfo.values()){ + if(info.names.contains(n -> n.toLowerCase().contains(name.toLowerCase()) || Strings.stripColors(n).trim().toLowerCase().contains(name))){ + result.add(info); + } + } + + return result; + } + public Array findByIPs(String ip){ Array result = new Array<>(); @@ -397,6 +411,7 @@ public class Administration{ /** Server configuration definition. Each config value can be a string, boolean or number. */ public enum Config{ name("The server name as displayed on clients.", "Server", "servername"), + desc("The server description, displayed under the name. Max 100 characters.", "off"), port("The port to host on.", Vars.port), autoUpdate("Whether to auto-update and exit when a new bleeding-edge update arrives.", false), showConnectMessages("Whether to display connect/disconnect messages.", true), @@ -529,6 +544,10 @@ public class Administration{ public @NonNull ActionType type; public @NonNull Tile tile; + /** valid for block placement events only */ + public @Nullable Block block; + public int rotation; + /** valid for configure and rotation-type events only. */ public int config; @@ -554,7 +573,7 @@ public class Administration{ } public enum ActionType{ - breakBlock, placeBlock, rotate, configure, withdrawItem, depositItem + breakBlock, placeBlock, rotate, configure, tapTile, withdrawItem, depositItem } } diff --git a/core/src/mindustry/net/ArcNetProvider.java b/core/src/mindustry/net/ArcNetProvider.java index 19ce42e48e..ccfdafb94f 100644 --- a/core/src/mindustry/net/ArcNetProvider.java +++ b/core/src/mindustry/net/ArcNetProvider.java @@ -21,7 +21,7 @@ import static mindustry.Vars.*; public class ArcNetProvider implements NetProvider{ final Client client; - final Prov packetSupplier = () -> new DatagramPacket(new byte[256], 256); + final Prov packetSupplier = () -> new DatagramPacket(new byte[512], 512); final Server server; final CopyOnWriteArrayList connections = new CopyOnWriteArrayList<>(); @@ -114,12 +114,7 @@ public class ArcNetProvider implements NetProvider{ try{ net.handleServerReceived(k, object); }catch(RuntimeException e){ - if(e.getCause() instanceof ValidateException){ - ValidateException v = (ValidateException)e.getCause(); - Log.err("Validation failed: {0} ({1})", v.player.name, v.getMessage()); - }else{ - e.printStackTrace(); - } + e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } diff --git a/core/src/mindustry/net/BeControl.java b/core/src/mindustry/net/BeControl.java index ee084f743a..844464764b 100644 --- a/core/src/mindustry/net/BeControl.java +++ b/core/src/mindustry/net/BeControl.java @@ -105,7 +105,7 @@ public class BeControl{ }); dialog.cont.add(new Bar(() -> length[0] == 0 ? Core.bundle.get("be.updating") : (int)(progress[0] * length[0]) / 1024/ 1024 + "/" + length[0]/1024/1024 + " MB", () -> Pal.accent, () -> progress[0])).width(400f).height(70f); - dialog.buttons.addImageTextButton("$cancel", Icon.cancelSmall, () -> { + dialog.buttons.addImageTextButton("$cancel", Icon.cancel, () -> { cancel[0] = true; dialog.hide(); }).size(210f, 64f); diff --git a/core/src/mindustry/net/CrashSender.java b/core/src/mindustry/net/CrashSender.java index 1b24b2af3a..bcc25cea43 100644 --- a/core/src/mindustry/net/CrashSender.java +++ b/core/src/mindustry/net/CrashSender.java @@ -21,6 +21,18 @@ import static mindustry.Vars.net; public class CrashSender{ + public static void log(Throwable exception){ + try{ + Core.settings.getDataDirectory().child("crashes").child("crash_" + System.currentTimeMillis() + ".txt").writeString(Strings.parseException(exception, true)); + }catch(Throwable ignored){ + } + + if(exception instanceof RuntimeException){ + throw (RuntimeException)exception; + } + throw new RuntimeException(exception); + } + public static void send(Throwable exception, Cons writeListener){ try{ diff --git a/core/src/mindustry/net/Host.java b/core/src/mindustry/net/Host.java index 5c3b010c45..c2319bc2b7 100644 --- a/core/src/mindustry/net/Host.java +++ b/core/src/mindustry/net/Host.java @@ -6,7 +6,7 @@ import mindustry.game.*; public class Host{ public final String name; public final String address; - public final String mapname; + public final String mapname, description; public final int wave; public final int players, playerLimit; public final int version; @@ -14,7 +14,7 @@ public class Host{ public final Gamemode mode; public int ping, port = Vars.port; - public Host(String name, String address, String mapname, int wave, int players, int version, String versionType, Gamemode mode, int playerLimit){ + public Host(String name, String address, String mapname, int wave, int players, int version, String versionType, Gamemode mode, int playerLimit, String description){ this.name = name; this.address = address; this.players = players; @@ -24,5 +24,6 @@ public class Host{ this.versionType = versionType; this.playerLimit = playerLimit; this.mode = mode; + this.description = description; } } diff --git a/core/src/mindustry/net/NetConnection.java b/core/src/mindustry/net/NetConnection.java index 104ed2d431..6555957b5b 100644 --- a/core/src/mindustry/net/NetConnection.java +++ b/core/src/mindustry/net/NetConnection.java @@ -1,7 +1,9 @@ package mindustry.net; -import arc.util.*; +import arc.struct.*; import arc.util.ArcAnnotate.*; +import arc.util.*; +import mindustry.entities.traits.BuilderTrait.*; import mindustry.entities.type.*; import mindustry.gen.*; import mindustry.net.Administration.*; @@ -21,6 +23,8 @@ public abstract class NetConnection{ public int lastRecievedClientSnapshot = -1; /** Timestamp of last recieved snapshot. */ public long lastRecievedClientTime; + /** Build requests that have been recently rejected. This is cleared every snapshot. */ + public Array rejectedRequests = new Array<>(); public boolean hasConnected, hasBegunConnecting, hasDisconnected; public float viewWidth, viewHeight, viewX, viewY; diff --git a/core/src/mindustry/net/NetworkIO.java b/core/src/mindustry/net/NetworkIO.java index 1c6e1acba2..27811fed9f 100644 --- a/core/src/mindustry/net/NetworkIO.java +++ b/core/src/mindustry/net/NetworkIO.java @@ -63,9 +63,10 @@ public class NetworkIO{ public static ByteBuffer writeServerData(){ String name = (headless ? Config.name.string() : player.name); + String description = headless && !Config.desc.string().equals("off") ? Config.desc.string() : ""; String map = world.getMap() == null ? "None" : world.getMap().name(); - ByteBuffer buffer = ByteBuffer.allocate(256); + ByteBuffer buffer = ByteBuffer.allocate(512); writeString(buffer, name, 100); writeString(buffer, map); @@ -77,6 +78,8 @@ public class NetworkIO{ buffer.put((byte)Gamemode.bestFit(state.rules).ordinal()); buffer.putInt(netServer.admins.getPlayerLimit()); + + writeString(buffer, description, 100); return buffer; } @@ -89,8 +92,9 @@ public class NetworkIO{ String vertype = readString(buffer); Gamemode gamemode = Gamemode.all[buffer.get()]; int limit = buffer.getInt(); + String description = readString(buffer); - return new Host(host, hostAddress, map, wave, players, version, vertype, gamemode, limit); + return new Host(host, hostAddress, map, wave, players, version, vertype, gamemode, limit, description); } private static void writeString(ByteBuffer buffer, String string, int maxlen){ diff --git a/core/src/mindustry/ui/ContentDisplay.java b/core/src/mindustry/ui/ContentDisplay.java index b3e49040e0..4f4f800ec7 100644 --- a/core/src/mindustry/ui/ContentDisplay.java +++ b/core/src/mindustry/ui/ContentDisplay.java @@ -28,7 +28,7 @@ public class ContentDisplay{ table.row(); if(block.description != null){ - table.add(block.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); + table.add(block.displayDescription()).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); table.addImage().height(3).color(Color.lightGray).pad(8).padLeft(0).padRight(0).fillX(); @@ -76,7 +76,7 @@ public class ContentDisplay{ table.row(); if(item.description != null){ - table.add(item.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); + table.add(item.displayDescription()).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); table.addImage().height(3).color(Color.lightGray).pad(15).padLeft(0).padRight(0).fillX(); @@ -110,7 +110,7 @@ public class ContentDisplay{ table.row(); if(liquid.description != null){ - table.add(liquid.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); + table.add(liquid.displayDescription()).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); table.addImage().height(3).color(Color.lightGray).pad(15).padLeft(0).padRight(0).fillX(); @@ -145,7 +145,7 @@ public class ContentDisplay{ table.row(); if(mech.description != null){ - table.add(mech.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); + table.add(mech.displayDescription()).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); table.addImage().height(3).color(Color.lightGray).pad(15).padLeft(0).padRight(0).fillX(); @@ -192,7 +192,7 @@ public class ContentDisplay{ table.row(); if(unit.description != null){ - table.add(unit.description).padLeft(5).padRight(5).width(400f).wrap().fillX(); + table.add(unit.displayDescription()).padLeft(5).padRight(5).width(400f).wrap().fillX(); table.row(); table.addImage().height(3).color(Color.lightGray).pad(15).padLeft(0).padRight(0).fillX(); diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index 5c8699edee..62fcd9fbc2 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -1,9 +1,215 @@ package mindustry.ui; +import arc.*; +import arc.Graphics.Cursor.*; +import arc.assets.*; +import arc.assets.loaders.*; +import arc.assets.loaders.resolvers.*; +import arc.files.*; +import arc.freetype.*; +import arc.freetype.FreeTypeFontGenerator.*; +import arc.freetype.FreetypeFontLoader.*; +import arc.graphics.*; +import arc.graphics.Pixmap.*; +import arc.graphics.Texture.*; import arc.graphics.g2d.*; +import arc.graphics.g2d.BitmapFont.*; +import arc.graphics.g2d.PixmapPacker.*; +import arc.graphics.g2d.TextureAtlas.*; +import arc.math.geom.*; +import arc.scene.style.*; +import arc.scene.ui.layout.*; +import arc.struct.*; +import arc.util.*; +import mindustry.core.*; + +import java.util.*; public class Fonts{ + private static ObjectIntMap unicodeIcons = new ObjectIntMap<>(); + public static BitmapFont def; public static BitmapFont outline; public static BitmapFont chat; + public static BitmapFont icon; + + public static int getUnicode(String content){ + return unicodeIcons.get(content, 0); + } + + /** Called from a static context to make the cursor appear immediately upon startup.*/ + public static void loadSystemCursors(){ + SystemCursor.arrow.set(Core.graphics.newCursor("cursor")); + SystemCursor.hand.set(Core.graphics.newCursor("hand")); + SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam")); + + Core.graphics.restoreCursor(); + } + + public static void loadFonts(){ + String fontName = "fonts/font.ttf"; + + FreeTypeFontParameter param = fontParameter(); + + Core.assets.load("default", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.def = (BitmapFont)f; + Core.assets.load("chat", BitmapFont.class, new FreeTypeFontLoaderParameter(fontName, param)).loaded = f -> Fonts.chat = (BitmapFont)f; + Core.assets.load("icon", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ + size = 30; + incremental = true; + characters = "\0"; + }})).loaded = f -> Fonts.icon = (BitmapFont)f; + } + + public static void loadContentIcons(){ + Array fonts = Array.with(Fonts.chat, Fonts.def, Fonts.outline); + Texture uitex = Core.atlas.find("logo").getTexture(); + int size = (int)(Fonts.def.getData().lineHeight/Fonts.def.getData().scaleY); + + try(Scanner scan = new Scanner(Core.files.internal("icons/icons.properties").read(512))){ + while(scan.hasNextLine()){ + String line = scan.nextLine(); + String[] split = line.split("="); + String[] nametex = split[1].split("\\|"); + String character = split[0], texture = nametex[1]; + int ch = Integer.parseInt(character); + TextureRegion region = Core.atlas.find(texture); + + if(region.getTexture() != uitex) throw new IllegalArgumentException("Font icon '" + texture + "' is not in the UI texture."); + + unicodeIcons.put(nametex[0], ch); + + Glyph glyph = new Glyph(); + glyph.id = ch; + glyph.srcX = 0; + glyph.srcY = 0; + glyph.width = size; + glyph.height = size; + glyph.u = region.getU(); + glyph.v = region.getV2(); + glyph.u2 = region.getU2(); + glyph.v2 = region.getV(); + glyph.xoffset = 0; + glyph.yoffset = -size; + glyph.xadvance = size; + glyph.kerning = null; + glyph.fixedWidth = true; + glyph.page = 0; + fonts.each(f -> f.getData().setGlyph(ch, glyph)); + } + } + } + + /** Called from a static context for use in the loading screen.*/ + public static void loadDefaultFont(){ + UI.packer = new PixmapPacker(2048, 2048, Format.RGBA8888, 2, true); + FileHandleResolver resolver = new InternalFileHandleResolver(); + Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); + Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver){ + ObjectSet scaled = new ObjectSet<>(); + + @Override + public BitmapFont loadSync(AssetManager manager, String fileName, Fi file, FreeTypeFontLoaderParameter parameter){ + if(fileName.equals("outline")){ + parameter.fontParameters.borderWidth = Scl.scl(2f); + parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth; + } + if(!scaled.contains(parameter.fontParameters)){ + parameter.fontParameters.size = (int)(Scl.scl(parameter.fontParameters.size)); + scaled.add(parameter.fontParameters); + } + + parameter.fontParameters.magFilter = TextureFilter.Linear; + parameter.fontParameters.minFilter = TextureFilter.Linear; + parameter.fontParameters.packer = UI.packer; + return super.loadSync(manager, fileName, file, parameter); + } + }); + + FreeTypeFontParameter param = new FreeTypeFontParameter(){{ + borderColor = Color.darkGray; + incremental = true; + size = 18; + }}; + + Core.assets.load("outline", BitmapFont.class, new FreeTypeFontLoaderParameter("fonts/font.ttf", param)).loaded = t -> Fonts.outline = (BitmapFont)t; + } + + /** Merges the UI and font atlas together for better performance. */ + public static void mergeFontAtlas(TextureAtlas atlas){ + //grab all textures from the ui page, remove all the regions assigned to it, then copy them over to Fonts.packer and replace the texture in this atlas. + + //grab old UI texture and regions... + Texture texture = atlas.find("logo").getTexture(); + + Page page = UI.packer.getPages().first(); + + Array regions = atlas.getRegions().select(t -> t.getTexture() == texture); + for(AtlasRegion region : regions){ + //get new pack rect + page.setDirty(false); + Rect rect = UI.packer.pack(region.name + (region.splits != null ? ".9" : ""), atlas.getPixmap(region)); + //set new texture + region.setTexture(UI.packer.getPages().first().getTexture()); + //set its new position + region.set((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height); + //add old texture + atlas.getTextures().add(region.getTexture()); + } + + //remove old texture, it will no longer be used + atlas.getTextures().remove(texture); + texture.dispose(); + atlas.disposePixmap(texture); + + page.setDirty(true); + page.updateTexture(TextureFilter.Linear, TextureFilter.Linear, false); + } + + public static TextureRegionDrawable getGlyph(BitmapFont font, char glyph){ + Glyph g = font.getData().getGlyph(glyph); + if(g == null) throw new IllegalArgumentException("No glyph: " + glyph + " (" + (int)glyph + ")"); + + float size = Math.max(g.width, g.height); + TextureRegionDrawable draw = new TextureRegionDrawable(new TextureRegion(font.getRegion().getTexture(), g.u, g.v2, g.u2, g.v)){ + @Override + public void draw(float x, float y, float width, float height){ + Draw.color(Tmp.c1.set(tint).mul(Draw.getColor()).toFloatBits()); + float cx = x + width/2f - g.width/2f, cy = y + height/2f - g.height/2f; + cx = (int)cx; + cy = (int)cy; + Draw.rect(region, cx + g.width/2f, cy + g.height/2f, g.width, g.height); + } + + @Override + public void draw(float x, float y, float originX, float originY, float width, float height, float scaleX, float scaleY, float rotation){ + width *= scaleX; + height *= scaleY; + Draw.color(Tmp.c1.set(tint).mul(Draw.getColor()).toFloatBits()); + float cx = x + width/2f - g.width/2f, cy = y + height/2f - g.height/2f; + cx = (int)cx; + cy = (int)cy; + originX = g.width/2f; + originY = g.height/2f; + Draw.rect(region, cx + g.width/2f, cy + g.height/2f, g.width, g.height, originX, originY, rotation); + } + + @Override + public float imageSize(){ + return size; + } + }; + + draw.setMinWidth(size); + draw.setMinHeight(size); + return draw; + } + + static FreeTypeFontParameter fontParameter(){ + return new FreeTypeFontParameter(){{ + size = 18; + shadowColor = Color.darkGray; + shadowOffsetY = 2; + incremental = true; + }}; + } } diff --git a/core/src/mindustry/ui/ItemImage.java b/core/src/mindustry/ui/ItemImage.java index f04a8f0dab..aed8997f5f 100644 --- a/core/src/mindustry/ui/ItemImage.java +++ b/core/src/mindustry/ui/ItemImage.java @@ -27,7 +27,7 @@ public class ItemImage extends Stack{ if(stack.amount != 0){ Table t = new Table().left().bottom(); - t.add(stack.amount + "").name("item-label"); + t.add(stack.amount + "").name("item-label").style(Styles.outlineLabel); add(t); } } diff --git a/core/src/mindustry/ui/ItemsDisplay.java b/core/src/mindustry/ui/ItemsDisplay.java index d59a579c16..995918895f 100644 --- a/core/src/mindustry/ui/ItemsDisplay.java +++ b/core/src/mindustry/ui/ItemsDisplay.java @@ -1,6 +1,7 @@ package mindustry.ui; import arc.graphics.*; +import arc.scene.ui.*; import arc.scene.ui.layout.*; import mindustry.core.GameState.*; import mindustry.gen.*; @@ -21,18 +22,31 @@ public class ItemsDisplay extends Table{ top().left(); margin(0); - table(Tex.button,t -> { - t.margin(10).marginLeft(15).marginTop(15f); - t.label(() -> state.is(State.menu) ? "$launcheditems" : "$launchinfo").colspan(3).padBottom(4).left().colspan(3).width(210f).wrap(); - t.row(); - for(Item item : content.items()){ - if(item.type == ItemType.material && data.isUnlocked(item)){ - t.label(() -> format(item)).left(); - t.addImage(item.icon(Cicon.small)).size(8 * 3).padLeft(4).padRight(4); - t.add(item.localizedName).color(Color.lightGray).left(); - t.row(); + table(Tex.button, c -> { + c.margin(10).marginLeft(12).marginTop(15f); + c.marginRight(12f); + c.left(); + + Collapser col = new Collapser(base -> base.pane(t -> { + t.marginRight(30f); + t.left(); + for(Item item : content.items()){ + if(item.type == ItemType.material && data.isUnlocked(item)){ + t.label(() -> format(item)).left(); + t.addImage(item.icon(Cicon.small)).size(8 * 3).padLeft(4).padRight(4); + t.add(item.localizedName).color(Color.lightGray).left(); + t.row(); + } } - } + }).get().setScrollingDisabled(true, false), false).setDuration(0.3f); + + c.addImageTextButton("$launcheditems", Icon.downOpen, Styles.clearTogglet, col::toggle).update(t -> { + t.setText(state.is(State.menu) ? "$launcheditems" : "$launchinfo"); + t.setChecked(col.isCollapsed()); + ((Image)t.getChildren().get(1)).setDrawable(col.isCollapsed() ? Icon.upOpen : Icon.downOpen); + }).padBottom(4).left().fillX().margin(12f); + c.row(); + c.add(col); }); } diff --git a/core/src/mindustry/ui/Links.java b/core/src/mindustry/ui/Links.java index a7b1afde19..7047c6d4d7 100644 --- a/core/src/mindustry/ui/Links.java +++ b/core/src/mindustry/ui/Links.java @@ -1,8 +1,10 @@ package mindustry.ui; import arc.Core; +import arc.scene.style.*; import arc.util.Strings; import arc.graphics.Color; +import mindustry.gen.*; import mindustry.graphics.Pal; public class Links{ @@ -10,17 +12,17 @@ public class Links{ private static void createLinks(){ links = new LinkEntry[]{ - new LinkEntry("discord", "https://discord.gg/mindustry", Color.valueOf("7289da")), - new LinkEntry("changelog", "https://github.com/Anuken/Mindustry/releases", Pal.accent.cpy()), - new LinkEntry("trello", "https://trello.com/b/aE2tcUwF", Color.valueOf("026aa7")), - new LinkEntry("wiki", "https://mindustrygame.github.io/wiki/", Color.valueOf("0f142f")), - new LinkEntry("feathub", "https://feathub.com/Anuken/Mindustry/", Color.valueOf("ebebeb")), - new LinkEntry("reddit", "https://www.reddit.com/r/Mindustry/", Color.valueOf("ee593b")), - new LinkEntry("itch.io", "https://anuke.itch.io/mindustry", Color.valueOf("fa5c5c")), - new LinkEntry("google-play", "https://play.google.com/store/apps/details?id=io.anuke.mindustry", Color.valueOf("689f38")), - new LinkEntry("f-droid", "https://f-droid.org/packages/io.anuke.mindustry/", Color.valueOf("026aa7")), - new LinkEntry("github", "https://github.com/Anuken/Mindustry/", Color.valueOf("24292e")), - new LinkEntry("dev-builds", "https://github.com/Anuken/MindustryBuilds", Color.valueOf("fafbfc")) + new LinkEntry("discord", "https://discord.gg/mindustry", Icon.discord, Color.valueOf("7289da")), + new LinkEntry("changelog", "https://github.com/Anuken/Mindustry/releases", Icon.list, Pal.accent.cpy()), + new LinkEntry("trello", "https://trello.com/b/aE2tcUwF", Icon.trello, Color.valueOf("026aa7")), + new LinkEntry("wiki", "https://mindustrygame.github.io/wiki/", Icon.book, Color.valueOf("0f142f")), + new LinkEntry("feathub", "https://feathub.com/Anuken/Mindustry/", Icon.add, Color.valueOf("ebebeb")), + new LinkEntry("reddit", "https://www.reddit.com/r/Mindustry/", Icon.redditAlien, Color.valueOf("ee593b")), + new LinkEntry("itch.io", "https://anuke.itch.io/mindustry", Icon.itchio, Color.valueOf("fa5c5c")), + new LinkEntry("google-play", "https://play.google.com/store/apps/details?id=io.anuke.mindustry", Icon.googleplay, Color.valueOf("689f38")), + new LinkEntry("f-droid", "https://f-droid.org/packages/io.anuke.mindustry/", Icon.android, Color.valueOf("026aa7")), + new LinkEntry("github", "https://github.com/Anuken/Mindustry/", Icon.github, Color.valueOf("24292e")), + new LinkEntry("dev-builds", "https://github.com/Anuken/MindustryBuilds", Icon.githubSquare, Color.valueOf("fafbfc")) }; } @@ -35,12 +37,14 @@ public class Links{ public static class LinkEntry{ public final String name, title, description, link; public final Color color; + public final Drawable icon; - public LinkEntry(String name, String link, Color color){ + public LinkEntry(String name, String link, Drawable icon, Color color){ this.name = name; this.color = color; this.description = Core.bundle.getNotNull("link." + name + ".description"); this.link = link; + this.icon = icon; String title = Core.bundle.getOrNull("link." + name + ".title"); this.title = title != null ? title : Strings.capitalize(name.replace("-", " ")); diff --git a/core/src/mindustry/ui/LiquidDisplay.java b/core/src/mindustry/ui/LiquidDisplay.java index 7ce5c0504e..6c645e6218 100644 --- a/core/src/mindustry/ui/LiquidDisplay.java +++ b/core/src/mindustry/ui/LiquidDisplay.java @@ -24,13 +24,13 @@ public class LiquidDisplay extends Table{ if(amount != 0){ Table t = new Table().left().bottom(); - t.add(Strings.autoFixed(amount, 1)); + t.add(Strings.autoFixed(amount, 1)).style(Styles.outlineLabel); add(t); } }}).size(8 * 4).padRight(3 + (amount != 0 && Strings.autoFixed(amount, 1).length() > 2 ? 8 : 0)); if(perSecond){ - add(StatUnit.perSecond.localized()).padLeft(2).padRight(5).color(Color.lightGray); + add(StatUnit.perSecond.localized()).padLeft(2).padRight(5).color(Color.lightGray).style(Styles.outlineLabel); } add(liquid.localizedName); diff --git a/core/src/mindustry/ui/dialogs/AboutDialog.java b/core/src/mindustry/ui/dialogs/AboutDialog.java index 7b64fdaf3a..83a5d8e20e 100644 --- a/core/src/mindustry/ui/dialogs/AboutDialog.java +++ b/core/src/mindustry/ui/dialogs/AboutDialog.java @@ -55,7 +55,7 @@ public class AboutDialog extends FloatingDialog{ table.table(i -> { i.background(Tex.buttonEdge3); - i.addImage(Core.atlas.drawable("icon-" + link.name)); + i.addImage(link.icon); }).size(h - 5, h); table.table(inset -> { diff --git a/core/src/mindustry/ui/dialogs/ColorPicker.java b/core/src/mindustry/ui/dialogs/ColorPicker.java index e5a9c60f01..0084903ebe 100644 --- a/core/src/mindustry/ui/dialogs/ColorPicker.java +++ b/core/src/mindustry/ui/dialogs/ColorPicker.java @@ -55,7 +55,7 @@ public class ColorPicker extends FloatingDialog{ buttons.clear(); addCloseButton(); - buttons.addImageTextButton("$ok", Icon.checkSmall, () -> { + buttons.addImageTextButton("$ok", Icon.ok, () -> { cons.get(current); hide(); }); diff --git a/core/src/mindustry/ui/dialogs/ControlsDialog.java b/core/src/mindustry/ui/dialogs/ControlsDialog.java index a7179a4d0a..a8ed813e42 100644 --- a/core/src/mindustry/ui/dialogs/ControlsDialog.java +++ b/core/src/mindustry/ui/dialogs/ControlsDialog.java @@ -17,7 +17,7 @@ public class ControlsDialog extends KeybindDialog{ @Override public void addCloseButton(){ - buttons.addImageTextButton("$back", Icon.arrowLeftSmall, this::hide).size(230f, 64f); + buttons.addImageTextButton("$back", Icon.left, this::hide).size(230f, 64f); keyDown(key -> { if(key == KeyCode.ESCAPE || key == KeyCode.BACK) diff --git a/core/src/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/mindustry/ui/dialogs/CustomGameDialog.java index fdc5077821..03ec05961e 100644 --- a/core/src/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomGameDialog.java @@ -3,6 +3,7 @@ package mindustry.ui.dialogs; import arc.*; import arc.graphics.g2d.*; import arc.math.*; +import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.util.*; @@ -59,8 +60,9 @@ public class CustomGameDialog extends FloatingDialog{ image.table(t -> { t.left(); for(Gamemode mode : Gamemode.all){ - if(mode.valid(map) && Core.atlas.has("icon-mode-" + mode.name())){ - t.addImage(Core.atlas.drawable("icon-mode-" + mode.name())).size(16f).pad(4f); + TextureRegionDrawable icon = Vars.ui.getIcon("mode" + Strings.capitalize(mode.name()) + "Small"); + if(mode.valid(map) && Core.atlas.isFound(icon.getRegion())){ + t.addImage(icon).size(16f).pad(4f); } } }).left(); diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 73eb5a9efa..c65efdd919 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -35,12 +35,12 @@ public class CustomRulesDialog extends FloatingDialog{ banDialog.addCloseButton(); banDialog.shown(this::rebuildBanned); - banDialog.buttons.addImageTextButton("$addall", Icon.arrow16Small, () -> { + banDialog.buttons.addImageTextButton("$addall", Icon.add, () -> { rules.bannedBlocks.addAll(content.blocks().select(Block::isBuildable)); rebuildBanned(); }).size(180, 64f); - banDialog.buttons.addImageTextButton("$clear", Icon.trash16Small, () -> { + banDialog.buttons.addImageTextButton("$clear", Icon.trash, () -> { rules.bannedBlocks.clear(); rebuildBanned(); }).size(180, 64f); @@ -72,7 +72,7 @@ public class CustomRulesDialog extends FloatingDialog{ b.addImage(block.icon(Cicon.medium)).size(Cicon.medium.size).padRight(3); b.add(block.localizedName).color(Color.lightGray).padLeft(3).growX().left().wrap(); - b.addImageButton(Icon.cancelSmall, Styles.clearPartiali, () -> { + b.addImageButton(Icon.cancel, Styles.clearPartiali, () -> { rules.bannedBlocks.remove(block); rebuildBanned(); }).size(70f).pad(-4f).padLeft(0f); @@ -84,7 +84,7 @@ public class CustomRulesDialog extends FloatingDialog{ } }).get().setScrollYForce(previousScroll); banDialog.cont.row(); - banDialog.cont.addImageTextButton("$add", Icon.addSmall, () -> { + banDialog.cont.addImageTextButton("$add", Icon.add, () -> { FloatingDialog dialog = new FloatingDialog("$add"); dialog.cont.pane(t -> { t.left().margin(14f); diff --git a/core/src/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/mindustry/ui/dialogs/DatabaseDialog.java index a78c5c0ccb..09ca900184 100644 --- a/core/src/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/mindustry/ui/dialogs/DatabaseDialog.java @@ -1,6 +1,7 @@ package mindustry.ui.dialogs; import arc.*; +import arc.input.*; import arc.struct.*; import arc.graphics.*; import arc.scene.event.*; @@ -15,6 +16,8 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.ui.*; +import static mindustry.Vars.ui; + public class DatabaseDialog extends FloatingDialog{ public DatabaseDialog(){ @@ -55,7 +58,7 @@ public class DatabaseDialog extends FloatingDialog{ for(int i = 0; i < array.size; i++){ UnlockableContent unlock = (UnlockableContent)array.get(i); - Image image = unlocked(unlock) ? new Image(unlock.icon(Cicon.medium)) : new Image(Icon.lockedSmall, Pal.gray); + Image image = unlocked(unlock) ? new Image(unlock.icon(Cicon.medium)) : new Image(Icon.lockOpen, Pal.gray); list.add(image).size(8*4).pad(3); ClickListener listener = new ClickListener(); image.addListener(listener); @@ -65,7 +68,14 @@ public class DatabaseDialog extends FloatingDialog{ } if(unlocked(unlock)){ - image.clicked(() -> Vars.ui.content.show(unlock)); + image.clicked(() -> { + if(Core.input.keyDown(KeyCode.SHIFT_LEFT) && Fonts.getUnicode(unlock.name) != 0){ + Core.app.setClipboardText((char)Fonts.getUnicode(unlock.name) + ""); + ui.showInfoFade("$copied"); + }else{ + Vars.ui.content.show(unlock); + } + }); image.addListener(new Tooltip(t -> t.background(Tex.button).add(unlock.localizedName))); } diff --git a/core/src/mindustry/ui/dialogs/DeployDialog.java b/core/src/mindustry/ui/dialogs/DeployDialog.java index 811caca161..189b451f71 100644 --- a/core/src/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/mindustry/ui/dialogs/DeployDialog.java @@ -122,7 +122,7 @@ public class DeployDialog extends FloatingDialog{ setFilter(TextureFilter.Linear); }}){{ float[] time = {0}; - setColor(Color.fromGray(0.3f)); + setColor(Color.grays(0.3f)); setScale(1.5f); update(() -> { setOrigin(Align.center); @@ -140,7 +140,7 @@ public class DeployDialog extends FloatingDialog{ Stack sub = new Stack(); if(slot.getZone() != null){ - sub.add(new Table(f -> f.margin(4f).add(new Image()).color(Color.fromGray(0.1f)).grow())); + sub.add(new Table(f -> f.margin(4f).add(new Image()).color(Color.grays(0.1f)).grow())); sub.add(new Table(f -> f.margin(4f).add(new Image(slot.getZone().preview).setScaling(Scaling.fit)).update(img -> { TextureRegionDrawable draw = (TextureRegionDrawable)img.getDrawable(); @@ -235,7 +235,7 @@ public class DeployDialog extends FloatingDialog{ button.labelWrap(zone.localizedName).style(Styles.outlineLabel).width(140).growX().get().setAlignment(Align.center); }else{ Cons flasher = zone.canUnlock() && !hidden(zone) ? e -> e.update(() -> e.getColor().set(Color.white).lerp(Pal.accent, Mathf.absin(3f, 1f))) : e -> {}; - flasher.get(button.addImage(Icon.locked).get()); + flasher.get(button.addImage(Icon.lock).get()); button.row(); flasher.get(button.add("$locked").get()); } @@ -254,7 +254,7 @@ public class DeployDialog extends FloatingDialog{ } stack.setSize(Tmp.v1.x, Tmp.v1.y); - stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.darkGray : Color.fromGray(0.2f)).grow())); + stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.darkGray : Color.grays(0.2f)).grow())); stack.update(() -> stack.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f, Align.center)); Button button = new Button(Styles.squaret); diff --git a/core/src/mindustry/ui/dialogs/FileChooser.java b/core/src/mindustry/ui/dialogs/FileChooser.java index 44c4a47450..d877d87bdf 100644 --- a/core/src/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/mindustry/ui/dialogs/FileChooser.java @@ -92,15 +92,15 @@ public class FileChooser extends FloatingDialog{ Table icontable = new Table(); - ImageButton up = new ImageButton(Icon.folderParent); + ImageButton up = new ImageButton(Icon.upOpen); up.clicked(() -> { directory = directory.parent(); updateFiles(true); }); - ImageButton back = new ImageButton(Icon.arrowLeft); - ImageButton forward = new ImageButton(Icon.arrowRight); + ImageButton back = new ImageButton(Icon.left); + ImageButton forward = new ImageButton(Icon.right); forward.clicked(() -> stack.forward()); back.clicked(() -> stack.back()); @@ -185,7 +185,7 @@ public class FileChooser extends FloatingDialog{ files.top().left(); Fi[] names = getFileNames(); - Image upimage = new Image(Icon.folderParentSmall); + Image upimage = new Image(Icon.upOpen); TextButton upbutton = new TextButton(".." + directory.toString(), Styles.clearTogglet); upbutton.clicked(() -> { directory = directory.parent(); @@ -229,7 +229,7 @@ public class FileChooser extends FloatingDialog{ button.setChecked(filename.equals(filefield.getText())); }); - Image image = new Image(file.isDirectory() ? Icon.folderSmall : Icon.fileTextSmall); + Image image = new Image(file.isDirectory() ? Icon.folder : Icon.fileText); button.add(image).padRight(4f).padLeft(4); button.getCells().reverse(); diff --git a/core/src/mindustry/ui/dialogs/FloatingDialog.java b/core/src/mindustry/ui/dialogs/FloatingDialog.java index 6204eb6682..13ea53e480 100644 --- a/core/src/mindustry/ui/dialogs/FloatingDialog.java +++ b/core/src/mindustry/ui/dialogs/FloatingDialog.java @@ -56,7 +56,7 @@ public class FloatingDialog extends Dialog{ @Override public void addCloseButton(){ buttons.defaults().size(210f, 64f); - buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f, 64f); + buttons.addImageTextButton("$back", Icon.left, this::hide).size(210f, 64f); keyDown(key -> { if(key == KeyCode.ESCAPE || key == KeyCode.BACK){ diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index d3e154b3b1..429b27f5fb 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -95,11 +95,16 @@ public class JoinDialog extends FloatingDialog{ } }); - onResize(this::setup); + onResize(() -> { + setup(); + refreshLocal(); + refreshRemote(); + }); } void setupRemote(){ remote.clear(); + for(Server server : servers){ //why are java lambdas this bad TextButton[] buttons = {null}; @@ -122,7 +127,7 @@ public class JoinDialog extends FloatingDialog{ inner.add(button.getLabel()).growX(); - inner.addImageButton(Icon.arrowUpSmall, Styles.emptyi, () -> { + inner.addImageButton(Icon.upOpen, Styles.emptyi, () -> { int index = servers.indexOf(server); if(index > 0){ servers.remove(index); @@ -141,16 +146,16 @@ public class JoinDialog extends FloatingDialog{ }).margin(3f).padTop(6f).top().right(); - inner.addImageButton(Icon.loadingSmall, Styles.emptyi, () -> { + inner.addImageButton(Icon.refresh, Styles.emptyi, () -> { refreshServer(server); }).margin(3f).padTop(6f).top().right(); - inner.addImageButton(Icon.pencilSmall, Styles.emptyi, () -> { + inner.addImageButton(Icon.pencil, Styles.emptyi, () -> { renaming = server; add.show(); }).margin(3f).padTop(6f).top().right(); - inner.addImageButton(Icon.trash16Small, Styles.emptyi, () -> { + inner.addImageButton(Icon.trash, Styles.emptyi, () -> { ui.showConfirm("$confirm", "$server.delete", () -> { servers.removeValue(server, true); saveServers(); @@ -179,7 +184,7 @@ public class JoinDialog extends FloatingDialog{ net.pingHost(server.ip, server.port, host -> setupServer(server, host), e -> { server.content.clear(); - server.content.add("$host.invalid"); + server.content.add("$host.invalid").padBottom(4); }); } @@ -212,6 +217,10 @@ public class JoinDialog extends FloatingDialog{ content.table(t -> { t.add("[lightgray]" + host.name + " " + versionString).width(targetWidth() - 10f).left().get().setEllipsis(true); t.row(); + if(!host.description.isEmpty()){ + t.add("[gray]" + host.description).width(targetWidth() - 10f).left().wrap(); + t.row(); + } t.add("[lightgray]" + (Core.bundle.format("players" + (host.players == 1 && host.playerLimit <= 0 ? ".single" : ""), (host.players == 0 ? "[lightgray]" : "[accent]") + host.players + (host.playerLimit > 0 ? "[lightgray]/[accent]" + host.playerLimit : "")+ "[lightgray]"))).left(); t.row(); t.add("[lightgray]" + Core.bundle.format("save.map", host.mapname) + "[lightgray] / " + host.mode.toString()).width(targetWidth() - 10f).left().get().setEllipsis(true); @@ -262,7 +271,7 @@ public class JoinDialog extends FloatingDialog{ cont.addCenteredImageTextButton("$server.add", Icon.add, () -> { renaming = null; add.show(); - }).marginLeft(6).width(w).height(80f).update(button -> { + }).marginLeft(10).width(w).height(80f).update(button -> { float pw = w; float pad = 0f; if(pane.getChildren().first().getPrefHeight() > pane.getHeight()){ @@ -303,7 +312,7 @@ public class JoinDialog extends FloatingDialog{ local.background(Tex.button); local.add("$hosts.none").pad(10f); local.add().growX(); - local.addImageButton(Icon.loading, this::refreshLocal).pad(-12f).padLeft(0).size(70f); + local.addImageButton(Icon.refresh, this::refreshLocal).pad(-12f).padLeft(0).size(70f); }else{ local.background(null); } @@ -359,7 +368,7 @@ public class JoinDialog extends FloatingDialog{ } float targetWidth(){ - return Core.graphics.isPortrait() ? 350f : 500f; + return Math.min(Core.graphics.getWidth() / Scl.scl() * 0.9f, 500f);//Core.graphics.isPortrait() ? 350f : 500f; } @SuppressWarnings("unchecked") diff --git a/core/src/mindustry/ui/dialogs/LoadDialog.java b/core/src/mindustry/ui/dialogs/LoadDialog.java index 78e504e6e0..c933ed953b 100644 --- a/core/src/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/mindustry/ui/dialogs/LoadDialog.java @@ -71,7 +71,7 @@ public class LoadDialog extends FloatingDialog{ title.table(t -> { t.right(); - t.addImageButton(Icon.floppy, Styles.emptytogglei, () -> { + t.addImageButton(Icon.save, Styles.emptytogglei, () -> { slot.setAutosave(!slot.isAutosave()); }).checked(slot.isAutosave()).right(); diff --git a/core/src/mindustry/ui/dialogs/LoadoutDialog.java b/core/src/mindustry/ui/dialogs/LoadoutDialog.java index 9f84c3a616..27aec170c2 100644 --- a/core/src/mindustry/ui/dialogs/LoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LoadoutDialog.java @@ -42,9 +42,9 @@ public class LoadoutDialog extends FloatingDialog{ } }); - buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f, 64f); + buttons.addImageTextButton("$back", Icon.left, this::hide).size(210f, 64f); - buttons.addImageTextButton("$settings.reset", Icon.refreshSmall, () -> { + buttons.addImageTextButton("$settings.reset", Icon.refresh, () -> { resetter.run(); reseed(); updater.run(); @@ -83,7 +83,7 @@ public class LoadoutDialog extends FloatingDialog{ updater.run(); }).size(bsize); - t.addImageButton(Icon.pencilSmaller, Styles.cleari, () -> ui.showTextInput("$configure", stack.item.localizedName, 10, stack.amount + "", true, str -> { + t.addImageButton(Icon.pencil, Styles.cleari, () -> ui.showTextInput("$configure", stack.item.localizedName, 10, stack.amount + "", true, str -> { if(Strings.canParsePostiveInt(str)){ int amount = Strings.parseInt(str); if(amount >= 0 && amount <= capacity){ diff --git a/core/src/mindustry/ui/dialogs/MapPlayDialog.java b/core/src/mindustry/ui/dialogs/MapPlayDialog.java index 052d18e461..9efcfd8e04 100644 --- a/core/src/mindustry/ui/dialogs/MapPlayDialog.java +++ b/core/src/mindustry/ui/dialogs/MapPlayDialog.java @@ -68,7 +68,7 @@ public class MapPlayDialog extends FloatingDialog{ cont.add(selmode); cont.row(); - cont.addImageTextButton("$customize", Icon.toolsSmall, () -> dialog.show(rules, () -> rules = map.applyRules(selectedGamemode))).width(230); + cont.addImageTextButton("$customize", Icon.settings, () -> dialog.show(rules, () -> rules = map.applyRules(selectedGamemode))).width(230); cont.row(); cont.add(new BorderImage(map.safeTexture(), 3f)).size(mobile && !Core.graphics.isPortrait() ? 150f : 250f).get().setScaling(Scaling.fit); //only maps with survival are valid for high scores diff --git a/core/src/mindustry/ui/dialogs/MapsDialog.java b/core/src/mindustry/ui/dialogs/MapsDialog.java index 99b4f40778..2f99b9a06b 100644 --- a/core/src/mindustry/ui/dialogs/MapsDialog.java +++ b/core/src/mindustry/ui/dialogs/MapsDialog.java @@ -44,10 +44,10 @@ public class MapsDialog extends FloatingDialog{ buttons.clearChildren(); if(Core.graphics.isPortrait()){ - buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f*2f, 64f).colspan(2); + buttons.addImageTextButton("$back", Icon.left, this::hide).size(210f*2f, 64f).colspan(2); buttons.row(); }else{ - buttons.addImageTextButton("$back", Icon.arrowLeft, this::hide).size(210f, 64f); + buttons.addImageTextButton("$back", Icon.left, this::hide).size(210f, 64f); } buttons.addImageTextButton("$editor.newmap", Icon.add, () -> { @@ -67,7 +67,7 @@ public class MapsDialog extends FloatingDialog{ }); }).size(210f, 64f); - buttons.addImageTextButton("$editor.importmap", Icon.load, () -> { + buttons.addImageTextButton("$editor.importmap", Icon.upload, () -> { platform.showFileChooser(true, mapExtension, file -> { ui.loadAnd(() -> { maps.tryCatchMapError(() -> { @@ -192,7 +192,7 @@ public class MapsDialog extends FloatingDialog{ table.row(); - table.addImageTextButton("$editor.openin", Icon.loadMapSmall, () -> { + table.addImageTextButton("$editor.openin", Icon.export, () -> { try{ Vars.ui.editor.beginEditMap(map.file); dialog.hide(); @@ -203,7 +203,7 @@ public class MapsDialog extends FloatingDialog{ } }).fillX().height(54f).marginLeft(10); - table.addImageTextButton(map.workshop && steam ? "$view.workshop" : "$delete", map.workshop && steam ? Icon.linkSmall : Icon.trash16Small, () -> { + table.addImageTextButton(map.workshop && steam ? "$view.workshop" : "$delete", map.workshop && steam ? Icon.link : Icon.trash, () -> { if(map.workshop && steam){ platform.viewListing(map); }else{ diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 4b42f64d80..8320c9eab9 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -20,15 +20,8 @@ public class ModsDialog extends FloatingDialog{ super("$mods"); addCloseButton(); - buttons.addImageTextButton(mobile ? "$mods.report" : "$mods.openfolder", Icon.link, - () -> { - if(mobile){ - Core.net.openURI(reportIssueURL); - }else{ - Core.net.openFolder(modDirectory.absolutePath()); - } - }) - .size(250f, 64f); + buttons.addImageTextButton("$mods.openfolder", Icon.link, + () -> Core.app.openFolder(modDirectory.absolutePath())).size(250f, 64f); buttons.row(); @@ -127,18 +120,18 @@ public class ModsDialog extends FloatingDialog{ title.add("[accent]" + mod.meta.displayName() + "[lightgray] v" + mod.meta.version + (mod.enabled() ? "" : "\n" + Core.bundle.get("mod.disabled") + "")).width(200f).wrap(); title.add().growX(); - title.addImageTextButton(mod.enabled() ? "$mod.disable" : "$mod.enable", mod.enabled() ? Icon.arrowDownSmall : Icon.arrowUpSmall, Styles.cleart, () -> { + title.addImageTextButton(mod.enabled() ? "$mod.disable" : "$mod.enable", mod.enabled() ? Icon.downOpen : Icon.upOpen, Styles.cleart, () -> { mods.setEnabled(mod, !mod.enabled()); setup(); }).height(50f).margin(8f).width(130f).disabled(!mod.isSupported()); if(steam && !mod.hasSteamID()){ - title.addImageButton(Icon.loadMapSmall, Styles.cleari, () -> { + title.addImageButton(Icon.download, Styles.cleari, () -> { platform.publish(mod); }).size(50f); } - title.addImageButton(mod.hasSteamID() ? Icon.linkSmall : Icon.trash16Small, Styles.cleari, () -> { + title.addImageButton(mod.hasSteamID() ? Icon.link : Icon.trash, Styles.cleari, () -> { if(!mod.hasSteamID()){ ui.showConfirm("$confirm", "$mod.remove.confirm", () -> { mods.removeMod(mod); diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index 01d776bd3b..60abddc270 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -35,29 +35,29 @@ public class PausedDialog extends FloatingDialog{ }); if(!mobile){ - float dw = 210f; - cont.defaults().width(dw).height(50).pad(5f); + float dw = 220f; + cont.defaults().width(dw).height(55).pad(5f); - cont.addButton("$back", this::hide).colspan(2).width(dw * 2 + 20f); + cont.addImageTextButton("$back", Icon.left, this::hide).colspan(2).width(dw * 2 + 20f); cont.row(); if(world.isZone()){ - cont.addButton("$techtree", ui.tech::show); + cont.addImageTextButton("$techtree", Icon.tree, ui.tech::show); }else{ - cont.addButton("$database", ui.database::show); + cont.addImageTextButton("$database", Icon.book, ui.database::show); } - cont.addButton("$settings", ui.settings::show); + cont.addImageTextButton("$settings", Icon.settings, ui.settings::show); if(!state.rules.tutorial){ if(!world.isZone() && !state.isEditor()){ cont.row(); - cont.addButton("$savegame", save::show); - cont.addButton("$loadgame", load::show).disabled(b -> net.active()); + cont.addImageTextButton("$savegame", Icon.save, save::show); + cont.addImageTextButton("$loadgame", Icon.upload, load::show).disabled(b -> net.active()); } cont.row(); - cont.addButton("$hostserver", () -> { + cont.addImageTextButton("$hostserver", Icon.host, () -> { if(net.server() && steam){ platform.inviteFriends(); }else{ @@ -72,26 +72,29 @@ public class PausedDialog extends FloatingDialog{ cont.row(); - cont.addButton("$quit", this::showQuitConfirm).colspan(2).width(dw + 10f).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit")); + cont.addImageTextButton("$quit", Icon.exit, this::showQuitConfirm).colspan(2).width(dw + 20f).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit")); }else{ cont.defaults().size(130f).pad(5); - cont.addRowImageTextButton("$back", Icon.play2, this::hide); - cont.addRowImageTextButton("$settings", Icon.tools, ui.settings::show); + cont.addRowImageTextButton("$back", Icon.play, this::hide); + cont.addRowImageTextButton("$settings", Icon.settings, ui.settings::show); if(!world.isZone() && !state.isEditor()){ cont.addRowImageTextButton("$save", Icon.save, save::show); cont.row(); - cont.addRowImageTextButton("$load", Icon.load, load::show).disabled(b -> net.active()); + cont.addRowImageTextButton("$load", Icon.download, load::show).disabled(b -> net.active()); }else{ cont.row(); } cont.addRowImageTextButton("$hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); - cont.addRowImageTextButton("$quit", Icon.quit, this::showQuitConfirm).update(s -> s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit")); + cont.addRowImageTextButton("$quit", Icon.exit, this::showQuitConfirm).update(s -> { + s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "$save.quit" : "$quit"); + s.getLabelCell().growX().wrap(); + }); } } diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index 1747cdf2a0..86408921b9 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -32,7 +32,7 @@ public class SchematicsDialog extends FloatingDialog{ shouldPause = true; addCloseButton(); - buttons.addImageTextButton("$schematic.import", Icon.loadMapSmall, this::showImport); + buttons.addImageTextButton("$schematic.import", Icon.download, this::showImport); shown(this::setup); onResize(this::setup); } @@ -79,15 +79,15 @@ public class SchematicsDialog extends FloatingDialog{ ImageButtonStyle style = Styles.clearPartiali; - buttons.addImageButton(Icon.infoSmall, style, () -> { + buttons.addImageButton(Icon.info, style, () -> { showInfo(s); }); - buttons.addImageButton(Icon.loadMapSmall, style, () -> { + buttons.addImageButton(Icon.download, style, () -> { showExport(s); }); - buttons.addImageButton(Icon.pencilSmall, style, () -> { + buttons.addImageButton(Icon.pencil, style, () -> { ui.showTextInput("$schematic.rename", "$name", s.name(), res -> { s.tags.put("name", res); s.save(); @@ -96,9 +96,9 @@ public class SchematicsDialog extends FloatingDialog{ }); if(s.hasSteamID()){ - buttons.addImageButton(Icon.linkSmall, style, () -> platform.viewListing(s)); + buttons.addImageButton(Icon.link, style, () -> platform.viewListing(s)); }else{ - buttons.addImageButton(Icon.trash16Small, style, () -> { + buttons.addImageButton(Icon.trash, style, () -> { if(s.mod != null){ ui.showInfo(Core.bundle.format("mod.item.remove", s.mod.meta.displayName())); }else{ @@ -154,7 +154,7 @@ public class SchematicsDialog extends FloatingDialog{ TextButtonStyle style = Styles.cleart; t.defaults().size(280f, 60f).left(); t.row(); - t.addImageTextButton("$schematic.copy.import", Icon.copySmall, style, () -> { + t.addImageTextButton("$schematic.copy.import", Icon.copy, style, () -> { dialog.hide(); try{ Schematic s = Schematics.readBase64(Core.app.getClipboardText()); @@ -168,7 +168,7 @@ public class SchematicsDialog extends FloatingDialog{ } }).marginLeft(12f).disabled(b -> Core.app.getClipboardText() == null || !Core.app.getClipboardText().startsWith(schematicBaseStart)); t.row(); - t.addImageTextButton("$schematic.importfile", Icon.saveMapSmall, style, () -> platform.showFileChooser(true, schematicExtension, file -> { + t.addImageTextButton("$schematic.importfile", Icon.download, style, () -> platform.showFileChooser(true, schematicExtension, file -> { dialog.hide(); try{ @@ -183,7 +183,7 @@ public class SchematicsDialog extends FloatingDialog{ })).marginLeft(12f); t.row(); if(steam){ - t.addImageTextButton("$schematic.browseworkshop", Icon.wikiSmall, style, () -> { + t.addImageTextButton("$schematic.browseworkshop", Icon.book, style, () -> { dialog.hide(); platform.openWorkshop(); }).marginLeft(12f); @@ -203,18 +203,18 @@ public class SchematicsDialog extends FloatingDialog{ TextButtonStyle style = Styles.cleart; t.defaults().size(280f, 60f).left(); if(steam && !s.hasSteamID()){ - t.addImageTextButton("$schematic.shareworkshop", Icon.wikiSmall, style, + t.addImageTextButton("$schematic.shareworkshop", Icon.book, style, () -> platform.publish(s)).marginLeft(12f); t.row(); dialog.hide(); } - t.addImageTextButton("$schematic.copy", Icon.copySmall, style, () -> { + t.addImageTextButton("$schematic.copy", Icon.copy, style, () -> { dialog.hide(); ui.showInfoFade("$copied"); Core.app.setClipboardText(schematics.writeBase64(s)); }).marginLeft(12f); t.row(); - t.addImageTextButton("$schematic.exportfile", Icon.saveMapSmall, style, () -> platform.showFileChooser(false, schematicExtension, file -> { + t.addImageTextButton("$schematic.exportfile", Icon.export, style, () -> platform.showFileChooser(false, schematicExtension, file -> { dialog.hide(); try{ Schematics.write(s, file); @@ -272,7 +272,7 @@ public class SchematicsDialog extends FloatingDialog{ if(wasSet){ super.draw(); }else{ - Draw.rect(Icon.loading.getRegion(), x + width/2f, y + height/2f, width/4f, height/4f); + Draw.rect(Icon.refresh.getRegion(), x + width/2f, y + height/2f, width/4f, height/4f); } Draw.color(checked ? Pal.accent : borderColor); diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index ea9210f695..05c1a08b11 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -1,7 +1,6 @@ package mindustry.ui.dialogs; import arc.*; -import arc.struct.*; import arc.files.*; import arc.graphics.*; import arc.graphics.Texture.*; @@ -12,6 +11,7 @@ import arc.scene.ui.*; import arc.scene.ui.SettingsDialog.SettingsTable.*; import arc.scene.ui.TextButton.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.core.GameState.*; import mindustry.core.*; @@ -81,10 +81,10 @@ public class SettingsMenuDialog extends SettingsDialog{ dataDialog.addCloseButton(); dataDialog.cont.table(Tex.button, t -> { - t.defaults().size(240f, 60f).left(); + t.defaults().size(270f, 60f).left(); TextButtonStyle style = Styles.cleart; - t.addButton("$settings.cleardata", style, () -> ui.showConfirm("$confirm", "$settings.clearall.confirm", () -> { + t.addImageTextButton("$settings.cleardata", Icon.trash, style, () -> ui.showConfirm("$confirm", "$settings.clearall.confirm", () -> { ObjectMap map = new ObjectMap<>(); for(String value : Core.settings.keys()){ if(value.contains("usid") || value.contains("uuid")){ @@ -104,7 +104,7 @@ public class SettingsMenuDialog extends SettingsDialog{ t.row(); - t.addButton("$data.export", style, () -> { + t.addImageTextButton("$data.export", Icon.download, style, () -> { if(ios){ Fi file = Core.files.local("mindustry-data-export.zip"); try{ @@ -128,7 +128,7 @@ public class SettingsMenuDialog extends SettingsDialog{ t.row(); - t.addButton("$data.import", style, () -> ui.showConfirm("$confirm", "$data.import.confirm", () -> platform.showFileChooser(true, "zip", file -> { + t.addImageTextButton("$data.import", Icon.download, style, () -> ui.showConfirm("$confirm", "$data.import.confirm", () -> platform.showFileChooser(true, "zip", file -> { try{ data.importData(file); Core.app.exit(); @@ -143,6 +143,11 @@ public class SettingsMenuDialog extends SettingsDialog{ } } }))); + + if(!ios){ + t.row(); + t.addImageTextButton("$data.openfolder", Icon.folder, style, () -> Core.app.openFolder(Core.settings.getDataDirectory().absolutePath())); + } }); ScrollPane pane = new ScrollPane(prefs); @@ -235,10 +240,17 @@ public class SettingsMenuDialog extends SettingsDialog{ game.checkPref("buildautopause", false); } - if(steam && !Version.modifier.contains("beta")){ - game.checkPref("publichost", false, i -> { + if(steam){ + game.sliderPref("playerlimit", 16, 2, 32, i -> { platform.updateLobby(); + return i + ""; }); + + if(!Version.modifier.contains("beta")){ + game.checkPref("publichost", false, i -> { + platform.updateLobby(); + }); + } } game.pref(new Setting(){ @@ -290,7 +302,7 @@ public class SettingsMenuDialog extends SettingsDialog{ if(Core.settings.getBool("borderlesswindow")){ Core.app.post(() -> Core.graphics.setUndecorated(true)); } - }else{ + }else if(!ios){ graphics.checkPref("landscape", false, b -> { if(b){ platform.beginForceLandscape(); @@ -357,7 +369,7 @@ public class SettingsMenuDialog extends SettingsDialog{ @Override public void addCloseButton(){ - buttons.addImageTextButton("$back", Icon.arrowLeftSmaller, () -> { + buttons.addImageTextButton("$back", Icon.leftOpen, () -> { if(prefs.getChildren().first() != menu){ back(); }else{ diff --git a/core/src/mindustry/ui/dialogs/TechTreeDialog.java b/core/src/mindustry/ui/dialogs/TechTreeDialog.java index 0d28af70c5..c35a5899b3 100644 --- a/core/src/mindustry/ui/dialogs/TechTreeDialog.java +++ b/core/src/mindustry/ui/dialogs/TechTreeDialog.java @@ -1,6 +1,7 @@ package mindustry.ui.dialogs; import arc.*; +import arc.scene.ui.layout.Stack; import arc.struct.*; import arc.graphics.*; import arc.graphics.g2d.*; @@ -25,6 +26,8 @@ import mindustry.ui.Cicon; import mindustry.ui.layout.*; import mindustry.ui.layout.TreeLayout.*; +import java.util.*; + import static mindustry.Vars.*; public class TechTreeDialog extends FloatingDialog{ @@ -60,7 +63,7 @@ public class TechTreeDialog extends FloatingDialog{ addCloseButton(); - buttons.addImageTextButton("$database", Icon.database, () -> { + buttons.addImageTextButton("$database", Icon.book, () -> { hide(); ui.database.show(); }).size(210f, 64f); @@ -110,9 +113,25 @@ public class TechTreeDialog extends FloatingDialog{ } void treeLayout(){ - RadialTreeLayout layout = new RadialTreeLayout(); + float spacing = 20f; LayoutNode node = new LayoutNode(root, null); - layout.layout(node); + LayoutNode[] children = node.children; + LayoutNode[] leftHalf = Arrays.copyOfRange(node.children, 0, Mathf.ceil(node.children.length/2f)); + LayoutNode[] rightHalf = Arrays.copyOfRange(node.children, Mathf.ceil(node.children.length/2f), node.children.length); + node.children = leftHalf; + new BranchTreeLayout(){{ + gapBetweenLevels = gapBetweenNodes = spacing; + rootLocation = TreeLocation.top; + }}.layout(node); + node.children = rightHalf; + + new BranchTreeLayout(){{ + gapBetweenLevels = gapBetweenNodes = spacing; + rootLocation = TreeLocation.bottom; + }}.layout(node); + + node.children = children; + float minx = 0f, miny = 0f, maxx = 0f, maxy = 0f; copyInfo(node); @@ -252,7 +271,7 @@ public class TechTreeDialog extends FloatingDialog{ button.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f + offset, Align.center); button.getStyle().up = !locked(node.node) ? Tex.buttonOver : !data.hasItems(node.node.requirements) ? Tex.buttonRed : Tex.button; ((TextureRegionDrawable)button.getStyle().imageUp) - .setRegion(node.visible ? node.node.block.icon(Cicon.medium) : Core.atlas.find("icon-locked")); + .setRegion(node.visible ? node.node.block.icon(Cicon.medium) : Icon.lock.getRegion()); button.getImage().setColor(!locked(node.node) ? Color.white : Color.gray); }); addChild(button); @@ -324,7 +343,7 @@ public class TechTreeDialog extends FloatingDialog{ infoTable.table(b -> { b.margin(0).left().defaults().left(); - b.addImageButton(Icon.infoSmall, Styles.cleari, () -> ui.content.show(node.block)).growY().width(50f); + b.addImageButton(Icon.info, Styles.cleari, () -> ui.content.show(node.block)).growY().width(50f); b.add().grow(); b.table(desc -> { desc.left().defaults().left(); @@ -351,14 +370,14 @@ public class TechTreeDialog extends FloatingDialog{ if(mobile && locked(node)){ b.row(); - b.addImageTextButton("$research", Icon.checkSmall, Styles.nodet, () -> unlock(node)) + b.addImageTextButton("$research", Icon.ok, Styles.nodet, () -> unlock(node)) .disabled(i -> !data.hasItems(node.requirements)).growX().height(44f).colspan(3); } }); infoTable.row(); if(node.block.description != null){ - infoTable.table(t -> t.margin(3f).left().labelWrap(node.block.description).color(Color.lightGray).growX()).fillX(); + infoTable.table(t -> t.margin(3f).left().labelWrap(node.block.displayDescription()).color(Color.lightGray).growX()).fillX(); } addChild(infoTable); @@ -378,7 +397,12 @@ public class TechTreeDialog extends FloatingDialog{ Lines.stroke(Scl.scl(4f), locked(node.node) || locked(child.node) ? Pal.gray : Pal.accent); Draw.alpha(parentAlpha); - Lines.line(node.x + offsetX, node.y + offsetY, child.x + offsetX, child.y + offsetY); + if(Mathf.equal(Math.abs(node.y - child.y), Math.abs(node.x - child.x), 1f) && Mathf.dstm(node.x, node.y, child.x, child.y) <= node.width*3){ + Lines.line(node.x + offsetX, node.y + offsetY, child.x + offsetX, child.y + offsetY); + }else{ + Lines.line(node.x + offsetX, node.y + offsetY, child.x + offsetX, node.y + offsetY); + Lines.line(child.x + offsetX, node.y + offsetY, child.x + offsetX, child.y + offsetY); + } } } diff --git a/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java b/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java index ed1584133c..08e0b23130 100644 --- a/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java +++ b/core/src/mindustry/ui/dialogs/ZoneInfoDialog.java @@ -45,7 +45,7 @@ public class ZoneInfoDialog extends FloatingDialog{ if(i++ % 2 == 0){ iteminfo.row(); } - iteminfo.addImage(stack.item.icon(mindustry.ui.Cicon.small)).size(8 * 3).padRight(1); + iteminfo.addImage(stack.item.icon(Cicon.small)).size(8 * 3).padRight(1); iteminfo.add(stack.amount + "").color(Color.lightGray).padRight(5); } }; @@ -54,7 +54,7 @@ public class ZoneInfoDialog extends FloatingDialog{ cont.pane(cont -> { if(zone.locked()){ - cont.addImage(Icon.locked); + cont.addImage(Icon.lock); cont.row(); cont.add("$locked").padBottom(6); cont.row(); @@ -71,7 +71,7 @@ public class ZoneInfoDialog extends FloatingDialog{ for(Objective o : zones){ r.addImage(Icon.terrain).padRight(4); r.add(o.display()).color(Color.lightGray); - r.addImage(o.complete() ? Icon.checkSmall : Icon.cancelSmall, o.complete() ? Color.lightGray : Color.scarlet).padLeft(3); + r.addImage(o.complete() ? Icon.ok : Icon.cancel, o.complete() ? Color.lightGray : Color.scarlet).padLeft(3); r.row(); } }); @@ -85,9 +85,9 @@ public class ZoneInfoDialog extends FloatingDialog{ r.add("$research.list").colspan(2).left(); r.row(); for(Unlock blocko : blocks){ - r.addImage(blocko.block.icon(mindustry.ui.Cicon.small)).size(8 * 3).padRight(5); + r.addImage(blocko.block.icon(Cicon.small)).size(8 * 3).padRight(5); r.add(blocko.block.localizedName).color(Color.lightGray).left(); - r.addImage(blocko.block.unlocked() ? Icon.checkSmall : Icon.cancelSmall, blocko.block.unlocked() ? Color.lightGray : Color.scarlet).padLeft(3); + r.addImage(blocko.block.unlocked() ? Icon.ok : Icon.cancel, blocko.block.unlocked() ? Color.lightGray : Color.scarlet).padLeft(3); r.row(); } diff --git a/core/src/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/mindustry/ui/fragments/BlockInventoryFragment.java index c4cc71cc5a..926c56460a 100644 --- a/core/src/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/mindustry/ui/fragments/BlockInventoryFragment.java @@ -1,8 +1,6 @@ package mindustry.ui.fragments; import arc.*; -import mindustry.annotations.Annotations.*; -import arc.struct.*; import arc.func.*; import arc.graphics.g2d.*; import arc.input.*; @@ -13,14 +11,18 @@ import arc.scene.actions.*; import arc.scene.event.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; +import mindustry.annotations.Annotations.*; import mindustry.core.GameState.*; import mindustry.entities.*; import mindustry.entities.type.*; import mindustry.game.EventType.*; import mindustry.gen.*; +import mindustry.net.Administration.*; +import mindustry.net.*; import mindustry.type.*; -import mindustry.ui.Cicon; +import mindustry.ui.*; import mindustry.world.*; import static mindustry.Vars.*; @@ -37,7 +39,14 @@ public class BlockInventoryFragment extends Fragment{ @Remote(called = Loc.server, targets = Loc.both, forward = true) public static void requestItem(Player player, Tile tile, Item item, int amount){ if(player == null || tile == null || !tile.interactable(player.getTeam())) return; - if(!Units.canInteract(player, tile)) return; + amount = Mathf.clamp(amount, 0, player.getItemCapacity()); + int fa = amount; + + if(net.server() && (!Units.canInteract(player, tile) || + !netServer.admins.allowAction(player, ActionType.withdrawItem, tile, action -> { + action.item = item; + action.itemAmount = fa; + }))) throw new ValidateException(player, "Player cannot request items."); int removed = tile.block().removeStack(tile, item, amount); diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 688923924c..3109179e1b 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -62,12 +62,12 @@ public class HudFragment extends Fragment{ ImageButtonStyle style = Styles.clearTransi; - select.addImageButton(Icon.menuLargeSmall, style, ui.paused::show); - flip = select.addImageButton(Icon.arrowUpSmall, style, this::toggleMenus).get(); + select.addImageButton(Icon.menu, style, ui.paused::show); + flip = select.addImageButton(Icon.upOpen, style, this::toggleMenus).get(); - select.addImageButton(Icon.pasteSmall, style, ui.schematics::show); + select.addImageButton(Icon.paste, style, ui.schematics::show); - select.addImageButton(Icon.pauseSmall, style, () -> { + select.addImageButton(Icon.pause, style, () -> { if(net.active()){ ui.listfrag.toggle(); }else{ @@ -75,14 +75,14 @@ public class HudFragment extends Fragment{ } }).name("pause").update(i -> { if(net.active()){ - i.getStyle().imageUp = Icon.playersSmall; + i.getStyle().imageUp = Icon.players; }else{ i.setDisabled(false); - i.getStyle().imageUp = state.is(State.paused) ? Icon.playSmall : Icon.pauseSmall; + i.getStyle().imageUp = state.is(State.paused) ? Icon.play : Icon.pause; } }); - select.addImageButton(Icon.chatSmall, style,() -> { + select.addImageButton(Icon.chat, style,() -> { if(net.active() && mobile){ if(ui.chatfrag.shown()){ ui.chatfrag.hide(); @@ -96,9 +96,9 @@ public class HudFragment extends Fragment{ } }).update(i -> { if(net.active() && mobile){ - i.getStyle().imageUp = Icon.chatSmall; + i.getStyle().imageUp = Icon.chat; }else{ - i.getStyle().imageUp = Icon.databaseSmall; + i.getStyle().imageUp = Icon.book; } }); @@ -203,7 +203,7 @@ public class HudFragment extends Fragment{ float[] position = {0, 0}; t.row(); - t.addImageTextButton("$editor.removeunit", Icon.quit, Styles.togglet, () -> {}).fillX().update(b -> { + t.addImageTextButton("$editor.removeunit", Icon.cancel, Styles.togglet, () -> {}).fillX().update(b -> { boolean[] found = {false}; if(b.isChecked()){ Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); @@ -319,7 +319,7 @@ public class HudFragment extends Fragment{ setDisabled(() -> !control.tutorial.canNext()); }}, new Table(f -> { - f.left().addImageButton(Icon.arrowLeftSmall, Styles.emptyi, () -> { + f.left().addImageButton(Icon.left, Styles.emptyi, () -> { control.tutorial.prevSentence(); }).width(44f).growY().visible(() -> control.tutorial.canPrev()); })); @@ -393,7 +393,7 @@ public class HudFragment extends Fragment{ } }); table.margin(12); - table.addImage(Icon.check).pad(3); + table.addImage(Icon.ok).pad(3); table.add(text).wrap().width(280f).get().setAlignment(Align.center, Align.center); table.pack(); @@ -562,7 +562,7 @@ public class HudFragment extends Fragment{ private void toggleMenus(){ if(flip != null){ - flip.getStyle().imageUp = shown ? Icon.arrowDownSmall : Icon.arrowUpSmall; + flip.getStyle().imageUp = shown ? Icon.downOpen : Icon.upOpen; } shown = !shown; @@ -650,7 +650,7 @@ public class HudFragment extends Fragment{ } private void addPlayButton(Table table){ - table.right().addImageButton(Icon.playSmaller, Styles.righti, 30f, () -> { + table.right().addImageButton(Icon.play, Styles.righti, 30f, () -> { if(net.client() && player.isAdmin){ Call.onAdminRequest(player, AdminAction.wave); }else if(inLaunchWave()){ diff --git a/core/src/mindustry/ui/fragments/MenuFragment.java b/core/src/mindustry/ui/fragments/MenuFragment.java index 8737db0d9a..eb3283e8df 100644 --- a/core/src/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/mindustry/ui/fragments/MenuFragment.java @@ -60,7 +60,7 @@ public class MenuFragment extends Fragment{ parent.fill(c -> c.bottom().left().addButton("", Styles.infot, ui.about::show).size(84, 45)); parent.fill(c -> c.bottom().right().addButton("", Styles.discordt, ui.discord::show).size(84, 45)); }else if(becontrol.active()){ - parent.fill(c -> c.bottom().right().addImageTextButton("$be.check", Icon.refreshSmall, () -> { + parent.fill(c -> c.bottom().right().addImageTextButton("$be.check", Icon.refresh, () -> { ui.loadfrag.show(); becontrol.checkUpdate(result -> { ui.loadfrag.hide(); @@ -100,13 +100,13 @@ public class MenuFragment extends Fragment{ container.defaults().size(size).pad(5).padTop(4f); MobileButton - play = new MobileButton(Icon.play2, "$campaign", () -> checkPlay(ui.deploy::show)), - custom = new MobileButton(Icon.playCustom, "$customgame", () -> checkPlay(ui.custom::show)), - maps = new MobileButton(Icon.load, "$loadgame", () -> checkPlay(ui.load::show)), + play = new MobileButton(Icon.play, "$campaign", () -> checkPlay(ui.deploy::show)), + custom = new MobileButton(Icon.rightOpenOut, "$customgame", () -> checkPlay(ui.custom::show)), + maps = new MobileButton(Icon.download, "$loadgame", () -> checkPlay(ui.load::show)), join = new MobileButton(Icon.add, "$joingame", () -> checkPlay(ui.join::show)), - editor = new MobileButton(Icon.editor, "$editor", () -> checkPlay(ui.maps::show)), - tools = new MobileButton(Icon.tools, "$settings", ui.settings::show), - mods = new MobileButton(Icon.wiki, "$mods", ui.mods::show), + editor = new MobileButton(Icon.terrain, "$editor", () -> checkPlay(ui.maps::show)), + tools = new MobileButton(Icon.settings, "$settings", ui.settings::show), + mods = new MobileButton(Icon.book, "$mods", ui.mods::show), donate = new MobileButton(Icon.link, "$website", () -> Core.net.openURI("https://anuke.itch.io/mindustry")), exit = new MobileButton(Icon.exit, "$quit", () -> Core.app.exit()); @@ -164,20 +164,20 @@ public class MenuFragment extends Fragment{ t.defaults().width(width).height(70f); buttons(t, - new Buttoni("$play", Icon.play2Small, - new Buttoni("$campaign", Icon.play2Small, () -> checkPlay(ui.deploy::show)), - new Buttoni("$joingame", Icon.addSmall, () -> checkPlay(ui.join::show)), - new Buttoni("$customgame", Icon.editorSmall, () -> checkPlay(ui.custom::show)), - new Buttoni("$loadgame", Icon.loadSmall, () -> checkPlay(ui.load::show)), - new Buttoni("$tutorial", Icon.infoSmall, () -> checkPlay(control::playTutorial)) + new Buttoni("$play", Icon.play, + new Buttoni("$campaign", Icon.play, () -> checkPlay(ui.deploy::show)), + new Buttoni("$joingame", Icon.add, () -> checkPlay(ui.join::show)), + new Buttoni("$customgame", Icon.terrain, () -> checkPlay(ui.custom::show)), + new Buttoni("$loadgame", Icon.download, () -> checkPlay(ui.load::show)), + new Buttoni("$tutorial", Icon.info, () -> checkPlay(control::playTutorial)) ), - new Buttoni("$editor", Icon.editorSmall, () -> checkPlay(ui.maps::show)), steam ? new Buttoni("$workshop", Icon.saveSmall, platform::openWorkshop) : null, - new Buttoni(Core.bundle.get("mods") + "\n" + Core.bundle.get("mods.alpha"), Icon.wikiSmall, ui.mods::show), + new Buttoni("$editor", Icon.terrain, () -> checkPlay(ui.maps::show)), steam ? new Buttoni("$workshop", Icon.book, platform::openWorkshop) : null, + new Buttoni(Core.bundle.get("mods"), Icon.bookOpen, ui.mods::show), //not enough space for this button - //new Buttoni("$schematics", Icon.pasteSmall, ui.schematics::show), - new Buttoni("$settings", Icon.toolsSmall, ui.settings::show), - new Buttoni("$about.button", Icon.infoSmall, ui.about::show), - new Buttoni("$quit", Icon.exitSmall, Core.app::exit) + //new Buttoni("$schematics", Icon.paste, ui.schematics::show), + new Buttoni("$settings", Icon.settings, ui.settings::show), + new Buttoni("$about.button", Icon.info, ui.about::show), + new Buttoni("$quit", Icon.exit, Core.app::exit) ); }).width(width).growY(); diff --git a/core/src/mindustry/ui/fragments/MinimapFragment.java b/core/src/mindustry/ui/fragments/MinimapFragment.java index d13fed8936..4a5c60a8d1 100644 --- a/core/src/mindustry/ui/fragments/MinimapFragment.java +++ b/core/src/mindustry/ui/fragments/MinimapFragment.java @@ -100,7 +100,7 @@ public class MinimapFragment extends Fragment{ t.row(); t.add().growY(); t.row(); - t.addImageTextButton("$back", Icon.backSmall, () -> shown = false).size(220f, 60f).pad(10f); + t.addImageTextButton("$back", Icon.leftOpen, () -> shown = false).size(220f, 60f).pad(10f); }); } diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index f02b0ab54f..e81e443126 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -1,14 +1,15 @@ package mindustry.ui.fragments; import arc.*; -import arc.struct.*; import arc.graphics.*; +import arc.input.*; import arc.math.geom.*; import arc.scene.*; import arc.scene.event.*; import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.entities.traits.BuilderTrait.*; @@ -19,7 +20,6 @@ import mindustry.graphics.*; import mindustry.input.*; import mindustry.type.*; import mindustry.ui.*; -import mindustry.ui.Cicon; import mindustry.world.*; import static mindustry.Vars.*; @@ -31,11 +31,13 @@ public class PlacementFragment extends Fragment{ Array returnArray = new Array<>(); Array returnCatArray = new Array<>(); boolean[] categoryEmpty = new boolean[Category.all.length]; - ObjectMap selectedBlocks = new ObjectMap(); + ObjectMap selectedBlocks = new ObjectMap<>(); + ObjectFloatMap scrollPositions = new ObjectFloatMap<>(); Block hovered, lastDisplay; Tile lastHover; Tile hoverTile; Table blockTable, toggler, topTable; + ScrollPane blockPane; boolean lastGround; boolean blockSelectEnd; int blockSelectSeq; @@ -86,6 +88,8 @@ public class PlacementFragment extends Fragment{ } boolean gridUpdate(InputHandler input){ + scrollPositions.put(currentCategory, blockPane.getScrollY()); + if(Core.input.keyDown(Binding.pick)){ //mouse eyedropper select Tile tile = world.ltileWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); Block tryRecipe = tile == null ? null : tile.block(); @@ -202,14 +206,18 @@ public class PlacementFragment extends Fragment{ blockTable.row(); } - ImageButton button = blockTable.addImageButton(Icon.lockedSmall, Styles.selecti, () -> { + ImageButton button = blockTable.addImageButton(new TextureRegionDrawable(block.icon(Cicon.medium)), Styles.selecti, () -> { if(unlocked(block)){ - control.input.block = control.input.block == block ? null : block; - selectedBlocks.put(currentCategory, control.input.block); + if(Core.input.keyDown(KeyCode.SHIFT_LEFT) && Fonts.getUnicode(block.name) != 0){ + Core.app.setClipboardText((char)Fonts.getUnicode(block.name) + ""); + ui.showInfoFade("$copied"); + }else{ + control.input.block = control.input.block == block ? null : block; + selectedBlocks.put(currentCategory, control.input.block); + } } }).size(46f).group(group).name("block-" + block.name).get(); - - button.getStyle().imageUp = new TextureRegionDrawable(block.icon(Cicon.medium)); + button.resizeImage(Cicon.medium.size); button.update(() -> { //color unplacable things gray TileEntity core = player.getClosestCore(); @@ -236,6 +244,12 @@ public class PlacementFragment extends Fragment{ } } blockTable.act(0f); + blockPane.setScrollYForce(scrollPositions.get(currentCategory, 0)); + Core.app.post(() -> { + blockPane.setScrollYForce(scrollPositions.get(currentCategory, 0)); + blockPane.act(0f); + blockPane.layout(); + }); }; //top table with hover info @@ -311,7 +325,7 @@ public class PlacementFragment extends Fragment{ if(state.rules.bannedBlocks.contains(lastDisplay)){ topTable.row(); topTable.table(b -> { - b.addImage(Icon.cancelSmall).padRight(2).color(Color.scarlet); + b.addImage(Icon.cancel).padRight(2).color(Color.scarlet); b.add("$banned"); b.left(); }).padTop(2).left(); @@ -339,14 +353,15 @@ public class PlacementFragment extends Fragment{ frame.row(); frame.table(Tex.pane2, blocksSelect -> { blocksSelect.margin(4).marginTop(0); - blocksSelect.pane(blocks -> blockTable = blocks).height(194f).update(pane -> { + blockPane = blocksSelect.pane(blocks -> blockTable = blocks).height(194f).update(pane -> { if(pane.hasScroll()){ Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); if(result == null || !result.isDescendantOf(pane)){ Core.scene.setScrollFocus(null); } } - }).grow().get().setStyle(Styles.smallPane); + }).grow().get(); + blockPane.setStyle(Styles.smallPane); blocksSelect.row(); blocksSelect.table(control.input::buildPlacementUI).name("inputTable").growX(); }).fillY().bottom().touchable(Touchable.enabled); @@ -378,7 +393,7 @@ public class PlacementFragment extends Fragment{ continue; } - categories.addImageButton(Core.atlas.drawable("icon-" + cat.name() + "-smaller"), Styles.clearToggleTransi, () -> { + categories.addImageButton(ui.getIcon(cat.name()), Styles.clearToggleTransi, () -> { currentCategory = cat; if(control.input.block != null){ control.input.block = getSelectedBlock(currentCategory); diff --git a/core/src/mindustry/ui/fragments/PlayerListFragment.java b/core/src/mindustry/ui/fragments/PlayerListFragment.java index ea6f6087c1..7a29b7ffb0 100644 --- a/core/src/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/mindustry/ui/fragments/PlayerListFragment.java @@ -104,14 +104,14 @@ public class PlayerListFragment extends Fragment{ button.table(t -> { t.defaults().size(bs); - t.addImageButton(Icon.banSmall, Styles.clearPartiali, + t.addImageButton(Icon.hammer, Styles.clearPartiali, () -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban))); - t.addImageButton(Icon.cancelSmall, Styles.clearPartiali, + t.addImageButton(Icon.cancel, Styles.clearPartiali, () -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick))); t.row(); - t.addImageButton(Icon.adminSmall, Styles.clearTogglePartiali, () -> { + t.addImageButton(Icon.admin, Styles.clearTogglePartiali, () -> { if(net.client()) return; String id = user.uuid; @@ -127,13 +127,13 @@ public class PlayerListFragment extends Fragment{ .touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled) .checked(user.isAdmin); - t.addImageButton(Icon.zoomSmall, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace)); + t.addImageButton(Icon.zoom, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace)); }).padRight(12).size(bs + 10f, bs); - }else if((!user.isLocal && !user.isAdmin) && net.client() && playerGroup.size() >= 3 && player.getTeam() != user.getTeam()){ //votekick + }else if(!user.isLocal && !user.isAdmin && net.client() && playerGroup.size() >= 3 && player.getTeam() == user.getTeam()){ //votekick button.add().growY(); - button.addImageButton(Icon.banSmall, Styles.clearPartiali, + button.addImageButton(Icon.hammer, Styles.clearPartiali, () -> ui.showConfirm("$confirm", "$confirmvotekick", () -> Call.sendChatMessage("/votekick " + user.name))).size(h); } diff --git a/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java b/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java index 378359f631..020f345598 100644 --- a/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java +++ b/core/src/mindustry/ui/fragments/ScriptConsoleFragment.java @@ -53,7 +53,7 @@ public class ScriptConsoleFragment extends Table{ clearChatInput(); } - return shown && Vars.net.active(); + return shown && !Vars.net.active(); }); update(() -> { diff --git a/core/src/mindustry/ui/layout/BranchTreeLayout.java b/core/src/mindustry/ui/layout/BranchTreeLayout.java index 07c3fb5497..15dbe4ae6f 100644 --- a/core/src/mindustry/ui/layout/BranchTreeLayout.java +++ b/core/src/mindustry/ui/layout/BranchTreeLayout.java @@ -148,8 +148,7 @@ public class BranchTreeLayout implements TreeLayout{ wPlus.mode = wPlus.mode + shift; } - private TreeNode apportion(TreeNode v, TreeNode defaultAncestor, - TreeNode leftSibling, TreeNode parentOfV){ + private TreeNode apportion(TreeNode v, TreeNode defaultAncestor, TreeNode leftSibling, TreeNode parentOfV){ if(leftSibling == null){ return defaultAncestor; } diff --git a/core/src/mindustry/ui/layout/RadialTreeLayout.java b/core/src/mindustry/ui/layout/RadialTreeLayout.java index 65096e86f6..88b13a5efa 100644 --- a/core/src/mindustry/ui/layout/RadialTreeLayout.java +++ b/core/src/mindustry/ui/layout/RadialTreeLayout.java @@ -12,7 +12,7 @@ public class RadialTreeLayout implements TreeLayout{ @Override public void layout(TreeNode root){ startRadius = root.height * 2.4f; - delta = root.height * 2.4f; + delta = root.height * 20.4f; bfs(root, true); diff --git a/core/src/mindustry/ui/layout/RowTreeLayout.java b/core/src/mindustry/ui/layout/RowTreeLayout.java new file mode 100644 index 0000000000..58fa8596e4 --- /dev/null +++ b/core/src/mindustry/ui/layout/RowTreeLayout.java @@ -0,0 +1,36 @@ +package mindustry.ui.layout; + +import arc.struct.*; + +public class RowTreeLayout implements TreeLayout{ + + @Override + public void layout(TreeNode root){ + layout(root, 0, new IntArray()); + + /* + def minimum_ws(tree, depth=0): + tree.x = nexts[depth] + tree.y = depth + nexts[depth] += 1 + for c in tree.children: + minimum_ws(tree, c) + */ + } + + void layout(TreeNode node, int depth, IntArray nexts){ + float size = node.height * 5f; + + if(nexts.size < depth + 1){ + nexts.ensureCapacity(depth + 1); + nexts.size = depth + 1; + } + + node.x = size * nexts.get(depth); + node.y = size * depth; + nexts.incr(depth, 1); + for(TreeNode child : node.children){ + layout(child, depth + 1, nexts); + } + } +} diff --git a/core/src/mindustry/world/Build.java b/core/src/mindustry/world/Build.java index b8d41df4f0..1e20da65e8 100644 --- a/core/src/mindustry/world/Build.java +++ b/core/src/mindustry/world/Build.java @@ -1,17 +1,15 @@ package mindustry.world; -import mindustry.annotations.Annotations.Loc; -import mindustry.annotations.Annotations.Remote; -import arc.Core; -import arc.Events; -import arc.math.Mathf; +import arc.*; +import arc.math.*; import arc.math.geom.*; -import mindustry.content.Blocks; -import mindustry.entities.Units; -import mindustry.game.EventType.BlockBuildBeginEvent; -import mindustry.game.Team; -import mindustry.world.blocks.BuildBlock; -import mindustry.world.blocks.BuildBlock.BuildEntity; +import mindustry.annotations.Annotations.*; +import mindustry.content.*; +import mindustry.entities.*; +import mindustry.game.EventType.*; +import mindustry.game.*; +import mindustry.world.blocks.*; +import mindustry.world.blocks.BuildBlock.*; import static mindustry.Vars.*; diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index fe319fd02e..606a3f1ccd 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -1,10 +1,11 @@ package mindustry.world; -import arc.struct.*; import arc.func.*; import arc.math.*; import arc.math.geom.*; +import arc.struct.*; import arc.util.ArcAnnotate.*; +import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.entities.traits.*; import mindustry.entities.type.*; @@ -215,6 +216,16 @@ public class Tile implements Position, TargetTrait{ } } + /** remove()-s this tile, except it's synced across the network */ + public void removeNet(){ + Call.removeTile(this); + } + + /** set()-s this tile, except it's synced across the network */ + public void setNet(Block block, Team team, int rotation){ + Call.setTile(this, block, team, rotation); + } + public byte rotation(){ return rotation; } @@ -506,4 +517,16 @@ public class Tile implements Position, TargetTrait{ public String toString(){ return floor.name + ":" + block.name + ":" + overlay + "[" + x + "," + y + "] " + "entity=" + (entity == null ? "null" : (entity.getClass())) + ":" + getTeam(); } + + //remote utility methods + + @Remote(called = Loc.server) + public static void removeTile(Tile tile){ + tile.remove(); + } + + @Remote(called = Loc.server) + public static void setTile(Tile tile, Block block, Team team, int rotation){ + tile.set(block, team, rotation); + } } diff --git a/core/src/mindustry/world/blocks/BuildBlock.java b/core/src/mindustry/world/blocks/BuildBlock.java index 14187850ba..19969df254 100644 --- a/core/src/mindustry/world/blocks/BuildBlock.java +++ b/core/src/mindustry/world/blocks/BuildBlock.java @@ -57,8 +57,8 @@ public class BuildBlock extends Block{ public static void onDeconstructFinish(Tile tile, Block block, int builderID){ Team team = tile.getTeam(); Effects.effect(Fx.breakBlock, tile.drawx(), tile.drawy(), block.size); - tile.remove(); Events.fire(new BlockBuildEndEvent(tile, playerGroup.getByID(builderID), team, true)); + tile.remove(); if(shouldPlay()) Sounds.breaks.at(tile, calcPitch(false)); } diff --git a/core/src/mindustry/world/blocks/Floor.java b/core/src/mindustry/world/blocks/Floor.java index 4faf2adbe0..c9d7759bc9 100644 --- a/core/src/mindustry/world/blocks/Floor.java +++ b/core/src/mindustry/world/blocks/Floor.java @@ -52,6 +52,10 @@ public class Floor extends Block{ public Effect updateEffect = Fx.none; /** Array of affinities to certain things. */ public Attributes attributes = new Attributes(); + /** Whether this ore generates in maps by default. */ + public boolean oreDefault = false; + /** Ore generation params. */ + public float oreScale = 24f, oreThreshold = 0.828f; protected TextureRegion[][] edges; protected byte eq = 0; diff --git a/core/src/mindustry/world/blocks/distribution/ItemConveyor.java b/core/src/mindustry/world/blocks/distribution/ItemConveyor.java index f748cfb25e..cce4073706 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/ItemConveyor.java @@ -28,6 +28,10 @@ public class ItemConveyor extends BaseConveyor implements Autotiler{ private static ItemPos pos2 = new ItemPos(); private final Vec2 tr1 = new Vec2(); private final Vec2 tr2 = new Vec2(); + private TextureRegion[][] regions = new TextureRegion[7][4]; + + public float speed = 0f; + public float displayedSpeed = 0f; protected ItemConveyor(String name){ super(name); @@ -44,7 +48,8 @@ public class ItemConveyor extends BaseConveyor implements Autotiler{ public void setStats(){ super.setStats(); - stats.add(BlockStat.itemsMoved, speed * 60 / itemSpace, StatUnit.itemsSecond); + //have to add a custom calculated speed, since the actual movement speed is apparently not linear + stats.add(BlockStat.itemsMoved, displayedSpeed, StatUnit.itemsSecond); stats.add(BlockStat.boostEffect, "$blocks.itemsmoved"); } diff --git a/core/src/mindustry/world/blocks/distribution/MassDriver.java b/core/src/mindustry/world/blocks/distribution/MassDriver.java index eacef7d0eb..e5fc8bd681 100644 --- a/core/src/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/mindustry/world/blocks/distribution/MassDriver.java @@ -192,6 +192,11 @@ public class MassDriver extends Block{ MassDriverEntity entity = tile.ent(); + for(Tile shooter : entity.waitingShooters){ + Drawf.circles(shooter.drawx(), shooter.drawy(), (tile.block().size / 2f + 1) * tilesize + sin - 2f, Pal.place); + Drawf.arrow(shooter.drawx(), shooter.drawy(), tile.drawx(), tile.drawy(), size * tilesize + sin, 4f + sin, Pal.place); + } + if(linkValid(tile)){ Tile target = world.tile(entity.link); Drawf.circles(target.drawx(), target.drawy(), (target.block().size / 2f + 1) * tilesize + sin - 2f, Pal.place); diff --git a/core/src/mindustry/world/blocks/distribution/OverflowGate.java b/core/src/mindustry/world/blocks/distribution/OverflowGate.java index b07ae8c7be..c3314577f3 100644 --- a/core/src/mindustry/world/blocks/distribution/OverflowGate.java +++ b/core/src/mindustry/world/blocks/distribution/OverflowGate.java @@ -11,6 +11,7 @@ import java.io.*; public class OverflowGate extends Block{ public float speed = 1f; + public boolean invert = false; public OverflowGate(String name){ super(name); @@ -72,23 +73,26 @@ public class OverflowGate extends Block{ entity.lastItem = item; entity.time = 0f; entity.lastInput = source; + + update(tile); } - Tile getTileTarget(Tile tile, Item item, Tile src, boolean flip){ + public Tile getTileTarget(Tile tile, Item item, Tile src, boolean flip){ int from = tile.relativeTo(src.x, src.y); if(from == -1) return null; Tile to = tile.getNearby((from + 2) % 4); if(to == null) return null; Tile edge = Edges.getFacingEdge(tile, to); + boolean canForward = to.block().acceptItem(item, to, edge) && to.getTeam() == tile.getTeam() && !(to.block() instanceof OverflowGate); - if(!to.block().acceptItem(item, to, edge) || to.getTeam() != tile.getTeam() || (to.block() instanceof OverflowGate)){ + if(!canForward || invert){ Tile a = tile.getNearby(Mathf.mod(from - 1, 4)); Tile b = tile.getNearby(Mathf.mod(from + 1, 4)); boolean ac = a != null && a.block().acceptItem(item, a, edge) && !(a.block() instanceof OverflowGate) && a.getTeam() == tile.getTeam(); boolean bc = b != null && b.block().acceptItem(item, b, edge) && !(b.block() instanceof OverflowGate) && b.getTeam() == tile.getTeam(); if(!ac && !bc){ - return null; + return invert && canForward ? to : null; } if(ac && !bc){ diff --git a/core/src/mindustry/world/blocks/distribution/Sorter.java b/core/src/mindustry/world/blocks/distribution/Sorter.java index 1df5fe75e5..22e196791e 100644 --- a/core/src/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/mindustry/world/blocks/distribution/Sorter.java @@ -3,8 +3,8 @@ package mindustry.world.blocks.distribution; import arc.graphics.g2d.*; import arc.math.*; import arc.scene.ui.layout.*; -import arc.util.*; import arc.util.ArcAnnotate.*; +import arc.util.*; import mindustry.entities.traits.BuilderTrait.*; import mindustry.entities.type.*; import mindustry.type.*; @@ -85,7 +85,8 @@ public class Sorter extends Block{ } boolean isSame(Tile tile, Tile other){ - return other != null && other.block() instanceof Sorter; + //uncomment comment below to prevent sorter/gate chaining (hacky) + return other != null && (other.block() instanceof Sorter/* || other.block() instanceof OverflowGate */); } Tile getTileTarget(Item item, Tile dest, Tile source, boolean flip){ diff --git a/core/src/mindustry/world/blocks/liquid/Conduit.java b/core/src/mindustry/world/blocks/liquid/Conduit.java index a1d784f84f..eb5511891e 100644 --- a/core/src/mindustry/world/blocks/liquid/Conduit.java +++ b/core/src/mindustry/world/blocks/liquid/Conduit.java @@ -1,11 +1,11 @@ package mindustry.world.blocks.liquid; import arc.*; -import arc.struct.*; import arc.func.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.entities.traits.BuilderTrait.*; @@ -13,7 +13,6 @@ import mindustry.entities.type.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.*; -import mindustry.world.modules.*; public class Conduit extends LiquidBlock implements Autotiler{ public final int timerFlow = timers++; @@ -92,13 +91,12 @@ public class Conduit extends LiquidBlock implements Autotiler{ @Override public void draw(Tile tile){ ConduitEntity entity = tile.ent(); - LiquidModule mod = tile.entity.liquids; int rotation = tile.rotation() * 90; Draw.colorl(0.34f); Draw.rect(botRegions[entity.blendbits], tile.drawx(), tile.drawy(), rotation); - Draw.color(mod.current().color); + Draw.color(tile.entity.liquids.current().color); Draw.alpha(entity.smoothLiquid); Draw.rect(botRegions[entity.blendbits], tile.drawx(), tile.drawy(), rotation); Draw.color(); @@ -109,7 +107,7 @@ public class Conduit extends LiquidBlock implements Autotiler{ @Override public void update(Tile tile){ ConduitEntity entity = tile.ent(); - entity.smoothLiquid = Mathf.lerpDelta(entity.smoothLiquid, entity.liquids.total() / liquidCapacity, 0.05f); + entity.smoothLiquid = Mathf.lerpDelta(entity.smoothLiquid, entity.liquids.currentAmount() / liquidCapacity, 0.05f); if(tile.entity.liquids.total() > 0.001f && tile.entity.timer.get(timerFlow, 1)){ tryMoveLiquid(tile, tile.getNearby(tile.rotation()), leakResistance, tile.entity.liquids.current()); diff --git a/core/src/mindustry/world/blocks/logic/MessageBlock.java b/core/src/mindustry/world/blocks/logic/MessageBlock.java index cb7498138d..697dda9401 100644 --- a/core/src/mindustry/world/blocks/logic/MessageBlock.java +++ b/core/src/mindustry/world/blocks/logic/MessageBlock.java @@ -98,7 +98,7 @@ public class MessageBlock extends Block{ public void buildConfiguration(Tile tile, Table table){ MessageBlockEntity entity = tile.ent(); - table.addImageButton(Icon.pencilSmall, () -> { + table.addImageButton(Icon.pencil, () -> { if(mobile){ Core.input.getTextInput(new TextInput(){{ text = entity.message; diff --git a/core/src/mindustry/world/blocks/power/LightBlock.java b/core/src/mindustry/world/blocks/power/LightBlock.java index ad65313954..82637dd410 100644 --- a/core/src/mindustry/world/blocks/power/LightBlock.java +++ b/core/src/mindustry/world/blocks/power/LightBlock.java @@ -52,7 +52,7 @@ public class LightBlock extends Block{ public void buildConfiguration(Tile tile, Table table){ LightEntity entity = tile.ent(); - table.addImageButton(Icon.pencilSmall, () -> { + table.addImageButton(Icon.pencil, () -> { ui.picker.show(Tmp.c1.set(entity.color).a(0.5f), false, res -> { entity.color = res.rgba(); lastColor = entity.color; diff --git a/core/src/mindustry/world/blocks/power/ThermalGenerator.java b/core/src/mindustry/world/blocks/power/ThermalGenerator.java index 6c1debe03b..cc40b6328e 100644 --- a/core/src/mindustry/world/blocks/power/ThermalGenerator.java +++ b/core/src/mindustry/world/blocks/power/ThermalGenerator.java @@ -13,11 +13,19 @@ import static mindustry.Vars.renderer; public class ThermalGenerator extends PowerGenerator{ public Effect generateEffect = Fx.none; + public Attribute attribute = Attribute.heat; public ThermalGenerator(String name){ super(name); } + @Override + public void setStats(){ + super.setStats(); + + stats.add(BlockStat.tiles, attribute); + } + @Override public void update(Tile tile){ GeneratorEntity entity = tile.ent(); @@ -29,7 +37,7 @@ public class ThermalGenerator extends PowerGenerator{ @Override public void drawPlace(int x, int y, int rotation, boolean valid){ - drawPlaceText(Core.bundle.formatFloat("bar.efficiency", sumAttribute(Attribute.heat, x, y) * 100, 1), x, y, valid); + drawPlaceText(Core.bundle.formatFloat("bar.efficiency", sumAttribute(attribute, x, y) * 100, 1), x, y, valid); } @Override @@ -43,7 +51,7 @@ public class ThermalGenerator extends PowerGenerator{ super.onProximityAdded(tile); GeneratorEntity entity = tile.ent(); - entity.productionEfficiency = sumAttribute(Attribute.heat, tile.x, tile.y); + entity.productionEfficiency = sumAttribute(attribute, tile.x, tile.y); } @Override @@ -56,6 +64,6 @@ public class ThermalGenerator extends PowerGenerator{ @Override public boolean canPlaceOn(Tile tile){ //make sure there's heat at this location - return tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(Attribute.heat)) > 0.01f; + return tile.getLinkedTilesAs(this, tempTiles).sumf(other -> other.floor().attributes.get(attribute)) > 0.01f; } } diff --git a/core/src/mindustry/world/blocks/production/Cultivator.java b/core/src/mindustry/world/blocks/production/Cultivator.java index e34929188c..d4b5aa5014 100644 --- a/core/src/mindustry/world/blocks/production/Cultivator.java +++ b/core/src/mindustry/world/blocks/production/Cultivator.java @@ -1,17 +1,16 @@ package mindustry.world.blocks.production; -import arc.Core; -import arc.graphics.Color; +import arc.*; +import arc.graphics.*; import arc.graphics.g2d.*; -import arc.math.Mathf; -import arc.math.RandomXS128; -import arc.util.Time; -import mindustry.content.Fx; -import mindustry.entities.type.TileEntity; -import mindustry.graphics.Pal; -import mindustry.ui.Bar; -import mindustry.world.Tile; -import mindustry.world.meta.Attribute; +import arc.math.*; +import arc.util.*; +import mindustry.content.*; +import mindustry.entities.type.*; +import mindustry.graphics.*; +import mindustry.ui.*; +import mindustry.world.*; +import mindustry.world.meta.*; import java.io.*; @@ -21,7 +20,7 @@ public class Cultivator extends GenericCrafter{ public Color bottomColor = Color.valueOf("474747"); public TextureRegion middleRegion, topRegion; - public RandomXS128 random = new RandomXS128(0); + public Rand random = new Rand(0); public float recurrence = 6f; public Attribute attribute = Attribute.spores; @@ -57,6 +56,13 @@ public class Cultivator extends GenericCrafter{ () -> ((CultivatorEntity)entity).warmup)); } + @Override + public void setStats(){ + super.setStats(); + + stats.add(BlockStat.affinities, attribute); + } + @Override public void drawPlace(int x, int y, int rotation, boolean valid){ drawPlaceText(Core.bundle.formatFloat("bar.efficiency", (1 + sumAttribute(attribute, x, y)) * 100, 1), x, y, valid); diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index ee0e9a3c30..3dd94822be 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -134,8 +134,6 @@ public class GenericCrafter extends Block{ return outputItem != null; } - - @Override public boolean shouldConsume(Tile tile){ if(outputItem != null && tile.entity.items.get(outputItem.item) >= itemCapacity){ diff --git a/core/src/mindustry/world/blocks/production/Separator.java b/core/src/mindustry/world/blocks/production/Separator.java index 64ab3783c2..7361b8f4bb 100644 --- a/core/src/mindustry/world/blocks/production/Separator.java +++ b/core/src/mindustry/world/blocks/production/Separator.java @@ -1,6 +1,6 @@ package mindustry.world.blocks.production; -import arc.graphics.*; +import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.util.ArcAnnotate.*; @@ -15,15 +15,11 @@ import mindustry.world.meta.values.*; * Extracts a random list of items from an input item and an input liquid. */ public class Separator extends Block{ - protected @NonNull ItemStack[] results; - protected float craftTime; - protected float spinnerRadius = 2.5f; - protected float spinnerLength = 1f; - protected float spinnerThickness = 1f; - protected float spinnerSpeed = 2f; + public @NonNull ItemStack[] results; + public float craftTime; - protected Color color = Color.valueOf("858585"); - protected int liquidRegion; + public int liquidRegion, spinnerRegion; + public float spinnerSpeed = 3f; public Separator(String name){ super(name); @@ -33,6 +29,7 @@ public class Separator extends Block{ hasLiquids = true; liquidRegion = reg("-liquid"); + spinnerRegion = reg("-spinner"); entityType = GenericCrafterEntity::new; } @@ -70,10 +67,10 @@ public class Separator extends Block{ Draw.alpha(tile.entity.liquids.total() / liquidCapacity); Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy()); - Draw.color(color); - Lines.stroke(spinnerThickness); - Lines.spikes(tile.drawx(), tile.drawy(), spinnerRadius, spinnerLength, 3, entity.totalProgress * spinnerSpeed); Draw.reset(); + if(Core.atlas.isFound(reg(spinnerRegion))){ + Draw.rect(reg(spinnerRegion), tile.drawx(), tile.drawy(), entity.totalProgress * spinnerSpeed); + } } @Override diff --git a/core/src/mindustry/world/blocks/production/SolidPump.java b/core/src/mindustry/world/blocks/production/SolidPump.java index ac199c7b27..13db9f2e2c 100644 --- a/core/src/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/mindustry/world/blocks/production/SolidPump.java @@ -5,6 +5,7 @@ import arc.graphics.g2d.Draw; import arc.graphics.g2d.TextureRegion; import arc.math.Mathf; import arc.util.*; +import arc.util.ArcAnnotate.*; import mindustry.content.Fx; import mindustry.content.Liquids; import mindustry.entities.Effects; @@ -26,7 +27,7 @@ public class SolidPump extends Pump{ public float updateEffectChance = 0.02f; public float rotateSpeed = 1f; /** Attribute that is checked when calculating output. */ - public Attribute attribute; + public @Nullable Attribute attribute; public SolidPump(String name){ super(name); @@ -64,6 +65,9 @@ public class SolidPump extends Pump{ stats.remove(BlockStat.output); stats.add(BlockStat.output, result, 60f * pumpAmount, true); + if(attribute != null){ + stats.add(BlockStat.affinities, attribute); + } } @Override diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 4a8f500d77..40b5d38bfb 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -99,7 +99,7 @@ public class CoreBlock extends StorageBlock{ for(TileEntity other : state.teams.cores(tile.getTeam())){ if(other.tile == tile) continue; - entity.storageCapacity += other.block.itemCapacity + entity.proximity().sum(e -> isContainer(e) ? e.block().itemCapacity : 0); + entity.storageCapacity += other.block.itemCapacity + other.proximity().sum(e -> isContainer(e) ? e.block().itemCapacity : 0); } if(!world.isGenerating()){ diff --git a/core/src/mindustry/world/blocks/units/CommandCenter.java b/core/src/mindustry/world/blocks/units/CommandCenter.java index be82783269..daf0d2c1a2 100644 --- a/core/src/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/mindustry/world/blocks/units/CommandCenter.java @@ -3,6 +3,7 @@ package mindustry.world.blocks.units; import arc.*; import arc.graphics.*; import arc.graphics.g2d.*; +import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; @@ -20,10 +21,10 @@ import mindustry.world.meta.*; import java.io.*; -import static mindustry.Vars.indexer; +import static mindustry.Vars.*; public class CommandCenter extends Block{ - protected TextureRegion[] commandRegions = new TextureRegion[UnitCommand.all.length]; + protected TextureRegionDrawable[] commandRegions = new TextureRegionDrawable[UnitCommand.all.length]; protected Color topColor = Pal.command; protected Color bottomColor = Color.valueOf("5e5e5e"); protected Effect effect = Fx.commandSend; @@ -65,8 +66,10 @@ public class CommandCenter extends Block{ public void load(){ super.load(); - for(UnitCommand cmd : UnitCommand.all){ - commandRegions[cmd.ordinal()] = Core.atlas.find("icon-command-" + cmd.name() + "-small"); + if(ui != null){ + for(UnitCommand cmd : UnitCommand.all){ + commandRegions[cmd.ordinal()] = ui.getIcon("command" + Strings.capitalize(cmd.name())); + } } } @@ -75,12 +78,12 @@ public class CommandCenter extends Block{ CommandCenterEntity entity = tile.ent(); super.draw(tile); - float size = IconSize.small.size/4f; + float size = 6f; Draw.color(bottomColor); - Draw.rect(commandRegions[entity.command.ordinal()], tile.drawx(), tile.drawy() - 1, size, size); + Draw.rect(commandRegions[entity.command.ordinal()].getRegion(), tile.drawx(), tile.drawy() - 1, size, size); Draw.color(topColor); - Draw.rect(commandRegions[entity.command.ordinal()], tile.drawx(), tile.drawy(), size, size); + Draw.rect(commandRegions[entity.command.ordinal()].getRegion(), tile.drawx(), tile.drawy(), size, size); Draw.color(); } @@ -91,7 +94,7 @@ public class CommandCenter extends Block{ Table buttons = new Table(); for(UnitCommand cmd : UnitCommand.all){ - buttons.addImageButton(Core.atlas.drawable("icon-command-" + cmd.name() + "-small"), Styles.clearToggleTransi, () -> tile.configure(cmd.ordinal())) + buttons.addImageButton(commandRegions[cmd.ordinal()], Styles.clearToggleTransi, () -> tile.configure(cmd.ordinal())) .size(44).group(group).update(b -> b.setChecked(entity.command == cmd)); } table.add(buttons); diff --git a/core/src/mindustry/world/meta/BlockStat.java b/core/src/mindustry/world/meta/BlockStat.java index 162df3dd37..089ad53e45 100644 --- a/core/src/mindustry/world/meta/BlockStat.java +++ b/core/src/mindustry/world/meta/BlockStat.java @@ -24,6 +24,7 @@ public enum BlockStat{ powerConnections(StatCategory.power), basePowerGeneration(StatCategory.power), + tiles(StatCategory.crafting), input(StatCategory.crafting), output(StatCategory.crafting), productionTime(StatCategory.crafting), @@ -45,7 +46,8 @@ public enum BlockStat{ ammo(StatCategory.shooting), booster(StatCategory.optional), - boostEffect(StatCategory.optional); + boostEffect(StatCategory.optional), + affinities(StatCategory.optional); public final StatCategory category; diff --git a/core/src/mindustry/world/meta/BlockStats.java b/core/src/mindustry/world/meta/BlockStats.java index 931482a49a..d91e25bc31 100644 --- a/core/src/mindustry/world/meta/BlockStats.java +++ b/core/src/mindustry/world/meta/BlockStats.java @@ -1,9 +1,11 @@ package mindustry.world.meta; -import arc.struct.Array; -import arc.struct.ObjectMap.Entry; -import arc.struct.OrderedMap; +import arc.math.*; +import arc.struct.*; +import arc.struct.ObjectMap.*; +import mindustry.*; import mindustry.type.*; +import mindustry.world.*; import mindustry.world.meta.values.*; /** Hold and organizes a list of block stats. */ @@ -36,6 +38,13 @@ public class BlockStats{ add(stat, new LiquidValue(liquid, amount, perSecond)); } + public void add(BlockStat stat, Attribute attr){ + for(Block block : Vars.content.blocks()){ + if(!block.isFloor() || Mathf.zero(block.asFloor().attributes.get(attr))) continue; + add(stat, new FloorValue(block.asFloor())); + } + } + /** Adds a single string value with this stat. */ public void add(BlockStat stat, String format, Object... args){ add(stat, new StringValue(format, args)); diff --git a/core/src/mindustry/world/meta/values/FloorValue.java b/core/src/mindustry/world/meta/values/FloorValue.java new file mode 100644 index 0000000000..7993a60eb0 --- /dev/null +++ b/core/src/mindustry/world/meta/values/FloorValue.java @@ -0,0 +1,21 @@ +package mindustry.world.meta.values; + +import arc.scene.ui.*; +import arc.scene.ui.layout.*; +import mindustry.ui.*; +import mindustry.world.blocks.*; +import mindustry.world.meta.*; + +public class FloorValue implements StatValue{ + private final Floor floor; + + public FloorValue(Floor floor){ + this.floor = floor; + } + + @Override + public void display(Table table){ + table.add(new Image(floor.icon(Cicon.small))).padRight(3); + table.add(floor.localizedName).padRight(3); + } +} \ No newline at end of file diff --git a/core/src/mindustry/world/modules/LiquidModule.java b/core/src/mindustry/world/modules/LiquidModule.java index 19ad109341..eaaa22a07f 100644 --- a/core/src/mindustry/world/modules/LiquidModule.java +++ b/core/src/mindustry/world/modules/LiquidModule.java @@ -102,6 +102,7 @@ public class LiquidModule extends BlockModule{ @Override public void read(DataInput stream) throws IOException{ Arrays.fill(liquids, 0); + total = 0f; byte count = stream.readByte(); for(int j = 0; j < count; j++){ diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index 27b967f94e..b09894e521 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -280,7 +280,7 @@ public class DesktopLauncher extends ClientLauncher{ if(steam){ try{ byte[] result = new byte[8]; - new RandomXS128(SVars.user.user.getSteamID().getAccountID()).nextBytes(result); + new Rand(SVars.user.user.getSteamID().getAccountID()).nextBytes(result); return new String(Base64Coder.encode(result)); }catch(Exception e){ e.printStackTrace(); diff --git a/desktop/src/mindustry/desktop/steam/SNet.java b/desktop/src/mindustry/desktop/steam/SNet.java index cb23befebe..218b02ca42 100644 --- a/desktop/src/mindustry/desktop/steam/SNet.java +++ b/desktop/src/mindustry/desktop/steam/SNet.java @@ -76,14 +76,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, } net.handleServerReceived(con, output); - }catch(RuntimeException e){ - if(e.getCause() instanceof ValidateException){ - ValidateException v = (ValidateException)e.getCause(); - Log.err("Validation failed: {0} ({1})", v.player.name, v.getMessage()); - }else{ - Log.err(e); - } - }catch(Exception e){ + }catch(Throwable e){ Log.err(e); } }else if(currentServer != null && fromID == currentServer.getAccountID()){ @@ -179,7 +172,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, @Override public void hostServer(int port) throws IOException{ provider.hostServer(port); - smat.createLobby(Core.settings.getBool("publichost") ? LobbyType.Public : LobbyType.FriendsOnly, 16); + smat.createLobby(Core.settings.getBool("publichost") ? LobbyType.Public : LobbyType.FriendsOnly, Core.settings.getInt("playerlimit")); Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> Log.info("Server: {0}\nClient: {1}\nActive: {2}", net.server(), net.client(), net.active())))); } @@ -187,6 +180,7 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, public void updateLobby(){ if(currentLobby != null && net.server()){ smat.setLobbyType(currentLobby, Core.settings.getBool("publichost") ? LobbyType.Public : LobbyType.FriendsOnly); + smat.setLobbyMemberLimit(currentLobby, Core.settings.getInt("playerlimit")); } } @@ -322,7 +316,8 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback, Strings.parseInt(smat.getLobbyData(lobby, "version"), -1), smat.getLobbyData(lobby, "versionType"), Gamemode.valueOf(smat.getLobbyData(lobby, "gamemode")), - smat.getLobbyMemberLimit(lobby) + smat.getLobbyMemberLimit(lobby), + "" ); hosts.add(out); }catch(Exception e){ diff --git a/desktop/src/mindustry/desktop/steam/SStats.java b/desktop/src/mindustry/desktop/steam/SStats.java index 950bffc249..3ada365289 100644 --- a/desktop/src/mindustry/desktop/steam/SStats.java +++ b/desktop/src/mindustry/desktop/steam/SStats.java @@ -283,7 +283,7 @@ public class SStats implements SteamUserStatsCallback{ if(result != SteamResult.OK){ Log.err("Failed to recieve steam stats: {0}", result); }else{ - Log.err("Recieved steam stats."); + Log.info("Recieved steam stats."); } } diff --git a/desktop/src/mindustry/desktop/steam/SWorkshop.java b/desktop/src/mindustry/desktop/steam/SWorkshop.java index 4ede21944e..92de0fec07 100644 --- a/desktop/src/mindustry/desktop/steam/SWorkshop.java +++ b/desktop/src/mindustry/desktop/steam/SWorkshop.java @@ -101,12 +101,12 @@ public class SWorkshop implements SteamUGCCallback{ dialog.cont.add("$workshop.menu").pad(20f); dialog.addCloseButton(); - dialog.buttons.addImageTextButton("$view.workshop", Icon.linkSmall, () -> { + dialog.buttons.addImageTextButton("$view.workshop", Icon.link, () -> { viewListingID(id); dialog.hide(); }).size(210f, 64f); - dialog.buttons.addImageTextButton("$workshop.update", Icon.upgradeSmall, () -> { + dialog.buttons.addImageTextButton("$workshop.update", Icon.up, () -> { new FloatingDialog("$workshop.update"){{ setFillParent(false); cont.margin(10).add("$changelog").padRight(6f); @@ -181,11 +181,11 @@ public class SWorkshop implements SteamUGCCallback{ dialog.setFillParent(false); dialog.cont.add("$publish.confirm").width(600f).wrap(); dialog.addCloseButton(); - dialog.buttons.addImageTextButton("$eula", Icon.linkSmall, + dialog.buttons.addImageTextButton("$eula", Icon.link, () -> SVars.net.friends.activateGameOverlayToWebPage("https://steamcommunity.com/sharedfiles/workshoplegalagreement")) .size(210f, 64f); - dialog.buttons.addImageTextButton("$ok", Icon.checkSmall, () -> { + dialog.buttons.addImageTextButton("$ok", Icon.ok, () -> { Log.info("Accepted, publishing item..."); itemHandlers.add(published); ugc.createItem(SVars.steamID, WorkshopFileType.Community); diff --git a/fastlane/metadata/android/cs-CZ/changelogs/102.1.txt b/fastlane/metadata/android/cs-CZ/changelogs/102.1.txt new file mode 100644 index 0000000000..01760ded80 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/102.1.txt @@ -0,0 +1,5 @@ +- Přidán nový pohled na mapu s rolováním a posouváním +- Přidáno pravidlo pro zdraví bloku +- Přidáno více interních týmů pro různé herní režimy +- Přidána vylepšená podpora pro modifikace +- Hlavní vnitřní změna: programový balík se teď jmenuje "mindustry" namísto dosavadního "io.anuke.mindustry" (toto rozbije staré pluginy) diff --git a/fastlane/metadata/android/cs-CZ/changelogs/102.2.txt b/fastlane/metadata/android/cs-CZ/changelogs/102.2.txt new file mode 100644 index 0000000000..01760ded80 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/102.2.txt @@ -0,0 +1,5 @@ +- Přidán nový pohled na mapu s rolováním a posouváním +- Přidáno pravidlo pro zdraví bloku +- Přidáno více interních týmů pro různé herní režimy +- Přidána vylepšená podpora pro modifikace +- Hlavní vnitřní změna: programový balík se teď jmenuje "mindustry" namísto dosavadního "io.anuke.mindustry" (toto rozbije staré pluginy) diff --git a/fastlane/metadata/android/cs-CZ/changelogs/102.txt b/fastlane/metadata/android/cs-CZ/changelogs/102.txt new file mode 100644 index 0000000000..01760ded80 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/102.txt @@ -0,0 +1,5 @@ +- Přidán nový pohled na mapu s rolováním a posouváním +- Přidáno pravidlo pro zdraví bloku +- Přidáno více interních týmů pro různé herní režimy +- Přidána vylepšená podpora pro modifikace +- Hlavní vnitřní změna: programový balík se teď jmenuje "mindustry" namísto dosavadního "io.anuke.mindustry" (toto rozbije staré pluginy) diff --git a/fastlane/metadata/android/cs-CZ/full_description.txt b/fastlane/metadata/android/cs-CZ/full_description.txt new file mode 100644 index 0000000000..112ccaf515 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/full_description.txt @@ -0,0 +1,43 @@ +Vytvoř propracovaný výrobní řetězec dopravníků, abys naládoval munici do věží, vyrobil materiály pro stavění a ubránil své stavby před vlnami nepřátel. Hraj s Tvými přáteli kooperačně napříč platformami, nebo je vyzvi v týmové hře hráčů proti sobě. + +Hra: +- Vytvoř vrty a dopravníky pro přesun zdrojů do Tvého jádra. +- Použij výrobní bloky pro vytvoření pokročilých materiálů. +- Postav drony pro automatické těžení zdrojů, pomoc se stavěním a vybudování a ochraně své základny. +- Rozváděj kapaliny a bojuj s požárem. +- Posilni výrobu dodatečným chlazením a promaž obranné i výrobní bloky. + +Kampaň: +- Projdi skrz 12 znovuhratelných předpřipravených zón s náhodným místem startu. +- Sesbírej a vyšli zpět ze zón materiál. +- Vynalezni nové bloky, abys rozjel výrobu. +- Konfiguruj předměty, se kterými se vyšleš do zóny, abys byl lépe připraven. +- V jednotlivých zónách plň rozdílné cíle mise. +- Pozvi kamarády pro společné dokončení mise. +- 120+ technologických bloků, dokážeš je všechny využít? +- 19 různých typů dronů, mechů and lodí! + +Herní módy: +- Přežití: Postav věže k obraně Tvého jádra před nepřátelskými jednotkami. Přežij tak dlouho, jak jen dokážeš, a ideálně ještě odešli své jádro zpět se sesbíranými surovinami pro zaplacení výzkumu. Připrav svou základnu pro střídavý útok vzdušného Záporáka. +- Útok: Postav továrny na jednotky pro zničení nepřátelského jádra, zatímco zároveň ochraňuj svoji základnu před vlnami nepřátelských jednotek. Vytvoř různé typy podpůrných a obranných jednotek pro dosažení tohoto cíle. +- Hráči proti sobě: Soupeř s jinými hráči v až 4 různých týmech, s cílem zničit ostatní jádra. Vytvoř jednotky nebo útoč na cizí jádro rovnou ve svém mechu. +- Pískoviště: Vyzkoušej si hru s nekonečnými zdroji surovin a bez nepřátelských hrozeb. Použij bloky dostupné pouze v pískovišti aby sis otestoval svůj nový nápad a pokud budeš chtít, můžeš si na vyžádání nechat seslat nepřátelské jednotky. + +Vlastní hra a podpora napříč herními platformami: +- 12 vestavěných map pro vlastní hry, navíc ke kampani +- Hraj kooperativně, proti sobě nebo na pískovišti +- Připoj se k veřejnému serveru nebo pozvi přátele do svého vlastního soukromého sezení +- Nastavitelná herní pravidla: Změn cenu bloků, nepřátelské statistiky, počáteční předměty, časování vln atd. +- Mix herních režimů: Smíchej dohromady hru hráčů proti sobě (PvP) a hráčů proti prostředí (PvE) + +Editor map: +- Nakresli si novou mapu s vestavěným editorem +- Upravuj a dej si náhled staveb přímo ve hře +- Konfigurovatelné nástroje: Změň, jak se každý nástroj chová +- Silný systém pro generování map, s mnoha různými typy filtrů pro procedurální manipulaci s terénem - vytvoř úžasnou mapu za 5 minut! +- Přidej zašumění, zkreslení, vyhlazení, prolnutí, zrcadlení, rozptýlení, generování rud a náhodného terénu do svých map +- Konfiguruj náhodné generování rudy, řek a surovin +- Konfiguruj rozestavění nepřátelských vln +- Sdílej vyexportované mapy v dílně Steamu +- Nastav pravidla pro základní mapy +- Použij 75+ různých bloků diff --git a/fastlane/metadata/android/cs-CZ/short_description.txt b/fastlane/metadata/android/cs-CZ/short_description.txt new file mode 100644 index 0000000000..706cd5e9c8 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/short_description.txt @@ -0,0 +1 @@ +Hra typu tower-defense s otevřeným koncem, zaměřená na řízení zdrojů. diff --git a/fastlane/metadata/android/cs-CZ/summary.txt b/fastlane/metadata/android/cs-CZ/summary.txt new file mode 100644 index 0000000000..706cd5e9c8 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/summary.txt @@ -0,0 +1 @@ +Hra typu tower-defense s otevřeným koncem, zaměřená na řízení zdrojů. diff --git a/fastlane/metadata/android/cs-CZ/title.txt b/fastlane/metadata/android/cs-CZ/title.txt new file mode 100644 index 0000000000..2beb939017 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/title.txt @@ -0,0 +1 @@ +Mindustry \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/103.txt b/fastlane/metadata/android/en-US/changelogs/103.txt new file mode 100644 index 0000000000..fa41c882ac --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/103.txt @@ -0,0 +1,9 @@ +- Added new icons w/ smooth scaling +- Added liquid void (Contributed by @GioIacca9) +- Added bridge opacity slider (Contributed by @Quezler) +- Added "underflow" gate (opposite of overflow gate) +- Added "emojis" for most blocks and items into the font +- Added new tech tree layout w/ better mod support +- Added game log file, stored in data folder +- Added new separator sprite/animation +- Added list of affinity tiles to stats of certain blocks diff --git a/fastlane/metadata/android/en-US/changelogs/29584.txt b/fastlane/metadata/android/en-US/changelogs/29584.txt new file mode 100644 index 0000000000..fa41c882ac --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29584.txt @@ -0,0 +1,9 @@ +- Added new icons w/ smooth scaling +- Added liquid void (Contributed by @GioIacca9) +- Added bridge opacity slider (Contributed by @Quezler) +- Added "underflow" gate (opposite of overflow gate) +- Added "emojis" for most blocks and items into the font +- Added new tech tree layout w/ better mod support +- Added game log file, stored in data folder +- Added new separator sprite/animation +- Added list of affinity tiles to stats of certain blocks diff --git a/fastlane/metadata/android/en-US/changelogs/29586.txt b/fastlane/metadata/android/en-US/changelogs/29586.txt new file mode 100644 index 0000000000..fa41c882ac --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29586.txt @@ -0,0 +1,9 @@ +- Added new icons w/ smooth scaling +- Added liquid void (Contributed by @GioIacca9) +- Added bridge opacity slider (Contributed by @Quezler) +- Added "underflow" gate (opposite of overflow gate) +- Added "emojis" for most blocks and items into the font +- Added new tech tree layout w/ better mod support +- Added game log file, stored in data folder +- Added new separator sprite/animation +- Added list of affinity tiles to stats of certain blocks diff --git a/fastlane/metadata/android/en-US/changelogs/29589.txt b/fastlane/metadata/android/en-US/changelogs/29589.txt new file mode 100644 index 0000000000..fa41c882ac --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29589.txt @@ -0,0 +1,9 @@ +- Added new icons w/ smooth scaling +- Added liquid void (Contributed by @GioIacca9) +- Added bridge opacity slider (Contributed by @Quezler) +- Added "underflow" gate (opposite of overflow gate) +- Added "emojis" for most blocks and items into the font +- Added new tech tree layout w/ better mod support +- Added game log file, stored in data folder +- Added new separator sprite/animation +- Added list of affinity tiles to stats of certain blocks diff --git a/fastlane/metadata/android/pt-PT/changelogs/102.txt b/fastlane/metadata/android/pt-PT/changelogs/102.txt new file mode 100644 index 0000000000..784f53ea20 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/102.txt @@ -0,0 +1,5 @@ +- Adicionado nova forma de ver mapas. Com panorâmica e rolagem +- Foi adicionada regra de integridade do bloco +- Adicionado mais equipes internas para modos de jogo alternativos +- Adicionado recursos para melhorar a modificação do servidor +-Grande mudança interna: o pacote agora é "mindustry" em vez de "io.anuke.mindustry" (irá quebrar os plugins) \ No newline at end of file diff --git a/fastlane/metadata/android/pt-PT/full_description.txt b/fastlane/metadata/android/pt-PT/full_description.txt new file mode 100644 index 0000000000..07cf8233b3 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/full_description.txt @@ -0,0 +1,14 @@ +Cria e elabora e fornece correntes de correias transportadoras para aumentar a munição das tuas torretas, produz materiais para usar em construções, e defende as tuas estruturas de ondas de inimigos. Joga com os teus amigos em multiplataforma multijogador jogos cooperativos, ou desafia eles em batalhas em equipa modo PvP. + +Recursos incluidos: +- 24 mapas integrados +- Uma campanha completa com uma estrutura tecnológica em árvore e áreas para desbloquear +- 4 ondas de chefes poderosas para derrotar +- Sistema de transporte de Energias, Líquidos e Itens +- 19 tipos diferentes de drones, mechas e navios +- Mais de 120 blocos de tecnologia para dominar +- Mais de 75 diferentes blocos de ambiente +- Multijogador multiplataforma através de redes locais ou servidores dedicados +- Regras personalizadas do jogo: altere os custos de bloqueio, estatísticas do inimigo, itens iniciais, tempo das ondas e muito mais +- Um editor poderoso, com ferramentas para gerar aleatoriamente minérios, terrenos, decoração e aplicar simetria a mapas +- Layouts de rondas de mapa personalizáveis \ No newline at end of file diff --git a/fastlane/metadata/android/pt-PT/short_description.txt b/fastlane/metadata/android/pt-PT/short_description.txt new file mode 100644 index 0000000000..6ecbaf697a --- /dev/null +++ b/fastlane/metadata/android/pt-PT/short_description.txt @@ -0,0 +1 @@ +Um jogo de defesa de torre de sandbox baseado em construção. diff --git a/fastlane/metadata/android/pt-PT/summary.txt b/fastlane/metadata/android/pt-PT/summary.txt new file mode 100644 index 0000000000..24b4edd83d --- /dev/null +++ b/fastlane/metadata/android/pt-PT/summary.txt @@ -0,0 +1 @@ +Um jogo de defesa de torre de sandbox baseado em construção. \ No newline at end of file diff --git a/fastlane/metadata/android/pt-PT/title.txt b/fastlane/metadata/android/pt-PT/title.txt new file mode 100644 index 0000000000..2beb939017 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/title.txt @@ -0,0 +1 @@ +Mindustry \ No newline at end of file diff --git a/fastlane/metadata/android/zh-TW/full_description.txt b/fastlane/metadata/android/zh-TW/full_description.txt new file mode 100644 index 0000000000..6a0092cdbf --- /dev/null +++ b/fastlane/metadata/android/zh-TW/full_description.txt @@ -0,0 +1,14 @@ +建立精密的輸送帶供應鏈,提供砲塔彈藥,生產建築原料,保護您的建築物並抵禦入侵的敵人。在跨平臺的多人合作遊戲中和朋友一起玩,或在團隊 PvP 比賽中向他們挑戰。 + +包含了以下特色: +- 24 張內建地圖 +- 有科技樹與可解鎖區域的戰役 +- 可擊敗 4 波強大的魔王 +- 能源、液體與物品運輸系統 +- 19 種不同類型的無人機、機甲與飛船 +- 研究 120 種以上的科技 +- 75 種以上不同的環境方塊 +- 透過區域網路或專用伺服器遊玩跨平臺多人遊戲 +- 自訂遊戲規則:變更方塊花費、敵方屬性、起始物品、敵人來襲的間隔時間等 +- 強大的編輯器,有工具可將噪音、變形、平滑、腐蝕、對稱、礦物生成與隨機地形套用到您的地圖上 +- 設定敵人攻擊佈局 diff --git a/fastlane/metadata/android/zh-TW/short_description.txt b/fastlane/metadata/android/zh-TW/short_description.txt new file mode 100644 index 0000000000..fc87660b42 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/short_description.txt @@ -0,0 +1 @@ +一款側重資源管理的開放式塔防遊戲。 diff --git a/fastlane/metadata/android/zh-TW/summary.txt b/fastlane/metadata/android/zh-TW/summary.txt new file mode 100644 index 0000000000..fc87660b42 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/summary.txt @@ -0,0 +1 @@ +一款側重資源管理的開放式塔防遊戲。 diff --git a/fastlane/metadata/android/zh-TW/title.txt b/fastlane/metadata/android/zh-TW/title.txt new file mode 100644 index 0000000000..2beb939017 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/title.txt @@ -0,0 +1 @@ +Mindustry \ No newline at end of file diff --git a/fastlane/metadata/steam/czech/achievements.vdf b/fastlane/metadata/steam/czech/achievements.vdf new file mode 100644 index 0000000000..e7e80c47f2 --- /dev/null +++ b/fastlane/metadata/steam/czech/achievements.vdf @@ -0,0 +1,109 @@ +"lang" +{ + "Language" "czech" + "Tokens" + { + "NEW_ACHIEVEMENT_20_0_NAME" "Ověřen" + "NEW_ACHIEVEMENT_20_0_DESC" "Dokončena výuka." + "NEW_ACHIEVEMENT_20_1_NAME" "Šroťák" + "NEW_ACHIEVEMENT_20_1_DESC" "Znič 1000 nepřátelských jednotek." + "NEW_ACHIEVEMENT_20_2_NAME" "Čistič" + "NEW_ACHIEVEMENT_20_2_DESC" "Znič 100,000 nepřátelských jednotek." + "NEW_ACHIEVEMENT_20_3_NAME" "Přesun do atmosféry" + "NEW_ACHIEVEMENT_20_3_DESC" "Vyšli zpět celkem 10.000 předmětů." + "NEW_ACHIEVEMENT_20_5_NAME" "Nekonečné dodávky" + "NEW_ACHIEVEMENT_20_5_DESC" "Vyšli zpět celkem 1.000.000 předmětů." + "NEW_ACHIEVEMENT_20_6_NAME" "Dobyvatel" + "NEW_ACHIEVEMENT_20_6_DESC" "Vyhraj 10 zápasů v herním režimu Útok." + "NEW_ACHIEVEMENT_20_7_NAME" "Šampión" + "NEW_ACHIEVEMENT_20_7_DESC" "Vyhraj 10 zápasů v herním režimu Hráči proti sobě." + "NEW_ACHIEVEMENT_20_8_NAME" "Blesk" + "NEW_ACHIEVEMENT_20_8_DESC" "Znič nepřátelské jádro v útočné zóně v průběhu prvních 5 vln." + "NEW_ACHIEVEMENT_20_9_NAME" "Prší jádra" + "NEW_ACHIEVEMENT_20_9_DESC" "Vyšli Tvoje jádro do mapy 30x." + "NEW_ACHIEVEMENT_20_10_NAME" "Houževnatý" + "NEW_ACHIEVEMENT_20_10_DESC" "Přežij 100 vln." + "NEW_ACHIEVEMENT_20_11_NAME" "Neposkvrněný" + "NEW_ACHIEVEMENT_20_11_DESC" "Přežij 500 vln." + "NEW_ACHIEVEMENT_20_12_NAME" "Výzkumník" + "NEW_ACHIEVEMENT_20_12_DESC" "Vyzkoumej všechno." + "NEW_ACHIEVEMENT_20_13_NAME" "Měňavec" + "NEW_ACHIEVEMENT_20_13_DESC" "Odemkni každého mecha ve hře a transformuj se do něj." + "NEW_ACHIEVEMENT_20_14_NAME" "Přetížení" + "NEW_ACHIEVEMENT_20_14_DESC" "Zasáhni nepřítele pokrytého vodou energetickou zbraní." + "NEW_ACHIEVEMENT_20_15_NAME" "Odražení" + "NEW_ACHIEVEMENT_20_15_DESC" "Znič jednotku její vlastní odraženou kulkou." + "NEW_ACHIEVEMENT_20_17_NAME" "Distributor v zácviku" + "NEW_ACHIEVEMENT_20_17_DESC" "Vynalezni Směrovač." + "NEW_ACHIEVEMENT_20_18_NAME" "Stvořitel" + "NEW_ACHIEVEMENT_20_18_DESC" "Umísti 10.000 bloků." + "NEW_ACHIEVEMENT_20_19_NAME" "Viktor čistič" + "NEW_ACHIEVEMENT_20_19_DESC" "Znič 1.000 nepřátelských bloků." + "NEW_ACHIEVEMENT_20_20_NAME" "Velkolepá chyba" + "NEW_ACHIEVEMENT_20_20_DESC" "Způsob přetížení Thoriového reaktoru, následované explozí." + "NEW_ACHIEVEMENT_20_21_NAME" "Kartograf" + "NEW_ACHIEVEMENT_20_21_DESC" "Vytvoř 10 nových map." + "NEW_ACHIEVEMENT_20_22_NAME" "Sosač" + "NEW_ACHIEVEMENT_20_22_DESC" "Stáhni mapu z dílny." + "NEW_ACHIEVEMENT_20_23_NAME" "Tvůrce" + "NEW_ACHIEVEMENT_20_23_DESC" "Publikuj mapu do dílny." + "NEW_ACHIEVEMENT_20_24_NAME" "Řezník" + "NEW_ACHIEVEMENT_20_24_DESC" "Poraž Záporáka." + "NEW_ACHIEVEMENT_20_25_NAME" "Průzkumník" + "NEW_ACHIEVEMENT_20_25_DESC" "Odemkni všechny zóny v kampani." + "NEW_ACHIEVEMENT_20_26_NAME" "Perfekcionalista" + "NEW_ACHIEVEMENT_20_26_DESC" "Dosáhni požadavku pro vlastní výbavu ve všech zónách v kampani." + "NEW_ACHIEVEMENT_20_29_NAME" "Materiály II" + "NEW_ACHIEVEMENT_20_29_DESC" "Odemkni Thorium." + "NEW_ACHIEVEMENT_20_31_NAME" "Materiály I" + "NEW_ACHIEVEMENT_20_31_DESC" "Odemkni Titan." + "NEW_ACHIEVEMENT_21_0_NAME" "Kamikaze" + "NEW_ACHIEVEMENT_21_0_DESC" "Naplň svého mecha výbušným materiálem a zemři v explozi ." + "NEW_ACHIEVEMENT_21_1_NAME" "A tak to začíná" + "NEW_ACHIEVEMENT_21_1_DESC" "Vytvoř továrnu na mecha Dýka." + "NEW_ACHIEVEMENT_21_2_NAME" "Přímý útok" + "NEW_ACHIEVEMENT_21_2_DESC" "Vyšli příkaz k útoku z řídícího střediska." + "NEW_ACHIEVEMENT_21_3_NAME" "Roj" + "NEW_ACHIEVEMENT_21_3_DESC" "Měj v jeden ukamžil 100 aktivních jednotek." + "NEW_ACHIEVEMENT_21_4_NAME" "Stádo" + "NEW_ACHIEVEMENT_21_4_DESC" "Měj v jeden okamžik 10 aktivních dronů Fantóm ." + "NEW_ACHIEVEMENT_21_5_NAME" "Proměnlivá armáda" + "NEW_ACHIEVEMENT_21_5_DESC" "Měj v jeden okamžik 50 aktivních jednotek Slídič." + "NEW_ACHIEVEMENT_21_6_NAME" "Legie" + "NEW_ACHIEVEMENT_21_6_DESC" "Postav celkem 1.000 jednotek." + "NEW_ACHIEVEMENT_21_7_NAME" "Super" + "NEW_ACHIEVEMENT_21_7_DESC" "Dosáhni hodnocení S v jakékoliv zóně." + "NEW_ACHIEVEMENT_21_8_NAME" "Super Super" + "NEW_ACHIEVEMENT_21_8_DESC" "Dosáhni hodnocení SS v jakékoliv zóně." + "NEW_ACHIEVEMENT_21_9_NAME" "Měl jsi líp poslouchat" + "NEW_ACHIEVEMENT_21_9_DESC" "Zemři v zóně pro vylíhnutí nepřátelských jednotek." + "NEW_ACHIEVEMENT_21_10_NAME" "Prostě zmáčkni Shift" + "NEW_ACHIEVEMENT_21_10_DESC" "Nějak se utop." + "NEW_ACHIEVEMENT_21_11_NAME" "Sběratel" + "NEW_ACHIEVEMENT_21_11_DESC" "Naplň jádro do maximální kapacity každým typem materiálu." + "NEW_ACHIEVEMENT_21_12_NAME" "Dav" + "NEW_ACHIEVEMENT_21_12_DESC" "Hostuj server s aspoň 10 hráči." + "NEW_ACHIEVEMENT_21_13_NAME" "Nezranitelný" + "NEW_ACHIEVEMENT_21_13_DESC" "Postav drony Meltdown a Spectre." + "NEW_ACHIEVEMENT_21_14_NAME" "Odlet" + "NEW_ACHIEVEMENT_21_14_DESC" "Použij Vysílací plošinu." + "NEW_ACHIEVEMENT_21_15_NAME" "Samolibost" + "NEW_ACHIEVEMENT_21_15_DESC" "Přeskoč vyslání zpět dvakrát a pak si nech zničit jádro nepřítelem." + "NEW_ACHIEVEMENT_21_16_NAME" "Kacířství" + "NEW_ACHIEVEMENT_21_16_DESC" "Postav dva směrovače vedle sebe." + "NEW_ACHIEVEMENT_21_17_NAME" "Osamělý strážce" + "NEW_ACHIEVEMENT_21_17_DESC" "Přežij 10 vln v jakékoliv zóně bez položení bloku." + "NEW_ACHIEVEMENT_21_18_NAME" "Zpopelnění" + "NEW_ACHIEVEMENT_21_18_DESC" "Použij ve střílně pyratit." + "NEW_ACHIEVEMENT_21_19_NAME" "Účinnost" + "NEW_ACHIEVEMENT_21_19_DESC" "Chlaď střílnu vodou nebo chladící kapalinou." + "NEW_ACHIEVEMENT_21_20_NAME" "Klasický režim" + "NEW_ACHIEVEMENT_21_20_DESC" "Zapni rozpixlování." + "NEW_ACHIEVEMENT_21_21_NAME" "Školák" + "NEW_ACHIEVEMENT_21_21_DESC" "Otevři Wiki Mindustry ze hry." + "NEW_ACHIEVEMENT_21_22_NAME" "Náskok" + "NEW_ACHIEVEMENT_21_22_DESC" "Vyšli se do zóny s nejméně 10.000 předměty." + "NEW_ACHIEVEMENT_21_23_NAME" "Zážeh" + "NEW_ACHIEVEMENT_21_23_DESC" "Zažehni rázový reaktor." + } +} diff --git a/fastlane/metadata/steam/czech/description.txt b/fastlane/metadata/steam/czech/description.txt new file mode 100644 index 0000000000..7a7ac632ff --- /dev/null +++ b/fastlane/metadata/steam/czech/description.txt @@ -0,0 +1,61 @@ +Vytvoř propracovaný výrobní řetězec dopravníků, abys naládoval munici do věží, vyrobil materiály pro stavění a ubránil své stavby před vlnami nepřátel. Hraj s Tvými přáteli kooperačně napříč platformami, nebo je vyzvi v týmové hře hráčů proti sobě. + +[img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img] + +[h2]Hra[/h2] + +[list] +[*] Vytvoř vrty a dopravníky pro přesun zdrojů do Tvého jádra. +[*] Použij výrobní bloky pro vytvoření pokročilých materiálů. +[*] Postav drony pro automatické těžení zdrojů, pomoc se stavěním a vybudování a ochraně své základny. +[*] Rozváděj kapaliny a bojuj s požárem. +[*] Posilni výrobu dodatečným chlazením a promaž obranné i výrobní bloky. +[/list] + +[h2]Kampaň[/h2] + +[list] +[*] Projdi skrz 12 znovuhratelných předpřipravených zón s náhodným místem startu. +[*] Sesbírej a vyšli zpět ze zón materiál. +[*] Vynalezni nové bloky, abys rozjel výrobu. +[*] Konfiguruj předměty, se kterými se vyšleš do zóny, abys byl lépe připraven. +[*] V jednotlivých zónách plň rozdílné cíle mise. +[*] Pozvi kamarády pro společné dokončení mise. +[*] 120+ technologických bloků, dokážeš je všechny využít? +[*] 19 různých typů dronů, mechů and lodí! +[*] 50+ achievementů! +[/list] + +[h2][h2]Herní módy[/h2][/h2] + +[list] +[*] [b]Přežití[/b]: Postav věže k obraně Tvého jádra před nepřátelskými jednotkami. Přežij tak dlouho, jak jen dokážeš, a ideálně ještě odešli své jádro zpět se sesbíranými surovinami pro zaplacení výzkumu. Připrav svou základnu pro střídavý útok vzdušného Záporáka. +[*] [b]Útok[/b]: Postav továrny na jednotky pro zničení nepřátelského jádra, zatímco zároveň ochraňuj svoji základnu před vlnami nepřátelských jednotek. Vytvoř různé typy podpůrných a obranných jednotek pro dosažení tohoto cíle. +[*] [b]Hráči proti sobě[/b]: Soupeř s jinými hráči v až 4 různých týmech, s cílem zničit ostatní jádra. Vytvoř jednotky nebo útoč na cizí jádro rovnou ve svém mechu. +[*] [b]Pískoviště[/b]: Vyzkoušej si hru s nekonečnými zdroji surovin a bez nepřátelských hrozeb. Použij bloky dostupné pouze v pískovišti aby sis otestoval svůj nový nápad a pokud budeš chtít, můžeš si na vyžádání nechat seslat nepřátelské jednotky. +[/list] + +[h2]Vlastní hra a podpora napříč herními platformami[/h2] + +[list] +[*] 12 vestavěných map pro vlastní hry, navíc ke kampani +[*] Hraj kooperativně, proti sobě nebo na pískovišti +[*] Připoj se k veřejnému serveru nebo pozvi přátele do svého vlastního soukromého sezení +[*] Nastavitelná herní pravidla: Změn cenu bloků, nepřátelské statistiky, počáteční předměty, časování vln atd. +[*] Mix herních režimů: Smíchej dohromady hru hráčů proti sobě (PvP) a hráčů proti prostředí (PvE) +[/list] + +[h2]Editor map[/h2] + +[list] +[*] Nakresli si novou mapu s vestavěným editorem +[*] Upravuj a dej si náhled staveb přímo ve hře +[*] Konfigurovatelné nástroje: Změň, jak se každý nástroj chová +[*] Silný systém pro generování map, s mnoha různými typy filtrů pro procedurální manipulaci s terénem - vytvoř úžasnou mapu za 5 minut! +[*] Přidej zašumění, zkreslení, vyhlazení, prolnutí, zrcadlení, rozptýlení, generování rud a náhodného terénu do svých map +[*] Konfiguruj náhodné generování rudy, řek a surovin +[*] Konfiguruj rozestavění nepřátelských vln +[*] Sdílej vyexportované mapy v dílně Steamu +[*] Nastav pravidla pro základní mapy +[*] Použij 75+ různých bloků +[/list] diff --git a/fastlane/metadata/steam/czech/short-description.txt b/fastlane/metadata/steam/czech/short-description.txt new file mode 100644 index 0000000000..252ae989db --- /dev/null +++ b/fastlane/metadata/steam/czech/short-description.txt @@ -0,0 +1 @@ +Hra typu tower-defense s otevřeným koncem, zaměřená na řízení zdrojů. diff --git a/fastlane/metadata/steam/portuguese-brazil/description.txt b/fastlane/metadata/steam/portuguese-brazil/description.txt index 0efa240dc0..add86a6a2c 100644 --- a/fastlane/metadata/steam/portuguese-brazil/description.txt +++ b/fastlane/metadata/steam/portuguese-brazil/description.txt @@ -5,7 +5,7 @@ Crie correntes de suprimentos elaboradas com correias transportadoras para alime [h2]Gameplay[/h2] [list] -[*] Crie brocas e correntes transportadoras para mover recursos para o seu Núcleo. +[*] Crie brocas e esteiras transportadoras para mover recursos para o seu Núcleo. [*] Use blocos de produção para criar materiais avançados. [*] Construa drones para minerar recursos automaticamente, ajudar na construção e proteger a sua base. [*] Distribua líquidos e enfrente surtos de fogo. diff --git a/fastlane/metadata/steam/portuguese/achievements.vdf b/fastlane/metadata/steam/portuguese/achievements.vdf new file mode 100644 index 0000000000..caa3a26319 --- /dev/null +++ b/fastlane/metadata/steam/portuguese/achievements.vdf @@ -0,0 +1,109 @@ +"lang" +{ + "Language" "portuguese-brazil" + "Tokens" + { + "NEW_ACHIEVEMENT_20_0_NAME" "Verificado" + "NEW_ACHIEVEMENT_20_0_DESC" "Complete o tutorial" + "NEW_ACHIEVEMENT_20_1_NAME" "Sucateiro" + "NEW_ACHIEVEMENT_20_1_DESC" "Destrua 1000 unidades inimigas." + "NEW_ACHIEVEMENT_20_2_NAME" "Expurgo" + "NEW_ACHIEVEMENT_20_2_DESC" "Destrua 100.000 unidades inimigas." + "NEW_ACHIEVEMENT_20_3_NAME" "Transporte atmosférico" + "NEW_ACHIEVEMENT_20_3_DESC" "Lance 10.000 itens no total." + "NEW_ACHIEVEMENT_20_5_NAME" "Transportes Sem Fim" + "NEW_ACHIEVEMENT_20_5_DESC" "Lance 1.000.000 itens no total." + "NEW_ACHIEVEMENT_20_6_NAME" "Conquistador" + "NEW_ACHIEVEMENT_20_6_DESC" "Vença 10 partidas no modo de ataque." + "NEW_ACHIEVEMENT_20_7_NAME" "Campeão" + "NEW_ACHIEVEMENT_20_7_DESC" "Vença 10 partidas PvP multi-jogador." + "NEW_ACHIEVEMENT_20_8_NAME" "Blitz" + "NEW_ACHIEVEMENT_20_8_DESC" "Destrua o núcleo inimigo na zona de ataque em 5 hordas ou menos." + "NEW_ACHIEVEMENT_20_9_NAME" "Chuva de núcleos" + "NEW_ACHIEVEMENT_20_9_DESC" "Lance seu núcleo em uma zona 10 vezes." + "NEW_ACHIEVEMENT_20_10_NAME" "Persistente" + "NEW_ACHIEVEMENT_20_10_DESC" "Sobreviva 100 hordas" + "NEW_ACHIEVEMENT_20_11_NAME" "Invicto" + "NEW_ACHIEVEMENT_20_11_DESC" "Sobreviva 500 hordas." + "NEW_ACHIEVEMENT_20_12_NAME" "Pesquisador" + "NEW_ACHIEVEMENT_20_12_DESC" "Pesquise tudo." + "NEW_ACHIEVEMENT_20_13_NAME" "Metamorfose Ambulante" + "NEW_ACHIEVEMENT_20_13_DESC" "Desbloqueie e transforme-se em todos os mechas no jogo." + "NEW_ACHIEVEMENT_20_14_NAME" "Sobrecarga" + "NEW_ACHIEVEMENT_20_14_DESC" "Atinja um inimigo coberto de água com eletricidade." + "NEW_ACHIEVEMENT_20_15_NAME" "Deflexão" + "NEW_ACHIEVEMENT_20_15_DESC" "Destrua uma unidade com suas proprias balas refletidas." + "NEW_ACHIEVEMENT_20_17_NAME" "Um Erro Grave" + "NEW_ACHIEVEMENT_20_17_DESC" "Pesquise o roteador." + "NEW_ACHIEVEMENT_20_18_NAME" "Crie" + "NEW_ACHIEVEMENT_20_18_DESC" "Coloque 10.000 blocos." + "NEW_ACHIEVEMENT_20_19_NAME" "Arraso" + "NEW_ACHIEVEMENT_20_19_DESC" "Destrua 1.000 blocos inimigos." + "NEW_ACHIEVEMENT_20_20_NAME" "Um desastre espetacular." + "NEW_ACHIEVEMENT_20_20_DESC" "Faça com que um reator de tório superaqueça e exploda." + "NEW_ACHIEVEMENT_20_21_NAME" "Cartógrafo" + "NEW_ACHIEVEMENT_20_21_DESC" "Faça um mapa novo 10 vezes." + "NEW_ACHIEVEMENT_20_22_NAME" "Navegador" + "NEW_ACHIEVEMENT_20_22_DESC" "Baixe um mapa da Oficina." + "NEW_ACHIEVEMENT_20_23_NAME" "Criador" + "NEW_ACHIEVEMENT_20_23_DESC" "Publique um mapa na Oficina." + "NEW_ACHIEVEMENT_20_24_NAME" "Matador" + "NEW_ACHIEVEMENT_20_24_DESC" "Derrote um chefe." + "NEW_ACHIEVEMENT_20_25_NAME" "Explorador" + "NEW_ACHIEVEMENT_20_25_DESC" "Desbloqueie todas as zonas na campanha." + "NEW_ACHIEVEMENT_20_26_NAME" "Completador" + "NEW_ACHIEVEMENT_20_26_DESC" "Alcance a horda requerida para configuração em todas as zonas." + "NEW_ACHIEVEMENT_20_29_NAME" "Material II" + "NEW_ACHIEVEMENT_20_29_DESC" "Desbloqueie Tório." + "NEW_ACHIEVEMENT_20_31_NAME" "Material I" + "NEW_ACHIEVEMENT_20_31_DESC" "Desbloqueie Titânio." + "NEW_ACHIEVEMENT_21_0_NAME" "Kamikaze" + "NEW_ACHIEVEMENT_21_0_DESC" "Encha o seu mecha com materiais explosivos e morra, criando uma explosão." + "NEW_ACHIEVEMENT_21_1_NAME" "Assim Começa" + "NEW_ACHIEVEMENT_21_1_DESC" "Construa uma fábrica de Dagger." + "NEW_ACHIEVEMENT_21_2_NAME" "Ataque direto" + "NEW_ACHIEVEMENT_21_2_DESC" "Emita o comando de Ataque usando o Centro de Comando." + "NEW_ACHIEVEMENT_21_3_NAME" "Enchame" + "NEW_ACHIEVEMENT_21_3_DESC" "Tenha 100 unidades ativas ao mesmo tempo." + "NEW_ACHIEVEMENT_21_4_NAME" "Rebanho" + "NEW_ACHIEVEMENT_21_4_DESC" "Tenha 10 drones Phantom ativos ao mesmo tempo." + "NEW_ACHIEVEMENT_21_5_NAME" "Exército Volátil" + "NEW_ACHIEVEMENT_21_5_DESC" "Tenha 50 unidades Crawler ativas ao mesmo tempo." + "NEW_ACHIEVEMENT_21_6_NAME" "Legiões" + "NEW_ACHIEVEMENT_21_6_DESC" "Construa 1000 unidades no total." + "NEW_ACHIEVEMENT_21_7_NAME" "Super" + "NEW_ACHIEVEMENT_21_7_DESC" "Conquiste o rank S em qualquer zona." + "NEW_ACHIEVEMENT_21_8_NAME" "Super Super" + "NEW_ACHIEVEMENT_21_8_DESC" "Conquiste o rank SS em qualquer zona." + "NEW_ACHIEVEMENT_21_9_NAME" "Você Devia Ter Escutado" + "NEW_ACHIEVEMENT_21_9_DESC" "Morra na zona de exclusão do ponto de spawn." + "NEW_ACHIEVEMENT_21_10_NAME" "Só Aperte Shift" + "NEW_ACHIEVEMENT_21_10_DESC" "Afogue, de algum modo." + "NEW_ACHIEVEMENT_21_11_NAME" "Colecionador" + "NEW_ACHIEVEMENT_21_11_DESC" "Encha o núcleo até a capacidade máxima com todos os tipos de materiais." + "NEW_ACHIEVEMENT_21_12_NAME" "Galera" + "NEW_ACHIEVEMENT_21_12_DESC" "Hospede um servidor com 10 pessoas nele." + "NEW_ACHIEVEMENT_21_13_NAME" "Invulnerável" + "NEW_ACHIEVEMENT_21_13_DESC" "Construa o Meltdown e o Spectre." + "NEW_ACHIEVEMENT_21_14_NAME" "Decolagem" + "NEW_ACHIEVEMENT_21_14_DESC" "Use a Plataforma de Lançamento." + "NEW_ACHIEVEMENT_21_15_NAME" "Complacência" + "NEW_ACHIEVEMENT_21_15_DESC" "Pule o lançamento duas vezes, então tenha o seu núcleo destruído pelo inimigo." + "NEW_ACHIEVEMENT_21_16_NAME" "Heresia" + "NEW_ACHIEVEMENT_21_16_DESC" "Construa dois roteadores, um do lado do outro." + "NEW_ACHIEVEMENT_21_17_NAME" "Guardião Solitário" + "NEW_ACHIEVEMENT_21_17_DESC" "Sobreviva 10 hordas em qualquer zona, sem colocar qualquer bloco." + "NEW_ACHIEVEMENT_21_18_NAME" "Incinere" + "NEW_ACHIEVEMENT_21_18_DESC" "Use Piratita em qualquer torreta." + "NEW_ACHIEVEMENT_21_19_NAME" "Eficiência" + "NEW_ACHIEVEMENT_21_19_DESC" "Refirgere uma torreta com água ou crio fluido." + "NEW_ACHIEVEMENT_21_20_NAME" "Modo Clássico" + "NEW_ACHIEVEMENT_21_20_DESC" "Habilite pixelização." + "NEW_ACHIEVEMENT_21_21_NAME" "Sábio" + "NEW_ACHIEVEMENT_21_21_DESC" "Abra a Wiki do jogo." + "NEW_ACHIEVEMENT_21_22_NAME" "Vantagem" + "NEW_ACHIEVEMENT_21_22_DESC" "Entre em uma zona com 10.000 itens ou mais já configurados." + "NEW_ACHIEVEMENT_21_23_NAME" "Ignição" + "NEW_ACHIEVEMENT_21_23_DESC" "Ligue um Reator de Impacto." + } +} diff --git a/fastlane/metadata/steam/portuguese/description.txt b/fastlane/metadata/steam/portuguese/description.txt new file mode 100644 index 0000000000..0efa240dc0 --- /dev/null +++ b/fastlane/metadata/steam/portuguese/description.txt @@ -0,0 +1,61 @@ +Crie correntes de suprimentos elaboradas com correias transportadoras para alimentar suas torretas com munição, produza minerais para usar em construção, e defenda suas estruturas de hordas inimigas. Jogue com seus amigos em jogos cooperativos multi-jogadores multi-plataformas, ou desafie-os em partidas PvP de times. + +[img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img] + +[h2]Gameplay[/h2] + +[list] +[*] Crie brocas e correntes transportadoras para mover recursos para o seu Núcleo. +[*] Use blocos de produção para criar materiais avançados. +[*] Construa drones para minerar recursos automaticamente, ajudar na construção e proteger a sua base. +[*] Distribua líquidos e enfrente surtos de fogo. +[*] Melhore a produção suprimindo refrigerantes e lubrificantes opcionais para os seus blocos de defesa e produção. +[/list] + +[h2]Campanha[/h2] + +[list] +[*] Avance através de 12 zonas re-jogáveis com pontos de spawn aleatórios +[*] Colete e lance recursos +[*] Pesquise novos blocos para abastecer o progresso +[*] Configure loadout antes do lançamento para levar recursos para cada zona +[*] Variedade de missões com objetivos e metas +[*] Convide seus amigos para completar missões juntos +[*] Mais de 120 blocos de tecnologia para dominar +[*] 19 tipos de drones, mechas e naves diferentes +[*] Mais de 50 conquistas para completar +[/list] + +[h2][h2]Modos de jogo[/h2][/h2] + +[list] +[*] [b]Sobrevivência[/b]: Construa torretas para defender de inimigos no gameplay de tower-defense. Sobreviva o máximo possível, opcionalmente lançando o seu núcleo para usar os recursos coletados para pesquisa. Prepare a sua base para ataques intermitentes de chefes aéreos. +[*] [b]Ataque[/b]: Construa fábricas para unidades destruírem núcleos inimidos, enquanto simultaneamente defendendo sua base de hordas de unidades inimigas. Crie uma variedade de tipos diferentes de unidades de suporte o defesa para auxiliar você em seus objetivos. +[*] [b]PvP[/b]: Dispute com outros jogadores em até 4 times diferentes, para destruir o núcleo dos outros. Crie unidades, ou ataque outras bases diretamente com seus mechas. +[*] [b]Sandbox[/b]: Brinque com recursos infinitos e sem ameaça inimiga. Use itens específicos do modo e fontes de líquidos para testar designs, e sumone inimigos à vontade. +[/list] + +[h2]Jogos Personalizados & Multi-jogador Multi-plataforma[/h2] + +[list] +[*] 12 mapas embutidos para jogos personalizados, além da campanha +[*] Jogue Cooperativo, PvP, ou sandbox +[*] Entre em um servidor público dedicado, ou convide amigos para a sua própria sessão privada +[*] Regras do jogo personalizáveis: Mude custo dos blocos, estatísticas de inimigos, itens iniciais, tempo entre as hordas e mais +[*] Misture modos de jogo: Combine modos de jogo PvP e PvE +[/list] + +[h2]Editor de mapa[/h2] + +[list] +[*] Pinte terreno com um editor +[*] Edite e visualize estruturas em jogo +[*] Modos de ferramentas configuráveis: Mude como cada ferramenta funciona +[*] Sistema gerador de mapa poderoso, com muitos tipos diferentes de filtros para manipulação procedural de terreno +[*] Aplique ruído, distorção, suavização, erosão, simetria, geração de minérios e terreno aleatório aos seus mapas +[*] Aleatorize e configure geração de minérios, assim como localização de rios e recursos +[*] Configure o layout de hordas inimigas +[*] Compartilhe mapas exportados na Oficina da Steam +[*] Modifique regras básicas do mapa +[*] Use mais de 75 blocos de ambientação diferentes +[/list] diff --git a/fastlane/metadata/steam/portuguese/short-description.txt b/fastlane/metadata/steam/portuguese/short-description.txt new file mode 100644 index 0000000000..c6ad92da31 --- /dev/null +++ b/fastlane/metadata/steam/portuguese/short-description.txt @@ -0,0 +1 @@ +Um jogo de fim aberto de tower-defense com um foco em gerenciamento de recursos. diff --git a/gradle.properties b/gradle.properties index d4613deadb..1aea212e80 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=49849134b9321f44f0d7ee2e0bb533cc6c69d39a +archash=b54ec5513f66ad97f191b46da10f6c61046a301a diff --git a/server/src/mindustry/server/ServerControl.java b/server/src/mindustry/server/ServerControl.java index c62abff162..566656b4a5 100644 --- a/server/src/mindustry/server/ServerControl.java +++ b/server/src/mindustry/server/ServerControl.java @@ -66,17 +66,17 @@ public class ServerControl implements ApplicationListener{ "globalrules", "{reactorExplosions: false}" ); - Log.setLogger((level, text, args1) -> { - String result = "[" + dateTime.format(LocalDateTime.now()) + "] " + format(tags[level.ordinal()] + " " + text + "&fr", args1); + Log.setLogger((level, text) -> { + String result = "[" + dateTime.format(LocalDateTime.now()) + "] " + format(tags[level.ordinal()] + " " + text + "&fr"); System.out.println(result); if(Config.logging.bool()){ - logToFile("[" + dateTime.format(LocalDateTime.now()) + "] " + format(tags[level.ordinal()] + " " + text + "&fr", false, args1)); + logToFile("[" + dateTime.format(LocalDateTime.now()) + "] " + formatColors(tags[level.ordinal()] + " " + text + "&fr", false)); } if(socketOutput != null){ try{ - socketOutput.println(format(text + "&fr", false, args1)); + socketOutput.println(formatColors(text + "&fr", false)); }catch(Throwable e){ err("Error occurred logging to socket: {0}", e.getClass().getSimpleName()); } @@ -805,6 +805,22 @@ public class ServerControl implements ApplicationListener{ } }); + handler.register("search", "", "Search players who have used part of a name.", arg -> { + + ObjectSet infos = netServer.admins.searchNames(arg[0]); + + if(infos.size > 0){ + info("&lgPlayers found: {0}", infos.size); + + int i = 0; + for(PlayerInfo info : infos){ + info("- &lc[{0}] &ly'{1}'&lc / &lm{2}", i++, info.lastName, info.id); + } + }else{ + info("Nobody with that name could be found."); + } + }); + handler.register("gc", "Trigger a grabage struct. Testing only.", arg -> { int pre = (int)(Core.app.getJavaHeap() / 1024 / 1024); System.gc(); diff --git a/server/src/mindustry/server/ServerLauncher.java b/server/src/mindustry/server/ServerLauncher.java index 28738ceb7e..8b668ae669 100644 --- a/server/src/mindustry/server/ServerLauncher.java +++ b/server/src/mindustry/server/ServerLauncher.java @@ -29,8 +29,8 @@ public class ServerLauncher implements ApplicationListener{ Vars.platform = new Platform(){}; Vars.net = new Net(platform.getNet()); - Log.setLogger((level, text, args1) -> { - String result = "[" + dateTime.format(LocalDateTime.now()) + "] " + format(tags[level.ordinal()] + " " + text + "&fr", args1); + Log.setLogger((level, text) -> { + String result = "[" + dateTime.format(LocalDateTime.now()) + "] " + format(tags[level.ordinal()] + " " + text + "&fr"); System.out.println(result); }); new HeadlessApplication(new ServerLauncher(), null, throwable -> CrashSender.send(throwable, f -> {})); diff --git a/settings.gradle b/settings.gradle index f97bd7c08d..74b7b1af99 100644 --- a/settings.gradle +++ b/settings.gradle @@ -30,7 +30,6 @@ if(!hasProperty("release")){ use(':Arc:extensions:packer') use(':Arc:backends') use(':Arc:backends:backend-sdl') - use(':Arc:backends:backend-lwjgl3') use(':Arc:backends:backend-android') use(':Arc:backends:backend-robovm') use(':Arc:backends:backend-headless') diff --git a/tools/build.gradle b/tools/build.gradle index 033040e96d..959121fcda 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -3,12 +3,9 @@ apply plugin: "java" sourceCompatibility = 1.8 sourceSets.main.java.srcDirs = ["src/"] - -import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.tools.texturepacker.TexturePacker -import com.badlogic.gdx.utils.IntArray -import com.badlogic.gdx.utils.IntIntMap -import com.badlogic.gdx.utils.IntMap +import arc.struct.* +import arc.graphics.* +import arc.packer.* import javax.imageio.ImageIO import java.awt.* @@ -16,7 +13,7 @@ import java.awt.image.BufferedImage import java.util.List import java.util.concurrent.ExecutorService import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit +import java.util.concurrent.TimeUnit def genFolder = "../core/assets-raw/sprites_out/generated/" def doAntialias = !project.hasProperty("disableAntialias") @@ -87,7 +84,8 @@ def antialias = { File file -> suma.a += color.a } - suma.mul(suma.a <= 0.001f ? 0f : (float) (1f / suma.a)) + float fm = suma.a <= 0.001f ? 0f : (float) (1f / suma.a) + suma.mul(fm, fm, fm, fm) float total = 0 sum.set(0) @@ -103,7 +101,8 @@ def antialias = { File file -> total += 1f } - sum.mul((float) (1f / total)) + fm = (float)(1f / total) + sum.mul(fm, fm, fm, fm) int result = Color.argb8888(sum) out.setRGB(x, y, result) sum.set(0) @@ -303,19 +302,6 @@ task pack(dependsOn: classes){ workingDir = genFolder } - //upscale icon sprites using different method, which requires an OpenGL context - javaexec{ - if(System.getProperty("os.name").toLowerCase().contains("mac")){ - jvmArgs "-XstartOnFirstThread" - } - - jvmArgs("-Djava.awt.headless=true") - main = "mindustry.tools.Upscaler" - classpath = sourceSets.main.runtimeClasspath - standardInput = System.in - workingDir = "../core/assets-raw/sprites_out/ui/icons" - } - copy{ from "../core/assets-raw/sprites_out/ui/icons" into "../core/assets-raw/sprites_out/ui/" @@ -366,3 +352,10 @@ task updateBundles(dependsOn: classes, type: JavaExec){ standardInput = System.in workingDir = "../core/assets/bundles/" } + +task fontgen(dependsOn: classes, type: JavaExec){ + main = "mindustry.tools.FontGenerator" + classpath = sourceSets.main.runtimeClasspath + standardInput = System.in + workingDir = "../" +} diff --git a/tools/src/mindustry/tools/FontGenerator.java b/tools/src/mindustry/tools/FontGenerator.java new file mode 100644 index 0000000000..32bbc121cf --- /dev/null +++ b/tools/src/mindustry/tools/FontGenerator.java @@ -0,0 +1,53 @@ +package mindustry.tools; + +import arc.*; +import arc.files.*; +import arc.util.*; +import arc.util.io.*; + +import java.io.*; + +/* icon font pipeline: + 1. take set of pre-defined icons and SVGs + 2. use Fontello API to get a font with these + 3. combine fontello font and standard font, get output font + 4. use apache ttf API to generate a file with constants for every icon size+type (during annotation processing) + */ +public class FontGenerator{ + + //E000 to F8FF + public static void main(String[] args){ + Net net = Core.net = new Net(); + net.setBlock(true); + Fi folder = Fi.get("core/assets-raw/fontgen/out/"); + folder.mkdirs(); + + Log.info("Session..."); + + OS.exec("curl", "--fail", "--output", "core/assets-raw/fontgen/out/session", "--form", "config=@core/assets-raw/fontgen/config.json", "http://fontello.com"); + + Log.info("Zip..."); + + String session = folder.child("session").readString(); + net.httpGet("http://fontello.com/" + session + "/get", result -> { + try{ + Streams.copyStream(result.getResultAsStream(), folder.child("font.zip").write()); + }catch(IOException e){ + throw new RuntimeException(e); + } + }, Log::err); + + Log.info("Icon font..."); + + ZipFi zip = new ZipFi(folder.child("font.zip")); + Fi dest = folder.child("font.ttf"); + zip.list()[0].child("font").child("fontello.ttf").copyTo(dest); + dest.copyTo(Fi.get("core/assets/fonts/icon.ttf")); + + Log.info("Merge..."); + + OS.exec("fontforge", "-script", "core/assets-raw/fontgen/merge.pe"); + + Log.info("Done."); + } +} diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index d49a55e452..271166f3a2 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -176,6 +176,10 @@ public class Generators{ Image image = new Image(icon.size, icon.size); image.drawScaled(base); image.save(item.getContentType().name() + "-" + item.name + "-" + icon.name(), false); + + if(icon == Cicon.medium){ + image.save("../ui/" + item.getContentType() + "-" + item.name + "-icon"); + } } } }); @@ -254,12 +258,11 @@ public class Generators{ image.save("../blocks/environment/ore-" + item.name + (i + 1)); image.save("../editor/editor-ore-" + item.name + (i + 1)); - //save icons image.save("block-" + ore.name + "-full"); for(Cicon icon : Cicon.scaled){ Image scaled = new Image(icon.size, icon.size); scaled.drawScaled(image); - scaled.save("block-" + ore.name + "-" + icon.name()); + scaled.save("../ui/block-" + ore.name + "-" + icon.name()); } } }); diff --git a/tools/src/mindustry/tools/ImagePacker.java b/tools/src/mindustry/tools/ImagePacker.java index 74ff81e9b0..2ba0a6ee68 100644 --- a/tools/src/mindustry/tools/ImagePacker.java +++ b/tools/src/mindustry/tools/ImagePacker.java @@ -1,14 +1,19 @@ package mindustry.tools; import arc.*; -import arc.struct.*; import arc.files.*; import arc.graphics.g2d.*; import arc.graphics.g2d.TextureAtlas.*; +import arc.struct.*; import arc.util.*; import arc.util.Log.*; +import arc.util.io.*; import mindustry.*; +import mindustry.content.*; import mindustry.core.*; +import mindustry.ctype.*; +import mindustry.world.*; +import mindustry.world.blocks.*; import javax.imageio.*; import java.awt.image.*; @@ -18,7 +23,7 @@ public class ImagePacker{ static ObjectMap regionCache = new ObjectMap<>(); static ObjectMap imageCache = new ObjectMap<>(); - public static void main(String[] args){ + public static void main(String[] args) throws Exception{ Vars.headless = true; Log.setLogger(new NoopLogHandler()); @@ -93,6 +98,42 @@ public class ImagePacker{ Log.info("&ly[Generator]&lc Total time to generate: &lg{0}&lcms", Time.elapsed()); Log.info("&ly[Generator]&lc Total images created: &lg{0}", Image.total()); Image.dispose(); + + //format: + //character-ID=contentname:texture-name + Fi iconfile = Fi.get("../../../assets/icons/icons.properties"); + OrderedMap map = new OrderedMap<>(); + PropertiesUtils.load(map, iconfile.reader(256)); + + ObjectMap content2id = new ObjectMap<>(); + map.each((key, val) -> content2id.put(val.split("\\|")[0], key)); + + Array cont = Array.withArrays(Vars.content.blocks(), Vars.content.items(), Vars.content.liquids()); + cont.removeAll(u -> u instanceof BlockPart || u instanceof BuildBlock || u == Blocks.air); + + int minid = 0xF8FF; + for(String key : map.keys()){ + minid = Math.min(Integer.parseInt(key) - 1, minid); + } + + for(UnlockableContent c : cont){ + if(!content2id.containsKey(c.name)){ + map.put(minid + "", c.name + "|" + texname(c)); + minid --; + } + } + + Writer writer = iconfile.writer(false); + for(String key : map.keys()){ + writer.write(key + "=" + map.get(key) + "\n"); + } + + writer.close(); + } + + static String texname(UnlockableContent c){ + if(c instanceof Block) return "block-" + c.name + "-medium"; + return c.getContentType() + "-" + c.name + "-icon"; } static void generate(String name, Runnable run){ diff --git a/tools/src/mindustry/tools/ScriptStubGenerator.java b/tools/src/mindustry/tools/ScriptStubGenerator.java index be1d9dd27d..58dfd27b28 100644 --- a/tools/src/mindustry/tools/ScriptStubGenerator.java +++ b/tools/src/mindustry/tools/ScriptStubGenerator.java @@ -23,7 +23,7 @@ public class ScriptStubGenerator{ public static void main(String[] args){ String base = "mindustry"; Array blacklist = Array.with("plugin", "mod", "net", "io", "tools"); - Array nameBlacklist = Array.with("ClientLauncher", "NetClient", "NetServer", "ClassAccess"); + Array nameBlacklist = Array.with("ClassAccess"); Array> whitelist = Array.with(Draw.class, Fill.class, Lines.class, Core.class, TextureAtlas.class, TextureRegion.class, Time.class, System.class, PrintStream.class, AtlasRegion.class, String.class, Mathf.class, Angles.class, Color.class, Runnable.class, Object.class, Icon.class, Tex.class, Sounds.class, Musics.class, Call.class, Texture.class, TextureData.class, Pixmap.class, I18NBundle.class, Interval.class, DataInput.class, DataOutput.class, diff --git a/tools/src/mindustry/tools/SquareMarcher.java b/tools/src/mindustry/tools/SquareMarcher.java index 2261260b46..0caf7642ff 100644 --- a/tools/src/mindustry/tools/SquareMarcher.java +++ b/tools/src/mindustry/tools/SquareMarcher.java @@ -1,14 +1,11 @@ package mindustry.tools; -import arc.Core; -import arc.files.Fi; -import arc.graphics.Color; -import arc.graphics.Pixmap; -import arc.graphics.g2d.Draw; -import arc.graphics.g2d.Fill; -import arc.graphics.gl.FrameBuffer; -import arc.util.ScreenUtils; -import arc.util.Tmp; +import arc.*; +import arc.files.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.graphics.gl.*; +import arc.util.*; public class SquareMarcher{ final int resolution; diff --git a/tools/src/mindustry/tools/Upscaler.java b/tools/src/mindustry/tools/Upscaler.java deleted file mode 100644 index de83fad5c0..0000000000 --- a/tools/src/mindustry/tools/Upscaler.java +++ /dev/null @@ -1,47 +0,0 @@ -package mindustry.tools; - -import arc.*; -import arc.backend.sdl.*; -import arc.files.*; -import arc.graphics.*; -import arc.graphics.g2d.*; -import arc.util.*; -import mindustry.ui.*; - -public class Upscaler{ - public static void main(String[] args){ - new SdlApplication(new ApplicationListener(){ - @Override - public void init(){ - scale(); - } - }, new SdlConfig(){{ - initialVisible = false; - }}); - } - - static void scale(){ - Core.batch = new SpriteBatch(); - Core.atlas = new TextureAtlas(); - Core.atlas.addRegion("white", Pixmaps.blankTextureRegion()); - Fi file = Core.files.local(""); - - Log.info("Upscaling icons..."); - Time.mark(); - Fi[] list = file.list(); - - for(IconSize size : IconSize.values()){ - String suffix = size == IconSize.def ? "" : "-" + size.name(); - SquareMarcher marcher = new SquareMarcher(size.size); - - for(Fi img : list){ - if(img.extension().equals("png")){ - marcher.render(new Pixmap(img), img.sibling(img.nameWithoutExtension() + suffix + ".png")); - } - } - } - - Log.info("Done upscaling icons in &lm{0}&lgs.", Time.elapsed()/1000f); - Core.app.exit(); - } -}